+2002-01-29 Jakub Jelinek <jakub@redhat.com>
+
+ * cselib.c (cselib_record_sets): Use IF_THEN_ELSE result
+ in cselib_lookup.
+
2002-01-29 Aldy Hernandez <aldyh@redhat.com>
* rs6000.md ("*call_value_local32"): Remove constraints.
rtx src = sets[i].src;
if (cond)
src = gen_rtx_IF_THEN_ELSE (GET_MODE (src), cond, src, dest);
- sets[i].src_elt = cselib_lookup (sets[i].src, GET_MODE (dest), 1);
+ sets[i].src_elt = cselib_lookup (src, GET_MODE (dest), 1);
if (GET_CODE (dest) == MEM)
sets[i].dest_addr_elt = cselib_lookup (XEXP (dest, 0), Pmode, 1);
else
+2002-01-29 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/20020129-1.c: New test.
+
2002-01-29 Neil Booth <neil@daikokuya.demon.co.uk>
* gcc.c-torture/compile/20000224-1.c: Update.
--- /dev/null
+/* This testcase failed at -O2 on IA-64, because scheduling did not take
+ into account conditional execution when using cselib for alias
+ analysis. */
+
+struct D { int d1; struct D *d2; };
+struct C { struct D c1; long c2, c3, c4, c5, c6; };
+struct A { struct A *a1; struct C *a2; };
+struct B { struct C b1; struct A *b2; };
+
+extern void abort (void);
+extern void exit (int);
+
+void
+foo (struct B *x, struct B *y)
+{
+ if (x->b2 == 0)
+ {
+ struct A *a;
+
+ x->b2 = a = y->b2;
+ y->b2 = 0;
+ for (; a; a = a->a1)
+ a->a2 = &x->b1;
+ }
+
+ if (y->b2 != 0)
+ abort ();
+
+ if (x->b1.c3 == -1)
+ {
+ x->b1.c3 = y->b1.c3;
+ x->b1.c4 = y->b1.c4;
+ y->b1.c3 = -1;
+ y->b1.c4 = 0;
+ }
+
+ if (y->b1.c3 != -1)
+ abort ();
+}
+
+struct B x, y;
+
+int main ()
+{
+ y.b1.c1.d1 = 6;
+ y.b1.c3 = 145;
+ y.b1.c4 = 2448;
+ x.b1.c3 = -1;
+ foo (&x, &y);
+ exit (0);
+}