1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3
4 extern void abort (void);
5
6 /* This series of tests looks for the optimization:
7 x = (a >= b) + c + d
8 =>
9 cmp a, b
10 adc x, c, d
11 */
12
13 unsigned long
ltu_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)14 ltu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
15 {
16 return (a < b) + c + d;
17 }
18
19 unsigned long
gtu_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)20 gtu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
21 {
22 return (a > b) + c + d;
23 }
24
25 unsigned long
leu_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)26 leu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
27 {
28 return (a <= b) + c + d;
29 }
30
31 unsigned long
geu_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)32 geu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
33 {
34 return (a >= b) + c + d;
35 }
36
37 unsigned long
equ_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)38 equ_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
39 {
40 return (a == b) + c + d;
41 }
42
43 unsigned long
neu_add(unsigned long a,unsigned long b,unsigned long c,unsigned long d)44 neu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
45 {
46 return (a != b) + c + d;
47 }
48
49 long
lt_add(long a,long b,long c,long d)50 lt_add ( long a, long b, long c, long d)
51 {
52 return (a < b) + c + d;
53 }
54
55 long
gt_add(long a,long b,long c,long d)56 gt_add ( long a, long b, long c, long d)
57 {
58 return (a > b) + c + d;
59 }
60
61 long
le_add(long a,long b,long c,long d)62 le_add ( long a, long b, long c, long d)
63 {
64 return (a <= b) + c + d;
65 }
66
67 long
ge_add(long a,long b,long c,long d)68 ge_add ( long a, long b, long c, long d)
69 {
70 return (a >= b) + c + d;
71 }
72
73 long
eq_add(long a,long b,long c,long d)74 eq_add ( long a, long b, long c, long d)
75 {
76 return (a == b) + c + d;
77 }
78
79 long
ne_add(long a,long b,long c,long d)80 ne_add ( long a, long b, long c, long d)
81 {
82 return (a != b) + c + d;
83 }
84
85
86 int
main()87 main ()
88 {
89 if (ltu_add(1,2,3,4) != 8)
90 {
91 abort();
92 }
93
94 if (ltu_add(2,2,3,4) != 7)
95 {
96 abort();
97 }
98
99 if (ltu_add(3,2,3,4) != 7)
100 {
101 abort();
102 }
103
104 if (gtu_add(2,1,3,4) != 8)
105 {
106 abort();
107 }
108
109 if (gtu_add(2,2,3,4) != 7)
110 {
111 abort();
112 }
113
114 if (gtu_add(1,2,3,4) != 7)
115 {
116 abort();
117 }
118
119 if (leu_add(1,2,3,4) != 8)
120 {
121 abort();
122 }
123
124 if (leu_add(2,2,3,4) != 8)
125 {
126 abort();
127 }
128
129 if (leu_add(3,2,3,4) != 7)
130 {
131 abort();
132 }
133
134 if (leu_add(2,1,3,4) != 7)
135 {
136 abort();
137 }
138
139 if (geu_add(2,1,3,4) != 8)
140 {
141 abort();
142 }
143 if (geu_add(2,2,3,4) != 8)
144 {
145 abort();
146 }
147
148 if (geu_add(1,2,3,4) != 7)
149 {
150 abort();
151 }
152
153 if (equ_add(1,2,3,4) != 7)
154 {
155 abort();
156 }
157
158 if (equ_add(2,2,3,4) != 8)
159 {
160 abort();
161 }
162
163 if (equ_add(3,2,3,4) != 7)
164 {
165 abort();
166 }
167
168 if (neu_add(1,2,3,4) != 8)
169 {
170 abort();
171 }
172
173 if (neu_add(2,2,3,4) != 7)
174 {
175 abort();
176 }
177
178 if (neu_add(3,2,3,4) != 8)
179 {
180 abort();
181 }
182
183 if (lt_add(1,2,3,4) != 8)
184 {
185 abort();
186 }
187
188 if (lt_add(2,2,3,4) != 7)
189 {
190 abort();
191 }
192
193 if (lt_add(3,2,3,4) != 7)
194 {
195 abort();
196 }
197
198 if (gt_add(2,1,3,4) != 8)
199 {
200 abort();
201 }
202
203 if (gt_add(2,2,3,4) != 7)
204 {
205 abort();
206 }
207
208 if (gt_add(1,2,3,4) != 7)
209 {
210 abort();
211 }
212
213 if (le_add(1,2,3,4) != 8)
214 {
215 abort();
216 }
217
218 if (le_add(2,2,3,4) != 8)
219 {
220 abort();
221 }
222
223 if (le_add(3,2,3,4) != 7)
224 {
225 abort();
226 }
227
228 if (le_add(2,1,3,4) != 7)
229 {
230 abort();
231 }
232
233 if (ge_add(2,1,3,4) != 8)
234 {
235 abort();
236 }
237 if (ge_add(2,2,3,4) != 8)
238 {
239 abort();
240 }
241
242 if (ge_add(1,2,3,4) != 7)
243 {
244 abort();
245 }
246
247 if (eq_add(1,2,3,4) != 7)
248 {
249 abort();
250 }
251
252 if (eq_add(2,2,3,4) != 8)
253 {
254 abort();
255 }
256
257 if (eq_add(3,2,3,4) != 7)
258 {
259 abort();
260 }
261
262 if (ne_add(1,2,3,4) != 8)
263 {
264 abort();
265 }
266
267 if (ne_add(2,2,3,4) != 7)
268 {
269 abort();
270 }
271
272 if (ne_add(3,2,3,4) != 8)
273 {
274 abort();
275 }
276 return 0;
277 }
278