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

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |rtl-optimization

--- Comment #9 from H.J. Lu <hjl.tools at gmail dot com> ---
IRA generates:

(code_label 83 137 84 16 2 (nil) [4 uses])
(note 84 83 85 16 [bb 16] NOTE_INSN_BASIC_BLOCK)
(insn 85 84 86 16 (clobber (reg/i:SI 0 ax)) "x.c":29:1 -1
     (expr_list:REG_UNUSED (reg/i:SI 0 ax)
        (nil)))
(insn 86 85 138 16 (clobber (reg:SI 133 [ <retval> ])) "x.c":29:1 -1
     (nil))
(jump_insn 138 86 139 16 (set (pc) 
        (label_ref 97)) "x.c":29:1 1483 {jump}
     (nil)
 -> 97)
;;  succ:       19 [always]  count:973078528 (estimated locally, freq 0.9062)
x.c:29:1
;; lr  out       6 [bp] 7 [sp] 16 [argp] 19 [frame] 133
...
(code_label 97 142 100 19 1 (nil) [2 uses])
(note 100 97 98 19 [bb 19] NOTE_INSN_BASIC_BLOCK)
(insn 98 100 99 19 (set (reg/i:SI 0 ax)
        (reg:SI 133 [ <retval> ])) "x.c":29:1 100 {*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 133 [ <retval> ])
        (nil)))
(insn 99 98 0 19 (use (reg/i:SI 0 ax)) "x.c":29:1 -1
     (nil))
;;  succ:       EXIT [always]  count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr  out       0 [ax] 6 [bp] 7 [sp] 16 [argp] 19 [frame]

Then LRA removes a useless move:

(insn/v 98 100 99 19 (set (reg/i:SI 0 ax)
        (reg:SI 0 ax [orig:133 <retval> ] [133])) "x.c":29:1 100
{*movsi_internal}
     (expr_list:REG_DEAD (reg:SI 0 ax [orig:133 <retval> ] [133])
        (nil)))

without removing the clobber in its predecessors:

(insn 85 84 86 16 (clobber (reg/i:SI 0 ax)) "x.c":29:1 -1
     (expr_list:REG_UNUSED (reg/i:SI 0 ax)
        (nil)))

After LRA, we got

(code_label 83 137 84 16 2 (nil) [4 uses])
(note 84 83 85 16 [bb 16] NOTE_INSN_BASIC_BLOCK)
(insn 85 84 86 16 (clobber (reg/i:SI 0 ax)) "x.c":29:1 -1
     (nil))
(insn 86 85 138 16 (clobber (reg:SI 0 ax [orig:133 <retval> ] [133]))
"x.c":29:1 -1
     (nil))
(jump_insn 138 86 139 16 (set (pc) 
        (label_ref 97)) "x.c":29:1 1483 {jump}
     (nil)
 -> 97)
;;  succ:       19 [always]  count:973078528 (estimated locally, freq 0.9062)
x.c:29:1
;; lr  out       0 [ax] 7 [sp] 
;; live  out     7 [sp] 
...
code_label 97 142 100 19 1 (nil) [2 uses])
(note 100 97 99 19 [bb 19] NOTE_INSN_BASIC_BLOCK)
(insn 99 100 143 19 (use (reg/i:SI 0 ax)) "x.c":29:1 -1
     (nil))
;;  succ:       EXIT [always]  count:1073741824 (estimated locally, freq
1.0000) (FALLTHRU)
;; lr  out       0 [ax] 7 [sp]
;; live  out     0 [ax] 7 [sp]

Reply via email to