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 
33
44float  fminf  (float , float );
55double  fmin  (double , double );
@@ -18,6 +18,20 @@ float fmin32(float a, float b) {
1818float  fmin32b (float  a , float  b ) {
1919        return  __builtin_fminf (a , b );
2020}
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 
2135// CHECK: call nsz double @llvm.minnum.f64 
2236// CHECK-STRICT: call nsz double @llvm.experimental.constrained.minnum.f64{{.*}} #2 
2337float  fmin64 (double  a , double  b ) {
@@ -28,6 +42,20 @@ float fmin64(double a, double b) {
2842float  fmin64b (double  a , double  b ) {
2943        return  __builtin_fmin (a , b );
3044}
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 
3159// CHECK: call nsz x86_fp80 @llvm.minnum.f80 
3260// CHECK-STRICT: call nsz x86_fp80 @llvm.experimental.constrained.minnum.f80{{.*}} #2 
3361float  fmin80 (long double   a , long double   b ) {
@@ -48,6 +76,20 @@ float fmax32(float a, float b) {
4876float  fmax32b (float  a , float  b ) {
4977        return  __builtin_fmaxf (a , b );
5078}
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 
5193// CHECK: call nsz double @llvm.maxnum.f64 
5294// CHECK-STRICT: call nsz double @llvm.experimental.constrained.maxnum.f64{{.*}} #2 
5395float  fmax64 (double  a , double  b ) {
@@ -63,6 +105,20 @@ float fmax64b(double a, double b) {
63105float  fmax3 (long double   a , long double   b ) {
64106        return  fmaxl (a , b );
65107}
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 
66122// CHECK: call nsz x86_fp80 @llvm.maxnum.f80 
67123// CHECK-STRICT: call nsz x86_fp80 @llvm.experimental.constrained.maxnum.f80{{.*}} #2 
68124float  fmax80b (long double   a , long double   b ) {
0 commit comments