[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / clang / test / CodeGen / X86 / avx512-reduceIntrin.c
blob2ceac3a8b2670abff6a27d0cfbfa55743df7af26
1 // RUN: %clang_cc1 -ffreestanding %s -O0 -triple=x86_64-apple-darwin -target-cpu skylake-avx512 -emit-llvm -o - -Wall -Werror | FileCheck %s
3 #include <immintrin.h>
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);