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).

Reply via email to