http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57742

--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> ---
Created attachment 30981
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30981&action=edit
basic patch

This is a very limited version of this optimization. It is in
simplify_builtin_call, so only triggers if malloc/calloc is
SSA_NAME_DEF_STMT(gimple_vuse(memset_stmt)). However, generalizing it means we
would need plenty of tests protecting against cases where the transformation
would be wrong. Note that this transforms:
p=malloc(n);
if(cond)memset(p,0,n);
into:
p=calloc(n,1);
cond;
which is good if cond is p!=0 but may not always be so great otherwise.

I won't post this to gcc-patches, I think we want something more general
(dereferencing a double* between the 2 statements shouldn't break it) or
nothing.

Reply via email to