http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57742
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-10-14 Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Marc Glisse from comment #1) > Created attachment 30981 [details] > 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. ;) post-dominator tests (or simply tests whether both calls are in the same basic-block ...). Also you can transform p = malloc (n); if (p) memset (p, 0, n); which might be a common-enough case to optimize for. > 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. dereferencing a double wouldn't have a VDEF (unless you store a double).