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.

Reply via email to