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_add_epi64(__m512i __W
){
6 // CHECK-LABEL: @test_mm512_reduce_add_epi64(
7 // CHECK: call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}})
8 return _mm512_reduce_add_epi64(__W
);
11 long long test_mm512_reduce_mul_epi64(__m512i __W
){
12 // CHECK-LABEL: @test_mm512_reduce_mul_epi64(
13 // CHECK: call i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}})
14 return _mm512_reduce_mul_epi64(__W
);
17 long long test_mm512_reduce_or_epi64(__m512i __W
){
18 // CHECK-LABEL: @test_mm512_reduce_or_epi64(
19 // CHECK: call i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}})
20 return _mm512_reduce_or_epi64(__W
);
23 long long test_mm512_reduce_and_epi64(__m512i __W
){
24 // CHECK-LABEL: @test_mm512_reduce_and_epi64(
25 // CHECK: call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}})
26 return _mm512_reduce_and_epi64(__W
);
29 long long test_mm512_mask_reduce_add_epi64(__mmask8 __M
, __m512i __W
){
30 // CHECK-LABEL: @test_mm512_mask_reduce_add_epi64(
31 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
32 // CHECK: call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %{{.*}})
33 return _mm512_mask_reduce_add_epi64(__M
, __W
);
36 long long test_mm512_mask_reduce_mul_epi64(__mmask8 __M
, __m512i __W
){
37 // CHECK-LABEL: @test_mm512_mask_reduce_mul_epi64(
38 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
39 // CHECK: call i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %{{.*}})
40 return _mm512_mask_reduce_mul_epi64(__M
, __W
);
43 long long test_mm512_mask_reduce_and_epi64(__mmask8 __M
, __m512i __W
){
44 // CHECK-LABEL: @test_mm512_mask_reduce_and_epi64(
45 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
46 // CHECK: call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %{{.*}})
47 return _mm512_mask_reduce_and_epi64(__M
, __W
);
50 long long test_mm512_mask_reduce_or_epi64(__mmask8 __M
, __m512i __W
){
51 // CHECK-LABEL: @test_mm512_mask_reduce_or_epi64(
52 // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}}
53 // CHECK: call i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %{{.*}})
54 return _mm512_mask_reduce_or_epi64(__M
, __W
);
57 int test_mm512_reduce_add_epi32(__m512i __W
){
58 // CHECK-LABEL: @test_mm512_reduce_add_epi32(
59 // CHECK: call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}})
60 return _mm512_reduce_add_epi32(__W
);
63 int test_mm512_reduce_mul_epi32(__m512i __W
){
64 // CHECK-LABEL: @test_mm512_reduce_mul_epi32(
65 // CHECK: call i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}})
66 return _mm512_reduce_mul_epi32(__W
);
69 int test_mm512_reduce_or_epi32(__m512i __W
){
70 // CHECK: call i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}})
71 return _mm512_reduce_or_epi32(__W
);
74 int test_mm512_reduce_and_epi32(__m512i __W
){
75 // CHECK-LABEL: @test_mm512_reduce_and_epi32(
76 // CHECK: call i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}})
77 return _mm512_reduce_and_epi32(__W
);
80 int test_mm512_mask_reduce_add_epi32(__mmask16 __M
, __m512i __W
){
81 // CHECK-LABEL: @test_mm512_mask_reduce_add_epi32(
82 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
83 // CHECK: call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> %{{.*}})
84 return _mm512_mask_reduce_add_epi32(__M
, __W
);
87 int test_mm512_mask_reduce_mul_epi32(__mmask16 __M
, __m512i __W
){
88 // CHECK-LABEL: @test_mm512_mask_reduce_mul_epi32(
89 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
90 // CHECK: call i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> %{{.*}})
91 return _mm512_mask_reduce_mul_epi32(__M
, __W
);
94 int test_mm512_mask_reduce_and_epi32(__mmask16 __M
, __m512i __W
){
95 // CHECK-LABEL: @test_mm512_mask_reduce_and_epi32(
96 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
97 // CHECK: call i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %{{.*}})
98 return _mm512_mask_reduce_and_epi32(__M
, __W
);
101 int test_mm512_mask_reduce_or_epi32(__mmask16 __M
, __m512i __W
){
102 // CHECK-LABEL: @test_mm512_mask_reduce_or_epi32(
103 // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}}
104 // CHECK: call i32 @llvm.vector.reduce.or.v16i32(<16 x i32> %{{.*}})
105 return _mm512_mask_reduce_or_epi32(__M
, __W
);
108 double test_mm512_reduce_add_pd(__m512d __W
, double ExtraAddOp
){
109 // CHECK-LABEL: @test_mm512_reduce_add_pd(
110 // CHECK-NOT: reassoc
111 // CHECK: call reassoc double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}})
112 // CHECK-NOT: reassoc
113 return _mm512_reduce_add_pd(__W
) + ExtraAddOp
;
116 double test_mm512_reduce_mul_pd(__m512d __W
, double ExtraMulOp
){
117 // CHECK-LABEL: @test_mm512_reduce_mul_pd(
118 // CHECK-NOT: reassoc
119 // CHECK: call reassoc double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}})
120 // CHECK-NOT: reassoc
121 return _mm512_reduce_mul_pd(__W
) * ExtraMulOp
;
124 float test_mm512_reduce_add_ps(__m512 __W
){
125 // CHECK-LABEL: @test_mm512_reduce_add_ps(
126 // CHECK: call reassoc float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}})
127 return _mm512_reduce_add_ps(__W
);
130 float test_mm512_reduce_mul_ps(__m512 __W
){
131 // CHECK-LABEL: @test_mm512_reduce_mul_ps(
132 // CHECK: call reassoc float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}})
133 return _mm512_reduce_mul_ps(__W
);
136 double test_mm512_mask_reduce_add_pd(__mmask8 __M
, __m512d __W
){
137 // CHECK-LABEL: @test_mm512_mask_reduce_add_pd(
138 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
139 // CHECK: call reassoc double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> %{{.*}})
140 return _mm512_mask_reduce_add_pd(__M
, __W
);
143 double test_mm512_mask_reduce_mul_pd(__mmask8 __M
, __m512d __W
){
144 // CHECK-LABEL: @test_mm512_mask_reduce_mul_pd(
145 // CHECK: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}
146 // CHECK: call reassoc double @llvm.vector.reduce.fmul.v8f64(double 1.000000e+00, <8 x double> %{{.*}})
147 return _mm512_mask_reduce_mul_pd(__M
, __W
);
150 float test_mm512_mask_reduce_add_ps(__mmask16 __M
, __m512 __W
){
151 // CHECK-LABEL: @test_mm512_mask_reduce_add_ps(
152 // CHECK: select <16 x i1> %{{.*}}, <16 x float> {{.*}}, <16 x float> {{.*}}
153 // CHECK: call reassoc float @llvm.vector.reduce.fadd.v16f32(float -0.000000e+00, <16 x float> %{{.*}})
154 return _mm512_mask_reduce_add_ps(__M
, __W
);
157 float test_mm512_mask_reduce_mul_ps(__mmask16 __M
, __m512 __W
){
158 // CHECK-LABEL: @test_mm512_mask_reduce_mul_ps(
159 // CHECK: select <16 x i1> %{{.*}}, <16 x float> {{.*}}, <16 x float> %{{.*}}
160 // CHECK: call reassoc float @llvm.vector.reduce.fmul.v16f32(float 1.000000e+00, <16 x float> %{{.*}})
161 return _mm512_mask_reduce_mul_ps(__M
, __W
);