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.