This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: mips-sgi-irix6.2 RTL check testsuite failures
- To: gcc-patches at gcc dot gnu dot org
- Subject: Re: mips-sgi-irix6.2 RTL check testsuite failures
- From: Clinton Popetz <cpopetz at cygnus dot com>
- Date: Wed, 12 Jul 2000 18:36:56 -0500
- References: <200007121432.KAA09813@caip.rutgers.edu> <20000712183538.A20609@cpopetz.com>
On Wed, Jul 12, 2000 at 06:35:38PM -0500, Clinton Popetz wrote:
> 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 ();
> !
> }
> }