re PR rtl-optimization/15342 ([arm-linux] internal compiler error: in verify_local_live_at_start)

PR target/15342
	* regrename.c (scan_rtx): Treat the destinations of SETs and CLOBBERs
	as OP_INOUT if the instruction is predicated.

From-SVN: r90063
This commit is contained in:
Richard Sandiford 2004-11-04 14:08:16 +00:00 committed by Richard Sandiford
parent d46aed512e
commit 4e5813dd13
4 changed files with 33 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2004-11-04 Richard Sandiford <rsandifo@redhat.com>
PR target/15342
* regrename.c (scan_rtx): Treat the destinations of SETs and CLOBBERs
as OP_INOUT if the instruction is predicated.
2004-11-04 Kazu Hirata <kazu@cs.umass.edu>
* bitmap.h: Fix a comment typo. Follow spelling conventions.

View file

@ -667,7 +667,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl,
case SET:
scan_rtx (insn, &SET_SRC (x), cl, action, OP_IN, 0);
scan_rtx (insn, &SET_DEST (x), cl, action, OP_OUT, 0);
scan_rtx (insn, &SET_DEST (x), cl, action,
GET_CODE (PATTERN (insn)) == COND_EXEC ? OP_INOUT : OP_OUT, 0);
return;
case STRICT_LOW_PART:
@ -692,7 +693,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl,
gcc_unreachable ();
case CLOBBER:
scan_rtx (insn, &SET_DEST (x), cl, action, OP_OUT, 1);
scan_rtx (insn, &SET_DEST (x), cl, action,
GET_CODE (PATTERN (insn)) == COND_EXEC ? OP_INOUT : OP_OUT, 0);
return;
case EXPR_LIST:

View file

@ -1,3 +1,8 @@
2004-11-04 Richard Sandiford <rsandifo@redhat.com>
PR target/15342
* gcc.dg/20041104-1.c: New test.
2004-11-04 Giovanni Bajo <giovannibajo@gcc.gnu.org>
* g++.dg/template/nontype7.C: New test.

View file

@ -0,0 +1,18 @@
/* This testcase exposed the same bug as PR 15342. */
/* { dg-options "-O2 -frename-registers -fno-schedule-insns" } */
void *memcpy (void *, const void *, __SIZE_TYPE__);
void f (int n, int (*x)[4])
{
while (n--)
{
int f = x[0][0];
if (f <= 0)
memcpy (&x[1], &x[0], sizeof (x[0]));
else
memcpy (&x[f], &x[0], sizeof (x[0]));
f = x[0][2];
x[0][1] = f;
}
}