diff options
author | Chris Lattner <sabre@nondot.org> | 2010-12-19 05:51:54 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-12-19 05:51:54 +0000 |
commit | 1c0af0ed251af3d2ef795903133513656e5c369d (patch) | |
tree | 09e74cc2fc84878c1699820fb53602430f67cc56 | |
parent | 96ba57fddac5999ef6d4009d8baef24607da6221 (diff) | |
download | external_llvm-1c0af0ed251af3d2ef795903133513656e5c369d.zip external_llvm-1c0af0ed251af3d2ef795903133513656e5c369d.tar.gz external_llvm-1c0af0ed251af3d2ef795903133513656e5c369d.tar.bz2 |
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.cpp | 2 | ||||
-rw-r--r-- | test/Transforms/LICM/crash.ll | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index 3a66043..46fffcc 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 88be5c4..ff7fa0b 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 +} |