4
4
5
5
// RUN: %clang_cc1 -triple x86_64-unknown-unknown \
6
6
// RUN: "-ffp-builtin-accuracy=high:[acosf,cos,pow] low:[tan] medium:[sincos,log10]" \
7
- // RUN: -Wno-return-type -Wno-implicit-function-declaration -emit-llvm -o - %s \
8
- // RUN: | FileCheck --check-prefix=CHECK-F1 %s
7
+ // RUN: -Wno-return-type -Wno-implicit-function-declaration \
8
+ // RUN: -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-F1 %s
9
9
10
10
// RUN: %clang_cc1 -triple x86_64-unknown-unknown \
11
11
// RUN: "-ffp-builtin-accuracy=medium high:[tan] cuda:[cos]" \
12
12
// RUN: -Wno-return-type -Wno-implicit-function-declaration -emit-llvm -o - %s \
13
13
// RUN: | FileCheck --check-prefix=CHECK-F2 %s
14
14
15
- // RUN: %clang_cc1 -triple x86_64-unknown-unknown \
15
+ // RUN: %clang_cc1 -triple x86_64-unknown-unknown \
16
16
// RUN: "-ffp-builtin-accuracy=high low:[tan] medium:[sincos,log10]" \
17
17
// RUN: -Wno-return-type -Wno-implicit-function-declaration -emit-llvm -o - %s \
18
18
// RUN: | FileCheck --check-prefix=CHECK-F3 %s
19
19
20
+ // RUN: %clang_cc1 -triple x86_64-unknown-unknown \
21
+ // RUN: "-ffp-builtin-accuracy=high:sin medium" -Wno-return-type \
22
+ // RUN: -Wno-implicit-function-declaration -emit-llvm -o - %s \
23
+ // RUN: | FileCheck --check-prefixes=CHECK-F4 %s
24
+
25
+ // RUN: %clang_cc1 -triple x86_64-unknown-unknown \
26
+ // RUN: "-ffp-builtin-accuracy=medium:[sin,cos] high:[sin,tan]" \
27
+ // RUN: -Wno-return-type -Wno-implicit-function-declaration \
28
+ // RUN: -emit-llvm -o - %s | FileCheck --check-prefixes=CHECK-F5 %s
29
+
30
+ // RUN: %clang_cc1 -triple x86_64-unknown-unknown \
31
+ // RUN: "-ffp-builtin-accuracy=medium high:[sin,atan]" \
32
+ // RUN: -Wno-return-type -Wno-implicit-function-declaration \
33
+ // RUN: -emit-llvm -o - %s | FileCheck --check-prefixes=CHECK-F6 %s
34
+
20
35
// RUN: %clang_cc1 -triple spir64-unknown-unknown -ffp-builtin-accuracy=sycl \
21
36
// RUN: -D SPIR -Wno-implicit-function-declaration -emit-llvm -o - %s \
22
37
// RUN: | FileCheck --check-prefix=CHECK-SPIR %s
@@ -192,6 +207,115 @@ double rsqrt(double);
192
207
// CHECK-F3: attributes #[[ATTR_F3_MEDIUM]] = {{.*}}"fpbuiltin-max-error"="4.0"
193
208
// CHECK-F3: attributes #[[ATTR_F3_LOW]] = {{.*}}"fpbuiltin-max-error"="67108864.0"
194
209
//
210
+ // CHECK-LABEL-F4: define dso_local void @f1
211
+ // CHECK-F4: call double @llvm.fpbuiltin.acos.f64(double %conv) #[[ATTR_F4_MEDIUM:[0-9]+]]
212
+ // CHECK-F4: call double @llvm.fpbuiltin.acosh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
213
+ // CHECK-F4: call double @llvm.fpbuiltin.asin.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
214
+ // CHECK-F4: call double @llvm.fpbuiltin.asinh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
215
+ // CHECK-F4: call double @llvm.fpbuiltin.atan.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
216
+ // CHECK-F4: call double @llvm.fpbuiltin.atan2.f64(double {{.*}}, double {{.*}}) #[[ATTR_F4_MEDIUM]]
217
+ // CHECK-F4: call double @llvm.fpbuiltin.atanh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
218
+ // CHECK-F4: call double @llvm.fpbuiltin.cos.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
219
+ // CHECK-F4: call double @llvm.fpbuiltin.cosh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
220
+ // CHECK-F4: call double @llvm.fpbuiltin.erf.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
221
+ // CHECK-F4: call double @llvm.fpbuiltin.erfc.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
222
+ // CHECK-F4: call double @llvm.fpbuiltin.exp.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
223
+ // CHECK-F4: call double @llvm.fpbuiltin.exp10.f64(double {{.*}})
224
+ // CHECK-F4: call double @llvm.fpbuiltin.exp2.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
225
+ // CHECK-F4: call double @llvm.fpbuiltin.expm1.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
226
+ // CHECK-F4: call double @llvm.fpbuiltin.fadd.f64(double {{.*}}, double {{.*}})
227
+ // CHECK-F4: call double @llvm.fpbuiltin.fdiv.f64(double {{.*}}, double {{.*}})
228
+ // CHECK-F4: call double @llvm.fpbuiltin.fmul.f64(double {{.*}}, double {{.*}})
229
+ // CHECK-F4: call double @llvm.fpbuiltin.frem.f64(double {{.*}}, double {{.*}})
230
+ // CHECK-F4: call double @llvm.fpbuiltin.fsub.f64(double {{.*}}, double {{.*}})
231
+ // CHECK-F4: call double @llvm.fpbuiltin.hypot.f64(double {{.*}}, double {{.*}}) #[[ATTR_F4_MEDIUM]]
232
+ // CHECK-F4: call double @llvm.fpbuiltin.ldexp.f64(double {{.*}}, i32 {{.*}}) #[[ATTR_F4_MEDIUM]]
233
+ // CHECK-F4: call double @llvm.fpbuiltin.log.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
234
+ // CHECK-F4: call double @llvm.fpbuiltin.log10.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
235
+ // CHECK-F4: call double @llvm.fpbuiltin.log1p.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
236
+ // CHECK-F4: call double @llvm.fpbuiltin.log2.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
237
+ // CHECK-F4: call double @llvm.fpbuiltin.pow.f64(double {{.*}}, double {{.*}}) #[[ATTR_F4_MEDIUM]]
238
+ // CHECK-F4: call double @llvm.fpbuiltin.rsqrt.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
239
+ // CHECK-F4: call double @llvm.fpbuiltin.sin.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
240
+ // CHECK-F4: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr %p1, ptr %p2)
241
+ // CHECK-F4: call double @llvm.fpbuiltin.sinh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
242
+ // CHECK-F4: call double @llvm.fpbuiltin.sqrt.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
243
+ // CHECK-F4: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
244
+ // CHECK-F4: call double @llvm.fpbuiltin.tanh.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
245
+ //
246
+ // CHECK-F5-LABEL: define dso_local void @f1(
247
+ // CHECK-F5: call double @acos(double noundef {{.*}})
248
+ // CHECK-F5: call double @acosh(double noundef {{.*}})
249
+ // CHECK-F5: call double @asin(double noundef {{.*}})
250
+ // CHECK-F5: call double @asinh(double noundef {{.*}})
251
+ // CHECK-F5: call double @atan(double noundef {{.*}})
252
+ // CHECK-F5: call double @atan2(double noundef {{.*}}, double noundef {{.*}})
253
+ // CHECK-F5: call double @atanh(double noundef {{.*}})
254
+ // CHECK-F5: call double @llvm.fpbuiltin.cos.f64(double {{.*}}) #[[ATTR_F5_MEDIUM:[0-9]+]]
255
+ // CHECK-F5: call double @cosh(double noundef {{.*}})
256
+ // CHECK-F5: call double @erf(double noundef {{.*}})
257
+ // CHECK-F5: call double @erfc(double noundef {{.*}})
258
+ // CHECK-F5: call double @llvm.exp.f64(double {{.*}})
259
+ // CHECK-F5: call i32 (double, ...) @exp10(double noundef {{.*}})
260
+ // CHECK-F5: call double @llvm.exp2.f64(double {{.*}})
261
+ // CHECK-F5: call double @expm1(double noundef {{.*}})
262
+ // CHECK-F5: call i32 (double, double, ...) @fadd(double noundef {{.*}}, double noundef {{.*}})
263
+ // CHECK-F5: call i32 (double, double, ...) @fdiv(double noundef {{.*}}, double noundef {{.*}})
264
+ // CHECK-F5: call i32 (double, double, ...) @fmul(double noundef {{.*}}, double noundef {{.*}})
265
+ // CHECK-F5: call i32 (double, double, ...) @frem(double noundef {{.*}}, double noundef {{.*}})
266
+ // CHECK-F5: call i32 (double, double, ...) @fsub(double noundef {{.*}}, double noundef {{.*}})
267
+ // CHECK-F5: call double @hypot(double noundef {{.*}}, double noundef {{.*}})
268
+ // CHECK-F5: call double @ldexp(double noundef {{.*}}, i32 noundef {{.*}})
269
+ // CHECK-F5: call double @llvm.log.f64(double {{.*}})
270
+ // CHECK-F5: call double @llvm.log10.f64(double {{.*}})
271
+ // CHECK-F5: call double @log1p(double noundef {{.*}})
272
+ // CHECK-F5: call double @llvm.log2.f64(double {{.*}})
273
+ // CHECK-F5: call double @llvm.pow.f64(double {{.*}}, double {{.*}})
274
+ // CHECK-F5: call i32 (double, ...) @rsqrt(double noundef {{.*}})
275
+ // CHECK-F5: call double @llvm.fpbuiltin.sin.f64(double {{.*}}) #[[ATTR_F5_HIGH:[0-9]+]]
276
+ // CHECK-F5: call i32 (double, ptr, ptr, ...) @sincos(double noundef {{.*}}, ptr noundef {{.*}}, ptr noundef {{.*}})
277
+ // CHECK-F5: call double @sinh(double noundef {{.*}})
278
+ // CHECK-F5: call double @llvm.sqrt.f64(double {{.*}})
279
+ // CHECK-F5: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F5_HIGH]]
280
+ // CHECK-F5: call double @tanh(double noundef {{.*}})
281
+ //
282
+ //
283
+ // CHECK-F6-LABEL: define dso_local void @f1(
284
+ // CHECK-F6: call double @llvm.fpbuiltin.acos.f64(double {{.*}}) #[[ATTR_F6_MEDIUM:[0-9]+]]
285
+ // CHECK-F6: call double @llvm.fpbuiltin.acosh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
286
+ // CHECK-F6: call double @llvm.fpbuiltin.asin.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
287
+ // CHECK-F6: call double @llvm.fpbuiltin.asinh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
288
+ // CHECK-F6: call double @llvm.fpbuiltin.atan.f64(double {{.*}}) #[[ATTR_F6_HIGH:[0-9]+]]
289
+ // CHECK-F6: call double @llvm.fpbuiltin.atan2.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
290
+ // CHECK-F6: call double @llvm.fpbuiltin.atanh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
291
+ // CHECK-F6: call double @llvm.fpbuiltin.cos.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
292
+ // CHECK-F6: call double @llvm.fpbuiltin.cosh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
293
+ // CHECK-F6: call double @llvm.fpbuiltin.erf.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
294
+ // CHECK-F6: call double @llvm.fpbuiltin.erfc.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
295
+ // CHECK-F6: call double @llvm.fpbuiltin.exp.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
296
+ // CHECK-F6: call double @llvm.fpbuiltin.exp10.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
297
+ // CHECK-F6: call double @llvm.fpbuiltin.exp2.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
298
+ // CHECK-F6: call double @llvm.fpbuiltin.expm1.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
299
+ // CHECK-F6: call double @llvm.fpbuiltin.fadd.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
300
+ // CHECK-F6: call double @llvm.fpbuiltin.fdiv.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
301
+ // CHECK-F6: call double @llvm.fpbuiltin.fmul.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
302
+ // CHECK-F6: call double @llvm.fpbuiltin.frem.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
303
+ // CHECK-F6: call double @llvm.fpbuiltin.fsub.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
304
+ // CHECK-F6: call double @llvm.fpbuiltin.hypot.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
305
+ // CHECK-F6: call double @llvm.fpbuiltin.ldexp.f64(double {{.*}}, i32 {{.*}}) #[[ATTR_F6_MEDIUM]]
306
+ // CHECK-F6: call double @llvm.fpbuiltin.log.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
307
+ // CHECK-F6: call double @llvm.fpbuiltin.log10.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
308
+ // CHECK-F6: call double @llvm.fpbuiltin.log1p.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
309
+ // CHECK-F6: call double @llvm.fpbuiltin.log2.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
310
+ // CHECK-F6: call double @llvm.fpbuiltin.pow.f64(double {{.*}}, double {{.*}}) #[[ATTR_F6_MEDIUM]]
311
+ // CHECK-F6: call double @llvm.fpbuiltin.rsqrt.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
312
+ // CHECK-F6: call double @llvm.fpbuiltin.sin.f64(double {{.*}}) #[[ATTR_F6_HIGH]]
313
+ // CHECK-F6: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr {{.*}}, ptr {{.*}}) #[[ATTR_F6_MEDIUM]]
314
+ // CHECK-F6: call double @llvm.fpbuiltin.sinh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
315
+ // CHECK-F6: call double @llvm.fpbuiltin.sqrt.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
316
+ // CHECK-F6: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
317
+ // CHECK-F6: call double @llvm.fpbuiltin.tanh.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
318
+ //
195
319
// CHECK-SPIR-LABEL: define dso_local spir_func void @f1
196
320
// CHECK-SPIR: call double @llvm.fpbuiltin.acos.f64(double {{.*}}) #[[ATTR_SYCL1:[0-9]+]]
197
321
// CHECK-SPIR: call double @llvm.fpbuiltin.acosh.f64(double {{.*}}) #[[ATTR_SYCL1]]
@@ -290,6 +414,36 @@ void f1(float a, float b) {
290
414
// CHECK-F2: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr {{.*}}, ptr {{.*}}) #[[ATTR_F2_MEDIUM]]
291
415
// CHECK-F2: call float @tanf(float noundef {{.*}})
292
416
//
417
+ // CHECK-LABEL-F4: define dso_local void @f2
418
+ // CHECK-F4: call float @llvm.fpbuiltin.cos.f32(float {{.*}}) #[[ATTR_F4_MEDIUM]]
419
+ // CHECK-F4: call float @llvm.fpbuiltin.sin.f32(float {{.*}}) #[[ATTR_F4_MEDIUM]]
420
+ // CHECK-F4: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
421
+ // CHECK-F4: call double @llvm.fpbuiltin.log10.f64(double {{.*}}) #[[ATTR_F4_MEDIUM]]
422
+ // CHECK-F4: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr {{.*}}, ptr {{.*}}) #[[ATTR_F4_MEDIUM]]
423
+ // CHECK-F4: call float @tanf(float {{.*}})
424
+ //
425
+ // CHECK-F5-LABEL: define dso_local void @f2(
426
+ // CHECK-F5: call float @llvm.cos.f32(float {{.*}})
427
+ // CHECK-F5: call float @llvm.sin.f32(float {{.*}})
428
+ // CHECK-F5: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F5_HIGH]]
429
+ // CHECK-F5: call double @llvm.log10.f64(double {{.*}})
430
+ // CHECK-F5: call i32 (double, ptr, ptr, ...) @sincos(double noundef {{.*}}, ptr noundef {{.*}}, ptr noundef {{.*}})
431
+ // CHECK-F5: call float @tanf(float noundef {{.*}})
432
+ //
433
+ // CHECK-F5: attributes #[[ATTR_F5_MEDIUM]] = {{.*}}"fpbuiltin-max-error"="4.0"
434
+ // CHECK-F5: attributes #[[ATTR_F5_HIGH]] = {{.*}}"fpbuiltin-max-error"="1.0"
435
+ //
436
+ // CHECK-F6-LABEL: define dso_local void @f2(
437
+ // CHECK-F6: call float @llvm.fpbuiltin.cos.f32(float {{.*}}) #[[ATTR_F6_MEDIUM]]
438
+ // CHECK-F6: call float @llvm.fpbuiltin.sin.f32(float {{.*}}) #[[ATTR_F6_MEDIUM]]
439
+ // CHECK-F6: call double @llvm.fpbuiltin.tan.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
440
+ // CHECK-F6: call double @llvm.fpbuiltin.log10.f64(double {{.*}}) #[[ATTR_F6_MEDIUM]]
441
+ // CHECK-F6: call void @llvm.fpbuiltin.sincos.f64(double {{.*}}, ptr {{.*}}, ptr {{.*}}) #[[ATTR_F6_MEDIUM]]
442
+ // CHECK-F6: call float @tanf(float noundef {{.*}}) #[[ATTR8:[0-9]+]]
443
+ //
444
+ // CHECK-F6: attributes #[[ATTR_F6_MEDIUM]] = {{.*}}"fpbuiltin-max-error"="4.0"
445
+ // CHECK-F6: attributes #[[ATTR_F6_HIGH]] = {{.*}}"fpbuiltin-max-error"="1.0"
446
+ //
293
447
// CHECK-SPIR-LABEL: define dso_local spir_func void @f2
294
448
// CHECK-SPIR: call float @llvm.fpbuiltin.cos.f32(float {{.*}}) #[[ATTR_SYCL1]]
295
449
// CHECK-SPIR: call float @llvm.fpbuiltin.sin.f32(float {{.*}}) #[[ATTR_SYCL1]]
@@ -302,6 +456,7 @@ void f1(float a, float b) {
302
456
// CHECK: call float @fake_exp10(float {{.*}})
303
457
// CHECK-F1: call float @fake_exp10(float {{.*}})
304
458
// CHECK-F2: call float @fake_exp10(float {{.*}})
459
+
305
460
// CHECK-SPIR-LABEL: define dso_local spir_func void @f3
306
461
// CHECK-SPIR: call spir_func float @fake_exp10(float {{.*}})
307
462
0 commit comments