https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71709
--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Before the first RTL CSE, we have on that second strcpy:
(call_insn 47 46 0 2 (parallel [
(set (reg:DI 3 3)
(call (mem:SI (symbol_ref:DI ("strcpy") [flags 0x41]
<function_decl 0x3fff900ea000 strcpy>) [0 __builtin_strcpy S4 A8])
(const_int 64 [0x40])))
(clobber (reg:DI 65 lr))
]) 71709.c:17 677 {*call_value_nonlocal_aixdi}
(expr_list:REG_CALL_DECL (symbol_ref:DI ("strcpy") [flags 0x41]
<function_decl 0x3fff900ea000 strcpy>)
(expr_list:REG_EH_REGION (const_int 0 [0])
(nil)))
(expr_list (use (reg:DI 2 2))
(expr_list:DI (set (reg:DI 3 3)
(reg:DI 3 3))
(expr_list:DI (use (reg:DI 3 3))
(expr_list:DI (use (reg:DI 4 4))
(nil))))))
but after cse1 it is:
(call_insn 47 46 0 2 (parallel [
(set (reg:DI 3 3)
(call (mem:SI (symbol_ref:DI ("strcpy") [flags 0x41]
<function_decl 0x3fff900ea000 strcpy>) [0 __builtin_strcpy S4 A8])
(const_int 64 [0x40])))
(clobber (reg:DI 65 lr))
]) 71709.c:17 677 {*call_value_nonlocal_aixdi}
(expr_list:REG_DEAD (reg:DI 4 4)
(expr_list:REG_UNUSED (reg:DI 3 3)
(expr_list:REG_CALL_DECL (symbol_ref:DI ("strcpy") [flags 0x41]
<function_decl 0x3fff900ea000 strcpy>)
(expr_list:REG_EH_REGION (const_int 0 [0])
(nil)))))
(expr_list (use (reg:DI 2 2))
(expr_list:DI (set (reg:DI 3 3)
(reg:DI 3 3))
(expr_list:DI (use (reg:DI 3 3))
(expr_list:DI (use (reg:DI 4 4))
(nil))))))
(note the REG_UNUSED).