aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-09-01 17:25:18 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-09-01 17:25:18 +0000
commitae779eea27f41d31268931a6508bd0536cfbc724 (patch)
tree9eba7ad31b3e07685ee9ac162f50f43e78b82383 /lib/CodeGen
parent9d548d0343774636e72713d678a078c8e808ed29 (diff)
downloadexternal_llvm-ae779eea27f41d31268931a6508bd0536cfbc724.zip
external_llvm-ae779eea27f41d31268931a6508bd0536cfbc724.tar.gz
external_llvm-ae779eea27f41d31268931a6508bd0536cfbc724.tar.bz2
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. <rdar://problem/10032939> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138945 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/InlineSpiller.cpp23
1 files changed, 1 insertions, 22 deletions
diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp
index 5992a3a..f0f6987 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({