summaryrefslogtreecommitdiff
path: root/lib/Analysis/ScalarEvolutionExpander.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-02-14 03:12:47 +0000
committerDan Gohman <gohman@apple.com>2010-02-14 03:12:47 +0000
commit1d826a76f591afea445489b9a5485c345e66bf87 (patch)
tree832e56ae519da4b5d513425249705e5420cdce00 /lib/Analysis/ScalarEvolutionExpander.cpp
parent0402577f3888889afb7a2bd18399987daefdecbe (diff)
downloadllvm-1d826a76f591afea445489b9a5485c345e66bf87.tar.gz
llvm-1d826a76f591afea445489b9a5485c345e66bf87.tar.bz2
llvm-1d826a76f591afea445489b9a5485c345e66bf87.tar.xz
In rememberInstruction, if the value being remembered is the
current insertion point, advance the current insertion point. This avoids a use-before-def situation in a testcase extracted from clang which is difficult to reduce to a reasonable-sized regression test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolutionExpander.cpp')
-rw-r--r--lib/Analysis/ScalarEvolutionExpander.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp
index 5de55fed48..88c22b1603 100644
--- a/lib/Analysis/ScalarEvolutionExpander.cpp
+++ b/lib/Analysis/ScalarEvolutionExpander.cpp
@@ -1075,6 +1075,20 @@ Value *SCEVExpander::expand(const SCEV *S) {
return V;
}
+void SCEVExpander::rememberInstruction(Value *I) {
+ if (!PostIncLoop)
+ InsertedValues.insert(I);
+
+ // If we just claimed an existing instruction and that instruction had
+ // been the insert point, adjust the insert point forward so that
+ // subsequently inserted code will be dominated.
+ if (Builder.GetInsertPoint() == I) {
+ BasicBlock::iterator It = cast<Instruction>(I);
+ do { ++It; } while (isInsertedInstruction(It));
+ Builder.SetInsertPoint(Builder.GetInsertBlock(), It);
+ }
+}
+
/// getOrInsertCanonicalInductionVariable - This method returns the
/// canonical induction variable of the specified type for the specified
/// loop (inserting one if there is none). A canonical induction variable