https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104987

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
If I use --param=logical-op-non-short-circuit=0 -O2 on x86_64-linux, I get
exactly the same -fdump-tree-optimized-alias dump as on v850-elf and the
testcase passes and the optimized dump looks sane.
I admit I don't have v850-elf binutils nor sim around, but the assembly I get
is:
_foo_mult:
.LFB0:
        prepare {r31}, 0
        movea -20,r0,r10
        cmp r10,r6
        blt .L2
        cmp -9,r6
        blt .L14
        cmp 10,r6
        bgt .L7
        cmp 1,r7
        bgt .L4
        addi 10,r7,r10
        cmp 8,r10
        bh .L2
.L12:
        mov r6,r10
        mul r7,r10,r0
        dispose 0 {r31}, r31
...
.L2:
        jarl _abort, r31

When this is called, r6 is 10 and r7 is -2, so I think none of the conditional
jumps should branch away,
because r6 >= -20, r6 >= -9, r6 <= 10, r7 <= 1 and so it will do r10 = r7 + 10
(thus set r10 to 8) and r10 <= 8U,
so I think it should fall through into .L12 and multiply + return.

Reply via email to