From e9e973018aaf93dbd21b894b404e4b3a50805479 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 29 Nov 2010 21:59:31 +0000 Subject: [PATCH] fix PR8677, patch by Jakub Staszak! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120325 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/DeadStoreElimination.cpp | 6 ++++-- test/Transforms/DeadStoreElimination/simple.ll | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Scalar/DeadStoreElimination.cpp b/lib/Transforms/Scalar/DeadStoreElimination.cpp index 02df1031e60..4540ccce8c6 100644 --- a/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -235,8 +235,10 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) { &BB); } - // If not a definite must-alias dependency, ignore it. - if (!InstDep.isDef()) + // If not a definite must-alias store dependency, ignore it. If this is a + // load from the same pointer, we don't want to transform load+store into + // a noop. + if (!InstDep.isDef() || !isa(InstDep.getInst())) continue; } diff --git a/test/Transforms/DeadStoreElimination/simple.ll b/test/Transforms/DeadStoreElimination/simple.ll index 0a16603f55d..ab0ef7b7eb2 100644 --- a/test/Transforms/DeadStoreElimination/simple.ll +++ b/test/Transforms/DeadStoreElimination/simple.ll @@ -20,3 +20,17 @@ define void @test2(i32 *%p, i32 *%q) { ; CHECK: @test2 ; CHECK-NEXT: store i32 20 } + + +; PR8677 +@g = global i32 1 + +define i32 @test3(i32* %g_addr) nounwind { +; CHECK: @test3 +; CHEcK: load i32* %g_addr + %g_value = load i32* %g_addr, align 4 + store i32 -1, i32* @g, align 4 + store i32 %g_value, i32* %g_addr, align 4 + %tmp3 = load i32* @g, align 4 + ret i32 %tmp3 +}