https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123094
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
```
(gdb) p classp->exp
$2 = (rtx) 0x7ffff739d810
(gdb) p debug_rtx(classp->exp)
(reg:DI 32 v0)
$3 = void
```
```
(insn 21 20 22 6 (set (reg:V2DI 32 v0)
(const_vector:V2DI [
(const_int 1 [0x1])
(const_int 0 [0])
])) "t.c":22:3 1338 {*aarch64_simd_movv2di}
(nil))
(call_insn 22 21 27 6 (parallel [
(call (mem:DI (symbol_ref:DI ("p") [flags 0x3] <function_decl
0x7f96c2526e00 p>) [0 p S8 A8])
(const_int 0 [0]))
(unspec:DI [
(const_int 2 [0x2])
] UNSPEC_CALLEE_ABI)
(clobber (reg:DI 30 x30))
]) "t.c":22:3 97 {*call_insn}
(expr_list:REG_CALL_DECL (symbol_ref:DI ("p") [flags 0x3] <function_decl
0x7f96c2526e00 p>)
(expr_list:REG_EH_REGION (const_int 0 [0])
(nil)))
(expr_list (clobber (reg:DI 17 x17))
(expr_list (clobber (reg:DI 16 x16))
(expr_list:V2DI (use (reg:V2DI 32 v0))
(nil)))))
(insn 27 22 53 6 (set (reg:DI 121 [ _4+8 ])
(mem/j/c:DI (plus:DI (reg/f:DI 130)
(const_int 56 [0x38])) [1 BIT_FIELD_REF <n, 64, 192>+0 S8
A64])) "t.c":24:10 104 {*movdi_aarch64}
(expr_list:REG_DEAD (reg/f:DI 130)
(nil)))
(insn 53 27 54 6 (clobber (reg:OI 128 [ _4 ])) "t.c":24:10 -1
(nil))
(insn 54 53 55 6 (set (subreg:DI (reg:OI 128 [ _4 ]) 0)
(reg:DI 32 v0)) "t.c":24:10 104 {*movdi_aarch64}
(nil))
```
This is why we need the function p around for IPA RA. we know that v0 is not
touched by the call.
So cse_local figures that out and uses v0 across the call.
But maybe cse misses that point and thinks v0 is clobbered ...