[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-bugs
Subject:    Re: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn:
From:       Bernd Schmidt <bernds () redhat ! com>
Date:       2001-03-30 13:47:34
[Download RAW message or body]

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")))]


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic