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

--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-01-28 
11:04:19 UTC ---
(In reply to comment #4)
> Alternatively, this narrowing of > word mode operations could as well be done
> during tree optimizations.  I think the FE is the only place which performs
> them,
> as can be seen if you modify your testcase to do:
> void *
> add (void *a, void *b)
> {
>   return (void *)(__INTPTR_TYPE__) ((long long)(__INTPTR_TYPE__) a + ((long
> long)(__INTPTR_TYPE__) b & ~1L));
> }
> instead of
> void *
> add (void *a, void *b)
> {
>   long long tmp = (long long)(__INTPTR_TYPE__) a + ((long
> long)(__INTPTR_TYPE__) b & ~1L);
>   return (void *)(__INTPTR_TYPE__) tmp;
> }
> 
> But unfortunately we have nothing which performs this later on (gimple-fold?).

As it needs to combine several statements tree forwprop is our current
place to deal with this (as our "tree combiner").  Similar to the
new associate_plusminus code we should have combiners (not re-using fold)
to combine conversions.

Reply via email to