970917 on mips-sgi-irix6.2, haifa disabled: many problems

Jim Wilson wilson@cygnus.com
Wed Oct 1 13:56:00 GMT 1997


	$ ./cc1 961223-1.i -quiet -dumpbase -O0 -version
	error--insn does not satisfy its constraints:
	(insn 31 32 4 (set (reg:DF 35 $f3)
	        (reg:DF 84)) 193 {movdf_internal1} (nil)
	    (nil))

	Doesn't happen with -O.

	I think this is an inlining problem, because I can't find an insn like
	the one it complains about anywhere in a -drx RTL dump (with or
	without -O), and cc1 aborts while generating RTL for `main' not `sub'.

-drx is not particularly useful for debugging bugs of this kind.  Try -da,
and then you can see that this insn first appears in the .greg dump file.
The problem is that there is a reference to an invalid pseudo, which isn't
obvious until after reload.  However, the problem exists when the RTL was
generated, and the invalid pseudo can also be seen in the .rtl file.  It
was supposed to have been a reference to an argument register.

I have installed the following patch to fix this.

Note that function inlining can only happen when -O is specified,
so problems that appear without -O aren't inlining problems.

Wed Oct  1 13:43:53 1997  Jim Wilson  <wilson@cygnus.com>

	Bring over from FSF.
	Tue Aug  5 16:10:45 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* mips.c (function_arg): Handle passing a struct 
	containing a double in a DFmode register without the PARALLEL.

Index: config/mips/mips.c
===================================================================
RCS file: /cvs/cvsfiles/egcs/gcc/config/mips/mips.c,v
retrieving revision 1.3
diff -p -r1.3 mips.c
*** mips.c	1997/09/23 04:48:36	1.3
--- mips.c	1997/10/01 20:48:45
*************** function_arg (cum, mode, type, named)
*** 3208,3214 ****
  		    % BITS_PER_WORD == 0))
  	      break;
  
! 	  if (! field)
  	    ret = gen_rtx (REG, mode, regbase + *arg_words + bias);
  	  else
  	    {
--- 3208,3214 ----
  		    % BITS_PER_WORD == 0))
  	      break;
  
! 	  if (! field || mode == DFmode)
  	    ret = gen_rtx (REG, mode, regbase + *arg_words + bias);
  	  else
  	    {




More information about the Gcc-bugs mailing list