mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-24 14:05:49 -04:00
Simplify this code: if the unfolded load can't be hoisted, just delete
the new instructions and leave the old one in place. llvm-svn: 85393
This commit is contained in:
parent
5c5214626c
commit
57780dfdfc
@ -401,7 +401,7 @@ void MachineLICM::Hoist(MachineInstr *MI) {
|
|||||||
const TargetRegisterClass *RC = TID.OpInfo[0].getRegClass(TRI);
|
const TargetRegisterClass *RC = TID.OpInfo[0].getRegClass(TRI);
|
||||||
// Ok, we're unfolding. Create a temporary register and do the unfold.
|
// Ok, we're unfolding. Create a temporary register and do the unfold.
|
||||||
unsigned Reg = RegInfo->createVirtualRegister(RC);
|
unsigned Reg = RegInfo->createVirtualRegister(RC);
|
||||||
SmallVector<MachineInstr *, 1> NewMIs;
|
SmallVector<MachineInstr *, 2> NewMIs;
|
||||||
bool Success =
|
bool Success =
|
||||||
TII->unfoldMemoryOperand(MF, MI, Reg,
|
TII->unfoldMemoryOperand(MF, MI, Reg,
|
||||||
/*UnfoldLoad=*/true, /*UnfoldStore=*/false,
|
/*UnfoldLoad=*/true, /*UnfoldStore=*/false,
|
||||||
@ -415,28 +415,15 @@ void MachineLICM::Hoist(MachineInstr *MI) {
|
|||||||
MachineBasicBlock *MBB = MI->getParent();
|
MachineBasicBlock *MBB = MI->getParent();
|
||||||
MBB->insert(MI, NewMIs[0]);
|
MBB->insert(MI, NewMIs[0]);
|
||||||
MBB->insert(MI, NewMIs[1]);
|
MBB->insert(MI, NewMIs[1]);
|
||||||
MI->eraseFromParent();
|
|
||||||
// If unfolding produced a load that wasn't loop-invariant or profitable to
|
// If unfolding produced a load that wasn't loop-invariant or profitable to
|
||||||
// hoist, re-fold it to undo the damage.
|
// hoist, discard the new instructions and bail.
|
||||||
if (!IsLoopInvariantInst(*NewMIs[0]) || !IsProfitableToHoist(*NewMIs[0])) {
|
if (!IsLoopInvariantInst(*NewMIs[0]) || !IsProfitableToHoist(*NewMIs[0])) {
|
||||||
SmallVector<unsigned, 1> Ops;
|
|
||||||
for (unsigned i = 0, e = NewMIs[1]->getNumOperands(); i != e; ++i) {
|
|
||||||
MachineOperand &MO = NewMIs[1]->getOperand(i);
|
|
||||||
if (MO.isReg() && MO.getReg() == Reg) {
|
|
||||||
assert(MO.isUse() &&
|
|
||||||
"Register defined by unfolded load is redefined "
|
|
||||||
"instead of just used!");
|
|
||||||
Ops.push_back(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MI = TII->foldMemoryOperand(MF, NewMIs[1], Ops, NewMIs[0]);
|
|
||||||
assert(MI && "Re-fold failed!");
|
|
||||||
MBB->insert(NewMIs[1], MI);
|
|
||||||
NewMIs[0]->eraseFromParent();
|
NewMIs[0]->eraseFromParent();
|
||||||
NewMIs[1]->eraseFromParent();
|
NewMIs[1]->eraseFromParent();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Otherwise we successfully unfolded a load that we can hoist.
|
// Otherwise we successfully unfolded a load that we can hoist.
|
||||||
|
MI->eraseFromParent();
|
||||||
MI = NewMIs[0];
|
MI = NewMIs[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user