Hi Richard,

Thanks a lot for your quick reply!

Richard Biener <rguent...@suse.de> writes:

> On Tue, 29 Aug 2023, Jiufu Guo wrote:
>
>> 
>> Hi All!
>> 
>> "rguenth at gcc dot gnu.org" <gcc-bugzi...@gcc.gnu.org> writes:
>> 
>> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111166
>> ...
>> >
>> >
>> > At RTL expansion time we store to D.2865 where it's DECL_RTL is r82:TI so
>> > we can hardly fix it there.  Only a later pass could figure each of the
>> > insns fully define the reg.
>> >
>> > Jiufu Guo is working to improve what we choose for DECL_RTL, but for
>> > incoming params / outgoing return.  This is a case where we could,
>> > with -fno-tree-vectorize, improve DECL_RTL for an automatic var and
>> > choose not TImode but something like a (concat:TI reg:DI reg:DI).
>> 
>> Here is the patch about improving the parameters and returns in
>> registers.
>> https://gcc.gnu.org/pipermail/gcc-patches/2023-August/628213.html
>> 
>> I have a question about how to bind an RTL to a TREE expression.
>> In this patch, a map TREE->RTL is used. But it would be better if
>> there was a faster way.
>> 
>> We have DECL_RTL/INCOMING_RTL, but they can only be bound to
>> DECL(or PARM). In the above patch, the TREE can be an EXPR
>> (e.g. COMPONENT_REF/ARRAY_REF).
>> 
>> Is there a way to achieve this? Thanks for suggestions!
>
> No, but we don't need to bind RTL to COMPONENT_REF and friends,
> what we want to change is the DECL_RTL of the underlying DECL.

In the above patch, the scalarized rtx for the access of the
parameter/returns are computed at the time when parameters
are set up.  And record "scalarized rtx" and "access expression".
When expanding an expression, the patch queries the scalarized rtx.

+  rtx x = get_scalar_rtx_for_aggregate_expr (exp);
+  if (x)
+    return x;

I'm reading "don't need to bind RTL to COMPONENT_REF and friends"
and "change is the DECL_RTL of the underlying DECL."
This may be doable. The method would be:
1. When the incoming/outgoing registers are determined, we can
  check if the parameter/return can be scalarized, **then bind
  the registers to DECL_RTL of the parm/ret**.
2. When expanding the expression (e.g. COMPONENT_REF), compute the
  scalarized rtx from DECL_RTL of the param/return.
  In expand_expr_real_1:
  case COMPONENT_REF: ... case ARRAY_REF: if base is parm...

Is my understanding correct?

BR,
Jeff (Jiufu Guo)

>
> Richard.

Reply via email to