summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorPhilip Reames <listmail@philipreames.com>2014-08-05 17:48:20 +0000
committerPhilip Reames <listmail@philipreames.com>2014-08-05 17:48:20 +0000
commit00c9b6461f65380deed20676147083a6e8c66c3e (patch)
treec517b350cce3dfaf732e9717a316622399e3761f /llvm/test/Transforms
parent064eb5a1777048c653f6df3975654ac0787249e5 (diff)
downloadbcm5719-llvm-00c9b6461f65380deed20676147083a6e8c66c3e.tar.gz
bcm5719-llvm-00c9b6461f65380deed20676147083a6e8c66c3e.zip
Remove dead zero store to calloc initialized memory
Optimize the following IR: %1 = tail call noalias i8* @calloc(i64 1, i64 4) %2 = bitcast i8* %1 to i32* ; This store is dead and should be removed store i32 0, i32* %2, align 4 Memory returned by calloc is guaranteed to be zero initialized. If the value being stored is the constant zero (and the store is not otherwise observable across threads), we can delete the store. If the store is to an out of bounds address, it is undefined and thus also removable. Reviewed By: nicholas Differential Revision: http://reviews.llvm.org/D3942 llvm-svn: 214897
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/DeadStoreElimination/calloc-store.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/Transforms/DeadStoreElimination/calloc-store.ll b/llvm/test/Transforms/DeadStoreElimination/calloc-store.ll
new file mode 100644
index 00000000000..32b62a0bf17
--- /dev/null
+++ b/llvm/test/Transforms/DeadStoreElimination/calloc-store.ll
@@ -0,0 +1,17 @@
+; RUN: opt < %s -basicaa -dse -S | FileCheck %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+
+; Function Attrs: nounwind
+declare noalias i8* @calloc(i64, i64)
+
+; Function Attrs: nounwind uwtable
+define noalias i32* @test_store() {
+; CHECK-LABEL: test_store
+ %1 = tail call noalias i8* @calloc(i64 1, i64 4)
+ %2 = bitcast i8* %1 to i32*
+ ; This store is dead and should be removed
+ store i32 0, i32* %2, align 4
+; CHECK-NOT: store i32 0, i32* %2, align 4
+ ret i32* %2
+}
OpenPOWER on IntegriCloud