blob: b97cf1be348f188bf8beb70fb210f0cdb01f7530 [file] [log] [blame]
Erich Keanef02d6dd2019-12-16 07:18:18 -08001// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
2
3// test to ensure that these builtins don't do the variadic promotion of float->double.
4void test_floats(float f1, float f2) {
5 (void)__builtin_isgreater(f1, f2);
6 // CHECK: fcmp ogt float
7 // CHECK-NEXT: zext i1
8 (void)__builtin_isgreaterequal(f1, f2);
9 // CHECK: fcmp oge float
10 // CHECK-NEXT: zext i1
11 (void)__builtin_isless(f1, f2);
12 // CHECK: fcmp olt float
13 // CHECK-NEXT: zext i1
14 (void)__builtin_islessequal(f1, f2);
15 // CHECK: fcmp ole float
16 // CHECK-NEXT: zext i1
17 (void)__builtin_islessgreater(f1, f2);
18 // CHECK: fcmp one float
19 // CHECK-NEXT: zext i1
20 (void)__builtin_isunordered(f1, f2);
21 // CHECK: fcmp uno float
22 // CHECK-NEXT: zext i1
23}
24
25void test_doubles(double d1, double f2) {
26 (void)__builtin_isgreater(d1, f2);
27 // CHECK: fcmp ogt double
28 // CHECK-NEXT: zext i1
29 (void)__builtin_isgreaterequal(d1, f2);
30 // CHECK: fcmp oge double
31 // CHECK-NEXT: zext i1
32 (void)__builtin_isless(d1, f2);
33 // CHECK: fcmp olt double
34 // CHECK-NEXT: zext i1
35 (void)__builtin_islessequal(d1, f2);
36 // CHECK: fcmp ole double
37 // CHECK-NEXT: zext i1
38 (void)__builtin_islessgreater(d1, f2);
39 // CHECK: fcmp one double
40 // CHECK-NEXT: zext i1
41 (void)__builtin_isunordered(d1, f2);
42 // CHECK: fcmp uno double
43 // CHECK-NEXT: zext i1
44}
45
46void test_mixed(double d1, float f2) {
47 (void)__builtin_isgreater(d1, f2);
48 // CHECK: fpext float {{.*}} to double
49 // CHECK-NEXT: fcmp ogt double
50 // CHECK-NEXT: zext i1
51 (void)__builtin_isgreaterequal(d1, f2);
52 // CHECK: fpext float {{.*}} to double
53 // CHECK-NEXT: fcmp oge double
54 // CHECK-NEXT: zext i1
55 (void)__builtin_isless(d1, f2);
56 // CHECK: fpext float {{.*}} to double
57 // CHECK-NEXT: fcmp olt double
58 // CHECK-NEXT: zext i1
59 (void)__builtin_islessequal(d1, f2);
60 // CHECK: fpext float {{.*}} to double
61 // CHECK-NEXT: fcmp ole double
62 // CHECK-NEXT: zext i1
63 (void)__builtin_islessgreater(d1, f2);
64 // CHECK: fpext float {{.*}} to double
65 // CHECK-NEXT: fcmp one double
66 // CHECK-NEXT: zext i1
67 (void)__builtin_isunordered(d1, f2);
68 // CHECK: fpext float {{.*}} to double
69 // CHECK-NEXT: fcmp uno double
70 // CHECK-NEXT: zext i1
71}