summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2012-09-25 01:55:59 +0000
committerNick Lewycky <nicholas@mxc.ca>2012-09-25 01:55:59 +0000
commit42bca056e05010f994f5be6127a8dceb065291ad (patch)
treedecc02e59e4eedadb64c01469341ac9f162a05c9 /llvm
parent02a6babb3ec8da88a216e909827275861e8c919a (diff)
downloadbcm5719-llvm-42bca056e05010f994f5be6127a8dceb065291ad.tar.gz
bcm5719-llvm-42bca056e05010f994f5be6127a8dceb065291ad.zip
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! llvm-svn: 164583
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp4
-rw-r--r--llvm/test/Transforms/DeadStoreElimination/libcalls.ll10
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index f96309eb4d1..301ee2f663b 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/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/llvm/test/Transforms/DeadStoreElimination/libcalls.ll b/llvm/test/Transforms/DeadStoreElimination/libcalls.ll
index b83780b399d..ffdf62b2150 100644
--- a/llvm/test/Transforms/DeadStoreElimination/libcalls.ll
+++ b/llvm/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
+}
OpenPOWER on IntegriCloud