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)
commitb835f3446f20b61c5560eba29afd4025bc15639a
treeb8c468ab467781f442a5ef2ddeb99ecdb0f3344a
parentc2feb6bb3a33fedeb393b6935a70d556a19ff8f2
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214897 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/DeadStoreElimination.cpp
test/Transforms/DeadStoreElimination/calloc-store.ll [new file with mode: 0644]