summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-12-19 05:51:54 +0000
committerChris Lattner <sabre@nondot.org>2010-12-19 05:51:54 +0000
commit1c0af0ed251af3d2ef795903133513656e5c369d (patch)
tree09e74cc2fc84878c1699820fb53602430f67cc56
parent96ba57fddac5999ef6d4009d8baef24607da6221 (diff)
downloadllvm-1c0af0ed251af3d2ef795903133513656e5c369d.tar.gz
llvm-1c0af0ed251af3d2ef795903133513656e5c369d.tar.bz2
llvm-1c0af0ed251af3d2ef795903133513656e5c369d.tar.xz
fix PR8602, a bug in an assertion: a volatile store *of* a pointer
does not make the alias set for that pointer volatile, just stores *to* the pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122171 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/LICM.cpp2
-rw-r--r--test/Transforms/LICM/crash.ll13
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp
index 3a6604357d..46fffccb3a 100644
--- a/lib/Transforms/Scalar/LICM.cpp
+++ b/lib/Transforms/Scalar/LICM.cpp
@@ -691,8 +691,8 @@ void LICM::PromoteAliasSet(AliasSet &AS) {
if (isa<LoadInst>(Use))
assert(!cast<LoadInst>(Use)->isVolatile() && "AST broken");
else if (isa<StoreInst>(Use)) {
- assert(!cast<StoreInst>(Use)->isVolatile() && "AST broken");
if (Use->getOperand(0) == ASIV) return;
+ assert(!cast<StoreInst>(Use)->isVolatile() && "AST broken");
} else
return; // Not a load or store.
diff --git a/test/Transforms/LICM/crash.ll b/test/Transforms/LICM/crash.ll
index 88be5c41cc..ff7fa0b19a 100644
--- a/test/Transforms/LICM/crash.ll
+++ b/test/Transforms/LICM/crash.ll
@@ -59,3 +59,16 @@ for.end: ; preds = %for.cond, %entry
}
declare i32* @test3helper(i32*)
+
+
+; PR8602
+@g_47 = external global i32, align 4
+
+define void @test4() noreturn nounwind {
+ br label %1
+
+; <label>:1 ; preds = %1, %0
+ volatile store i32* @g_47, i32** undef, align 8
+ store i32 undef, i32* @g_47, align 4
+ br label %1
+}