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.