From ae779eea27f41d31268931a6508bd0536cfbc724 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Thu, 1 Sep 2011 17:25:18 +0000 Subject: [PATCH] Revert r138794, "Do not try to rematerialize a value from a partial definition." The problem is fixed for all register allocators by r138944, so this patch is no longer necessary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138945 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/InlineSpiller.cpp | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp index 5992a3a6e35..f0f69872b03 100644 --- a/lib/CodeGen/InlineSpiller.cpp +++ b/lib/CodeGen/InlineSpiller.cpp @@ -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({