http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47477
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rth at gcc dot gnu.org --- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-01-27 17:45:33 UTC --- 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?).