[patch] Crossjumping corrupts alias info
Andreas Krebbel
krebbel1@de.ibm.com
Fri Mar 19 08:14:00 GMT 2004
Hi,
the included testcase fails without the patch.
Bye,
Andreas
2004-03-05 Andreas Krebbel <krebbel1@de.ibm.com>
* gcc.dg/20040305-1.c: New test.
*** /dev/null Wed Jan 28 15:57:09 2004
--- gcc/testsuite/gcc.dg/20040305-1.c Fri Mar 5 15:04:44 2004
***************
*** 0 ****
--- 1,50 ----
+
+ /* The testcase failed due to corrupted alias information.
+ During the crossjump analyzing step the mem alias info of the
+ st instructions are merged and get copied during basic block
+ reordering which leads to an insn with wrong alias info.
+ The scheduler afterwards exchanges the mvc and st instructions
+ not recognizing the anti dependence. */
+ /* { dg-do run { target s390-*-* } } */
+ /* { dg-options "-O3 -mtune=z990 -fno-inline" } */
+
+ int f;
+ int g;
+ int h;
+
+ int* x = &f;
+ int* p1 = &g;
+ int* p2 = &h;
+
+ int
+ foo(void)
+ {
+
+ if (*x == 0)
+ {
+ x = p1; /* mvc - memory to memory */
+ p1 = (int*)0; /* st - register to memory */
+ return 1;
+ }
+ if (*x == 5)
+ {
+ f = 1;
+ g = 2;
+
+ p2 = (int*)0; /* st */
+ return 1;
+ }
+ }
+
+ int
+ main (int argc, char** argv)
+ {
+ foo ();
+
+ /* If the scheduler has exchanged the mvc and st instructions,
+ x is 0. The expected result is &g. */
+ if (x == &g)
+ exit (0);
+ else
+ abort ();
+ }
More information about the Gcc-patches
mailing list