summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-05-20 03:01:48 +0000
committerDan Gohman <gohman@apple.com>2008-05-20 03:01:48 +0000
commite5572706e8534085f5a9a262def549d061480fc2 (patch)
tree22a4b01793bc2385c137378247d70697e5198c18
parent974722b16f739a54d5e9af412b19a503aa6e3f80 (diff)
downloadbcm5719-llvm-e5572706e8534085f5a9a262def549d061480fc2.tar.gz
bcm5719-llvm-e5572706e8534085f5a9a262def549d061480fc2.zip
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. llvm-svn: 51292
-rw-r--r--llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
index dbd22d90e01..d9371d2da5d 100644
--- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ b/llvm/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;
OpenPOWER on IntegriCloud