diff options
| author | Philip Reames <listmail@philipreames.com> | 2014-08-05 17:48:20 +0000 |
|---|---|---|
| committer | Philip Reames <listmail@philipreames.com> | 2014-08-05 17:48:20 +0000 |
| commit | 00c9b6461f65380deed20676147083a6e8c66c3e (patch) | |
| tree | c517b350cce3dfaf732e9717a316622399e3761f /llvm/test | |
| parent | 064eb5a1777048c653f6df3975654ac0787249e5 (diff) | |
| download | bcm5719-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')
| -rw-r--r-- | llvm/test/Transforms/DeadStoreElimination/calloc-store.ll | 17 |
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 +} |

