This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: 970917 on mips-sgi-irix6.2, haifa disabled: many problems
- To: Zack Weinberg <zack at rabi dot phys dot columbia dot edu>
- Subject: Re: 970917 on mips-sgi-irix6.2, haifa disabled: many problems
- From: Jim Wilson <wilson at cygnus dot com>
- Date: Wed, 01 Oct 1997 13:55:38 -0700
- cc: egcs-bugs at cygnus dot com
$ ./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
{