This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Crossjumping corrupts alias info


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 ();
+ }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]