1 // RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s
5 long long test_mm512_reduce_max_epi64(__m512i __W
){
6 // CHECK-LABEL: @test_mm512_reduce_max_epi64(
7 // CHECK: call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}})
8 return _mm512_reduce_max_epi64(__W
);
11 unsigned long long test_mm512_reduce_max_epu64(__m512i __W
){
12 // CHECK-LABEL: @test_mm512_reduce_max_epu64(
13 // CHECK: call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}})
14 return _mm512_reduce_max_epu64(__W
);
17 double test_mm512_reduce_max_pd(__m512d __W
, double ExtraAddOp
){
18 // CHECK-LABEL: @test_mm512_reduce_max_pd(
20 // CHECK: call nnan double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}})
22 return _mm512_reduce_max_pd(__W
) + ExtraAddOp
;
25 long long test_mm512_reduce_min_epi64(__m512i __W
){
26 // CHECK-LABEL: @test_mm512_reduce_min_epi64(
27 // CHECK: call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}})
28 return _mm512_reduce_min_epi64(__W
);
31 unsigned long long test_mm512_reduce_min_epu64(__m512i __W
){
32 // CHECK-LABEL: @test_mm512_reduce_min_epu64(
33 // CHECK: call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}})
34 return _mm512_reduce_min_epu64(__W
);
37 double test_mm512_reduce_min_pd(__m512d __W
, double ExtraMulOp
){
38 // CHECK-LABEL: @test_mm512_reduce_min_pd(
40 // CHECK: call nnan double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}})
42 return _mm512_reduce_min_pd(__W
) * ExtraMulOp
;
45 long long test_mm512_mask_reduce_max_epi64(__mmask8 __M
, __m512i __W
){
46 // CHECK-LABEL: @test_mm512_mask_reduce_max_epi64(
47 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
48 // CHECK: call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %{{.*}})
49 return _mm512_mask_reduce_max_epi64(__M
, __W
);
52 unsigned long test_mm512_mask_reduce_max_epu64(__mmask8 __M
, __m512i __W
){
53 // CHECK-LABEL: @test_mm512_mask_reduce_max_epu64(
54 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
55 // CHECK: call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %{{.*}})
56 return _mm512_mask_reduce_max_epu64(__M
, __W
);
59 double test_mm512_mask_reduce_max_pd(__mmask8 __M
, __m512d __W
){
60 // CHECK-LABEL: @test_mm512_mask_reduce_max_pd(
61 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
62 // CHECK: call nnan double @llvm.vector.reduce.fmax.v8f64(<8 x double> %{{.*}})
63 return _mm512_mask_reduce_max_pd(__M
, __W
);
66 long long test_mm512_mask_reduce_min_epi64(__mmask8 __M
, __m512i __W
){
67 // CHECK-LABEL: @test_mm512_mask_reduce_min_epi64(
68 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
69 // CHECK: call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %{{.*}})
70 return _mm512_mask_reduce_min_epi64(__M
, __W
);
73 unsigned long long test_mm512_mask_reduce_min_epu64(__mmask8 __M
, __m512i __W
){
74 // CHECK-LABEL: @test_mm512_mask_reduce_min_epu64(
75 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
76 // CHECK: call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %{{.*}})
77 return _mm512_mask_reduce_min_epu64(__M
, __W
);
80 double test_mm512_mask_reduce_min_pd(__mmask8 __M
, __m512d __W
){
81 // CHECK-LABEL: @test_mm512_mask_reduce_min_pd(
82 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
83 // CHECK: call nnan double @llvm.vector.reduce.fmin.v8f64(<8 x double> %{{.*}})
84 return _mm512_mask_reduce_min_pd(__M
, __W
);
87 int test_mm512_reduce_max_epi32(__m512i __W
){
88 // CHECK-LABEL: @test_mm512_reduce_max_epi32(
89 // CHECK: call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}})
90 return _mm512_reduce_max_epi32(__W
);
93 unsigned int test_mm512_reduce_max_epu32(__m512i __W
){
94 // CHECK-LABEL: @test_mm512_reduce_max_epu32(
95 // CHECK: call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}})
96 return _mm512_reduce_max_epu32(__W
);
99 float test_mm512_reduce_max_ps(__m512 __W
){
100 // CHECK-LABEL: @test_mm512_reduce_max_ps(
101 // CHECK: call nnan float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}})
102 return _mm512_reduce_max_ps(__W
);
105 int test_mm512_reduce_min_epi32(__m512i __W
){
106 // CHECK-LABEL: @test_mm512_reduce_min_epi32(
107 // CHECK: call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}})
108 return _mm512_reduce_min_epi32(__W
);
111 unsigned int test_mm512_reduce_min_epu32(__m512i __W
){
112 // CHECK-LABEL: @test_mm512_reduce_min_epu32(
113 // CHECK: call i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}})
114 return _mm512_reduce_min_epu32(__W
);
117 float test_mm512_reduce_min_ps(__m512 __W
){
118 // CHECK-LABEL: @test_mm512_reduce_min_ps(
119 // CHECK: call nnan float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}})
120 return _mm512_reduce_min_ps(__W
);
123 int test_mm512_mask_reduce_max_epi32(__mmask16 __M
, __m512i __W
){
124 // CHECK-LABEL: @test_mm512_mask_reduce_max_epi32(
125 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
126 // CHECK: call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %{{.*}})
127 return _mm512_mask_reduce_max_epi32(__M
, __W
);
130 unsigned int test_mm512_mask_reduce_max_epu32(__mmask16 __M
, __m512i __W
){
131 // CHECK-LABEL: @test_mm512_mask_reduce_max_epu32(
132 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
133 // CHECK: call i32 @llvm.vector.reduce.umax.v16i32(<16 x i32> %{{.*}})
134 return _mm512_mask_reduce_max_epu32(__M
, __W
);
137 float test_mm512_mask_reduce_max_ps(__mmask16 __M
, __m512 __W
){
138 // CHECK-LABEL: @test_mm512_mask_reduce_max_ps(
139 // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
140 // CHECK: call nnan float @llvm.vector.reduce.fmax.v16f32(<16 x float> %{{.*}})
141 return _mm512_mask_reduce_max_ps(__M
, __W
);
144 int test_mm512_mask_reduce_min_epi32(__mmask16 __M
, __m512i __W
){
145 // CHECK-LABEL: @test_mm512_mask_reduce_min_epi32(
146 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
147 // CHECK: call i32 @llvm.vector.reduce.smin.v16i32(<16 x i32> %{{.*}})
148 return _mm512_mask_reduce_min_epi32(__M
, __W
);
151 unsigned int test_mm512_mask_reduce_min_epu32(__mmask16 __M
, __m512i __W
){
152 // CHECK-LABEL: @test_mm512_mask_reduce_min_epu32(
153 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
154 // CHECK: call i32 @llvm.vector.reduce.umin.v16i32(<16 x i32> %{{.*}})
155 return _mm512_mask_reduce_min_epu32(__M
, __W
);
158 float test_mm512_mask_reduce_min_ps(__mmask16 __M
, __m512 __W
){
159 // CHECK-LABEL: @test_mm512_mask_reduce_min_ps(
160 // CHECK: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}
161 // CHECK: call nnan float @llvm.vector.reduce.fmin.v16f32(<16 x float> %{{.*}})
162 return _mm512_mask_reduce_min_ps(__M
, __W
);