diff options
author | Dan Gohman <gohman@apple.com> | 2010-03-19 21:51:03 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-03-19 21:51:03 +0000 |
commit | 6c7ed6b54949949806797bafdf545fbfecb2cef5 (patch) | |
tree | 42b186af9d4379c816d912bda2519563fb0b698f | |
parent | 99521af21277bf6cc744f1a01fd9a6d32ac2673f (diff) | |
download | external_llvm-6c7ed6b54949949806797bafdf545fbfecb2cef5.zip external_llvm-6c7ed6b54949949806797bafdf545fbfecb2cef5.tar.gz external_llvm-6c7ed6b54949949806797bafdf545fbfecb2cef5.tar.bz2 |
Fix more places to more thoroughly ignore debug intrinsics. This fixes
use-before-def errors in SCEVExpander-produced code in sqlite3 when debug
info with optimization is enabled, though the testcases for this are
dependent on use-list order.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99001 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Analysis/ScalarEvolutionExpander.h | 7 | ||||
-rw-r--r-- | lib/Analysis/ScalarEvolutionExpander.cpp | 18 |
2 files changed, 14 insertions, 11 deletions
diff --git a/include/llvm/Analysis/ScalarEvolutionExpander.h b/include/llvm/Analysis/ScalarEvolutionExpander.h index 26dc0c4..8287094 100644 --- a/include/llvm/Analysis/ScalarEvolutionExpander.h +++ b/include/llvm/Analysis/ScalarEvolutionExpander.h @@ -79,12 +79,7 @@ namespace llvm { /// expandCodeFor - Insert code to directly compute the specified SCEV /// expression into the program. The inserted code is inserted into the /// specified block. - Value *expandCodeFor(const SCEV *SH, const Type *Ty, Instruction *I) { - BasicBlock::iterator IP = I; - while (isInsertedInstruction(IP)) ++IP; - Builder.SetInsertPoint(IP->getParent(), IP); - return expandCodeFor(SH, Ty); - } + Value *expandCodeFor(const SCEV *SH, const Type *Ty, Instruction *I); /// setIVIncInsertPos - Set the current IV increment loop and position. void setIVIncInsertPos(const Loop *L, Instruction *Pos) { diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp index e55ca53..138cdc6 100644 --- a/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/lib/Analysis/ScalarEvolutionExpander.cpp @@ -1240,6 +1240,15 @@ Value *SCEVExpander::visitUMaxExpr(const SCEVUMaxExpr *S) { return LHS; } +Value *SCEVExpander::expandCodeFor(const SCEV *SH, const Type *Ty, + Instruction *I) { + BasicBlock::iterator IP = I; + while (isInsertedInstruction(IP) || isa<DbgInfoIntrinsic>(IP)) + ++IP; + Builder.SetInsertPoint(IP->getParent(), IP); + return expandCodeFor(SH, Ty); +} + Value *SCEVExpander::expandCodeFor(const SCEV *SH, const Type *Ty) { // Expand the code for this SCEV. Value *V = expand(SH); @@ -1278,9 +1287,7 @@ Value *SCEVExpander::expand(const SCEV *S) { // there) so that it is guaranteed to dominate any user inside the loop. if (L && S->hasComputableLoopEvolution(L) && L != PostIncLoop) InsertPt = L->getHeader()->getFirstNonPHI(); - while (isa<DbgInfoIntrinsic>(InsertPt)) - InsertPt = llvm::next(BasicBlock::iterator(InsertPt)); - while (isInsertedInstruction(InsertPt)) + while (isInsertedInstruction(InsertPt) || isa<DbgInfoIntrinsic>(InsertPt)) InsertPt = llvm::next(BasicBlock::iterator(InsertPt)); break; } @@ -1316,7 +1323,8 @@ void SCEVExpander::rememberInstruction(Value *I) { // subsequently inserted code will be dominated. if (Builder.GetInsertPoint() == I) { BasicBlock::iterator It = cast<Instruction>(I); - do { ++It; } while (isInsertedInstruction(It)); + do { ++It; } while (isInsertedInstruction(It) || + isa<DbgInfoIntrinsic>(It)); Builder.SetInsertPoint(Builder.GetInsertBlock(), It); } } @@ -1324,7 +1332,7 @@ void SCEVExpander::rememberInstruction(Value *I) { void SCEVExpander::restoreInsertPoint(BasicBlock *BB, BasicBlock::iterator I) { // If we acquired more instructions since the old insert point was saved, // advance past them. - while (isInsertedInstruction(I)) ++I; + while (isInsertedInstruction(I) || isa<DbgInfoIntrinsic>(I)) ++I; Builder.SetInsertPoint(BB, I); } |