This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: assign_parm_setup_block handling of parallels
- From: Aldy Hernandez <aldyh at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>, gcc at gcc dot gnu dot org, ebotcazou at libertysurf dot fr, dje at watson dot ibm dot com
- Date: Wed, 12 Jan 2005 16:21:07 -0400
- Subject: Re: assign_parm_setup_block handling of parallels
- References: <20041223202824.GA8247@redhat.com> <20041223210400.GH19547@redhat.com> <20041223214543.GA16125@redhat.com> <20041223223759.GA19928@redhat.com> <20050112165517.GA21567@redhat.com> <20050112193200.GA10575@redhat.com>
On Wed, Jan 12, 2005 at 11:32:00AM -0800, Richard Henderson wrote:
> On Wed, Jan 12, 2005 at 12:55:17PM -0400, Aldy Hernandez wrote:
> > * function.c (assign_parm_setup_block): Relax condition on
> > multi-register optimization.
>
> Ok with the fixed hard_regno_nregs check.
Whooops.
The call to emit_grop_move_into_temps() will change entry_parm to be a
pseudo. We need to look inside the original entry_parm.
Pretty obvious, but... OK?
* function.c (assign_parm_setup_block): Look inside original
entry_parm when inspecting PARALLEL.
Index: function.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/function.c,v
retrieving revision 1.601
diff -c -p -r1.601 function.c
*** function.c 12 Jan 2005 20:01:38 -0000 1.601
--- function.c 12 Jan 2005 20:19:15 -0000
*************** assign_parm_setup_block (struct assign_p
*** 2553,2558 ****
--- 2553,2559 ----
rtx stack_parm = data->stack_parm;
HOST_WIDE_INT size;
HOST_WIDE_INT size_stored;
+ rtx orig_entry_parm = entry_parm;
if (GET_CODE (entry_parm) == PARALLEL)
entry_parm = emit_group_move_into_temps (entry_parm);
*************** assign_parm_setup_block (struct assign_p
*** 2562,2568 ****
if (GET_CODE (entry_parm) == PARALLEL
&& data->nominal_mode != BLKmode)
{
! rtx elt0 = XEXP (XVECEXP (entry_parm, 0, 0), 0);
if ((XVECLEN (entry_parm, 0) > 1
|| hard_regno_nregs[REGNO (elt0)][GET_MODE (elt0)] > 1)
--- 2563,2569 ----
if (GET_CODE (entry_parm) == PARALLEL
&& data->nominal_mode != BLKmode)
{
! rtx elt0 = XEXP (XVECEXP (orig_entry_parm, 0, 0), 0);
if ((XVECLEN (entry_parm, 0) > 1
|| hard_regno_nregs[REGNO (elt0)][GET_MODE (elt0)] > 1)