diff options
author | Dan Gohman <gohman@apple.com> | 2009-06-24 14:31:06 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-06-24 14:31:06 +0000 |
commit | 32a81a3f6d75c5343e7df65ce5d228f2128ca943 (patch) | |
tree | fa4c4d4b3387abafbb90850cc3f08cc49b96109f /lib/Transforms | |
parent | cd58c5940cfe87030aeaaa49ef56ed2797b35baa (diff) | |
download | external_llvm-32a81a3f6d75c5343e7df65ce5d228f2128ca943.zip external_llvm-32a81a3f6d75c5343e7df65ce5d228f2128ca943.tar.gz external_llvm-32a81a3f6d75c5343e7df65ce5d228f2128ca943.tar.bz2 |
When inserting code into a loop preheader, insert it before the
terminator, instead of after the last phi. This fixes a bug
exposed by ScalarEvolution analyzing more kinds of loops.
This fixes PR4436.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74072 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/IndVarSimplify.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 658b788..ec4be9b 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -230,13 +230,16 @@ void IndVarSimplify::RewriteLoopExitValues(Loop *L, // We insert the code into the preheader of the loop if the loop contains // multiple exit blocks, or in the exit block if there is exactly one. BasicBlock *BlockToInsertInto; + BasicBlock::iterator InsertPt; SmallVector<BasicBlock*, 8> ExitBlocks; L->getUniqueExitBlocks(ExitBlocks); - if (ExitBlocks.size() == 1) + if (ExitBlocks.size() == 1) { BlockToInsertInto = ExitBlocks[0]; - else + InsertPt = BlockToInsertInto->getFirstNonPHI(); + } else { BlockToInsertInto = Preheader; - BasicBlock::iterator InsertPt = BlockToInsertInto->getFirstNonPHI(); + InsertPt = BlockToInsertInto->getTerminator(); + } std::map<Instruction*, Value*> ExitValues; |