http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59609

--- Comment #1 from Terry Guo <terry.guo at arm dot com> ---
Here are some investigations. In the dump of IRA pass, we have jump insn like:

(jump_insn 31 24 172 5 (parallel [
            (set (pc)
                (if_then_else (lt (plus:SI (reg/v:SI 119 [ i ])
                            (const_int -32 [0xffffffffffffffe0]))
                        (const_int 0 [0]))
                    (label_ref 35)
                    (pc)))
            (set (reg:SI 181)
                (plus:SI (reg/v:SI 119 [ i ])
                    (const_int -32 [0xffffffffffffffe0])))
            (clobber (scratch:SI))
        ]) myudi.c:13 225 {*addsi3_cbranch}
     (int_list:REG_BR_PROB 2100 (nil))
 -> 35)

Next in the dump of reload pass, it is turned into:

(jump_insn 31 254 255 5 (parallel [
            (set (pc)
                (if_then_else (lt (plus:SI (reg:SI 3 r3 [181])
                            (const_int -32 [0xffffffffffffffe0]))
                        (const_int 0 [0]))
                    (label_ref 35)
                    (pc)))
            (set (reg:SI 3 r3 [181])
                (plus:SI (reg:SI 3 r3 [181])
                    (const_int -32 [0xffffffffffffffe0])))
            (clobber (scratch:SI))
        ]) myudi.c:13 225 {*addsi3_cbranch}
     (int_list:REG_BR_PROB 2100 (nil))
 -> 35)
(insn 255 31 172 5 (set (reg:SI 12 ip [181])
        (reg:SI 3 r3 [181])) myudi.c:13 197 {*thumb1_movsi_insn}
     (nil))

The subsequent passes will change the position of insn 255 and cause ip
uninitialized when do jump.

When disable LRA, in reload pass the jump_insn 31 will be turned into something
like:

(jump_insn 31 255 172 5 (parallel [
            (set (pc)
                (if_then_else (lt (plus:SI (reg:SI 0 r0)
                            (const_int -32 [0xffffffffffffffe0]))
                        (const_int 0 [0]))
                    (label_ref 35)
                    (pc)))
            (set (reg:SI 12 ip [181])
                (plus:SI (reg:SI 0 r0)
                    (const_int -32 [0xffffffffffffffe0])))
            (clobber (reg:SI 0 r0))
        ]) myudi.c:13 225 {*addsi3_cbranch}
     (int_list:REG_BR_PROB 2100 (nil))
 -> 35)

This is good and will produce correct code.

Reply via email to