https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89354
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-02-14 CC| |jakub at gcc dot gnu.org Target Milestone|--- |7.5 Summary|Combine pass yields wrong |[7/8/9 Regression] Combine |code with -O2 and -msse2 |pass yields wrong code with |for 32bit target |-O2 and -msse2 for 32bit | |target Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r228231, will have a look. Slightly simplified testcase: static unsigned long long q = 0; __attribute__((noipa)) static void bar (void) { q = (q & ~0x1ffffffffULL) | 0x100000000ULL; } int main () { __asm volatile ("" : "+m" (q)); bar (); if (q != 0x100000000ULL) __builtin_abort (); return 0; }