mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-02 21:31:41 +00:00
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
This commit is contained in:
parent
9d548d0343
commit
ae779eea27
@ -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({
|
||||
|
Loading…
x
Reference in New Issue
Block a user