Lines Matching +full:ci +full:- +full:pass
1 //===- MachineCopyPropagation.cpp - Machine Copy Propagation Pass ---------===//
8 //===----------------------------------------------------------------------===//
10 // This is an extremely simple MachineInstr-level copy propagation pass.
12 //===----------------------------------------------------------------------===//
22 #include "llvm/Pass.h"
30 #define DEBUG_TYPE "codegen-cp"
45 static char ID; // Pass identification, replacement for typeid
69 /// Def -> available copies map.
71 /// Def -> copies map.
73 /// Src -> Def map
81 INITIALIZE_PASS(MachineCopyPropagation, "machine-cp",
82 "Machine Copy Propagation Pass", false, false)
104 unsigned Reg = I->first; in removeClobberedRegsFromMap()
117 removeRegsFromMap(AvailCopyMap, SI->second, *TRI); in ClobberRegister()
137 if (!TRI->isSubRegister(PreviousSrc, Src)) in isNopCopy()
139 unsigned SubIdx = TRI->getSubRegIndex(PreviousSrc, Src); in isNopCopy()
140 return SubIdx == TRI->getSubRegIndex(PreviousDef, Def); in isNopCopy()
150 if (MRI->isReserved(Src) || MRI->isReserved(Def)) in eraseIfRedundant()
154 Reg2MIMap::iterator CI = AvailCopyMap.find(Def); in eraseIfRedundant() local
155 if (CI == AvailCopyMap.end()) in eraseIfRedundant()
159 MachineInstr &PrevCopy = *CI->second; in eraseIfRedundant()
187 if (MI->isCopy()) { in CopyPropagateBlock()
188 unsigned Def = MI->getOperand(0).getReg(); in CopyPropagateBlock()
189 unsigned Src = MI->getOperand(1).getReg(); in CopyPropagateBlock()
216 Reg2MIMap::iterator CI = CopyMap.find(*AI); in CopyPropagateBlock() local
217 if (CI != CopyMap.end()) { in CopyPropagateBlock()
218 DEBUG(dbgs() << "MCP: Copy is no longer dead: "; CI->second->dump()); in CopyPropagateBlock()
219 MaybeDeadCopies.remove(CI->second); in CopyPropagateBlock()
223 DEBUG(dbgs() << "MCP: Copy is a deletion candidate: "; MI->dump()); in CopyPropagateBlock()
226 if (!MRI->isReserved(Def)) in CopyPropagateBlock()
257 for (const MachineOperand &MO : MI->operands()) { in CopyPropagateBlock()
277 Reg2MIMap::iterator CI = CopyMap.find(*AI); in CopyPropagateBlock() local
278 if (CI != CopyMap.end()) { in CopyPropagateBlock()
279 DEBUG(dbgs() << "MCP: Copy is used - not dead: "; CI->second->dump()); in CopyPropagateBlock()
280 MaybeDeadCopies.remove(CI->second); in CopyPropagateBlock()
302 unsigned Reg = MaybeDead->getOperand(0).getReg(); in CopyPropagateBlock()
303 assert(!MRI->isReserved(Reg)); in CopyPropagateBlock()
305 if (!RegMask->clobbersPhysReg(Reg)) { in CopyPropagateBlock()
311 MaybeDead->dump()); in CopyPropagateBlock()
316 MaybeDead->eraseFromParent(); in CopyPropagateBlock()
326 if (RegMask->clobbersPhysReg(I->first)) { in CopyPropagateBlock()
327 removeRegsFromMap(AvailCopyMap, I->second, *TRI); in CopyPropagateBlock()
339 // If MBB does have successors, then conservative assume the defs are live-out in CopyPropagateBlock()
340 // since we don't want to trust live-in lists. in CopyPropagateBlock()
343 assert(!MRI->isReserved(MaybeDead->getOperand(0).getReg())); in CopyPropagateBlock()
344 MaybeDead->eraseFromParent(); in CopyPropagateBlock()