This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: 3.0.1 Freeze
- To: Richard Henderson <rth at redhat dot com>
- Subject: Re: 3.0.1 Freeze
- From: Roman Zippel <zippel at linux-m68k dot org>
- Date: Fri, 10 Aug 2001 00:26:57 +0200 (CEST)
- cc: Mark Mitchell <mark at codesourcery dot com>, <gcc at gcc dot gnu dot org>
Hi,
On Wed, 8 Aug 2001, Richard Henderson wrote:
> /* Note that single_set ignores parts of a parallel set for
> which one of the destinations is REG_UNUSED. We can't
> handle that here, since we can wind up rewriting things
> such that a single register is set twice within a single
> parallel. */
> if (reg_set_p (src, insn))
> continue;
>
> would be a lot safer. And could go on the 3.0 branch without ifdefs,
> since it does nothing but disable optimization for particular instances.
Ok, here is the patch for it. It bootstrapped it successfully, check is
still running, but it's past anything critical now.
I also bootstrapped/tested it successfully on linux-i686.
bye, Roman
2001-08-10 Roman Zippel <zippel@linux-m68k.org>
Richard Henderson <rth@redhat.com>
* regmove.c (regmove_optimize): avoid setting a register twice in
a parallel set
Index: gcc/regmove.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/regmove.c,v
retrieving revision 1.96.2.6
diff -u -r1.96.2.6 regmove.c
--- regmove.c 2001/05/14 16:31:46 1.96.2.6
+++ regmove.c 2001/08/09 21:59:54
@@ -1306,6 +1306,14 @@
if (! set)
continue;
+ /* Note that single_set ignores parts of a parallel set for
+ which one of the destinations is REG_UNUSED. We can't
+ handle that here, since we can wind up rewriting things
+ such that a single register is set twice within a single
+ parallel. */
+ if (reg_set_p (src, insn))
+ continue;
+
/* match_no/dst must be a write-only operand, and
operand_operand/src must be a read-only operand. */
if (match.use[op_no] != READ