+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.
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:
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:
+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.
--- /dev/null
+/* 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;
+ }
+}