diff options
author | Andrew Trick <atrick@apple.com> | 2012-03-26 22:33:59 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-03-26 22:33:59 +0000 |
commit | 7004e4b95ea9c6e953ee219f3ad92456b0c90ddd (patch) | |
tree | 0d437fe33dbe2b8663870b8f4ef1c762e660ccfb /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 12a98c9f07b1668c8cdd67b20d9acd9d40bf9e75 (diff) | |
download | bcm5719-llvm-7004e4b95ea9c6e953ee219f3ad92456b0c90ddd.tar.gz bcm5719-llvm-7004e4b95ea9c6e953ee219f3ad92456b0c90ddd.zip |
SCEV fix: Handle loop invariant loads.
Fixes PR11882: NULL dereference in ComputeLoadConstantCompareExitLimit.
llvm-svn: 153480
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 0c0ceeb9516..8b5397946ec 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -4619,6 +4619,10 @@ ScalarEvolution::ComputeLoadConstantCompareExitLimit( Indexes.push_back(0); } + // Loop-invariant loads may be a byproduct of loop optimization. Skip them. + if (!VarIdx) + return getCouldNotCompute(); + // Okay, we know we have a (load (gep GV, 0, X)) comparison with a constant. // Check to see if X is a loop variant variable value now. const SCEV *Idx = getSCEV(VarIdx); @@ -6845,7 +6849,7 @@ ScalarEvolution::computeBlockDisposition(const SCEV *S, const BasicBlock *BB) { return ProperlyDominatesBlock; case scCouldNotCompute: llvm_unreachable("Attempt to use a SCEVCouldNotCompute object!"); - default: + default: llvm_unreachable("Unknown SCEV kind!"); } } |