https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109025
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note using &, | or ^ causes the ICE. Using + or - or * does not. Here is more simplified testcase: ``` int func_4(int t, int b) { for (int tt1 = 0; tt1 < 128 ; tt1 ++) { for (int tt = 0; tt < 128; tt ++) if (b) t |= 3; t |= 3; } return t; } ``` The above should just optimized to `return t | 3;` really. The ^/& case should be optimized too but it depends on if the number of loops is even or odd and if b was non-zero or not.