mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
Refine the fix in r51169 to only apply when the operand val being
replaced is a PHI. This prevents it from inserting uses before defs in the case that it isn't a PHI and it depends on other instructions later in the block. This fixes the 447.dealII regression on x86-64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51292 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a125e62117
commit
ca756ae886
@ -625,7 +625,7 @@ void BasedUser::RewriteInstructionToUseNewBase(const SCEVHandle &NewBase,
|
||||
// value will be pinned to live somewhere after the original computation.
|
||||
// In this case, we have to back off.
|
||||
if (!isUseOfPostIncrementedValue) {
|
||||
if (NewBasePt) {
|
||||
if (NewBasePt && isa<PHINode>(OperandValToReplace)) {
|
||||
InsertPt = NewBasePt;
|
||||
++InsertPt;
|
||||
} else if (Instruction *OpInst = dyn_cast<Instruction>(OperandValToReplace)) {
|
||||
@ -1412,8 +1412,9 @@ void LoopStrengthReduce::StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
|
||||
// consider that they may not have been able to end up immediately
|
||||
// next to RewriteOp, because non-PHI instructions may never precede
|
||||
// PHI instructions in a block. In this case, remember where the last
|
||||
// instruction was inserted so that we can use that point to expand
|
||||
// the final RewriteExpr.
|
||||
// instruction was inserted so that if we're replacing a different
|
||||
// PHI node, we can use the later point to expand the final
|
||||
// RewriteExpr.
|
||||
Instruction *NewBasePt = dyn_cast<Instruction>(RewriteOp);
|
||||
if (RewriteOp == NewPHI) NewBasePt = 0;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user