This is the mail archive of the gcc-patches@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: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn:


On 16 Mar 2001 Martin.Spott@uni-duisburg.de wrote:

> sirius: 0:56:25 ~/FlightGear> g++ -v -O3 -mabi=64 -mips4 -mmips-as -c panel.ii
> Reading specs from /opt/gnu/lib/gcc-lib/mips-sgi-irix64/2.95.3/specs
> gcc version 2.95.3 20010125 (prerelease)
>  /opt/gnu/lib/gcc-lib/mips-sgi-irix64/2.95.3/cc1plus panel.ii -mfp64 -mgp64 -quiet -mabi=64 -mips4 -mmips-as -O3 -version -o /var/tmp/cc5mAv9K.s
> GNU C++ version 2.95.3 20010125 (prerelease) (mips-sgi-irix64) compiled by GNU C version 2.95.3 20010125 (prerelease).
> panel.cxx: In method `void FGAdjustAction::doAction()':
> panel.cxx:124: internal error--unrecognizable insn:
> (insn 123 122 88 (set:SF (reg/v:SF 82)
>         (if_then_else:SF (eq (reg:DI 110)
>                 (const_int 0 [0x0]))
>             (reg:SF 96)
>             (reg:SF 93))) -1 (insn_list 122 (nil))
>     (expr_list:REG_DEAD (reg:DI 110)
>         (expr_list:REG_DEAD (reg:SF 96)
>             (expr_list:REG_DEAD (reg:SF 93)
>                 (nil)))))
> >How-To-Repeat:
> g++ -O3 -mabi=64 -mips4 -mmips-as -c panel.ii

Fixed by backporting this patch to the 2.95 branch.  Taken from
   http://gcc.gnu.org/ml/gcc-patches/1999-10/msg00074.html


Bernd

Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ChangeLog,v
retrieving revision 1.3667.4.345
diff -u -p -r1.3667.4.345 ChangeLog
--- ChangeLog	2001/03/30 13:21:49	1.3667.4.345
+++ ChangeLog	2001/03/30 13:37:50
@@ -7,6 +7,10 @@

 	* final.c (cleanup_subreg_operands): Also clean up inside MEMs.

+	Mon Oct  4 02:31:20 1999  Mark Mitchell  <mark@codesourcery.com>
+	* mips.md: Define conditional move patterns for floating point
+	operands and DI mode conditions.
+
 2001-03-28  Bernd Schmidt  <bernds@redhat.com>

 	* flow.c (propagate_block): When trying to delete a case vector, cope
Index: config/mips/mips.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/mips/mips.md,v
retrieving revision 1.55.4.1
diff -u -p -r1.55.4.1 mips.md
--- mips.md	1999/06/29 01:59:20	1.55.4.1
+++ mips.md	2001/03/30 13:37:51
@@ -10086,6 +10086,21 @@ move\\t%0,%z4\\n\\
 (define_insn ""
   [(set (match_operand:SF 0 "register_operand" "=f,f")
 	(if_then_else:SF
+	 (match_operator 4 "equality_op"
+			 [(match_operand:DI 1 "se_register_operand" "d,d")
+			  (const_int 0)])
+	 (match_operand:SF 2 "register_operand" "f,0")
+	 (match_operand:SF 3 "register_operand" "0,f")))]
+  "mips_isa >= 4 && TARGET_HARD_FLOAT"
+  "@
+    mov%B4.s\\t%0,%2,%1
+    mov%b4.s\\t%0,%3,%1"
+  [(set_attr "type" "move")
+   (set_attr "mode" "SF")])
+
+(define_insn ""
+  [(set (match_operand:SF 0 "register_operand" "=f,f")
+	(if_then_else:SF
 	 (match_operator 3 "equality_op" [(match_operand:CC 4
 							    "register_operand"
 							    "z,z")
@@ -10104,6 +10119,21 @@ move\\t%0,%z4\\n\\
 	(if_then_else:DF
 	 (match_operator 4 "equality_op"
 			 [(match_operand:SI 1 "register_operand" "d,d")
+			  (const_int 0)])
+	 (match_operand:DF 2 "register_operand" "f,0")
+	 (match_operand:DF 3 "register_operand" "0,f")))]
+  "mips_isa >= 4 && TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
+  "@
+    mov%B4.d\\t%0,%2,%1
+    mov%b4.d\\t%0,%3,%1"
+  [(set_attr "type" "move")
+   (set_attr "mode" "DF")])
+
+(define_insn ""
+  [(set (match_operand:DF 0 "register_operand" "=f,f")
+	(if_then_else:DF
+	 (match_operator 4 "equality_op"
+			 [(match_operand:DI 1 "se_register_operand" "d,d")
 			  (const_int 0)])
 	 (match_operand:DF 2 "register_operand" "f,0")
 	 (match_operand:DF 3 "register_operand" "0,f")))]


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