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. Though, it seems no other rtl flag is free for CALL_INSN. Could this fake call flag sit on the CALL rtx instead? Jakub