This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/22239] [4.0/4.1 Regression] i-cobol.adb:482: error: unrecognizable insn
- From: "dave at hiauly1 dot hia dot nrc dot ca" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Jul 2005 02:44:56 -0000
- Subject: [Bug rtl-optimization/22239] [4.0/4.1 Regression] i-cobol.adb:482: error: unrecognizable insn
- References: <20050629233607.22239.danglin@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From dave at hiauly1 dot hia dot nrc dot ca 2005-07-09 02:44 -------
Subject: Re: [4.0/4.1 Regression] i-cobol.adb:482: error: unrecognizable insn
> --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9233&action=view)
> file that now ICEs with latest patch.
>
> Compile the this file with -O2 -g on an arm-elf cross
This is totally untested but possibly something like the change below
would resolve the problem for both ports.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
Index: loop.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop.c,v
retrieving revision 1.535
diff -u -3 -p -r1.535 loop.c
--- loop.c 7 Jul 2005 22:53:28 -0000 1.535
+++ loop.c 9 Jul 2005 02:34:18 -0000
@@ -5496,14 +5496,21 @@ loop_givs_rescan (struct loop *loop, str
v->new_reg));
else if (GET_CODE (*v->location) == PLUS
&& REG_P (XEXP (*v->location, 0))
- && REG_P (v->new_reg)
&& CONSTANT_P (XEXP (*v->location, 1)))
- loop_insn_emit_before (loop, 0, v->insn,
- gen_move_insn (XEXP (*v->location, 0),
- gen_rtx_MINUS
- (GET_MODE (*v->location),
- v->new_reg,
- XEXP (*v->location, 1))));
+ {
+ rtx reg, seq;
+ start_sequence ();
+ if (REG_P (v->new_reg))
+ reg = v->new_reg;
+ else
+ reg = force_reg (GET_MODE (*v->location), v->new_reg);
+ emit_move_insn (XEXP (*v->location, 0),
+ gen_rtx_MINUS (GET_MODE (*v->location), reg,
+ XEXP (*v->location, 1)));
+ seq = get_insns ();
+ end_sequence ();
+ loop_insn_emit_before (loop, 0, v->insn, seq);
+ }
else
{
/* If it wasn't a reg, create a pseudo and use that. */
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22239