https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78038
--- Comment #2 from ktkachov at gcc dot gnu.org ---
Hmm, so the zero_extend candidate is:
(insn 9 10 11 2 (set (reg/f:DI 1 x1 [orig:74 g.1_2 ] [74])
(zero_extend:DI (reg/v:SI 28 x28 [ g ]))) "ree.c":16 84
{*zero_extendsidi2_aarch64}
(nil))
and the def_insn that causes the ICE in get_sub_rtx is:
(call_insn 8 7 10 2 (parallel [
(call (mem:DI (reg/f:DI 0 x0 [orig:77 test_fptr ] [77]) [0
*test_fptr.0_1 S8 A8])
(const_int 0 [0]))
(use (const_int 0 [0]))
(clobber (reg:DI 30 x30))
]) "ree.c":14 41 {*call_reg}
(expr_list:REG_CALL_DECL (nil)
(nil))
(expr_list (clobber (reg:DI 17 x17))
(expr_list (clobber (reg:DI 16 x16))
(nil))))
This doesn't have a SET anywhere in it so it causes the ICE.
The question is, by what logic did dataflow decide that call_insn 8 defines
register x28?