RE: [GCC 16, PATCH] x86: Check DECL_INCOMING_RTL for argument passing check

"Liu, Hongtao" <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <DS4PPF240F42FB7781E16B3E100DA9924E0E5DE2@DS4PPF240F42FB7.namprd11.prod.outlook.com>

> -----Original Message-----
> From: H.J. Lu <[email protected]>
> Sent: Saturday, August 8, 2026 6:57 AM
> To: Hongtao Liu <[email protected]>
> Cc: GCC Patches <[email protected]>; Uros Bizjak
> <[email protected]>; Liu, Hongtao <[email protected]>
> Subject: [GCC 16, PATCH] x86: Check DECL_INCOMING_RTL for argument
> passing check
> 
> On Tue, Aug 4, 2026 at 3:02 PM H.J. Lu <[email protected]> wrote:
> >
> > On Tue, Aug 4, 2026 at 2:40 PM Hongtao Liu <[email protected]> wrote:
> > >
> > > On Sun, Aug 2, 2026 at 2:34 PM H.J. Lu <[email protected]> wrote:
> > > >
> > > > On Sat, Aug 1, 2026 at 4:49 PM Uros Bizjak <[email protected]> wrote:
> > > > >
> > > > > On Sat, Aug 1, 2026 at 5:12 AM H.J. Lu <[email protected]> wrote:
> > > > > >
> > > > > > When checking if a register argument is used as local
> > > > > > variable, also return true if non-local variable is the source
> > > > > > of the argument-linked memory store.
> > > > > >
> > > > > > gcc/
> > > > > >
> > > > > > PR target/126529
> > > > > > * config/i386/i386.cc (ix86_spill_register_argument_p): Also
> > > > > > check non-local variable source for the argument-linked memory
> > > > > > store.
> > > > > >
> > > > > > gcc/testsuite/
> > > > > >
> > > > > > PR target/126529
> > > > > > * gcc.target/i386/pr126529.c: New test.
> > > > >
> > > > > This is the third patch in the same area, so it IMO points to a
> > > > > more systematic issue. Please find someone else that is able to
> > > > > thoroughly review the patch (and the core issue that lies behind
> > > > > these problems) from the generic middle-end side of the compiler.
> > > > >
> > > > > Uros.
> > > >
> > > > Here is the v2 patch to check the argument's  DECL_INCOMING_RTL
> > > > instead.
> > >
> > >   /* Return true if OP is passed in memory.  */
> > >   return MEM_P (DECL_INCOMING_RTL (var));
> > >
> > > DECL_INCOMING_RTL mean param_decl in stack, callee can also take the
> > > parameter as local variable and put it in it's own stack, but looks
> > > like at assign_stack_local have already handled that case, and here
> > > in ix86_find_max_used_stack_alignment it just raise the requirement,
> > > not lower that. So it seems ok.
> > > Better to add more explanation in the comment.
> > > Also to be defensive, avoid NULL for DECL_INCOMING_RTL (var), change it
> to
> > >   return DECL_INCOMING_RTL (var) && MEM_P (DECL_INCOMING_RTL
> (var));
> > > ?
> >
> > Here is the patch I am checking in.  I copied DECL_INCOMING_RTL
> > comments from tree.h:
> >
> > static bool
> > ix86_argument_passed_on_stack_p (const_rtx op) {
> >   tree mem_expr = MEM_EXPR (op);
> >   if (!mem_expr)
> >     return false;
> >
> >   tree var = get_base_address (mem_expr);
> >   if (TREE_CODE (var) != PARM_DECL)
> >     return false;
> >
> >   /* For PARM_DECL, DECL_INCOMING_RTL holds an RTL for the stack slot
> >      or register where the data was actually passed.  Return true if
> >      OP is passed in memory.  */
> >   return DECL_INCOMING_RTL (var) && MEM_P (DECL_INCOMING_RTL
> (var)); }
> >
> > > Others LGTM.
> 
> OK for backport to GCC 16?

Ok.
> 
> Thanks.
> 
> --
> H.J.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.