This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: mips-sgi-irix6.2 RTL check testsuite failures


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 ();
! 
  	    }
  	}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]