aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Analysis/ScalarEvolution.h
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2013-03-26 03:14:53 +0000
committerAndrew Trick <atrick@apple.com>2013-03-26 03:14:53 +0000
commite74c2e86cb405963ba9c4043a1d0ca00b8f85fbe (patch)
tree5fd5bcbbb92b96454f5a6dc78f4785703feead73 /include/llvm/Analysis/ScalarEvolution.h
parent7fc162f893d67ffd96fdb19e2eb9a03b4621f0c0 (diff)
downloadexternal_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/Analysis/ScalarEvolution.h')
-rw-r--r--include/llvm/Analysis/ScalarEvolution.h4
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();
};