diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-09-06 09:15:29 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-09-06 09:15:29 +0000 |
commit | 31d398d78c3b9b6cb8912648e7307871cb013052 (patch) | |
tree | cc2e03ea3c5f07179850487afefeea17e656c1d7 | |
parent | 4217ff2da5168c500f3dc1e696baad1d10edb9f9 (diff) | |
download | llvm-31d398d78c3b9b6cb8912648e7307871cb013052.zip llvm-31d398d78c3b9b6cb8912648e7307871cb013052.tar.gz llvm-31d398d78c3b9b6cb8912648e7307871cb013052.tar.bz2 |
Approved by Chris:
$ svn merge -c 113146 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r113146 into '.':
U test/Transforms/LICM/crash.ll
U lib/Transforms/Scalar/LICM.cpp
Log:
fix PR8067, an over-aggressive assertion in LICM.
llvm-svn: 113152
-rw-r--r-- | llvm/lib/Transforms/Scalar/LICM.cpp | 8 | ||||
-rw-r--r-- | llvm/test/Transforms/LICM/crash.ll | 14 |
2 files changed, 18 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index 0399329..6cb4845 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -696,10 +696,10 @@ void LICM::PromoteAliasSet(AliasSet &AS) { // it. if (isa<LoadInst>(Use)) assert(!cast<LoadInst>(Use)->isVolatile() && "AST broken"); - else if (isa<StoreInst>(Use)) - assert(!cast<StoreInst>(Use)->isVolatile() && - Use->getOperand(0) != ASIV && "AST broken"); - else + else if (isa<StoreInst>(Use)) { + assert(!cast<StoreInst>(Use)->isVolatile() && "AST broken"); + if (Use->getOperand(0) == ASIV) return; + } else return; // Not a load or store. if (!GuaranteedToExecute) diff --git a/llvm/test/Transforms/LICM/crash.ll b/llvm/test/Transforms/LICM/crash.ll index 325f250..d0b6d78 100644 --- a/llvm/test/Transforms/LICM/crash.ll +++ b/llvm/test/Transforms/LICM/crash.ll @@ -25,3 +25,17 @@ for.cond.for.end10_crit_edge: ; preds = %for.cond for.end10: ; preds = %for.cond.for.end10_crit_edge, %entry ret void } + +; PR8067 +@g_8 = external global i32, align 4 + +define void @test2() noreturn nounwind ssp { +entry: + br label %for.body + +for.body: ; preds = %for.body, %entry + %tmp7 = load i32* @g_8, align 4 + store i32* @g_8, i32** undef, align 16 + store i32 undef, i32* @g_8, align 4 + br label %for.body +} |