[PATCH] D93360: [LibCallSimplifier] fold memset(malloc(x), 0, x) to calloc(1, x) if memset is intrinsic
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 21 07:49:15 PST 2020
spatel added reviewers: xbolva00, lebedev.ri.
spatel added a comment.
Please review the comments in D16337 <https://reviews.llvm.org/D16337> - especially:
https://reviews.llvm.org/D16337#331117
How does this patch guarantee that memory is not touched between the malloc and the memset? Is the transform safe on this example?
define float* @store_between_malloc_and_memset(i64 %size) {
entry:
%call = tail call i8* @malloc(i64 %size) #1
%bc1 = bitcast i8* %call to i32*
store i32 1, i32* %bc1, align 4
%cmp = icmp eq i8* %call, null
br i1 %cmp, label %cleanup, label %if.end
if.end:
%bc = bitcast i8* %call to float*
%call3 = tail call i8* @memset(i8* %call, i32 0, i64 %size)
br label %cleanup
cleanup:
%r = phi float* [ %bc, %if.end ], [ null, %entry ]
ret float* %r
}
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93360/new/
https://reviews.llvm.org/D93360
More information about the llvm-commits
mailing list