Lines Matching +full:mi +full:- +full:v

1 //===--- RDFDeadCode.cpp --------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // RDF-based generic dead code elimination.
35 T V = Queue.front(); in pop_front() local
37 Set.erase(V); in pop_front()
38 return V; in pop_front()
40 void push_back(T V) { in push_back()
41 if (Set.count(V)) in push_back()
43 Queue.push(V); in push_back()
44 Set.insert(V); in push_back()
53 // Check if the given instruction has observable side-effects, i.e. if
59 const MachineInstr *MI = S.Addr->getCode(); in isLiveInstr() local
60 if (MI->mayStore() || MI->isBranch() || MI->isCall() || MI->isReturn()) in isLiveInstr()
62 if (MI->hasOrderedMemoryRef() || MI->hasUnmodeledSideEffects() || in isLiveInstr()
63 MI->isPosition()) in isLiveInstr()
65 if (MI->isPHI()) in isLiveInstr()
67 for (auto &Op : MI->operands()) { in isLiveInstr()
89 for (NodeAddr<RefNode*> RA : IA.Addr->members(DFG)) { in scanInstr()
97 NodeAddr<InstrNode*> IA = DA.Addr->getOwner(DFG); in processDef()
98 for (NodeAddr<UseNode*> UA : IA.Addr->members_if(DFG.IsUse, DFG)) { in processDef()
115 // dead instructions. Return "true" if any of these sets is non-empty,
122 // considered live, i.e. instructions with observable side-effects, such in collect()
129 for (NodeAddr<BlockNode*> BA : DFG.getFunc().Addr->members(DFG)) in collect()
130 for (NodeAddr<InstrNode*> IA : BA.Addr->members(DFG)) in collect()
151 auto IsDead = [this] (NodeAddr<InstrNode*> IA) -> bool { in collect()
152 for (NodeAddr<DefNode*> DA : IA.Addr->members_if(DFG.IsDef, DFG)) in collect()
158 for (NodeAddr<BlockNode*> BA : DFG.getFunc().Addr->members(DFG)) { in collect()
159 for (NodeAddr<InstrNode*> IA : BA.Addr->members(DFG)) { in collect()
160 for (NodeAddr<RefNode*> RA : IA.Addr->members(DFG)) in collect()
190 uint16_t Type = BA.Addr->getType(); in erase()
197 uint16_t Kind = BA.Addr->getKind(); in erase()
199 append_range(DRNs, NodeAddr<CodeNode*>(BA).Addr->members(DFG)); in erase()
209 auto UsesFirst = [] (NodeAddr<RefNode*> A, NodeAddr<RefNode*> B) -> bool { in erase()
210 uint16_t KindA = A.Addr->getKind(), KindB = B.Addr->getKind(); in erase()
232 NodeAddr<BlockNode*> BA = IA.Addr->getOwner(DFG); in erase()
233 BA.Addr->removeMember(IA, DFG); in erase()
237 MachineInstr *MI = NodeAddr<StmtNode*>(IA).Addr->getCode(); in erase() local
239 dbgs() << "erasing: " << *MI; in erase()
240 MI->eraseFromParent(); in erase()