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
3+ // RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -ffp-exception-behavior=strict %s -o - | FileCheck --check-prefix=STRICT-FP %s
34
45void sincos (double , double * , double * );
56void sincosf (float , float * , float * );
@@ -15,6 +16,9 @@ void sincosl(long double, long double*, long double*);
1516// MATH-ERRNO-LABEL: @sincos_f32
1617// MATH-ERRNO: call void @sincosf(
1718//
19+ // STRICT-FP-LABEL: @sincos_f32
20+ // STRICT-FP: call void @sincosf(
21+ //
1822void sincos_f32 (float x , float * fp0 , float * fp1 ) {
1923 sincosf (x , fp0 , fp1 );
2024}
@@ -43,6 +47,9 @@ void sincos_builtin_f32(float x, float* fp0, float* fp1) {
4347// MATH-ERRNO-LABEL: @sincos_f64
4448// MATH-ERRNO: call void @sincos(
4549//
50+ // STRICT-FP-LABEL: @sincos_f64
51+ // STRICT-FP: call void @sincos(
52+ //
4653void sincos_f64 (double x , double * dp0 , double * dp1 ) {
4754 sincos (x , dp0 , dp1 );
4855}
@@ -71,6 +78,9 @@ void sincos_builtin_f64(double x, double* dp0, double* dp1) {
7178// MATH-ERRNO-LABEL: @sincos_f128
7279// MATH-ERRNO: call void @sincosl(
7380//
81+ // STRICT-FP-LABEL: @sincos_f128
82+ // STRICT-FP: call void @sincosl(
83+ //
7484void sincos_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
7585 sincosl (x , ldp0 , ldp1 );
7686}
@@ -88,3 +98,54 @@ void sincos_f128(long double x, long double* ldp0, long double* ldp1) {
8898void sincos_builtin_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
8999 __builtin_sincosl (x , ldp0 , ldp1 );
90100}
101+
102+ // NO-MATH-ERRNO-LABEL: @sincospi_f32
103+ // NO-MATH-ERRNO: [[SINCOSPI:%.*]] = tail call { float, float } @llvm.sincospi.f32(float {{.*}})
104+ // NO-MATH-ERRNO-NEXT: [[SINPI:%.*]] = extractvalue { float, float } [[SINCOSPI]], 0
105+ // NO-MATH-ERRNO-NEXT: [[COSPI:%.*]] = extractvalue { float, float } [[SINCOSPI]], 1
106+ // NO-MATH-ERRNO-NEXT: store float [[SINPI]], ptr {{.*}}, align 4, !alias.scope [[SINCOSPI_ALIAS_SCOPE:![0-9]+]]
107+ // NO-MATH-ERRNO-NEXT: store float [[COSPI]], ptr {{.*}}, align 4, !noalias [[SINCOSPI_ALIAS_SCOPE]]
108+ //
109+ // MATH-ERRNO-LABEL: @sincospi_f32
110+ // MATH-ERRNO: call void @sincospif(
111+ //
112+ // STRICT-FP-LABEL: @sincospi_f32
113+ // STRICT-FP: call void @sincospif(
114+ //
115+ void sincospi_f32 (float x , float * fp0 , float * fp1 ) {
116+ __builtin_sincospif (x , fp0 , fp1 );
117+ }
118+
119+ // NO-MATH-ERRNO-LABEL: @sincospi_f64
120+ // NO-MATH-ERRNO: [[SINCOSPI:%.*]] = tail call { double, double } @llvm.sincospi.f64(double {{.*}})
121+ // NO-MATH-ERRNO-NEXT: [[SINPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 0
122+ // NO-MATH-ERRNO-NEXT: [[COSPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 1
123+ // NO-MATH-ERRNO-NEXT: store double [[SINPI]], ptr {{.*}}, align 8, !alias.scope [[SINCOSPI_ALIAS_SCOPE:![0-9]+]]
124+ // NO-MATH-ERRNO-NEXT: store double [[COSPI]], ptr {{.*}}, align 8, !noalias [[SINCOSPI_ALIAS_SCOPE]]
125+ //
126+ // MATH-ERRNO-LABEL: @sincospi_f64
127+ // MATH-ERRNO: call void @sincospi(
128+ //
129+ // STRICT-FP-LABEL: @sincospi_f64
130+ // STRICT-FP: call void @sincospi(
131+ //
132+ void sincospi_f64 (double x , double * dp0 , double * dp1 ) {
133+ __builtin_sincospi (x , dp0 , dp1 );
134+ }
135+
136+ // NO-MATH-ERRNO-LABEL: @sincospi_f128
137+ // NO-MATH-ERRNO: [[SINCOSPI:%.*]] = tail call { fp128, fp128 } @llvm.sincospi.f128(fp128 {{.*}})
138+ // NO-MATH-ERRNO-NEXT: [[SINPI:%.*]] = extractvalue { fp128, fp128 } [[SINCOSPI]], 0
139+ // NO-MATH-ERRNO-NEXT: [[COSPI:%.*]] = extractvalue { fp128, fp128 } [[SINCOSPI]], 1
140+ // NO-MATH-ERRNO-NEXT: store fp128 [[SINPI]], ptr {{.*}}, align 16, !alias.scope [[SINCOSPI_ALIAS_SCOPE:![0-9]+]]
141+ // NO-MATH-ERRNO-NEXT: store fp128 [[COSPI]], ptr {{.*}}, align 16, !noalias [[SINCOSPI_ALIAS_SCOPE]]
142+ //
143+ // MATH-ERRNO-LABEL: @sincospi_f128
144+ // MATH-ERRNO: call void @sincospil(
145+ //
146+ // STRICT-FP-LABEL: @sincospi_f128
147+ // STRICT-FP: call void @sincospil(
148+ //
149+ void sincospi_f128 (long double x , long double * ldp0 , long double * ldp1 ) {
150+ __builtin_sincospil (x , ldp0 , ldp1 );
151+ }
0 commit comments