PR tree-optimization/81303
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ssa-dom-thread-7.c
blob9a9d1cb7cf7cec17b6be7adff5dd6bcdba95e72d
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-thread1-stats -fdump-tree-thread2-stats -fdump-tree-dom2-stats -fdump-tree-thread3-stats -fdump-tree-dom3-stats -fdump-tree-vrp2-stats -fno-guess-branch-probability" } */
3 /* { dg-final { scan-tree-dump "Jumps threaded: 16" "thread1" } } */
4 /* { dg-final { scan-tree-dump "Jumps threaded: 9" "thread2" } } */
5 /* { dg-final { scan-tree-dump "Jumps threaded: 3" "thread3" } } */
6 /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom2" } } */
7 /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" } } */
8 /* { dg-final { scan-tree-dump-not "Jumps threaded" "vrp2" } } */
10 enum STATE {
11 S0=0,
12 SI,
13 S1,
14 S2,
15 S3,
16 S4,
17 S5,
21 int bar (enum STATE s);
23 enum STATE foo (unsigned char **y, unsigned *c)
25 unsigned char *x = *y;
26 unsigned char n;
27 enum STATE s = S0;
29 for( ; *x && s != SI; x++ )
31 n = *x;
32 if (n == 'x')
34 x++;
35 break;
37 switch(s)
39 case S0:
40 if(bar(n))
41 s = S3;
42 else if( n == 'a' || n == 'b' )
43 s = S1;
44 else if( n == 'c' )
45 s = S4;
46 else
48 s = SI;
49 c[SI]++;
51 c[S0]++;
52 break;
53 case S1:
54 if(bar(n))
56 s = S3;
57 c[S1]++;
59 else if( n == 'c' )
61 s = S4;
62 c[S1]++;
64 else
66 s = SI;
67 c[S1]++;
69 break;
70 case S3:
71 if( n == 'c' )
73 s = S4;
74 c[S3]++;
76 else if(!bar(n))
78 s = SI;
79 c[S3]++;
81 break;
82 case S4:
83 if( n == 'E' || n == 'e' )
85 s = S2;
86 c[S4]++;
88 else if(!bar(n))
90 s = SI;
91 c[S4]++;
93 break;
94 case S2:
95 if( n == 'a' || n == 'b' )
97 s = S5;
98 c[S2]++;
100 else
102 s = SI;
103 c[S2]++;
105 break;
106 case S5:
107 if(bar(n))
109 s = S6;
110 c[S5]++;
112 else
114 s = SI;
115 c[S5]++;
117 break;
118 case S6:
119 if(!bar(n))
121 s = SI;
122 c[SI]++;
124 break;
125 default:
126 break;
129 *y=x;
130 return s;