blob: 27540c78f77e4d8c491b6d8a10c3af71fdbd2d81 [file] [log] [blame]
Chandler Carrutha216cad2014-10-11 00:57:18 +00001// RUN: %clang_cc1 %s -O1 -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=X86
Chandler Carruth686de242014-10-11 09:24:41 +00002// RUN: %clang_cc1 %s -O1 -emit-llvm -triple x86_64-pc-win64 -o - | FileCheck %s --check-prefix=X86
3// RUN: %clang_cc1 %s -O1 -emit-llvm -triple i686-unknown-unknown -o - | FileCheck %s --check-prefix=X86
Chandler Carrutha216cad2014-10-11 00:57:18 +00004
5float _Complex add_float_rr(float a, float b) {
6 // X86-LABEL: @add_float_rr(
7 // X86: fadd
8 // X86-NOT: fadd
9 // X86: ret
10 return a + b;
11}
12float _Complex add_float_cr(float _Complex a, float b) {
13 // X86-LABEL: @add_float_cr(
14 // X86: fadd
15 // X86-NOT: fadd
16 // X86: ret
17 return a + b;
18}
19float _Complex add_float_rc(float a, float _Complex b) {
20 // X86-LABEL: @add_float_rc(
21 // X86: fadd
22 // X86-NOT: fadd
23 // X86: ret
24 return a + b;
25}
26float _Complex add_float_cc(float _Complex a, float _Complex b) {
27 // X86-LABEL: @add_float_cc(
28 // X86: fadd
29 // X86: fadd
30 // X86-NOT: fadd
31 // X86: ret
32 return a + b;
33}
34
35float _Complex sub_float_rr(float a, float b) {
36 // X86-LABEL: @sub_float_rr(
37 // X86: fsub
38 // X86-NOT: fsub
39 // X86: ret
40 return a - b;
41}
42float _Complex sub_float_cr(float _Complex a, float b) {
43 // X86-LABEL: @sub_float_cr(
44 // X86: fsub
45 // X86-NOT: fsub
46 // X86: ret
47 return a - b;
48}
49float _Complex sub_float_rc(float a, float _Complex b) {
50 // X86-LABEL: @sub_float_rc(
51 // X86: fsub
52 // X86: fsub float -0.{{0+}}e+00,
53 // X86-NOT: fsub
54 // X86: ret
55 return a - b;
56}
57float _Complex sub_float_cc(float _Complex a, float _Complex b) {
58 // X86-LABEL: @sub_float_cc(
59 // X86: fsub
60 // X86: fsub
61 // X86-NOT: fsub
62 // X86: ret
63 return a - b;
64}
65
66float _Complex mul_float_rr(float a, float b) {
67 // X86-LABEL: @mul_float_rr(
68 // X86: fmul
69 // X86-NOT: fmul
70 // X86: ret
71 return a * b;
72}
73float _Complex mul_float_cr(float _Complex a, float b) {
74 // X86-LABEL: @mul_float_cr(
75 // X86: fmul
76 // X86: fmul
77 // X86-NOT: fmul
78 // X86: ret
79 return a * b;
80}
81float _Complex mul_float_rc(float a, float _Complex b) {
82 // X86-LABEL: @mul_float_rc(
83 // X86: fmul
84 // X86: fmul
85 // X86-NOT: fmul
86 // X86: ret
87 return a * b;
88}
89float _Complex mul_float_cc(float _Complex a, float _Complex b) {
90 // X86-LABEL: @mul_float_cc(
91 // X86-NOT: fmul
Chandler Carruth686de242014-10-11 09:24:41 +000092 // X86: call {{.*}} @__mulsc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +000093 // X86: ret
94 return a * b;
95}
96
97float _Complex div_float_rr(float a, float b) {
98 // X86-LABEL: @div_float_rr(
99 // X86: fdiv
100 // X86-NOT: fdiv
101 // X86: ret
102 return a / b;
103}
104float _Complex div_float_cr(float _Complex a, float b) {
105 // X86-LABEL: @div_float_cr(
106 // X86: fdiv
107 // X86: fdiv
108 // X86-NOT: fdiv
109 // X86: ret
110 return a / b;
111}
112float _Complex div_float_rc(float a, float _Complex b) {
113 // X86-LABEL: @div_float_rc(
114 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000115 // X86: call {{.*}} @__divsc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000116 // X86: ret
117 return a / b;
118}
119float _Complex div_float_cc(float _Complex a, float _Complex b) {
120 // X86-LABEL: @div_float_cc(
121 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000122 // X86: call {{.*}} @__divsc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000123 // X86: ret
124 return a / b;
125}
126
127double _Complex add_double_rr(double a, double b) {
128 // X86-LABEL: @add_double_rr(
129 // X86: fadd
130 // X86-NOT: fadd
131 // X86: ret
132 return a + b;
133}
134double _Complex add_double_cr(double _Complex a, double b) {
135 // X86-LABEL: @add_double_cr(
136 // X86: fadd
137 // X86-NOT: fadd
138 // X86: ret
139 return a + b;
140}
141double _Complex add_double_rc(double a, double _Complex b) {
142 // X86-LABEL: @add_double_rc(
143 // X86: fadd
144 // X86-NOT: fadd
145 // X86: ret
146 return a + b;
147}
148double _Complex add_double_cc(double _Complex a, double _Complex b) {
149 // X86-LABEL: @add_double_cc(
150 // X86: fadd
151 // X86: fadd
152 // X86-NOT: fadd
153 // X86: ret
154 return a + b;
155}
156
157double _Complex sub_double_rr(double a, double b) {
158 // X86-LABEL: @sub_double_rr(
159 // X86: fsub
160 // X86-NOT: fsub
161 // X86: ret
162 return a - b;
163}
164double _Complex sub_double_cr(double _Complex a, double b) {
165 // X86-LABEL: @sub_double_cr(
166 // X86: fsub
167 // X86-NOT: fsub
168 // X86: ret
169 return a - b;
170}
171double _Complex sub_double_rc(double a, double _Complex b) {
172 // X86-LABEL: @sub_double_rc(
173 // X86: fsub
174 // X86: fsub double -0.{{0+}}e+00,
175 // X86-NOT: fsub
176 // X86: ret
177 return a - b;
178}
179double _Complex sub_double_cc(double _Complex a, double _Complex b) {
180 // X86-LABEL: @sub_double_cc(
181 // X86: fsub
182 // X86: fsub
183 // X86-NOT: fsub
184 // X86: ret
185 return a - b;
186}
187
188double _Complex mul_double_rr(double a, double b) {
189 // X86-LABEL: @mul_double_rr(
190 // X86: fmul
191 // X86-NOT: fmul
192 // X86: ret
193 return a * b;
194}
195double _Complex mul_double_cr(double _Complex a, double b) {
196 // X86-LABEL: @mul_double_cr(
197 // X86: fmul
198 // X86: fmul
199 // X86-NOT: fmul
200 // X86: ret
201 return a * b;
202}
203double _Complex mul_double_rc(double a, double _Complex b) {
204 // X86-LABEL: @mul_double_rc(
205 // X86: fmul
206 // X86: fmul
207 // X86-NOT: fmul
208 // X86: ret
209 return a * b;
210}
211double _Complex mul_double_cc(double _Complex a, double _Complex b) {
212 // X86-LABEL: @mul_double_cc(
213 // X86-NOT: fmul
Chandler Carruth686de242014-10-11 09:24:41 +0000214 // X86: call {{.*}} @__muldc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000215 // X86: ret
216 return a * b;
217}
218
219double _Complex div_double_rr(double a, double b) {
220 // X86-LABEL: @div_double_rr(
221 // X86: fdiv
222 // X86-NOT: fdiv
223 // X86: ret
224 return a / b;
225}
226double _Complex div_double_cr(double _Complex a, double b) {
227 // X86-LABEL: @div_double_cr(
228 // X86: fdiv
229 // X86: fdiv
230 // X86-NOT: fdiv
231 // X86: ret
232 return a / b;
233}
234double _Complex div_double_rc(double a, double _Complex b) {
235 // X86-LABEL: @div_double_rc(
236 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000237 // X86: call {{.*}} @__divdc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000238 // X86: ret
239 return a / b;
240}
241double _Complex div_double_cc(double _Complex a, double _Complex b) {
242 // X86-LABEL: @div_double_cc(
243 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000244 // X86: call {{.*}} @__divdc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000245 // X86: ret
246 return a / b;
247}
248
249long double _Complex add_long_double_rr(long double a, long double b) {
250 // X86-LABEL: @add_long_double_rr(
251 // X86: fadd
252 // X86-NOT: fadd
253 // X86: ret
254 return a + b;
255}
256long double _Complex add_long_double_cr(long double _Complex a, long double b) {
257 // X86-LABEL: @add_long_double_cr(
258 // X86: fadd
259 // X86-NOT: fadd
260 // X86: ret
261 return a + b;
262}
263long double _Complex add_long_double_rc(long double a, long double _Complex b) {
264 // X86-LABEL: @add_long_double_rc(
265 // X86: fadd
266 // X86-NOT: fadd
267 // X86: ret
268 return a + b;
269}
270long double _Complex add_long_double_cc(long double _Complex a, long double _Complex b) {
271 // X86-LABEL: @add_long_double_cc(
272 // X86: fadd
273 // X86: fadd
274 // X86-NOT: fadd
275 // X86: ret
276 return a + b;
277}
278
279long double _Complex sub_long_double_rr(long double a, long double b) {
280 // X86-LABEL: @sub_long_double_rr(
281 // X86: fsub
282 // X86-NOT: fsub
283 // X86: ret
284 return a - b;
285}
286long double _Complex sub_long_double_cr(long double _Complex a, long double b) {
287 // X86-LABEL: @sub_long_double_cr(
288 // X86: fsub
289 // X86-NOT: fsub
290 // X86: ret
291 return a - b;
292}
293long double _Complex sub_long_double_rc(long double a, long double _Complex b) {
294 // X86-LABEL: @sub_long_double_rc(
295 // X86: fsub
296 // X86: fsub x86_fp80 0xK8{{0+}},
297 // X86-NOT: fsub
298 // X86: ret
299 return a - b;
300}
301long double _Complex sub_long_double_cc(long double _Complex a, long double _Complex b) {
302 // X86-LABEL: @sub_long_double_cc(
303 // X86: fsub
304 // X86: fsub
305 // X86-NOT: fsub
306 // X86: ret
307 return a - b;
308}
309
310long double _Complex mul_long_double_rr(long double a, long double b) {
311 // X86-LABEL: @mul_long_double_rr(
312 // X86: fmul
313 // X86-NOT: fmul
314 // X86: ret
315 return a * b;
316}
317long double _Complex mul_long_double_cr(long double _Complex a, long double b) {
318 // X86-LABEL: @mul_long_double_cr(
319 // X86: fmul
320 // X86: fmul
321 // X86-NOT: fmul
322 // X86: ret
323 return a * b;
324}
325long double _Complex mul_long_double_rc(long double a, long double _Complex b) {
326 // X86-LABEL: @mul_long_double_rc(
327 // X86: fmul
328 // X86: fmul
329 // X86-NOT: fmul
330 // X86: ret
331 return a * b;
332}
333long double _Complex mul_long_double_cc(long double _Complex a, long double _Complex b) {
334 // X86-LABEL: @mul_long_double_cc(
335 // X86-NOT: fmul
Chandler Carruth686de242014-10-11 09:24:41 +0000336 // X86: call {{.*}} @__mulxc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000337 // X86: ret
338 return a * b;
339}
340
341long double _Complex div_long_double_rr(long double a, long double b) {
342 // X86-LABEL: @div_long_double_rr(
343 // X86: fdiv
344 // X86-NOT: fdiv
345 // X86: ret
346 return a / b;
347}
348long double _Complex div_long_double_cr(long double _Complex a, long double b) {
349 // X86-LABEL: @div_long_double_cr(
350 // X86: fdiv
351 // X86: fdiv
352 // X86-NOT: fdiv
353 // X86: ret
354 return a / b;
355}
356long double _Complex div_long_double_rc(long double a, long double _Complex b) {
357 // X86-LABEL: @div_long_double_rc(
358 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000359 // X86: call {{.*}} @__divxc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000360 // X86: ret
361 return a / b;
362}
363long double _Complex div_long_double_cc(long double _Complex a, long double _Complex b) {
364 // X86-LABEL: @div_long_double_cc(
365 // X86-NOT: fdiv
Chandler Carruth686de242014-10-11 09:24:41 +0000366 // X86: call {{.*}} @__divxc3(
Chandler Carrutha216cad2014-10-11 00:57:18 +0000367 // X86: ret
368 return a / b;
369}
Chandler Carruthb29a7432014-10-11 11:03:30 +0000370
371// Comparison operators don't rely on library calls or have interseting math
372// properties, but test that mixed types work correctly here.
373_Bool eq_float_cr(float _Complex a, float b) {
374 // X86-LABEL: @eq_float_cr(
375 // X86: fcmp oeq
376 // X86: fcmp oeq
377 // X86: and i1
378 // X86: ret
379 return a == b;
380}
381_Bool eq_float_rc(float a, float _Complex b) {
382 // X86-LABEL: @eq_float_rc(
383 // X86: fcmp oeq
384 // X86: fcmp oeq
385 // X86: and i1
386 // X86: ret
387 return a == b;
388}
389_Bool eq_float_cc(float _Complex a, float _Complex b) {
390 // X86-LABEL: @eq_float_cc(
391 // X86: fcmp oeq
392 // X86: fcmp oeq
393 // X86: and i1
394 // X86: ret
395 return a == b;
396}
397_Bool ne_float_cr(float _Complex a, float b) {
398 // X86-LABEL: @ne_float_cr(
399 // X86: fcmp une
400 // X86: fcmp une
401 // X86: or i1
402 // X86: ret
403 return a != b;
404}
405_Bool ne_float_rc(float a, float _Complex b) {
406 // X86-LABEL: @ne_float_rc(
407 // X86: fcmp une
408 // X86: fcmp une
409 // X86: or i1
410 // X86: ret
411 return a != b;
412}
413_Bool ne_float_cc(float _Complex a, float _Complex b) {
414 // X86-LABEL: @ne_float_cc(
415 // X86: fcmp une
416 // X86: fcmp une
417 // X86: or i1
418 // X86: ret
419 return a != b;
420}