https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66444
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to vries from comment #7) > (In reply to Jakub Jelinek from comment #6) > > The 0xe000000000UL constant is probably not very good for ilp32 targets. > > Try some < 4GB one if it still reproduces without the patch, or > > conditionalize it on __SIZEOF_POINTER__. > > I've tried with 0xe0000000U. The m64 case still reproduces. > > With -m32 -mregparm=1 we get: > ... > .cfi_startproc > call bar > sall $4, %eax > leal -536870912(%eax), %edx > movl %edx, %eax > call fn1 > movl %edx, %eax > call fn2 > xorl %eax, %eax > ret > ... > The reload_combine doesn't trigger for this case. It is very well possible it triggers only on x86_64-linux (or perhaps some other 64-bit targets), but still it would be better if the testcase could be compiled and run everywhere, so I'm all for using 0xe0000000UL or similar constant instead.