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

--- Comment #17 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
;; lr  out       6 [bp] 7 [sp] 16 [argp] 19 [frame] 98 100 103 106 117

98 and 100 conflict has overlapping ranges now.

Before they didn't:
;; lr  out       6 [bp] 7 [sp] 16 [argp] 19 [frame] 98 103 106 117


So yes this is not exactly a RA issue but rather now we get an overlapping live
ranges as 98 didn't prop for some reason across the if.


Before we had:
```
(insn 26 25 28 5 (parallel [
            (set (reg:DI 100 [ ivtmp.7 ])
                (plus:DI (reg/v/f:DI 98 [ r ])
                    (const_int 4 [0x4])))
            (clobber (reg:CC 17 flags))
        ]) "t1.c":11:3 discrim 3 289 {*adddi_1}
     (expr_list:REG_DEAD (reg/v/f:DI 98 [ r ])
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (nil))))
```

And now we have:
```
(insn 29 28 31 6 (parallel [
            (set (reg:DI 100 [ ivtmp.7 ])
                (plus:DI (reg:DI 100 [ ivtmp.7 ])
                    (const_int 4 [0x4])))
            (clobber (reg:CC 17 flags))
        ]) "t1.c":11:3 discrim 3 289 {*adddi_1}
     (expr_list:REG_UNUSED (reg:CC 17 flags)
        (nil)))
```

But 98 is defined as:
(insn 25 24 26 5 (set (reg/v/f:DI 98 [ r ])
        (reg:DI 100 [ ivtmp.7 ])) "t1.c":12:12 99 {*movdi_internal}
     (nil))

Reply via email to