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
53
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 * );
177
188// NO-MATH-ERRNO-LABEL: @sincos_f32
199// 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) {
2919 sincosf (x , fp0 , fp1 );
3020}
3121
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+
3236// NO-MATH-ERRNO-LABEL: @sincos_f64
3337// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { double, double } @llvm.sincos.f64(double {{.*}})
3438// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { double, double } [[SINCOS]], 0
@@ -43,6 +47,20 @@ void sincos_f64(double x, double* dp0, double* dp1) {
4347 sincos (x , dp0 , dp1 );
4448}
4549
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+
4664// NO-MATH-ERRNO-LABEL: @sincos_f128
4765// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { fp128, fp128 } @llvm.sincos.f128(fp128 {{.*}})
4866// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { fp128, fp128 } [[SINCOS]], 0
@@ -56,3 +74,17 @@ void sincos_f64(double x, double* dp0, double* dp1) {
5674void sincos_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
5775 sincosl (x , ldp0 , ldp1 );
5876}
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