[PATCH] [i386] Fix _mm256_zeroupper to notify LRA that vzeroupper will kill sse registers. [PR target/82735]

Hongtao Liu crazylht@gmail.com
Tue Jun 1 02:22:29 GMT 2021


On Thu, May 27, 2021 at 6:50 PM Richard Sandiford
<richard.sandiford@arm.com> wrote:
>
> Jakub Jelinek <jakub@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)
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-CALL_INSN-may-not-be-a-real-function-call.patch
Type: text/x-patch
Size: 5007 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210601/f5b2b8cc/attachment.bin>


More information about the Gcc-patches mailing list