diff options
author | Dan Gohman <gohman@apple.com> | 2008-05-20 03:01:48 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-05-20 03:01:48 +0000 |
commit | ca756ae886f1d39053ffd049123fdcc7e5c2aed3 (patch) | |
tree | edeabfb95060cfd5edca738896e5248649ac969e /lib/Transforms/Scalar/LoopStrengthReduce.cpp | |
parent | a125e62117011f9361b0e8a7b76d1089173f97f4 (diff) |
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
Diffstat (limited to 'lib/Transforms/Scalar/LoopStrengthReduce.cpp')
-rw-r--r-- | lib/Transforms/Scalar/LoopStrengthReduce.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index dbd22d90e0..d9371d2da5 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -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; |