1
1
// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -O1 %s -o - | FileCheck --check-prefix=NO-MATH-ERRNO %s
2
2
// RUN: %clang_cc1 -triple=aarch64-gnu-linux -emit-llvm -fmath-errno %s -o - | FileCheck --check-prefix=MATH-ERRNO %s
3
3
4
+ void sincos (double , double * , double * );
5
+ void sincosf (float , float * , float * );
6
+ void sincosl (long double , long double * , long double * );
7
+
4
8
// NO-MATH-ERRNO-LABEL: @sincos_f32
5
9
// NO-MATH-ERRNO: [[SINCOS:%.*]] = tail call { float, float } @llvm.sincos.f32(float {{.*}})
6
10
// NO-MATH-ERRNO-NEXT: [[SIN:%.*]] = extractvalue { float, float } [[SINCOS]], 0
12
16
// MATH-ERRNO: call void @sincosf(
13
17
//
14
18
void 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 ) {
15
33
__builtin_sincosf (x , fp0 , fp1 );
16
34
}
17
35
@@ -26,6 +44,20 @@ void sincos_f32(float x, float* fp0, float* fp1) {
26
44
// MATH-ERRNO: call void @sincos(
27
45
//
28
46
void 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 ) {
29
61
__builtin_sincos (x , dp0 , dp1 );
30
62
}
31
63
@@ -40,5 +72,19 @@ void sincos_f64(double x, double* dp0, double* dp1) {
40
72
// MATH-ERRNO: call void @sincosl(
41
73
//
42
74
void 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 ) {
43
89
__builtin_sincosl (x , ldp0 , ldp1 );
44
90
}
0 commit comments