https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63783
--- Comment #17 from Oleg Endo <olegendo at gcc dot gnu.org> --- (In reply to Michael Karcher from comment #15) > I did not get around to test your proposed patch yet, but it seems like the > new "logical not" operation always compares only the low 32 bit against > zero, even if there is a 64 bit operand. If my analysis is correct, the long > long test program should fail if you replace "decision = 1;" by "decision = > 0x100000000LL;" I've tried that and the test still passes. Maybe you got confused by the following generated code for DImode test against zero: mov.l @r2,r3 mov.l @(4,r2),r1 or r3,r1 tst r1,r1 bra .L3 movt r1 The or-tst sequence is generated quite early and the sh_treg_combine pass actually never gets DImode comparisons fed in this case.