assign_parm_setup_block handling of parallels
Aldy Hernandez
aldyh@redhat.com
Wed Jan 12 21:47:00 GMT 2005
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)
More information about the Gcc
mailing list