This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn:
- To: <Martin dot Spott at uni-duisburg dot de>
- Subject: Re: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn:
- From: Bernd Schmidt <bernds at redhat dot com>
- Date: Fri, 30 Mar 2001 14:47:34 +0100 (BST)
- Cc: <gcc-gnats at gcc dot gnu dot org>, <gcc-prs at gcc dot gnu dot org>,<gcc-bugs at gcc dot gnu dot org>, <gcc-patches at gcc dot gnu dot org>
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")))]