From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bernd Schmidt To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org Subject: Re: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn: Date: Fri, 30 Mar 2001 05:56:00 -0000 Message-id: <20010330135601.23526.qmail@sourceware.cygnus.com> X-SW-Source: 2001-03/msg00366.html List-Id: The following reply was made to PR c++/2296; it has been noted by GNATS. From: Bernd Schmidt To: Cc: , , , Subject: Re: c++/2296: gcc-2.95.3.test3: internal error--unrecognizable insn: Date: Fri, 30 Mar 2001 14:47:34 +0100 (BST) 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 + * mips.md: Define conditional move patterns for floating point + operands and DI mode conditions. + 2001-03-28 Bernd Schmidt * 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")))]