Revert r138794, "Do not try to rematerialize a value from a partial definition."
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 1 Sep 2011 17:25:18 +0000 (17:25 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 1 Sep 2011 17:25:18 +0000 (17:25 +0000)
The problem is fixed for all register allocators by r138944, so this
patch is no longer necessary.

<rdar://problem/10032939>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138945 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/InlineSpiller.cpp

index 5992a3a6e353a6d199c03ea9651c9e46dcd682df..f0f69872b03a44c27c58bfa22544964ba5f13536 100644 (file)
@@ -189,20 +189,6 @@ static unsigned isFullCopyOf(const MachineInstr *MI, unsigned Reg) {
   return 0;
 }
 
-/// isFullDefOf - Return true if MI defines the full contents of a register.
-/// Since this is in the context of spilling, it does not do anything special
-/// for physical registers.
-static bool isFullDefOf(const MachineInstr *MI, unsigned Reg) {
-  for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
-    const MachineOperand &MO = MI->getOperand(i);
-    if (!MO.isReg() || !MO.isDef() || MO.getSubReg())
-      continue;
-    if (MO.getReg() == Reg)
-      return true;
-  }
-  return false;
-}
-
 /// isSnippet - Identify if a live interval is a snippet that should be spilled.
 /// It is assumed that SnipLI is a virtual register with the same original as
 /// Edit->getReg().
@@ -320,7 +306,6 @@ MachineInstr *InlineSpiller::traceSiblingValue(unsigned UseReg, VNInfo *UseVNI,
   MachineBasicBlock *SpillMBB = UseMBB;
   unsigned SpillDepth = Loops.getLoopDepth(SpillMBB);
   bool SeenOrigPHI = false; // Original PHI met.
-  bool SeenNonReloadDef = false;
 
   do {
     unsigned Reg;
@@ -422,18 +407,12 @@ MachineInstr *InlineSpiller::traceSiblingValue(unsigned UseReg, VNInfo *UseVNI,
     }
 
     // Potential remat candidate.
-    SeenNonReloadDef = true;
-    if (!isFullDefOf(MI, Reg)) {
-      DEBUG(dbgs() << "  partial def " << PrintReg(Reg) << ':'
-                   << VNI->id << '@' << VNI->def << '\t' << *MI);
-      continue;
-    }
     DEBUG(dbgs() << "  def " << PrintReg(Reg) << ':'
                  << VNI->id << '@' << VNI->def << '\t' << *MI);
     SVI.DefMI = MI;
   } while (!WorkList.empty());
 
-  if (SeenOrigPHI || SeenNonReloadDef)
+  if (SeenOrigPHI || SVI.DefMI)
     SVI.AllDefsAreReloads = false;
 
   DEBUG({