From 0cccd7633e4a0ba36b5ff9a3dfda2a09d16dc337 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 6 Sep 2010 05:11:24 +0000 Subject: [PATCH] fix PR8067, an over-aggressive assertion in LICM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113146 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LICM.cpp | 8 ++++---- test/Transforms/LICM/crash.ll | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index 4cab33b30dc..0db7ba771b4 100644 --- a/lib/Transforms/Scalar/LICM.cpp +++ b/lib/Transforms/Scalar/LICM.cpp @@ -681,10 +681,10 @@ void LICM::PromoteAliasSet(AliasSet &AS) { // it. if (isa(Use)) assert(!cast(Use)->isVolatile() && "AST broken"); - else if (isa(Use)) - assert(!cast(Use)->isVolatile() && - Use->getOperand(0) != ASIV && "AST broken"); - else + else if (isa(Use)) { + assert(!cast(Use)->isVolatile() && "AST broken"); + if (Use->getOperand(0) == ASIV) return; + } else return; // Not a load or store. if (!GuaranteedToExecute) diff --git a/test/Transforms/LICM/crash.ll b/test/Transforms/LICM/crash.ll index 325f250bd58..d0b6d78db1a 100644 --- a/test/Transforms/LICM/crash.ll +++ b/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 +} -- 2.34.1