xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-intrinsics-upgrade.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.broadcast.ss.ps.512(<4 x float>, <16 x float>, i16) nounwind readonly
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_x86_vbroadcast_ss_ps_512(<4 x float> %a0, <16 x float> %a1, i16 %mask ) {
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcast_ss_ps_512:
8*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastss %xmm0, %zmm2
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastss %xmm0, %zmm1 {%k1}
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm1, %zmm2, %zmm1
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm0
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.broadcast.ss.ps.512(<4 x float> %a0, <16 x float> zeroinitializer, i16 -1)
18*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.broadcast.ss.ps.512(<4 x float> %a0, <16 x float> %a1, i16 %mask)
19*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.broadcast.ss.ps.512(<4 x float> %a0, <16 x float> zeroinitializer, i16 %mask)
20*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <16 x float> %res, %res1
21*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res2, %res3
22*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.broadcast.sd.pd.512(<2 x double>, <8 x double>, i8) nounwind readonly
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_x86_vbroadcast_sd_pd_512(<2 x double> %a0, <8 x double> %a1, i8 %mask ) {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcast_sd_pd_512:
29*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm2
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm1 {%k1}
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm1, %zmm2, %zmm1
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm0
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.broadcast.sd.pd.512(<2 x double> %a0, <8 x double> zeroinitializer, i8 -1)
39*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.broadcast.sd.pd.512(<2 x double> %a0, <8 x double> %a1, i8 %mask)
40*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.broadcast.sd.pd.512(<2 x double> %a0, <8 x double> zeroinitializer, i8 %mask)
41*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <8 x double> %res, %res1
42*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res2, %res3
43*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32>, <16 x i32>, i16)
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <16 x i32>@test_int_x86_avx512_pbroadcastd_512(<4 x i32> %x0, <16 x i32> %x1, i16 %mask) {
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_pbroadcastd_512:
50*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastd %xmm0, %zmm2
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastd %xmm0, %zmm1 {%k1}
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastd %xmm0, %zmm0 {%k1} {z}
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm2, %zmm1
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
58*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32> %x0, <16 x i32> %x1, i16 -1)
59*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32> %x0, <16 x i32> %x1, i16 %mask)
60*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x i32> @llvm.x86.avx512.pbroadcastd.512(<4 x i32> %x0, <16 x i32> zeroinitializer, i16 %mask)
61*9880d681SAndroid Build Coastguard Worker  %res3 = add <16 x i32> %res, %res1
62*9880d681SAndroid Build Coastguard Worker  %res4 = add <16 x i32> %res2, %res3
63*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res4
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64>, <8 x i64>, i8)
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdefine <8 x i64>@test_int_x86_avx512_pbroadcastq_512(<2 x i64> %x0, <8 x i64> %x1, i8 %mask) {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_pbroadcastq_512:
70*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastq %xmm0, %zmm2
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastq %xmm0, %zmm1 {%k1}
74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastq %xmm0, %zmm0 {%k1} {z}
75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm1, %zmm2, %zmm1
76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
78*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64> %x0, <8 x i64> %x1,i8 -1)
79*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64> %x0, <8 x i64> %x1,i8 %mask)
80*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x i64> @llvm.x86.avx512.pbroadcastq.512(<2 x i64> %x0, <8 x i64> zeroinitializer,i8 %mask)
81*9880d681SAndroid Build Coastguard Worker  %res3 = add <8 x i64> %res, %res1
82*9880d681SAndroid Build Coastguard Worker  %res4 = add <8 x i64> %res2, %res3
83*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res4
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.movsldup.512(<16 x float>, <16 x float>, i16)
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerdefine <16 x float>@test_int_x86_avx512_mask_movsldup_512(<16 x float> %x0, <16 x float> %x1, i16 %x2) {
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_movsldup_512:
90*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovsldup {{.*#+}} zmm2 = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm2, %zmm1, %zmm1
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm0
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.movsldup.512(<16 x float> %x0, <16 x float> %x1, i16 %x2)
99*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.movsldup.512(<16 x float> %x0, <16 x float> %x1, i16 -1)
100*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.movsldup.512(<16 x float> %x0, <16 x float> zeroinitializer, i16 %x2)
101*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <16 x float> %res, %res1
102*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res2, %res3
103*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.movshdup.512(<16 x float>, <16 x float>, i16)
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine <16 x float>@test_int_x86_avx512_mask_movshdup_512(<16 x float> %x0, <16 x float> %x1, i16 %x2) {
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_movshdup_512:
110*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovshdup {{.*#+}} zmm2 = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm2, %zmm1, %zmm1
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm1, %zmm0, %zmm0
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
118*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.movshdup.512(<16 x float> %x0, <16 x float> %x1, i16 %x2)
119*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.movshdup.512(<16 x float> %x0, <16 x float> %x1, i16 -1)
120*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.movshdup.512(<16 x float> %x0, <16 x float> zeroinitializer, i16 %x2)
121*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <16 x float> %res, %res1
122*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res2, %res3
123*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.movddup.512(<8 x double>, <8 x double>, i8)
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdefine <8 x double>@test_int_x86_avx512_mask_movddup_512(<8 x double> %x0, <8 x double> %x1, i8 %x2) {
129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_movddup_512:
130*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovddup {{.*#+}} zmm2 = zmm0[0,0,2,2,4,4,6,6]
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]
134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm2, %zmm1, %zmm1
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm1, %zmm0, %zmm0
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
138*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.movddup.512(<8 x double> %x0, <8 x double> %x1, i8 %x2)
139*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.movddup.512(<8 x double> %x0, <8 x double> %x1, i8 -1)
140*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.movddup.512(<8 x double> %x0, <8 x double> zeroinitializer, i8 %x2)
141*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <8 x double> %res, %res1
142*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res2, %res3
143*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.perm.df.512(<8 x double>, i32, <8 x double>, i8)
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerdefine <8 x double>@test_int_x86_avx512_mask_perm_df_512(<8 x double> %x0, i32 %x1, <8 x double> %x2, i8 %x3) {
149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_perm_df_512:
150*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermpd {{.*#+}} zmm2 = zmm0[3,0,0,0,7,4,4,4]
152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermpd {{.*#+}} zmm1 {%k1} = zmm0[3,0,0,0,7,4,4,4]
154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermpd {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,0,0,7,4,4,4]
155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm0, %zmm1, %zmm0
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm2, %zmm0, %zmm0
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
158*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.perm.df.512(<8 x double> %x0, i32 3, <8 x double> %x2, i8 %x3)
159*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.perm.df.512(<8 x double> %x0, i32 3, <8 x double> zeroinitializer, i8 %x3)
160*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.perm.df.512(<8 x double> %x0, i32 3, <8 x double> %x2, i8 -1)
161*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <8 x double> %res, %res1
162*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res3, %res2
163*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.perm.di.512(<8 x i64>, i32, <8 x i64>, i8)
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <8 x i64>@test_int_x86_avx512_mask_perm_di_512(<8 x i64> %x0, i32 %x1, <8 x i64> %x2, i8 %x3) {
169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_perm_di_512:
170*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermq {{.*#+}} zmm2 = zmm0[3,0,0,0,7,4,4,4]
172*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
173*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermq {{.*#+}} zmm1 {%k1} = zmm0[3,0,0,0,7,4,4,4]
174*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermq {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,0,0,7,4,4,4]
175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm2, %zmm0, %zmm0
177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
178*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.perm.di.512(<8 x i64> %x0, i32 3, <8 x i64> %x2, i8 %x3)
179*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.mask.perm.di.512(<8 x i64> %x0, i32 3, <8 x i64> zeroinitializer, i8 %x3)
180*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x i64> @llvm.x86.avx512.mask.perm.di.512(<8 x i64> %x0, i32 3, <8 x i64> %x2, i8 -1)
181*9880d681SAndroid Build Coastguard Worker  %res3 = add <8 x i64> %res, %res1
182*9880d681SAndroid Build Coastguard Worker  %res4 = add <8 x i64> %res3, %res2
183*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res4
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine void @test_store1(<16 x float> %data, i8* %ptr, i8* %ptr2, i16 %mask) {
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store1:
188*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
190*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups %zmm0, (%rdi) {%k1}
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups %zmm0, (%rsi)
192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
193*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.ps.512(i8* %ptr, <16 x float> %data, i16 %mask)
194*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.ps.512(i8* %ptr2, <16 x float> %data, i16 -1)
195*9880d681SAndroid Build Coastguard Worker  ret void
196*9880d681SAndroid Build Coastguard Worker}
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.storeu.ps.512(i8*, <16 x float>, i16 )
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine void @test_store2(<8 x double> %data, i8* %ptr, i8* %ptr2, i8 %mask) {
201*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_store2:
202*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovupd %zmm0, (%rdi) {%k1}
205*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovupd %zmm0, (%rsi)
206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.pd.512(i8* %ptr, <8 x double> %data, i8 %mask)
208*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.pd.512(i8* %ptr2, <8 x double> %data, i8 -1)
209*9880d681SAndroid Build Coastguard Worker  ret void
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.storeu.pd.512(i8*, <8 x double>, i8)
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Workerdefine void @test_mask_store_aligned_ps(<16 x float> %data, i8* %ptr, i8* %ptr2, i16 %mask) {
215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_store_aligned_ps:
216*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm0, (%rdi) {%k1}
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm0, (%rsi)
220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
221*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.ps.512(i8* %ptr, <16 x float> %data, i16 %mask)
222*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.ps.512(i8* %ptr2, <16 x float> %data, i16 -1)
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.store.ps.512(i8*, <16 x float>, i16 )
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine void @test_mask_store_aligned_pd(<8 x double> %data, i8* %ptr, i8* %ptr2, i8 %mask) {
229*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_store_aligned_pd:
230*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovapd %zmm0, (%rdi) {%k1}
233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovapd %zmm0, (%rsi)
234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
235*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.pd.512(i8* %ptr, <8 x double> %data, i8 %mask)
236*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.pd.512(i8* %ptr2, <8 x double> %data, i8 -1)
237*9880d681SAndroid Build Coastguard Worker  ret void
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.store.pd.512(i8*, <8 x double>, i8)
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerdefine void@test_int_x86_avx512_mask_storeu_q_512(i8* %ptr1, i8* %ptr2, <8 x i64> %x1, i8 %x2) {
243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_storeu_q_512:
244*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu64 %zmm0, (%rdi) {%k1}
247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu64 %zmm0, (%rsi)
248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
249*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.q.512(i8* %ptr1, <8 x i64> %x1, i8 %x2)
250*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.q.512(i8* %ptr2, <8 x i64> %x1, i8 -1)
251*9880d681SAndroid Build Coastguard Worker  ret void
252*9880d681SAndroid Build Coastguard Worker}
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.storeu.q.512(i8*, <8 x i64>, i8)
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workerdefine void@test_int_x86_avx512_mask_storeu_d_512(i8* %ptr1, i8* %ptr2, <16 x i32> %x1, i16 %x2) {
257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_storeu_d_512:
258*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu32 %zmm0, (%rdi) {%k1}
261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu32 %zmm0, (%rsi)
262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
263*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.d.512(i8* %ptr1, <16 x i32> %x1, i16 %x2)
264*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.storeu.d.512(i8* %ptr2, <16 x i32> %x1, i16 -1)
265*9880d681SAndroid Build Coastguard Worker  ret void
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.storeu.d.512(i8*, <16 x i32>, i16)
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Workerdefine void@test_int_x86_avx512_mask_store_q_512(i8* %ptr1, i8* %ptr2, <8 x i64> %x1, i8 %x2) {
271*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_store_q_512:
272*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa64 %zmm0, (%rdi) {%k1}
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa64 %zmm0, (%rsi)
276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
277*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.q.512(i8* %ptr1, <8 x i64> %x1, i8 %x2)
278*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.q.512(i8* %ptr2, <8 x i64> %x1, i8 -1)
279*9880d681SAndroid Build Coastguard Worker  ret void
280*9880d681SAndroid Build Coastguard Worker}
281*9880d681SAndroid Build Coastguard Worker
282*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.store.q.512(i8*, <8 x i64>, i8)
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Workerdefine void@test_int_x86_avx512_mask_store_d_512(i8* %ptr1, i8* %ptr2, <16 x i32> %x1, i16 %x2) {
285*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_store_d_512:
286*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
287*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa32 %zmm0, (%rdi) {%k1}
289*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa32 %zmm0, (%rsi)
290*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
291*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.d.512(i8* %ptr1, <16 x i32> %x1, i16 %x2)
292*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.mask.store.d.512(i8* %ptr2, <16 x i32> %x1, i16 -1)
293*9880d681SAndroid Build Coastguard Worker  ret void
294*9880d681SAndroid Build Coastguard Worker}
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.mask.store.d.512(i8*, <16 x i32>, i16)
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_load_aligned_ps(<16 x float> %data, i8* %ptr, i16 %mask) {
299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_aligned_ps:
300*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
301*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps (%rdi), %zmm0
302*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
303*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps (%rdi), %zmm0 {%k1}
304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps (%rdi), %zmm1 {%k1} {z}
305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm0, %zmm1, %zmm0
306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
307*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.load.ps.512(i8* %ptr, <16 x float> zeroinitializer, i16 -1)
308*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.load.ps.512(i8* %ptr, <16 x float> %res, i16 %mask)
309*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.load.ps.512(i8* %ptr, <16 x float> zeroinitializer, i16 %mask)
310*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res2, %res1
311*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.load.ps.512(i8*, <16 x float>, i16)
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_mask_load_unaligned_ps(<16 x float> %data, i8* %ptr, i16 %mask) {
317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_unaligned_ps:
318*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups (%rdi), %zmm0
320*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
321*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups (%rdi), %zmm0 {%k1}
322*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups (%rdi), %zmm1 {%k1} {z}
323*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm0, %zmm1, %zmm0
324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
325*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.loadu.ps.512(i8* %ptr, <16 x float> zeroinitializer, i16 -1)
326*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.loadu.ps.512(i8* %ptr, <16 x float> %res, i16 %mask)
327*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.loadu.ps.512(i8* %ptr, <16 x float> zeroinitializer, i16 %mask)
328*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res2, %res1
329*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
330*9880d681SAndroid Build Coastguard Worker}
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.loadu.ps.512(i8*, <16 x float>, i16)
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_load_aligned_pd(<8 x double> %data, i8* %ptr, i8 %mask) {
335*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_aligned_pd:
336*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovapd (%rdi), %zmm0
338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovapd (%rdi), %zmm0 {%k1}
340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovapd (%rdi), %zmm1 {%k1} {z}
341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm0, %zmm1, %zmm0
342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
343*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.load.pd.512(i8* %ptr, <8 x double> zeroinitializer, i8 -1)
344*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.load.pd.512(i8* %ptr, <8 x double> %res, i8 %mask)
345*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.load.pd.512(i8* %ptr, <8 x double> zeroinitializer, i8 %mask)
346*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res2, %res1
347*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.load.pd.512(i8*, <8 x double>, i8)
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_mask_load_unaligned_pd(<8 x double> %data, i8* %ptr, i8 %mask) {
353*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_unaligned_pd:
354*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
355*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovupd (%rdi), %zmm0
356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovupd (%rdi), %zmm0 {%k1}
358*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovupd (%rdi), %zmm1 {%k1} {z}
359*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm0, %zmm1, %zmm0
360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
361*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.loadu.pd.512(i8* %ptr, <8 x double> zeroinitializer, i8 -1)
362*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.loadu.pd.512(i8* %ptr, <8 x double> %res, i8 %mask)
363*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.loadu.pd.512(i8* %ptr, <8 x double> zeroinitializer, i8 %mask)
364*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res2, %res1
365*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
366*9880d681SAndroid Build Coastguard Worker}
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.loadu.pd.512(i8*, <8 x double>, i8)
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.loadu.d.512(i8*, <16 x i32>, i16)
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_mask_load_unaligned_d(i8* %ptr, i8* %ptr2, <16 x i32> %data, i16 %mask) {
373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_unaligned_d:
374*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
375*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu32 (%rdi), %zmm0
376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu32 (%rsi), %zmm0 {%k1}
378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu32 (%rdi), %zmm1 {%k1} {z}
379*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm0, %zmm1, %zmm0
380*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
381*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.loadu.d.512(i8* %ptr, <16 x i32> zeroinitializer, i16 -1)
382*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i32> @llvm.x86.avx512.mask.loadu.d.512(i8* %ptr2, <16 x i32> %res, i16 %mask)
383*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x i32> @llvm.x86.avx512.mask.loadu.d.512(i8* %ptr, <16 x i32> zeroinitializer, i16 %mask)
384*9880d681SAndroid Build Coastguard Worker  %res4 = add <16 x i32> %res2, %res1
385*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res4
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.loadu.q.512(i8*, <8 x i64>, i8)
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mask_load_unaligned_q(i8* %ptr, i8* %ptr2, <8 x i64> %data, i8 %mask) {
391*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_unaligned_q:
392*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
393*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu64 (%rdi), %zmm0
394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edx, %k1
395*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu64 (%rsi), %zmm0 {%k1}
396*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqu64 (%rdi), %zmm1 {%k1} {z}
397*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
398*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
399*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.loadu.q.512(i8* %ptr, <8 x i64> zeroinitializer, i8 -1)
400*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.mask.loadu.q.512(i8* %ptr2, <8 x i64> %res, i8 %mask)
401*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x i64> @llvm.x86.avx512.mask.loadu.q.512(i8* %ptr, <8 x i64> zeroinitializer, i8 %mask)
402*9880d681SAndroid Build Coastguard Worker  %res4 = add <8 x i64> %res2, %res1
403*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res4
404*9880d681SAndroid Build Coastguard Worker}
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.load.d.512(i8*, <16 x i32>, i16)
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_mask_load_aligned_d(<16 x i32> %data, i8* %ptr, i16 %mask) {
409*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_aligned_d:
410*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
411*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa32 (%rdi), %zmm0
412*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa32 (%rdi), %zmm0 {%k1}
414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa32 (%rdi), %zmm1 {%k1} {z}
415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm0, %zmm1, %zmm0
416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
417*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.load.d.512(i8* %ptr, <16 x i32> zeroinitializer, i16 -1)
418*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i32> @llvm.x86.avx512.mask.load.d.512(i8* %ptr, <16 x i32> %res, i16 %mask)
419*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x i32> @llvm.x86.avx512.mask.load.d.512(i8* %ptr, <16 x i32> zeroinitializer, i16 %mask)
420*9880d681SAndroid Build Coastguard Worker  %res4 = add <16 x i32> %res2, %res1
421*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res4
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.load.q.512(i8*, <8 x i64>, i8)
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mask_load_aligned_q(<8 x i64> %data, i8* %ptr, i8 %mask) {
427*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_load_aligned_q:
428*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
429*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa64 (%rdi), %zmm0
430*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
431*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa64 (%rdi), %zmm0 {%k1}
432*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovdqa64 (%rdi), %zmm1 {%k1} {z}
433*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm0, %zmm1, %zmm0
434*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
435*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.load.q.512(i8* %ptr, <8 x i64> zeroinitializer, i8 -1)
436*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.mask.load.q.512(i8* %ptr, <8 x i64> %res, i8 %mask)
437*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x i64> @llvm.x86.avx512.mask.load.q.512(i8* %ptr, <8 x i64> zeroinitializer, i8 %mask)
438*9880d681SAndroid Build Coastguard Worker  %res4 = add <8 x i64> %res2, %res1
439*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res4
440*9880d681SAndroid Build Coastguard Worker}
441*9880d681SAndroid Build Coastguard Worker
442*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.vpermil.pd.512(<8 x double>, i32, <8 x double>, i8)
443*9880d681SAndroid Build Coastguard Worker
444*9880d681SAndroid Build Coastguard Workerdefine <8 x double>@test_int_x86_avx512_mask_vpermil_pd_512(<8 x double> %x0, <8 x double> %x2, i8 %x3) {
445*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpermil_pd_512:
446*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
447*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilpd {{.*#+}} zmm2 = zmm0[0,1,3,2,5,4,6,6]
448*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
449*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilpd {{.*#+}} zmm1 {%k1} = zmm0[0,1,3,2,5,4,6,6]
450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,3,2,5,4,6,6]
451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm0, %zmm1, %zmm0
452*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm2, %zmm0, %zmm0
453*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
454*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.vpermil.pd.512(<8 x double> %x0, i32 22, <8 x double> %x2, i8 %x3)
455*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.vpermil.pd.512(<8 x double> %x0, i32 22, <8 x double> zeroinitializer, i8 %x3)
456*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x double> @llvm.x86.avx512.mask.vpermil.pd.512(<8 x double> %x0, i32 22, <8 x double> %x2, i8 -1)
457*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <8 x double> %res, %res1
458*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <8 x double> %res3, %res2
459*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res4
460*9880d681SAndroid Build Coastguard Worker}
461*9880d681SAndroid Build Coastguard Worker
462*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.vpermil.ps.512(<16 x float>, i32, <16 x float>, i16)
463*9880d681SAndroid Build Coastguard Worker
464*9880d681SAndroid Build Coastguard Workerdefine <16 x float>@test_int_x86_avx512_mask_vpermil_ps_512(<16 x float> %x0, <16 x float> %x2, i16 %x3) {
465*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpermil_ps_512:
466*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
467*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilps {{.*#+}} zmm2 = zmm0[2,1,1,0,6,5,5,4,10,9,9,8,14,13,13,12]
468*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
469*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilps {{.*#+}} zmm1 {%k1} = zmm0[2,1,1,0,6,5,5,4,10,9,9,8,14,13,13,12]
470*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpermilps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,1,1,0,6,5,5,4,10,9,9,8,14,13,13,12]
471*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm0, %zmm1, %zmm0
472*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm2, %zmm0, %zmm0
473*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
474*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.vpermil.ps.512(<16 x float> %x0, i32 22, <16 x float> %x2, i16 %x3)
475*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.vpermil.ps.512(<16 x float> %x0, i32 22, <16 x float> zeroinitializer, i16 %x3)
476*9880d681SAndroid Build Coastguard Worker  %res2 = call <16 x float> @llvm.x86.avx512.mask.vpermil.ps.512(<16 x float> %x0, i32 22, <16 x float> %x2, i16 -1)
477*9880d681SAndroid Build Coastguard Worker  %res3 = fadd <16 x float> %res, %res1
478*9880d681SAndroid Build Coastguard Worker  %res4 = fadd <16 x float> %res3, %res2
479*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res4
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.pshuf.d.512(<16 x i32>, i32, <16 x i32>, i16)
483*9880d681SAndroid Build Coastguard Worker
484*9880d681SAndroid Build Coastguard Workerdefine <16 x i32>@test_int_x86_avx512_mask_pshuf_d_512(<16 x i32> %x0, i32 %x1, <16 x i32> %x2, i16 %x3) {
485*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_pshuf_d_512:
486*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
487*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufd {{.*#+}} zmm2 = zmm0[3,0,0,0,7,4,4,4,11,8,8,8,15,12,12,12]
488*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %esi, %k1
489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufd {{.*#+}} zmm1 {%k1} = zmm0[3,0,0,0,7,4,4,4,11,8,8,8,15,12,12,12]
490*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,0,0,7,4,4,4,11,8,8,8,15,12,12,12]
491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm0, %zmm1, %zmm0
492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm0
493*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
494*9880d681SAndroid Build Coastguard Worker	%res = call <16 x i32> @llvm.x86.avx512.mask.pshuf.d.512(<16 x i32> %x0, i32 3, <16 x i32> %x2, i16 %x3)
495*9880d681SAndroid Build Coastguard Worker	%res1 = call <16 x i32> @llvm.x86.avx512.mask.pshuf.d.512(<16 x i32> %x0, i32 3, <16 x i32> zeroinitializer, i16 %x3)
496*9880d681SAndroid Build Coastguard Worker	%res2 = call <16 x i32> @llvm.x86.avx512.mask.pshuf.d.512(<16 x i32> %x0, i32 3, <16 x i32> %x2, i16 -1)
497*9880d681SAndroid Build Coastguard Worker	%res3 = add <16 x i32> %res, %res1
498*9880d681SAndroid Build Coastguard Worker	%res4 = add <16 x i32> %res3, %res2
499*9880d681SAndroid Build Coastguard Worker	ret <16 x i32> %res4
500*9880d681SAndroid Build Coastguard Worker}
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerdefine i16 @test_pcmpeq_d(<16 x i32> %a, <16 x i32> %b) {
503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pcmpeq_d:
504*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
505*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpeqd %zmm1, %zmm0, %k0
506*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
507*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
508*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
509*9880d681SAndroid Build Coastguard Worker  %res = call i16 @llvm.x86.avx512.mask.pcmpeq.d.512(<16 x i32> %a, <16 x i32> %b, i16 -1)
510*9880d681SAndroid Build Coastguard Worker  ret i16 %res
511*9880d681SAndroid Build Coastguard Worker}
512*9880d681SAndroid Build Coastguard Worker
513*9880d681SAndroid Build Coastguard Workerdefine i16 @test_mask_pcmpeq_d(<16 x i32> %a, <16 x i32> %b, i16 %mask) {
514*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_pcmpeq_d:
515*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
516*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
517*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpeqd %zmm1, %zmm0, %k0 {%k1}
518*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
519*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
520*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
521*9880d681SAndroid Build Coastguard Worker  %res = call i16 @llvm.x86.avx512.mask.pcmpeq.d.512(<16 x i32> %a, <16 x i32> %b, i16 %mask)
522*9880d681SAndroid Build Coastguard Worker  ret i16 %res
523*9880d681SAndroid Build Coastguard Worker}
524*9880d681SAndroid Build Coastguard Worker
525*9880d681SAndroid Build Coastguard Workerdeclare i16 @llvm.x86.avx512.mask.pcmpeq.d.512(<16 x i32>, <16 x i32>, i16)
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerdefine i8 @test_pcmpeq_q(<8 x i64> %a, <8 x i64> %b) {
528*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pcmpeq_q:
529*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpeqq %zmm1, %zmm0, %k0
531*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
532*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
533*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
534*9880d681SAndroid Build Coastguard Worker  %res = call i8 @llvm.x86.avx512.mask.pcmpeq.q.512(<8 x i64> %a, <8 x i64> %b, i8 -1)
535*9880d681SAndroid Build Coastguard Worker  ret i8 %res
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Workerdefine i8 @test_mask_pcmpeq_q(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_pcmpeq_q:
540*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
542*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpeqq %zmm1, %zmm0, %k0 {%k1}
543*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
544*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
545*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
546*9880d681SAndroid Build Coastguard Worker  %res = call i8 @llvm.x86.avx512.mask.pcmpeq.q.512(<8 x i64> %a, <8 x i64> %b, i8 %mask)
547*9880d681SAndroid Build Coastguard Worker  ret i8 %res
548*9880d681SAndroid Build Coastguard Worker}
549*9880d681SAndroid Build Coastguard Worker
550*9880d681SAndroid Build Coastguard Workerdeclare i8 @llvm.x86.avx512.mask.pcmpeq.q.512(<8 x i64>, <8 x i64>, i8)
551*9880d681SAndroid Build Coastguard Worker
552*9880d681SAndroid Build Coastguard Workerdefine i16 @test_pcmpgt_d(<16 x i32> %a, <16 x i32> %b) {
553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pcmpgt_d:
554*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
555*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
556*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
557*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
558*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
559*9880d681SAndroid Build Coastguard Worker  %res = call i16 @llvm.x86.avx512.mask.pcmpgt.d.512(<16 x i32> %a, <16 x i32> %b, i16 -1)
560*9880d681SAndroid Build Coastguard Worker  ret i16 %res
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Workerdefine i16 @test_mask_pcmpgt_d(<16 x i32> %a, <16 x i32> %b, i16 %mask) {
564*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_pcmpgt_d:
565*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
566*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
567*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0 {%k1}
568*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
569*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
570*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
571*9880d681SAndroid Build Coastguard Worker  %res = call i16 @llvm.x86.avx512.mask.pcmpgt.d.512(<16 x i32> %a, <16 x i32> %b, i16 %mask)
572*9880d681SAndroid Build Coastguard Worker  ret i16 %res
573*9880d681SAndroid Build Coastguard Worker}
574*9880d681SAndroid Build Coastguard Worker
575*9880d681SAndroid Build Coastguard Workerdeclare i16 @llvm.x86.avx512.mask.pcmpgt.d.512(<16 x i32>, <16 x i32>, i16)
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Workerdefine i8 @test_pcmpgt_q(<8 x i64> %a, <8 x i64> %b) {
578*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_pcmpgt_q:
579*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
580*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0
581*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
582*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
583*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
584*9880d681SAndroid Build Coastguard Worker  %res = call i8 @llvm.x86.avx512.mask.pcmpgt.q.512(<8 x i64> %a, <8 x i64> %b, i8 -1)
585*9880d681SAndroid Build Coastguard Worker  ret i8 %res
586*9880d681SAndroid Build Coastguard Worker}
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Workerdefine i8 @test_mask_pcmpgt_q(<8 x i64> %a, <8 x i64> %b, i8 %mask) {
589*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_pcmpgt_q:
590*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
592*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpcmpgtq %zmm1, %zmm0, %k0 {%k1}
593*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %k0, %eax
594*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
595*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
596*9880d681SAndroid Build Coastguard Worker  %res = call i8 @llvm.x86.avx512.mask.pcmpgt.q.512(<8 x i64> %a, <8 x i64> %b, i8 %mask)
597*9880d681SAndroid Build Coastguard Worker  ret i8 %res
598*9880d681SAndroid Build Coastguard Worker}
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Workerdeclare i8 @llvm.x86.avx512.mask.pcmpgt.q.512(<8 x i64>, <8 x i64>, i8)
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.unpckh.pd.512(<8 x double>, <8 x double>, <8 x double>, i8)
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerdefine <8 x double>@test_int_x86_avx512_mask_unpckh_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3) {
605*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_unpckh_pd_512:
606*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
607*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm3 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
609*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
610*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm3, %zmm2, %zmm0
611*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
612*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.unpckh.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3)
613*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.unpckh.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 -1)
614*9880d681SAndroid Build Coastguard Worker  %res2 = fadd <8 x double> %res, %res1
615*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res2
616*9880d681SAndroid Build Coastguard Worker}
617*9880d681SAndroid Build Coastguard Worker
618*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.unpckh.ps.512(<16 x float>, <16 x float>, <16 x float>, i16)
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Workerdefine <16 x float>@test_int_x86_avx512_mask_unpckh_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3) {
621*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_unpckh_ps_512:
622*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
623*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpckhps {{.*#+}} zmm3 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
624*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
625*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
626*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm3, %zmm2, %zmm0
627*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
628*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.unpckh.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3)
629*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.unpckh.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 -1)
630*9880d681SAndroid Build Coastguard Worker  %res2 = fadd <16 x float> %res, %res1
631*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res2
632*9880d681SAndroid Build Coastguard Worker}
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Workerdeclare <8 x double> @llvm.x86.avx512.mask.unpckl.pd.512(<8 x double>, <8 x double>, <8 x double>, i8)
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Workerdefine <8 x double>@test_int_x86_avx512_mask_unpckl_pd_512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3) {
637*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_unpckl_pd_512:
638*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
639*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
640*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
641*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
642*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %zmm3, %zmm2, %zmm0
643*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
644*9880d681SAndroid Build Coastguard Worker  %res = call <8 x double> @llvm.x86.avx512.mask.unpckl.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 %x3)
645*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x double> @llvm.x86.avx512.mask.unpckl.pd.512(<8 x double> %x0, <8 x double> %x1, <8 x double> %x2, i8 -1)
646*9880d681SAndroid Build Coastguard Worker  %res2 = fadd <8 x double> %res, %res1
647*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %res2
648*9880d681SAndroid Build Coastguard Worker}
649*9880d681SAndroid Build Coastguard Worker
650*9880d681SAndroid Build Coastguard Workerdeclare <16 x float> @llvm.x86.avx512.mask.unpckl.ps.512(<16 x float>, <16 x float>, <16 x float>, i16)
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerdefine <16 x float>@test_int_x86_avx512_mask_unpckl_ps_512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3) {
653*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_unpckl_ps_512:
654*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
655*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpcklps {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
656*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
657*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
658*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddps %zmm3, %zmm2, %zmm0
659*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
660*9880d681SAndroid Build Coastguard Worker  %res = call <16 x float> @llvm.x86.avx512.mask.unpckl.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 %x3)
661*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x float> @llvm.x86.avx512.mask.unpckl.ps.512(<16 x float> %x0, <16 x float> %x1, <16 x float> %x2, i16 -1)
662*9880d681SAndroid Build Coastguard Worker  %res2 = fadd <16 x float> %res, %res1
663*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %res2
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.punpcklqd.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8)
667*9880d681SAndroid Build Coastguard Worker
668*9880d681SAndroid Build Coastguard Workerdefine <8 x i64>@test_int_x86_avx512_mask_punpcklqd_q_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) {
669*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_punpcklqd_q_512:
670*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
671*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
672*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
673*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} zmm2 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
674*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpcklqdq {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]
675*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm3, %zmm2, %zmm1
676*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
677*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
678*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.punpcklqd.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3)
679*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.mask.punpcklqd.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1)
680*9880d681SAndroid Build Coastguard Worker  %res2 = call <8 x i64> @llvm.x86.avx512.mask.punpcklqd.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> zeroinitializer,i8 %x3)
681*9880d681SAndroid Build Coastguard Worker  %res3 = add <8 x i64> %res, %res1
682*9880d681SAndroid Build Coastguard Worker  %res4 = add <8 x i64> %res2, %res3
683*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res4
684*9880d681SAndroid Build Coastguard Worker}
685*9880d681SAndroid Build Coastguard Worker
686*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.punpckhqd.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8)
687*9880d681SAndroid Build Coastguard Worker
688*9880d681SAndroid Build Coastguard Workerdefine <8 x i64>@test_int_x86_avx512_mask_punpckhqd_q_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) {
689*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_punpckhqd_q_512:
690*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
691*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckhqdq {{.*#+}} zmm3 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
692*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
693*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckhqdq {{.*#+}} zmm2 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]
694*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %zmm3, %zmm2, %zmm0
695*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
696*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.punpckhqd.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3)
697*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i64> @llvm.x86.avx512.mask.punpckhqd.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1)
698*9880d681SAndroid Build Coastguard Worker  %res2 = add <8 x i64> %res, %res1
699*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res2
700*9880d681SAndroid Build Coastguard Worker}
701*9880d681SAndroid Build Coastguard Worker
702*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.punpckhd.q.512(<16 x i32>, <16 x i32>, <16 x i32>, i16)
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Workerdefine <16 x i32>@test_int_x86_avx512_mask_punpckhd_q_512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 %x3) {
705*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_punpckhd_q_512:
706*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
707*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckhdq {{.*#+}} zmm3 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
708*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
709*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckhdq {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]
710*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm3, %zmm2, %zmm0
711*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
712*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.punpckhd.q.512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 %x3)
713*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i32> @llvm.x86.avx512.mask.punpckhd.q.512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 -1)
714*9880d681SAndroid Build Coastguard Worker  %res2 = add <16 x i32> %res, %res1
715*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res2
716*9880d681SAndroid Build Coastguard Worker}
717*9880d681SAndroid Build Coastguard Worker
718*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.punpckld.q.512(<16 x i32>, <16 x i32>, <16 x i32>, i16)
719*9880d681SAndroid Build Coastguard Worker
720*9880d681SAndroid Build Coastguard Workerdefine <16 x i32>@test_int_x86_avx512_mask_punpckld_q_512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 %x3) {
721*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_punpckld_q_512:
722*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
723*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckldq {{.*#+}} zmm3 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
724*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpunpckldq {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]
726*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm3, %zmm2, %zmm0
727*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
728*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.punpckld.q.512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 %x3)
729*9880d681SAndroid Build Coastguard Worker  %res1 = call <16 x i32> @llvm.x86.avx512.mask.punpckld.q.512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i16 -1)
730*9880d681SAndroid Build Coastguard Worker  %res2 = add <16 x i32> %res, %res1
731*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res2
732*9880d681SAndroid Build Coastguard Worker}
733*9880d681SAndroid Build Coastguard Worker
734*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_pslli_d(<16 x i32> %a0) {
735*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_pslli_d:
736*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
737*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $7, %zmm0, %zmm0
738*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
739*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pslli.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 -1)
740*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
741*9880d681SAndroid Build Coastguard Worker}
742*9880d681SAndroid Build Coastguard Worker
743*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_mask_pslli_d(<16 x i32> %a0, <16 x i32> %a1, i16 %mask) {
744*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_pslli_d:
745*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
746*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
747*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $7, %zmm0, %zmm1 {%k1}
748*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
749*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
750*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pslli.d(<16 x i32> %a0, i32 7, <16 x i32> %a1, i16 %mask)
751*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
752*9880d681SAndroid Build Coastguard Worker}
753*9880d681SAndroid Build Coastguard Worker
754*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_maskz_pslli_d(<16 x i32> %a0, i16 %mask) {
755*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_pslli_d:
756*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
757*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
758*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpslld $7, %zmm0, %zmm0 {%k1} {z}
759*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
760*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pslli.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 %mask)
761*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
762*9880d681SAndroid Build Coastguard Worker}
763*9880d681SAndroid Build Coastguard Worker
764*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.pslli.d(<16 x i32>, i32, <16 x i32>, i16) nounwind readnone
765*9880d681SAndroid Build Coastguard Worker
766*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_pslli_q(<8 x i64> %a0) {
767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_pslli_q:
768*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
769*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $7, %zmm0, %zmm0
770*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
771*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pslli.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 -1)
772*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
773*9880d681SAndroid Build Coastguard Worker}
774*9880d681SAndroid Build Coastguard Worker
775*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_mask_pslli_q(<8 x i64> %a0, <8 x i64> %a1, i8 %mask) {
776*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_pslli_q:
777*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
778*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
779*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $7, %zmm0, %zmm1 {%k1}
780*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
781*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
782*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pslli.q(<8 x i64> %a0, i32 7, <8 x i64> %a1, i8 %mask)
783*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
784*9880d681SAndroid Build Coastguard Worker}
785*9880d681SAndroid Build Coastguard Worker
786*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_maskz_pslli_q(<8 x i64> %a0, i8 %mask) {
787*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_pslli_q:
788*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
789*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
790*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsllq $7, %zmm0, %zmm0 {%k1} {z}
791*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
792*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pslli.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 %mask)
793*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
794*9880d681SAndroid Build Coastguard Worker}
795*9880d681SAndroid Build Coastguard Worker
796*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.pslli.q(<8 x i64>, i32, <8 x i64>, i8) nounwind readnone
797*9880d681SAndroid Build Coastguard Worker
798*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_psrli_d(<16 x i32> %a0) {
799*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_psrli_d:
800*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
801*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $7, %zmm0, %zmm0
802*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
803*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrli.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 -1)
804*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
805*9880d681SAndroid Build Coastguard Worker}
806*9880d681SAndroid Build Coastguard Worker
807*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_mask_psrli_d(<16 x i32> %a0, <16 x i32> %a1, i16 %mask) {
808*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_psrli_d:
809*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
810*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
811*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $7, %zmm0, %zmm1 {%k1}
812*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
813*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
814*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrli.d(<16 x i32> %a0, i32 7, <16 x i32> %a1, i16 %mask)
815*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
816*9880d681SAndroid Build Coastguard Worker}
817*9880d681SAndroid Build Coastguard Worker
818*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_maskz_psrli_d(<16 x i32> %a0, i16 %mask) {
819*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_psrli_d:
820*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
821*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
822*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $7, %zmm0, %zmm0 {%k1} {z}
823*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
824*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrli.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 %mask)
825*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
826*9880d681SAndroid Build Coastguard Worker}
827*9880d681SAndroid Build Coastguard Worker
828*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.psrli.d(<16 x i32>, i32, <16 x i32>, i16) nounwind readnone
829*9880d681SAndroid Build Coastguard Worker
830*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_psrli_q(<8 x i64> %a0) {
831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_psrli_q:
832*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
833*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlq $7, %zmm0, %zmm0
834*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
835*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrli.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 -1)
836*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
837*9880d681SAndroid Build Coastguard Worker}
838*9880d681SAndroid Build Coastguard Worker
839*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_mask_psrli_q(<8 x i64> %a0, <8 x i64> %a1, i8 %mask) {
840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_psrli_q:
841*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
842*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
843*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlq $7, %zmm0, %zmm1 {%k1}
844*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
845*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
846*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrli.q(<8 x i64> %a0, i32 7, <8 x i64> %a1, i8 %mask)
847*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
848*9880d681SAndroid Build Coastguard Worker}
849*9880d681SAndroid Build Coastguard Worker
850*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_maskz_psrli_q(<8 x i64> %a0, i8 %mask) {
851*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_psrli_q:
852*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
853*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
854*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrlq $7, %zmm0, %zmm0 {%k1} {z}
855*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
856*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrli.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 %mask)
857*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
858*9880d681SAndroid Build Coastguard Worker}
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.psrli.q(<8 x i64>, i32, <8 x i64>, i8) nounwind readnone
861*9880d681SAndroid Build Coastguard Worker
862*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_psrai_d(<16 x i32> %a0) {
863*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_psrai_d:
864*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
865*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $7, %zmm0, %zmm0
866*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
867*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrai.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 -1)
868*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
869*9880d681SAndroid Build Coastguard Worker}
870*9880d681SAndroid Build Coastguard Worker
871*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_mask_psrai_d(<16 x i32> %a0, <16 x i32> %a1, i16 %mask) {
872*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_psrai_d:
873*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
874*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
875*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $7, %zmm0, %zmm1 {%k1}
876*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
877*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
878*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrai.d(<16 x i32> %a0, i32 7, <16 x i32> %a1, i16 %mask)
879*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
880*9880d681SAndroid Build Coastguard Worker}
881*9880d681SAndroid Build Coastguard Worker
882*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_x86_avx512_maskz_psrai_d(<16 x i32> %a0, i16 %mask) {
883*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_psrai_d:
884*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
885*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
886*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $7, %zmm0, %zmm0 {%k1} {z}
887*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
888*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.psrai.d(<16 x i32> %a0, i32 7, <16 x i32> zeroinitializer, i16 %mask)
889*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %res
890*9880d681SAndroid Build Coastguard Worker}
891*9880d681SAndroid Build Coastguard Worker
892*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.psrai.d(<16 x i32>, i32, <16 x i32>, i16) nounwind readnone
893*9880d681SAndroid Build Coastguard Worker
894*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_psrai_q(<8 x i64> %a0) {
895*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_psrai_q:
896*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
897*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraq $7, %zmm0, %zmm0
898*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
899*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrai.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 -1)
900*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
901*9880d681SAndroid Build Coastguard Worker}
902*9880d681SAndroid Build Coastguard Worker
903*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_mask_psrai_q(<8 x i64> %a0, <8 x i64> %a1, i8 %mask) {
904*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_mask_psrai_q:
905*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
906*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
907*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraq $7, %zmm0, %zmm1 {%k1}
908*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm1, %zmm0
909*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
910*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrai.q(<8 x i64> %a0, i32 7, <8 x i64> %a1, i8 %mask)
911*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
912*9880d681SAndroid Build Coastguard Worker}
913*9880d681SAndroid Build Coastguard Worker
914*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_x86_avx512_maskz_psrai_q(<8 x i64> %a0, i8 %mask) {
915*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_avx512_maskz_psrai_q:
916*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
917*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
918*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsraq $7, %zmm0, %zmm0 {%k1} {z}
919*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
920*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.psrai.q(<8 x i64> %a0, i32 7, <8 x i64> zeroinitializer, i8 %mask)
921*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %res
922*9880d681SAndroid Build Coastguard Worker}
923*9880d681SAndroid Build Coastguard Worker
924*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.psrai.q(<8 x i64>, i32, <8 x i64>, i8) nounwind readnone
925*9880d681SAndroid Build Coastguard Worker
926*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.storent.q.512(i8*, <8 x i64>)
927*9880d681SAndroid Build Coastguard Worker
928*9880d681SAndroid Build Coastguard Workerdefine void@test_storent_q_512(<8 x i64> %data, i8* %ptr) {
929*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_storent_q_512:
930*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
931*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovntdq %zmm0, (%rdi)
932*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
933*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.storent.q.512(i8* %ptr, <8 x i64> %data)
934*9880d681SAndroid Build Coastguard Worker  ret void
935*9880d681SAndroid Build Coastguard Worker}
936*9880d681SAndroid Build Coastguard Worker
937*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.storent.pd.512(i8*, <8 x double>)
938*9880d681SAndroid Build Coastguard Worker
939*9880d681SAndroid Build Coastguard Workerdefine void @test_storent_pd_512(<8 x double> %data, i8* %ptr) {
940*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_storent_pd_512:
941*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
942*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovntpd %zmm0, (%rdi)
943*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
944*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.storent.pd.512(i8* %ptr, <8 x double> %data)
945*9880d681SAndroid Build Coastguard Worker  ret void
946*9880d681SAndroid Build Coastguard Worker}
947*9880d681SAndroid Build Coastguard Worker
948*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx512.storent.ps.512(i8*, <16 x float>)
949*9880d681SAndroid Build Coastguard Worker
950*9880d681SAndroid Build Coastguard Workerdefine void @test_storent_ps_512(<16 x float> %data, i8* %ptr) {
951*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_storent_ps_512:
952*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
953*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovntps %zmm0, (%rdi)
954*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
955*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx512.storent.ps.512(i8* %ptr, <16 x float> %data)
956*9880d681SAndroid Build Coastguard Worker  ret void
957*9880d681SAndroid Build Coastguard Worker}
958*9880d681SAndroid Build Coastguard Worker
959*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_xor_epi32(<16 x i32> %a, <16 x i32> %b) {
960*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_xor_epi32:
961*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
962*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm1, %zmm0, %zmm0
963*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
964*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pxor.d.512(<16 x i32> %a,<16 x i32> %b, <16 x i32>zeroinitializer, i16 -1)
965*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
966*9880d681SAndroid Build Coastguard Worker}
967*9880d681SAndroid Build Coastguard Worker
968*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_mask_xor_epi32(<16 x i32> %a,<16 x i32> %b, <16 x i32> %passThru, i16 %mask) {
969*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_xor_epi32:
970*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
971*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
972*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxord %zmm1, %zmm0, %zmm2 {%k1}
973*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
974*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
975*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pxor.d.512(<16 x i32> %a, <16 x i32> %b, <16 x i32> %passThru, i16 %mask)
976*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
977*9880d681SAndroid Build Coastguard Worker}
978*9880d681SAndroid Build Coastguard Worker
979*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.pxor.d.512(<16 x i32>, <16 x i32>, <16 x i32>, i16)
980*9880d681SAndroid Build Coastguard Worker
981*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_or_epi32(<16 x i32> %a, <16 x i32> %b) {
982*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_or_epi32:
983*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
984*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpord %zmm1, %zmm0, %zmm0
985*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
986*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.por.d.512(<16 x i32> %a,<16 x i32> %b, <16 x i32>zeroinitializer, i16 -1)
987*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
988*9880d681SAndroid Build Coastguard Worker}
989*9880d681SAndroid Build Coastguard Worker
990*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_mask_or_epi32(<16 x i32> %a,<16 x i32> %b, <16 x i32> %passThru, i16 %mask) {
991*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_or_epi32:
992*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
993*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
994*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpord %zmm1, %zmm0, %zmm2 {%k1}
995*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
996*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
997*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.por.d.512(<16 x i32> %a, <16 x i32> %b, <16 x i32> %passThru, i16 %mask)
998*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
999*9880d681SAndroid Build Coastguard Worker}
1000*9880d681SAndroid Build Coastguard Worker
1001*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.por.d.512(<16 x i32>, <16 x i32>, <16 x i32>, i16)
1002*9880d681SAndroid Build Coastguard Worker
1003*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_and_epi32(<16 x i32> %a, <16 x i32> %b) {
1004*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_and_epi32:
1005*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1006*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandd %zmm1, %zmm0, %zmm0
1007*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1008*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pand.d.512(<16 x i32> %a,<16 x i32> %b, <16 x i32>zeroinitializer, i16 -1)
1009*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
1010*9880d681SAndroid Build Coastguard Worker}
1011*9880d681SAndroid Build Coastguard Worker
1012*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_mask_and_epi32(<16 x i32> %a,<16 x i32> %b, <16 x i32> %passThru, i16 %mask) {
1013*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_and_epi32:
1014*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1015*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
1016*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandd %zmm1, %zmm0, %zmm2 {%k1}
1017*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1018*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1019*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i32> @llvm.x86.avx512.mask.pand.d.512(<16 x i32> %a, <16 x i32> %b, <16 x i32> %passThru, i16 %mask)
1020*9880d681SAndroid Build Coastguard Worker  ret < 16 x i32> %res
1021*9880d681SAndroid Build Coastguard Worker}
1022*9880d681SAndroid Build Coastguard Worker
1023*9880d681SAndroid Build Coastguard Workerdeclare <16 x i32> @llvm.x86.avx512.mask.pand.d.512(<16 x i32>, <16 x i32>, <16 x i32>, i16)
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_xor_epi64(<8 x i64> %a, <8 x i64> %b) {
1026*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_xor_epi64:
1027*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1028*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
1029*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1030*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pxor.q.512(<8 x i64> %a,<8 x i64> %b, <8 x i64>zeroinitializer, i8 -1)
1031*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1032*9880d681SAndroid Build Coastguard Worker}
1033*9880d681SAndroid Build Coastguard Worker
1034*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mask_xor_epi64(<8 x i64> %a,<8 x i64> %b, <8 x i64> %passThru, i8 %mask) {
1035*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_xor_epi64:
1036*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1037*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
1038*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpxorq %zmm1, %zmm0, %zmm2 {%k1}
1039*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1040*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1041*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pxor.q.512(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passThru, i8 %mask)
1042*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1043*9880d681SAndroid Build Coastguard Worker}
1044*9880d681SAndroid Build Coastguard Worker
1045*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.pxor.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8)
1046*9880d681SAndroid Build Coastguard Worker
1047*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_or_epi64(<8 x i64> %a, <8 x i64> %b) {
1048*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_or_epi64:
1049*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1050*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vporq %zmm1, %zmm0, %zmm0
1051*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1052*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.por.q.512(<8 x i64> %a,<8 x i64> %b, <8 x i64>zeroinitializer, i8 -1)
1053*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1054*9880d681SAndroid Build Coastguard Worker}
1055*9880d681SAndroid Build Coastguard Worker
1056*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mask_or_epi64(<8 x i64> %a,<8 x i64> %b, <8 x i64> %passThru, i8 %mask) {
1057*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_or_epi64:
1058*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1059*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
1060*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vporq %zmm1, %zmm0, %zmm2 {%k1}
1061*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1062*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1063*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.por.q.512(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passThru, i8 %mask)
1064*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1065*9880d681SAndroid Build Coastguard Worker}
1066*9880d681SAndroid Build Coastguard Worker
1067*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.por.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8)
1068*9880d681SAndroid Build Coastguard Worker
1069*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_and_epi64(<8 x i64> %a, <8 x i64> %b) {
1070*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_and_epi64:
1071*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1072*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandq %zmm1, %zmm0, %zmm0
1073*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1074*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pand.q.512(<8 x i64> %a,<8 x i64> %b, <8 x i64>zeroinitializer, i8 -1)
1075*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1076*9880d681SAndroid Build Coastguard Worker}
1077*9880d681SAndroid Build Coastguard Worker
1078*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_mask_and_epi64(<8 x i64> %a,<8 x i64> %b, <8 x i64> %passThru, i8 %mask) {
1079*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_mask_and_epi64:
1080*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
1081*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
1082*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandq %zmm1, %zmm0, %zmm2 {%k1}
1083*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1084*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
1085*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i64> @llvm.x86.avx512.mask.pand.q.512(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passThru, i8 %mask)
1086*9880d681SAndroid Build Coastguard Worker  ret < 8 x i64> %res
1087*9880d681SAndroid Build Coastguard Worker}
1088*9880d681SAndroid Build Coastguard Worker
1089*9880d681SAndroid Build Coastguard Workerdeclare <8 x i64> @llvm.x86.avx512.mask.pand.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i8)
1090