mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-22 13:32:09 +00:00
Filter "sink to" candidate blocks sooner. This avoids unnecessary computation to determine whether the block dominates all uses or not.
llvm-svn: 146184
This commit is contained in:
parent
6ba1394c6d
commit
edfacfabb8
@ -499,10 +499,21 @@ bool MachineSinking::SinkInstruction(MachineInstr *MI, bool &SawStore) {
|
||||
// we should sink to.
|
||||
for (MachineBasicBlock::succ_iterator SI = ParentBlock->succ_begin(),
|
||||
E = ParentBlock->succ_end(); SI != E; ++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;
|
||||
if (AllUsesDominatedByBlock(Reg, *SI, ParentBlock,
|
||||
if (AllUsesDominatedByBlock(Reg, SuccBlock, ParentBlock,
|
||||
BreakPHIEdge, LocalUse)) {
|
||||
SuccToSinkTo = *SI;
|
||||
SuccToSinkTo = SuccBlock;
|
||||
break;
|
||||
}
|
||||
if (LocalUse)
|
||||
@ -520,15 +531,6 @@ bool MachineSinking::SinkInstruction(MachineInstr *MI, bool &SawStore) {
|
||||
if (SuccToSinkTo == 0)
|
||||
return false;
|
||||
|
||||
// It's not safe to sink instructions to EH landing pad. Control flow into
|
||||
// landing pad is implicitly defined.
|
||||
if (SuccToSinkTo->isLandingPad())
|
||||
return false;
|
||||
|
||||
// It is not possible to sink an instruction into its own block. This can
|
||||
// happen with loops.
|
||||
if (MI->getParent() == SuccToSinkTo)
|
||||
return false;
|
||||
|
||||
// If the instruction to move defines a dead physical register which is live
|
||||
// when leaving the basic block, don't move it because it could turn into a
|
||||
|
Loading…
x
Reference in New Issue
Block a user