On Thu, May 27, 2021 at 6:50 PM Richard Sandiford wrote: > > Jakub Jelinek 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) Changed. > > 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 Updated separate patch for the middle-end part. -- BR, Hongtao