Commit 4e5813dd by Richard Sandiford Committed by Richard Sandiford

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
parent d46aed51
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> 2004-11-04 Kazu Hirata <kazu@cs.umass.edu>
* bitmap.h: Fix a comment typo. Follow spelling conventions. * bitmap.h: Fix a comment typo. Follow spelling conventions.
......
...@@ -667,7 +667,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl, ...@@ -667,7 +667,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl,
case SET: case SET:
scan_rtx (insn, &SET_SRC (x), cl, action, OP_IN, 0); 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; return;
case STRICT_LOW_PART: case STRICT_LOW_PART:
...@@ -692,7 +693,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl, ...@@ -692,7 +693,8 @@ scan_rtx (rtx insn, rtx *loc, enum reg_class cl,
gcc_unreachable (); gcc_unreachable ();
case CLOBBER: 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; return;
case EXPR_LIST: case EXPR_LIST:
......
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> 2004-11-04 Giovanni Bajo <giovannibajo@gcc.gnu.org>
* g++.dg/template/nontype7.C: New test. * g++.dg/template/nontype7.C: New test.
......
/* 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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment