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

Reply via email to