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]