Revert r146184. I am seeing performance regression cause by this patch in one test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146205 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2011-12-08 23:52:00 +00:00
parent 976c0da213
commit 7f7f0902a6

View File

@ -485,16 +485,6 @@ MachineBasicBlock *MachineSinking::FindSuccToSinkTo(MachineInstr *MI,
for (MachineBasicBlock::succ_iterator SI = ParentBlock->succ_begin(), for (MachineBasicBlock::succ_iterator SI = ParentBlock->succ_begin(),
E = ParentBlock->succ_end(); SI != E; ++SI) { E = ParentBlock->succ_end(); SI != E; ++SI) {
MachineBasicBlock *SuccBlock = *SI; MachineBasicBlock *SuccBlock = *SI;
// It is not possible to sink an instruction into its own block. This can
// happen with loops.
if (ParentBlock == SuccBlock)
continue;
// It's not safe to sink instructions to EH landing pad. Control flow into
// landing pad is implicitly defined.
if (SuccBlock->isLandingPad())
continue;
bool LocalUse = false; bool LocalUse = false;
if (AllUsesDominatedByBlock(Reg, SuccBlock, ParentBlock, if (AllUsesDominatedByBlock(Reg, SuccBlock, ParentBlock,
BreakPHIEdge, LocalUse)) { BreakPHIEdge, LocalUse)) {
@ -511,6 +501,17 @@ MachineBasicBlock *MachineSinking::FindSuccToSinkTo(MachineInstr *MI,
return NULL; return NULL;
} }
} }
// It is not possible to sink an instruction into its own block. This can
// happen with loops.
if (ParentBlock == SuccToSinkTo)
return NULL;
// It's not safe to sink instructions to EH landing pad. Control flow into
// landing pad is implicitly defined.
if (SuccToSinkTo && SuccToSinkTo->isLandingPad())
return NULL;
return SuccToSinkTo; return SuccToSinkTo;
} }