Remove dead zero store to calloc initialized memory
authorPhilip Reames <listmail@philipreames.com>
Tue, 5 Aug 2014 17:48:20 +0000 (17:48 +0000)
committerPhilip Reames <listmail@philipreames.com>
Tue, 5 Aug 2014 17:48:20 +0000 (17:48 +0000)
commit00c9b6461f65380deed20676147083a6e8c66c3e
treec517b350cce3dfaf732e9717a316622399e3761f
parent064eb5a1777048c653f6df3975654ac0787249e5
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
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
llvm/test/Transforms/DeadStoreElimination/calloc-store.ll [new file with mode: 0644]