1
- // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - -DUSE_BUILTIN | FileCheck --check-prefix=NO-MATH-ERRNO %s
2
- // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - -DUSE_BUILTIN | FileCheck --check-prefix=MATH-ERRNO %s
3
- // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - -DUSE_C_DECL | FileCheck --check-prefix=NO-MATH-ERRNO %s
4
- // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - -DUSE_C_DECL | FileCheck --check-prefix=MATH-ERRNO %s
1
+ // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - | FileCheck --check-prefix=NO-MATH-ERRNO %s
2
+ // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - | FileCheck --check-prefix=MATH-ERRNO %s
5
3
6
- #if defined(USE_BUILTIN )
7
- #define sincos __builtin_sincos
8
- #define sincosf __builtin_sincosf
9
- #define sincosl __builtin_sincosl
10
- #elif defined(USE_C_DECL )
11
- void sincos (double , double * , double * );
12
- void sincosf (float , float * , float * );
13
- void sincosl (long double , long double * , long double * );
14
- #else
15
- #error Expected USE_BUILTIN or USE_C_DECL to be defined.
16
- #endif
4
+ void sincos (double , double * , double * );
5
+ void sincosf (float , float * , float * );
6
+ void sincosl (long double , long double * , long double * );
17
7
18
8
// NO-MATH-ERRNO-LABEL: @sincos_f32
19
9
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { float, float } @llvm.sincos.f32(float {{.*}})
@@ -29,6 +19,20 @@ void sincos_f32(float x, float* fp0, float* fp1) {
29
19
sincosf (x , fp0 , fp1 );
30
20
}
31
21
22
+ // NO-MATH-ERRNO-LABEL: @sincos_builtin_f32
23
+ // NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { float, float } @llvm.sincos.f32(float {{.*}})
24
+ // NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { float, float } [[SINCOS]], 0
25
+ // NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { float, float } [[SINCOS]], 1
26
+ // NO-MATH-ERRNO-NEXT: store float [[SIN]], ptr {{.*}}, align 4, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]
27
+ // NO-MATH-ERRNO-NEXT: store float [[COS]], ptr {{.*}}, align 4, !noalias [[SINCOS_ALIAS_SCOPE]]
28
+ //
29
+ // MATH-ERRNO-LABEL: @sincos_builtin_f32
30
+ // MATH-ERRNO: call void @sincosf(
31
+ //
32
+ void sincos_builtin_f32 (float x , float * fp0 , float * fp1 ) {
33
+ __builtin_sincosf (x , fp0 , fp1 );
34
+ }
35
+
32
36
// NO-MATH-ERRNO-LABEL: @sincos_f64
33
37
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { double, double } @llvm.sincos.f64(double {{.*}})
34
38
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { double, double } [[SINCOS]], 0
@@ -43,6 +47,20 @@ void sincos_f64(double x, double* dp0, double* dp1) {
43
47
sincos (x , dp0 , dp1 );
44
48
}
45
49
50
+ // NO-MATH-ERRNO-LABEL: @sincos_builtin_f64
51
+ // NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { double, double } @llvm.sincos.f64(double {{.*}})
52
+ // NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { double, double } [[SINCOS]], 0
53
+ // NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { double, double } [[SINCOS]], 1
54
+ // NO-MATH-ERRNO-NEXT: store double [[SIN]], ptr {{.*}}, align 8, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]
55
+ // NO-MATH-ERRNO-NEXT: store double [[COS]], ptr {{.*}}, align 8, !noalias [[SINCOS_ALIAS_SCOPE]]
56
+ //
57
+ // MATH-ERRNO-LABEL: @sincos_builtin_f64
58
+ // MATH-ERRNO: call void @sincos(
59
+ //
60
+ void sincos_builtin_f64 (double x , double * dp0 , double * dp1 ) {
61
+ __builtin_sincos (x , dp0 , dp1 );
62
+ }
63
+
46
64
// NO-MATH-ERRNO-LABEL: @sincos_f128
47
65
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { fp128, fp128 } @llvm.sincos.f128(fp128 {{.*}})
48
66
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 0
@@ -56,3 +74,17 @@ void sincos_f64(double x, double* dp0, double* dp1) {
56
74
void sincos_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
57
75
sincosl (x , ldp0 , ldp1 );
58
76
}
77
+
78
+ // NO-MATH-ERRNO-LABEL: @sincos_builtin_f128
79
+ // NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { fp128, fp128 } @llvm.sincos.f128(fp128 {{.*}})
80
+ // NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 0
81
+ // NO-MATH-ERRNO-NEXT: [[COS:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 1
82
+ // NO-MATH-ERRNO-NEXT: store fp128 [[SIN]], ptr {{.*}}, align 16, !alias.scope [[SINCOS_ALIAS_SCOPE:![0-9]+]]
83
+ // NO-MATH-ERRNO-NEXT: store fp128 [[COS]], ptr {{.*}}, align 16, !noalias [[SINCOS_ALIAS_SCOPE]]
84
+ //
85
+ // MATH-ERRNO-LABEL: @sincos_builtin_f128
86
+ // MATH-ERRNO: call void @sincosl(
87
+ //
88
+ void sincos_builtin_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
89
+ __builtin_sincosl (x , ldp0 , ldp1 );
90
+ }
0 commit comments