https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64213
--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- One of several testsuite failures (with non-bootstrapped compiler) is: FAIL: gcc.c-torture/execute/20020805-1.c -Os execution test --cut here-- extern void abort (void); extern void exit (int); void check (unsigned int m) { if (m != (unsigned int) -1) abort (); } unsigned int n = 1; int main (void) { unsigned int m; m = (1 | (2 - n)) | (-n); check (m); exit (0); } --cut here-- So, the difference between trunk (+) and trunk with reverted patch (-) starts at _.214r.combine, where "check" function gets miscompiled: 4: NOTE_INSN_BASIC_BLOCK 2 2: NOTE_INSN_DELETED 3: NOTE_INSN_FUNCTION_BEG - 6: r71:DI=zero_extend($16:SI) - REG_DEAD $16:DI + 6: NOTE_INSN_DELETED 7: r73:DI=0xffffffffffffffff 8: r72:DI=r73:DI 0>>0x20 REG_DEAD r73:DI REG_EQUAL 0xffffffff - 9: r74:DI=r71:DI==r72:DI + 9: r74:DI=$16:DI==r72:DI + REG_DEAD $16:DI REG_DEAD r72:DI - REG_DEAD r71:DI 10: pc={(r74:DI!=0)?L16:pc} REG_DEAD r74:DI REG_BR_PROB 9996 This results in an asm code difference, where needed SI->DI zero_extend is missing: @@ -18,7 +18,6 @@ lda $1,-1($31) lda $30,-16($30) .cfi_def_cfa_offset 16 - zapnot $16,15,$16 srl $1,32,$1 stq $26,0($30) .cfi_offset 26, -16 I propose to revert H.J.'s patch for PR64037.