mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-12 03:32:10 +00:00
Fix SCEVExpander's existing PHI reuse checking to recognize the
case where there are loop-invariant instructions somehow left inside the loop, and in a position where they won't dominate the IV increment position. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96448 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
22fb4b2a57
commit
9feae9f0de
@ -658,6 +658,19 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized,
|
|||||||
IncV = 0;
|
IncV = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// If any of the operands don't dominate the insert position, bail.
|
||||||
|
// Addrec operands are always loop-invariant, so this can only happen
|
||||||
|
// if there are instructions which haven't been hoisted.
|
||||||
|
for (User::op_iterator OI = IncV->op_begin()+1,
|
||||||
|
OE = IncV->op_end(); OI != OE; ++OI)
|
||||||
|
if (Instruction *OInst = dyn_cast<Instruction>(OI))
|
||||||
|
if (!SE.DT->dominates(OInst, IVIncInsertPos)) {
|
||||||
|
IncV = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!IncV)
|
||||||
|
break;
|
||||||
|
// Advance to the next instruction.
|
||||||
IncV = dyn_cast<Instruction>(IncV->getOperand(0));
|
IncV = dyn_cast<Instruction>(IncV->getOperand(0));
|
||||||
if (!IncV)
|
if (!IncV)
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user