diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2012-09-25 01:55:59 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2012-09-25 01:55:59 +0000 |
commit | 24ab21c691fb98040318b9521cd1247c3e0b79cc (patch) | |
tree | 562d5355ffcdb7e1eba9d3423c60d5be34c44e90 | |
parent | e5510db57c86a618cbf9c7513e03f34e7e40a1fd (diff) | |
download | external_llvm-24ab21c691fb98040318b9521cd1247c3e0b79cc.zip external_llvm-24ab21c691fb98040318b9521cd1247c3e0b79cc.tar.gz external_llvm-24ab21c691fb98040318b9521cd1247c3e0b79cc.tar.bz2 |
Don't forget that strcpy and friends return a pointer to the destination, so
it's not a dead store if that pointer is used. Whoops!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164583 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/DeadStoreElimination.cpp | 4 | ||||
-rw-r--r-- | test/Transforms/DeadStoreElimination/libcalls.ll | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/DeadStoreElimination.cpp b/lib/Transforms/Scalar/DeadStoreElimination.cpp index f96309e..301ee2f 100644 --- a/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -266,8 +266,8 @@ static bool isRemovable(Instruction *I) { } } - if (CallSite(I)) // If we assume hasMemoryWrite(I) is true, - return true; // then there's nothing left to check. + if (CallSite CS = I) + return CS.getInstruction()->use_empty(); return false; } diff --git a/test/Transforms/DeadStoreElimination/libcalls.ll b/test/Transforms/DeadStoreElimination/libcalls.ll index b83780b..ffdf62b 100644 --- a/test/Transforms/DeadStoreElimination/libcalls.ll +++ b/test/Transforms/DeadStoreElimination/libcalls.ll @@ -44,3 +44,13 @@ define void @test4(i8* %src) { ret void } +define void @test5(i8* nocapture %src) { +; CHECK: @test5 + %dest = alloca [100 x i8], align 16 + %arraydecay = getelementptr inbounds [100 x i8]* %dest, i64 0, i64 0 + %call = call i8* @strcpy(i8* %arraydecay, i8* %src) +; CHECK: %call = call i8* @strcpy + %arrayidx = getelementptr inbounds i8* %call, i64 10 + store i8 97, i8* %arrayidx, align 1 + ret void +} |