diff options
author | Andrew Trick <atrick@apple.com> | 2013-03-26 03:14:53 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-03-26 03:14:53 +0000 |
commit | e74c2e86cb405963ba9c4043a1d0ca00b8f85fbe (patch) | |
tree | 5fd5bcbbb92b96454f5a6dc78f4785703feead73 /include/llvm | |
parent | 7fc162f893d67ffd96fdb19e2eb9a03b4621f0c0 (diff) | |
download | external_llvm-e74c2e86cb405963ba9c4043a1d0ca00b8f85fbe.zip external_llvm-e74c2e86cb405963ba9c4043a1d0ca00b8f85fbe.tar.gz external_llvm-e74c2e86cb405963ba9c4043a1d0ca00b8f85fbe.tar.bz2 |
Fix SCEV forgetMemoizedResults should search and destroy backedge exprs.
Fixes PR15570: SEGV: SCEV back-edge info invalid after dead code removal.
Indvars creates a SCEV expression for the loop's back edge taken
count, then determines that the comparison is always true and
removes it.
When loop-unroll asks for the expression, it contains a NULL
SCEVUnknkown (as a CallbackVH).
forgetMemoizedResults should invalidate the loop back edges expression.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177986 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/Analysis/ScalarEvolution.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/llvm/Analysis/ScalarEvolution.h b/include/llvm/Analysis/ScalarEvolution.h index 42fd392..306549f 100644 --- a/include/llvm/Analysis/ScalarEvolution.h +++ b/include/llvm/Analysis/ScalarEvolution.h @@ -338,6 +338,10 @@ namespace llvm { /// getMax - Get the max backedge taken count for the loop. const SCEV *getMax(ScalarEvolution *SE) const; + /// Return true if any backedge taken count expressions refer to the given + /// subexpression. + bool hasOperand(const SCEV *S, ScalarEvolution *SE) const; + /// clear - Invalidate this result and free associated memory. void clear(); }; |