1
- // RUN: %clang_cc1 -triple x86_64 %s -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK
2
- // RUN: %clang_cc1 -ffp-exception-behavior=strict -triple x86_64 %s -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-STRICT
1
+ // RUN: %clang_cc1 -vectorize-loops -vectorize-slp -O3 - triple x86_64 %s -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK
2
+ // RUN: %clang_cc1 -vectorize-loops -vectorize-slp -O3 - ffp-exception-behavior=strict -DENSTRICT=1 -triple x86_64 %s -emit-llvm -o - 2>&1 | FileCheck %s --check-prefix=CHECK-STRICT
3
3
4
4
float fminf (float , float );
5
5
double fmin (double , double );
@@ -18,6 +18,20 @@ float fmin32(float a, float b) {
18
18
float fmin32b (float a , float b ) {
19
19
return __builtin_fminf (a , b );
20
20
}
21
+ #if !defined(ENSTRICT )
22
+ // CHECK: call nsz <4 x float> @llvm.minnum.v4f32(<4 x float> %0, <4 x float> %1)
23
+ float * pfmin32 (float * a , float * b , float * restrict c ) {
24
+ for (int i = 0 ; i < 4 ; i ++ )
25
+ c [i ] = fminf (a [i ], b [i ]);
26
+ return c ;
27
+ }
28
+ // CHECK: call nsz <4 x float> @llvm.minnum.v4f32(<4 x float> %0, <4 x float> %1)
29
+ float * pfmin32b (float * a , float * b , float * restrict c ) {
30
+ for (int i = 0 ; i < 4 ; i ++ )
31
+ c [i ] = __builtin_fminf (a [i ], b [i ]);
32
+ return c ;
33
+ }
34
+ #endif
21
35
// CHECK: call nsz double @llvm.minnum.f64
22
36
// CHECK-STRICT: call nsz double @llvm.experimental.constrained.minnum.f64{{.*}} #2
23
37
float fmin64 (double a , double b ) {
@@ -28,6 +42,20 @@ float fmin64(double a, double b) {
28
42
float fmin64b (double a , double b ) {
29
43
return __builtin_fmin (a , b );
30
44
}
45
+ #if !defined(ENSTRICT )
46
+ // CHECK: call nsz <2 x double> @llvm.minnum.v2f64(<2 x double> %0, <2 x double> %1)
47
+ double * pfmin64 (double * a , double * b , double * restrict c ) {
48
+ for (int i = 0 ; i < 2 ; i ++ )
49
+ c [i ] = fmin (a [i ], b [i ]);
50
+ return c ;
51
+ }
52
+ // CHECK: call nsz <2 x double> @llvm.minnum.v2f64(<2 x double> %0, <2 x double> %1)
53
+ double * pfmin64b (double * a , double * b , double * restrict c ) {
54
+ for (int i = 0 ; i < 2 ; i ++ )
55
+ c [i ] = __builtin_fmin (a [i ], b [i ]);
56
+ return c ;
57
+ }
58
+ #endif
31
59
// CHECK: call nsz x86_fp80 @llvm.minnum.f80
32
60
// CHECK-STRICT: call nsz x86_fp80 @llvm.experimental.constrained.minnum.f80{{.*}} #2
33
61
float fmin80 (long double a , long double b ) {
@@ -48,6 +76,20 @@ float fmax32(float a, float b) {
48
76
float fmax32b (float a , float b ) {
49
77
return __builtin_fmaxf (a , b );
50
78
}
79
+ #if !defined(ENSTRICT )
80
+ // CHECK: call nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %0, <4 x float> %1)
81
+ float * pfmax32 (float * a , float * b , float * restrict c ) {
82
+ for (int i = 0 ; i < 4 ; i ++ )
83
+ c [i ] = fmaxf (a [i ], b [i ]);
84
+ return c ;
85
+ }
86
+ // CHECK: call nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %0, <4 x float> %1)
87
+ float * pfmax32b (float * a , float * b , float * restrict c ) {
88
+ for (int i = 0 ; i < 4 ; i ++ )
89
+ c [i ] = __builtin_fmaxf (a [i ], b [i ]);
90
+ return c ;
91
+ }
92
+ #endif
51
93
// CHECK: call nsz double @llvm.maxnum.f64
52
94
// CHECK-STRICT: call nsz double @llvm.experimental.constrained.maxnum.f64{{.*}} #2
53
95
float fmax64 (double a , double b ) {
@@ -63,6 +105,20 @@ float fmax64b(double a, double b) {
63
105
float fmax3 (long double a , long double b ) {
64
106
return fmaxl (a , b );
65
107
}
108
+ #if !defined(ENSTRICT )
109
+ // CHECK: call nsz <2 x double> @llvm.maxnum.v2f64(<2 x double> %0, <2 x double> %1)
110
+ double * pfmax64 (double * a , double * b , double * restrict c ) {
111
+ for (int i = 0 ; i < 2 ; i ++ )
112
+ c [i ] = fmax (a [i ], b [i ]);
113
+ return c ;
114
+ }
115
+ // CHECK: call nsz <2 x double> @llvm.maxnum.v2f64(<2 x double> %0, <2 x double> %1)
116
+ double * pfmax64b (double * a , double * b , double * restrict c ) {
117
+ for (int i = 0 ; i < 2 ; i ++ )
118
+ c [i ] = __builtin_fmax (a [i ], b [i ]);
119
+ return c ;
120
+ }
121
+ #endif
66
122
// CHECK: call nsz x86_fp80 @llvm.maxnum.f80
67
123
// CHECK-STRICT: call nsz x86_fp80 @llvm.experimental.constrained.maxnum.f80{{.*}} #2
68
124
float fmax80b (long double a , long double b ) {
0 commit comments