11// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - | FileCheck --check-prefix=NO-MATH-ERRNO %s
22// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - | FileCheck --check-prefix=MATH-ERRNO %s
33
4+ void sincos (double , double * , double * );
5+ void sincosf (float , float * , float * );
6+ void sincosl (long double , long double * , long double * );
7+
48// NO-MATH-ERRNO-LABEL: @sincos_f32
59// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { float, float } @llvm.sincos.f32(float {{.*}})
610// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { float, float } [[SINCOS]], 0
1216// MATH-ERRNO: call void @sincosf(
1317//
1418void sincos_f32 (float x , float * fp0 , float * fp1 ) {
19+ sincosf (x , fp0 , fp1 );
20+ }
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 ) {
1533 __builtin_sincosf (x , fp0 , fp1 );
1634}
1735
@@ -26,6 +44,20 @@ void sincos_f32(float x, float* fp0, float* fp1) {
2644// MATH-ERRNO: call void @sincos(
2745//
2846void sincos_f64 (double x , double * dp0 , double * dp1 ) {
47+ sincos (x , dp0 , dp1 );
48+ }
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 ) {
2961 __builtin_sincos (x , dp0 , dp1 );
3062}
3163
@@ -40,5 +72,19 @@ void sincos_f64(double x, double* dp0, double* dp1) {
4072// MATH-ERRNO: call void @sincosl(
4173//
4274void sincos_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
75+ sincosl (x , ldp0 , ldp1 );
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 ) {
4389 __builtin_sincosl (x , ldp0 , ldp1 );
4490}
0 commit comments