diff options
author | Andrew Trick <atrick@apple.com> | 2011-09-19 17:54:39 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2011-09-19 17:54:39 +0000 |
commit | 7251e41b161bbbb1490cf1157e37818989b07708 (patch) | |
tree | 94644c3a647974ab4e1943d5d36240e1a572bc2d /llvm/lib/Transforms/Utils/SimplifyIndVar.cpp | |
parent | ec7c23eed302b857f9a17ed96204a138509b630b (diff) | |
download | bcm5719-llvm-7251e41b161bbbb1490cf1157e37818989b07708.tar.gz bcm5719-llvm-7251e41b161bbbb1490cf1157e37818989b07708.zip |
[indvars] Fix PR10946: SCEV cannot handle Vector IVs.
llvm-svn: 140026
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyIndVar.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyIndVar.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp index ffaad2717b4..5ee1eb18979 100644 --- a/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyIndVar.cpp @@ -85,6 +85,8 @@ namespace { /// foldIVUser - Fold an IV operand into its use. This removes increments of an /// aligned IV when used by a instruction that ignores the low bits. /// +/// IVOperand is guaranteed SCEVable, but UseInst may not be. +/// /// Return the operand of IVOperand for this induction variable if IVOperand can /// be folded (in case more folding opportunities have been exposed). /// Otherwise return null. @@ -241,6 +243,7 @@ void SimplifyIndvar::eliminateIVRemainder(BinaryOperator *Rem, /// eliminateIVUser - Eliminate an operation that consumes a simple IV and has /// no observable side-effect given the range of IV values. +/// IVOperand is guaranteed SCEVable, but UseInst may not be. bool SimplifyIndvar::eliminateIVUser(Instruction *UseInst, Instruction *IVOperand) { if (ICmpInst *ICmp = dyn_cast<ICmpInst>(UseInst)) { @@ -324,6 +327,9 @@ static bool isSimpleIVUser(Instruction *I, const Loop *L, ScalarEvolution *SE) { /// Once DisableIVRewrite is default, LSR will be the only client of IVUsers. /// void SimplifyIndvar::simplifyUsers(PHINode *CurrIV, IVVisitor *V) { + if (!SE->isSCEVable(CurrIV->getType())) + return; + // Instructions processed by SimplifyIndvar for CurrIV. SmallPtrSet<Instruction*,16> Simplified; |