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

--- Comment #3 from ktkachov at gcc dot gnu.org ---
(In reply to ktkachov from comment #2)
> 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?

I suppose it's because of:
register struct test2_s *g __asm__("x28");
Are calls assumed to clobber/write such things?

Reply via email to