This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: mips-sgi-irix6.2 RTL check testsuite failures
- To: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>
- Subject: Re: mips-sgi-irix6.2 RTL check testsuite failures
- From: Clinton Popetz <cpopetz at cygnus dot com>
- Date: Wed, 12 Jul 2000 18:35:38 -0500
- Cc: gcc-bugs at gcc dot gnu dot org, gcc-patches at gcc-gnu dot org
- References: <200007121432.KAA09813@caip.rutgers.edu>
On Wed, Jul 12, 2000 at 10:32:20AM -0400, Kaveh R. Ghazi wrote:
> The following are testsuite failures exposed by RTL checking on
> mips-sgi-irix6.2:
> gcc.c-torture/execute/struct-ret-1.c:40: RTL check: expected code `reg', have `parallel'
> gcc.c-torture/unsorted/s.c:24: RTL check: expected code `reg', have `parallel'
> gcc.c-torture/unsorted/structret.c:26: RTL check: expected code `reg', have `parallel'
> g++.old-deja/g++.pt/alignof.C:14: RTL check: expected code `reg', have `parallel'
> g++.old-deja/g++.pt/t21.C:4: RTL check: expected code `reg', have `parallel'
> g++.old-deja/g++.pt/t21.C:4: Internal compiler error in `mips_expand_prologue', at config/mips/mips.c:7007
> g++.old-deja/g++.pt/t28.C:4: RTL check: expected code `reg', have `parallel'
> g++.old-deja/g++.pt/t28.C:4: Internal compiler error in `mips_expand_prologue', at config/mips/mips.c:7007
These were all from the same bug...the Irix abi has a bizarre
requirement to break up an argument struct into chunks when it
contains a double, and mips_expand_prologue couldn't handle this.
Kaveh, can you try to bootstrap with the below change? The Irix box I
have access to is running out of space, and is abysmally slow as well.
There is still one rtl-checking failure (950612-1.c) that I'll see if
I can fix later tonight.
-Clint
Wed Jul 12 18:24:37 CDT 2000 Clinton Popetz <cpopetz@cygnus.com>
* mips.c (mips_expand_prologue): Handle the case when
FUNCTION_ARG returns a parallel, which happens for the n32/n64
ABI when passing a structure that contains a double.
Index: config/mips/mips.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/mips/mips.c,v
retrieving revision 1.91
diff -c -2 -p -r1.91 mips.c
*** mips.c 2000/07/11 21:30:23 1.91
--- mips.c 2000/07/12 23:19:18
*************** mips_expand_prologue ()
*** 6997,7009 ****
else
{
! int words;
!
! /* passed in a register, so will get homed automatically */
! if (GET_MODE (entry_parm) == BLKmode)
! words = (int_size_in_bytes (passed_type) + 3) / 4;
! else
! words = (GET_MODE_SIZE (GET_MODE (entry_parm)) + 3) / 4;
! regno = REGNO (entry_parm) + words - 1;
}
}
--- 6997,7021 ----
else
{
! if (GET_CODE (entry_parm) == REG)
! {
! int words;
! /* passed in a register, so will get homed automatically */
! if (GET_MODE (entry_parm) == BLKmode)
! words = (int_size_in_bytes (passed_type) + 3) / 4;
! else
! words = (GET_MODE_SIZE (GET_MODE (entry_parm)) + 3) / 4;
! regno = REGNO (entry_parm) + words - 1;
! }
! else if (GET_CODE (entry_parm) == PARALLEL)
! {
! rtx reg = XEXP (XVECEXP (entry_parm, 0,
! XVECLEN (entry_parm, 0) - 1),0);
! regno = REGNO (reg) +
! (GET_MODE_SIZE (GET_MODE (reg)) + 3) / 4;;
! }
! else
! abort ();
!
}
}