This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/47477] [4.6 regression] Sub-optimal mov at end of method
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 28 Jan 2011 11:04:42 +0000
- Subject: [Bug rtl-optimization/47477] [4.6 regression] Sub-optimal mov at end of method
- Auto-submitted: auto-generated
- References: <bug-47477-4@http.gcc.gnu.org/bugzilla/>
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.