comparison gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
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" } } */
9
10 enum STATE {
11 S0=0,
12 SI,
13 S1,
14 S2,
15 S3,
16 S4,
17 S5,
18 S6
19 };
20
21 int bar (enum STATE s);
22
23 enum STATE foo (unsigned char **y, unsigned *c)
24 {
25 unsigned char *x = *y;
26 unsigned char n;
27 enum STATE s = S0;
28
29 for( ; *x && s != SI; x++ )
30 {
31 n = *x;
32 if (n == 'x')
33 {
34 x++;
35 break;
36 }
37 switch(s)
38 {
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
47 {
48 s = SI;
49 c[SI]++;
50 }
51 c[S0]++;
52 break;
53 case S1:
54 if(bar(n))
55 {
56 s = S3;
57 c[S1]++;
58 }
59 else if( n == 'c' )
60 {
61 s = S4;
62 c[S1]++;
63 }
64 else
65 {
66 s = SI;
67 c[S1]++;
68 }
69 break;
70 case S3:
71 if( n == 'c' )
72 {
73 s = S4;
74 c[S3]++;
75 }
76 else if(!bar(n))
77 {
78 s = SI;
79 c[S3]++;
80 }
81 break;
82 case S4:
83 if( n == 'E' || n == 'e' )
84 {
85 s = S2;
86 c[S4]++;
87 }
88 else if(!bar(n))
89 {
90 s = SI;
91 c[S4]++;
92 }
93 break;
94 case S2:
95 if( n == 'a' || n == 'b' )
96 {
97 s = S5;
98 c[S2]++;
99 }
100 else
101 {
102 s = SI;
103 c[S2]++;
104 }
105 break;
106 case S5:
107 if(bar(n))
108 {
109 s = S6;
110 c[S5]++;
111 }
112 else
113 {
114 s = SI;
115 c[S5]++;
116 }
117 break;
118 case S6:
119 if(!bar(n))
120 {
121 s = SI;
122 c[SI]++;
123 }
124 break;
125 default:
126 break;
127 }
128 }
129 *y=x;
130 return s;
131 }