Jakub Jelinek <ja...@redhat.com> writes: > On Thu, May 27, 2021 at 01:07:09PM +0800, Hongtao Liu via Gcc-patches wrote: >> + /* Flag used for call_insn indicates it's a fake call. */ >> + RTX_FLAG (insn, used) = 1; > >> + /* CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (i == STACK_POINTER_REGNUM >> + && !RTX_FLAG (insn_info->insn, used)) > >> - && ! SIBLING_CALL_P (insn)) >> + && ! SIBLING_CALL_P (insn) >> + && !RTX_FLAG (insn, used)) > >> - /* For all other RTXes clear the used flag on the copy. */ >> - RTX_FLAG (copy, used) = 0; >> + /* For all other RTXes clear the used flag on the copy. >> + CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (!INSN_P (orig)) >> + RTX_FLAG (copy, used) = 0; >> break; >> } >> return copy; >> @@ -57,7 +57,8 @@ requires_stack_frame_p (rtx_insn *insn, HARD_REG_SET >> prologue_used, >> HARD_REG_SET hardregs; >> unsigned regno; >> >> - if (CALL_P (insn)) >> + /* CALL_INSN use "used" flag to indicate it's a fake call. */ >> + if (CALL_P (insn) && !RTX_FLAG (insn, used)) >> return !SIBLING_CALL_P (insn); > > Please define a macro for this in rtl.h (and mention it above used; > member too in a comment, see all the other comments in there), like: > /* 1 if RTX is a call_insn for a fake call. */ > #define FAKE_CALL_P(RTX) \ > (RTL_FLAG_CHECK1 ("FAKE_CALL_P", (RTX), CALL_INSN)->used) > Though, I'm also not sure if used can be actually used for this, > because it is used e.g. in emit-rtl.c for verification of RTL sharing.
I thought it should be OK, since: - copy_rtx_if_shared_1 and mark_used_flags do nothing for insns - verify_rtx_sharing is only called for parts of an insn, rather than an insn itself I guess an alternative would be to add a new rtx_code for fake call insns and use CALL_P to test for both. However, that would lose the property that the default behaviour is conservatively correct (even for direct checks of CALL_INSN), so the flag IMO seems better. Thanks, Richard > Though, it seems no other rtl flag is free for CALL_INSN. > Could this fake call flag sit on the CALL rtx instead? > > Jakub