diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-07-15 22:48:29 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-07-15 22:48:29 +0000 |
commit | 0c77db32dd8ae10b5a26d60718dbe03dc2745888 (patch) | |
tree | af8267b7432abb96c1db38f1a658bda258450036 /lib/Transforms | |
parent | bb2ead6e5f1f901b25cf79b7a8752dce3cfd5c23 (diff) | |
download | external_llvm-0c77db32dd8ae10b5a26d60718dbe03dc2745888.zip external_llvm-0c77db32dd8ae10b5a26d60718dbe03dc2745888.tar.gz external_llvm-0c77db32dd8ae10b5a26d60718dbe03dc2745888.tar.bz2 |
Switch invars away from using isTrapping when it really shouldn't be
using it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75852 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/IndVarSimplify.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index 1a6c6a1..0ac58f1 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -544,7 +544,13 @@ void IndVarSimplify::SinkUnusedInvariants(Loop *L) { // New instructions were inserted at the end of the preheader. if (isa<PHINode>(I)) break; - if (I->isTrapping()) + // Don't move instructions which might have side effects, since the side + // effects need to complete before instructions inside the loop. Also + // don't move instructions which might read memory, since the loop may + // modify memory. Note that it's okay if the instruction might have + // undefined behavior: LoopSimplify guarantees that the preheader + // dominates the exit block. + if (I->mayHaveSideEffects() || I->mayReadFromMemory()) continue; // Determine if there is a use in or before the loop (direct or // otherwise). |