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