1
2 /* The testcase failed due to corrupted alias information.
3 During the crossjump analyzing step the mem alias info of the
4 st instructions are merged and get copied during basic block
5 reordering which leads to an insn with wrong alias info.
6 The scheduler afterwards exchanges the mvc and st instructions
7 not recognizing the anti dependence. */
8 /* { dg-do run } */
9 /* { dg-options "-O3 -mtune=z990 -fno-inline" } */
10
11 extern void exit (int);
12 extern void abort (void);
13
14 int f;
15 int g;
16 int h;
17
18 int* x = &f;
19 int* p1 = &g;
20 int* p2 = &h;
21
22 int
foo(void)23 foo(void)
24 {
25
26 if (*x == 0)
27 {
28 x = p1; /* mvc - memory to memory */
29 p1 = (int*)0; /* st - register to memory */
30 return 1;
31 }
32 if (*x == 5)
33 {
34 f = 1;
35 g = 2;
36
37 p2 = (int*)0; /* st */
38 return 1;
39 }
40 }
41
42 int
main(int argc,char ** argv)43 main (int argc, char** argv)
44 {
45 foo ();
46
47 /* If the scheduler has exchanged the mvc and st instructions,
48 x is 0. The expected result is &g. */
49 if (x == &g)
50 exit (0);
51 else
52 abort ();
53 }
54