917 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl,+avx512dq | FileCheck %s3 4define dso_local void @gather_mask_dps(<16 x i32> %ind, <16 x float> %src, i16 %mask, ptr %base, ptr %stbuf) {5; CHECK-LABEL: gather_mask_dps:6; CHECK: # %bb.0:7; CHECK-NEXT: kmovd %edi, %k18; CHECK-NEXT: kmovq %k1, %k29; CHECK-NEXT: vgatherdps (%rsi,%zmm0,4), %zmm1 {%k2}10; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm011; CHECK-NEXT: vscatterdps %zmm1, (%rdx,%zmm0,4) {%k1}12; CHECK-NEXT: vzeroupper13; CHECK-NEXT: retq14 %1 = bitcast i16 %mask to <16 x i1>15 %x = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> %1, i32 4)16 %ind2 = add <16 x i32> %ind, <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>17 call void @llvm.x86.avx512.mask.scatter.dps.512(ptr %stbuf, <16 x i1> %1, <16 x i32> %ind2, <16 x float> %x, i32 4)18 ret void19}20 21define dso_local void @gather_mask_dpd(<8 x i32> %ind, <8 x double> %src, i8 %mask, ptr %base, ptr %stbuf) {22; CHECK-LABEL: gather_mask_dpd:23; CHECK: # %bb.0:24; CHECK-NEXT: kmovd %edi, %k125; CHECK-NEXT: kmovq %k1, %k226; CHECK-NEXT: vgatherdpd (%rsi,%ymm0,4), %zmm1 {%k2}27; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm028; CHECK-NEXT: vscatterdpd %zmm1, (%rdx,%ymm0,4) {%k1}29; CHECK-NEXT: vzeroupper30; CHECK-NEXT: retq31 %1 = bitcast i8 %mask to <8 x i1>32 %x = call <8 x double> @llvm.x86.avx512.mask.gather.dpd.512(<8 x double> %src, ptr %base, <8 x i32> %ind, <8 x i1> %1, i32 4)33 %ind2 = add <8 x i32> %ind, <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>34 call void @llvm.x86.avx512.mask.scatter.dpd.512(ptr %stbuf, <8 x i1> %1, <8 x i32> %ind2, <8 x double> %x, i32 4)35 ret void36}37 38define dso_local void @gather_mask_qps(<8 x i64> %ind, <8 x float> %src, i8 %mask, ptr %base, ptr %stbuf) {39; CHECK-LABEL: gather_mask_qps:40; CHECK: # %bb.0:41; CHECK-NEXT: kmovd %edi, %k142; CHECK-NEXT: kmovq %k1, %k243; CHECK-NEXT: vgatherqps (%rsi,%zmm0,4), %ymm1 {%k2}44; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm045; CHECK-NEXT: vscatterqps %ymm1, (%rdx,%zmm0,4) {%k1}46; CHECK-NEXT: vzeroupper47; CHECK-NEXT: retq48 %1 = bitcast i8 %mask to <8 x i1>49 %x = call <8 x float> @llvm.x86.avx512.mask.gather.qps.512(<8 x float> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)50 %ind2 = add <8 x i64> %ind, <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>51 call void @llvm.x86.avx512.mask.scatter.qps.512(ptr %stbuf, <8 x i1> %1, <8 x i64> %ind2, <8 x float> %x, i32 4)52 ret void53}54 55define dso_local void @gather_mask_qpd(<8 x i64> %ind, <8 x double> %src, i8 %mask, ptr %base, ptr %stbuf) {56; CHECK-LABEL: gather_mask_qpd:57; CHECK: # %bb.0:58; CHECK-NEXT: kmovd %edi, %k159; CHECK-NEXT: kmovq %k1, %k260; CHECK-NEXT: vgatherqpd (%rsi,%zmm0,4), %zmm1 {%k2}61; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm062; CHECK-NEXT: vscatterqpd %zmm1, (%rdx,%zmm0,4) {%k1}63; CHECK-NEXT: vzeroupper64; CHECK-NEXT: retq65 %1 = bitcast i8 %mask to <8 x i1>66 %x = call <8 x double> @llvm.x86.avx512.mask.gather.qpd.512(<8 x double> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)67 %ind2 = add <8 x i64> %ind, <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>68 call void @llvm.x86.avx512.mask.scatter.qpd.512(ptr %stbuf, <8 x i1> %1, <8 x i64> %ind2, <8 x double> %x, i32 4)69 ret void70}71;;72;; Integer Gather/Scatter73;;74 75define dso_local void @gather_mask_dd(<16 x i32> %ind, <16 x i32> %src, i16 %mask, ptr %base, ptr %stbuf) {76; CHECK-LABEL: gather_mask_dd:77; CHECK: # %bb.0:78; CHECK-NEXT: kmovd %edi, %k179; CHECK-NEXT: kmovq %k1, %k280; CHECK-NEXT: vpgatherdd (%rsi,%zmm0,4), %zmm1 {%k2}81; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm082; CHECK-NEXT: vpscatterdd %zmm1, (%rdx,%zmm0,4) {%k1}83; CHECK-NEXT: vzeroupper84; CHECK-NEXT: retq85 %1 = bitcast i16 %mask to <16 x i1>86 %x = call <16 x i32> @llvm.x86.avx512.mask.gather.dpi.512(<16 x i32> %src, ptr %base, <16 x i32> %ind, <16 x i1> %1, i32 4)87 %ind2 = add <16 x i32> %ind, <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>88 call void @llvm.x86.avx512.mask.scatter.dpi.512(ptr %stbuf, <16 x i1> %1, <16 x i32> %ind2, <16 x i32> %x, i32 4)89 ret void90}91 92define dso_local void @gather_mask_qd(<8 x i64> %ind, <8 x i32> %src, i8 %mask, ptr %base, ptr %stbuf) {93; CHECK-LABEL: gather_mask_qd:94; CHECK: # %bb.0:95; CHECK-NEXT: kmovd %edi, %k196; CHECK-NEXT: kmovq %k1, %k297; CHECK-NEXT: vpgatherqd (%rsi,%zmm0,4), %ymm1 {%k2}98; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm099; CHECK-NEXT: vpscatterqd %ymm1, (%rdx,%zmm0,4) {%k1}100; CHECK-NEXT: vzeroupper101; CHECK-NEXT: retq102 %1 = bitcast i8 %mask to <8 x i1>103 %x = call <8 x i32> @llvm.x86.avx512.mask.gather.qpi.512(<8 x i32> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)104 %ind2 = add <8 x i64> %ind, <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>105 call void @llvm.x86.avx512.mask.scatter.qpi.512(ptr %stbuf, <8 x i1> %1, <8 x i64> %ind2, <8 x i32> %x, i32 4)106 ret void107}108 109define dso_local void @gather_mask_qq(<8 x i64> %ind, <8 x i64> %src, i8 %mask, ptr %base, ptr %stbuf) {110; CHECK-LABEL: gather_mask_qq:111; CHECK: # %bb.0:112; CHECK-NEXT: kmovd %edi, %k1113; CHECK-NEXT: kmovq %k1, %k2114; CHECK-NEXT: vpgatherqq (%rsi,%zmm0,4), %zmm1 {%k2}115; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0116; CHECK-NEXT: vpscatterqq %zmm1, (%rdx,%zmm0,4) {%k1}117; CHECK-NEXT: vzeroupper118; CHECK-NEXT: retq119 %1 = bitcast i8 %mask to <8 x i1>120 %x = call <8 x i64> @llvm.x86.avx512.mask.gather.qpq.512(<8 x i64> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)121 %ind2 = add <8 x i64> %ind, <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>122 call void @llvm.x86.avx512.mask.scatter.qpq.512(ptr %stbuf, <8 x i1> %1, <8 x i64> %ind2, <8 x i64> %x, i32 4)123 ret void124}125 126define dso_local void @gather_mask_dq(<8 x i32> %ind, <8 x i64> %src, i8 %mask, ptr %base, ptr %stbuf) {127; CHECK-LABEL: gather_mask_dq:128; CHECK: # %bb.0:129; CHECK-NEXT: kmovd %edi, %k1130; CHECK-NEXT: kmovq %k1, %k2131; CHECK-NEXT: vpgatherdq (%rsi,%ymm0,4), %zmm1 {%k2}132; CHECK-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0133; CHECK-NEXT: vpscatterdq %zmm1, (%rdx,%ymm0,4) {%k1}134; CHECK-NEXT: vzeroupper135; CHECK-NEXT: retq136 %1 = bitcast i8 %mask to <8 x i1>137 %x = call <8 x i64> @llvm.x86.avx512.mask.gather.dpq.512(<8 x i64> %src, ptr %base, <8 x i32> %ind, <8 x i1> %1, i32 4)138 %ind2 = add <8 x i32> %ind, <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>139 call void @llvm.x86.avx512.mask.scatter.dpq.512(ptr %stbuf, <8 x i1> %1, <8 x i32> %ind2, <8 x i64> %x, i32 4)140 ret void141}142 143define dso_local void @gather_mask_dpd_execdomain(<8 x i32> %ind, <8 x double> %src, i8 %mask, ptr %base, ptr %stbuf) {144; CHECK-LABEL: gather_mask_dpd_execdomain:145; CHECK: # %bb.0:146; CHECK-NEXT: kmovd %edi, %k1147; CHECK-NEXT: vgatherdpd (%rsi,%ymm0,4), %zmm1 {%k1}148; CHECK-NEXT: vmovapd %zmm1, (%rdx)149; CHECK-NEXT: vzeroupper150; CHECK-NEXT: retq151 %1 = bitcast i8 %mask to <8 x i1>152 %x = call <8 x double> @llvm.x86.avx512.mask.gather.dpd.512(<8 x double> %src, ptr %base, <8 x i32> %ind, <8 x i1> %1, i32 4)153 store <8 x double> %x, ptr %stbuf154 ret void155}156 157define dso_local void @gather_mask_qpd_execdomain(<8 x i64> %ind, <8 x double> %src, i8 %mask, ptr %base, ptr %stbuf) {158; CHECK-LABEL: gather_mask_qpd_execdomain:159; CHECK: # %bb.0:160; CHECK-NEXT: kmovd %edi, %k1161; CHECK-NEXT: vgatherqpd (%rsi,%zmm0,4), %zmm1 {%k1}162; CHECK-NEXT: vmovapd %zmm1, (%rdx)163; CHECK-NEXT: vzeroupper164; CHECK-NEXT: retq165 %1 = bitcast i8 %mask to <8 x i1>166 %x = call <8 x double> @llvm.x86.avx512.mask.gather.qpd.512(<8 x double> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)167 store <8 x double> %x, ptr %stbuf168 ret void169}170 171define <16 x float> @gather_mask_dps_execdomain(<16 x i32> %ind, <16 x float> %src, i16 %mask, ptr %base) {172; CHECK-LABEL: gather_mask_dps_execdomain:173; CHECK: # %bb.0:174; CHECK-NEXT: kmovd %edi, %k1175; CHECK-NEXT: vgatherdps (%rsi,%zmm0,4), %zmm1 {%k1}176; CHECK-NEXT: vmovaps %zmm1, %zmm0177; CHECK-NEXT: retq178 %1 = bitcast i16 %mask to <16 x i1>179 %res = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> %1, i32 4)180 ret <16 x float> %res181}182 183define <8 x float> @gather_mask_qps_execdomain(<8 x i64> %ind, <8 x float> %src, i8 %mask, ptr %base) {184; CHECK-LABEL: gather_mask_qps_execdomain:185; CHECK: # %bb.0:186; CHECK-NEXT: kmovd %edi, %k1187; CHECK-NEXT: vgatherqps (%rsi,%zmm0,4), %ymm1 {%k1}188; CHECK-NEXT: vmovaps %ymm1, %ymm0189; CHECK-NEXT: retq190 %1 = bitcast i8 %mask to <8 x i1>191 %res = call <8 x float> @llvm.x86.avx512.mask.gather.qps.512(<8 x float> %src, ptr %base, <8 x i64> %ind, <8 x i1> %1, i32 4)192 ret <8 x float> %res193}194 195define dso_local void @scatter_mask_dpd_execdomain(<8 x i32> %ind, ptr %src, i8 %mask, ptr %base, ptr %stbuf) {196; CHECK-LABEL: scatter_mask_dpd_execdomain:197; CHECK: # %bb.0:198; CHECK-NEXT: kmovd %esi, %k1199; CHECK-NEXT: vmovapd (%rdi), %zmm1200; CHECK-NEXT: vscatterdpd %zmm1, (%rcx,%ymm0,4) {%k1}201; CHECK-NEXT: vzeroupper202; CHECK-NEXT: retq203 %1 = bitcast i8 %mask to <8 x i1>204 %x = load <8 x double>, ptr %src, align 64205 call void @llvm.x86.avx512.mask.scatter.dpd.512(ptr %stbuf, <8 x i1> %1, <8 x i32>%ind, <8 x double> %x, i32 4)206 ret void207}208 209define dso_local void @scatter_mask_qpd_execdomain(<8 x i64> %ind, ptr %src, i8 %mask, ptr %base, ptr %stbuf) {210; CHECK-LABEL: scatter_mask_qpd_execdomain:211; CHECK: # %bb.0:212; CHECK-NEXT: kmovd %esi, %k1213; CHECK-NEXT: vmovapd (%rdi), %zmm1214; CHECK-NEXT: vscatterqpd %zmm1, (%rcx,%zmm0,4) {%k1}215; CHECK-NEXT: vzeroupper216; CHECK-NEXT: retq217 %1 = bitcast i8 %mask to <8 x i1>218 %x = load <8 x double>, ptr %src, align 64219 call void @llvm.x86.avx512.mask.scatter.qpd.512(ptr %stbuf, <8 x i1> %1, <8 x i64>%ind, <8 x double> %x, i32 4)220 ret void221}222 223define dso_local void @scatter_mask_dps_execdomain(<16 x i32> %ind, ptr %src, i16 %mask, ptr %base, ptr %stbuf) {224; CHECK-LABEL: scatter_mask_dps_execdomain:225; CHECK: # %bb.0:226; CHECK-NEXT: kmovd %esi, %k1227; CHECK-NEXT: vmovaps (%rdi), %zmm1228; CHECK-NEXT: vscatterdps %zmm1, (%rcx,%zmm0,4) {%k1}229; CHECK-NEXT: vzeroupper230; CHECK-NEXT: retq231 %1 = bitcast i16 %mask to <16 x i1>232 %x = load <16 x float>, ptr %src, align 64233 call void @llvm.x86.avx512.mask.scatter.dps.512(ptr %stbuf, <16 x i1> %1, <16 x i32>%ind, <16 x float> %x, i32 4)234 ret void235}236 237define dso_local void @scatter_mask_qps_execdomain(<8 x i64> %ind, ptr %src, i8 %mask, ptr %base, ptr %stbuf) {238; CHECK-LABEL: scatter_mask_qps_execdomain:239; CHECK: # %bb.0:240; CHECK-NEXT: kmovd %esi, %k1241; CHECK-NEXT: vmovaps (%rdi), %ymm1242; CHECK-NEXT: vscatterqps %ymm1, (%rcx,%zmm0,4) {%k1}243; CHECK-NEXT: vzeroupper244; CHECK-NEXT: retq245 %1 = bitcast i8 %mask to <8 x i1>246 %x = load <8 x float>, ptr %src, align 32247 call void @llvm.x86.avx512.mask.scatter.qps.512(ptr %stbuf, <8 x i1> %1, <8 x i64>%ind, <8 x float> %x, i32 4)248 ret void249}250 251define dso_local void @gather_qps(<8 x i64> %ind, <8 x float> %src, ptr %base, ptr %stbuf) {252; CHECK-LABEL: gather_qps:253; CHECK: # %bb.0:254; CHECK-NEXT: kxnorb %k0, %k0, %k1255; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1256; CHECK-NEXT: kxnorb %k0, %k0, %k2257; CHECK-NEXT: vgatherqps (%rdi,%zmm0,4), %ymm1 {%k2}258; CHECK-NEXT: vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0259; CHECK-NEXT: vscatterqps %ymm1, (%rsi,%zmm0,4) {%k1}260; CHECK-NEXT: vzeroupper261; CHECK-NEXT: retq262 %x = call <8 x float> @llvm.x86.avx512.mask.gather.qps.512(<8 x float> %src, ptr %base, <8 x i64> %ind, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)263 %ind2 = add <8 x i64> %ind, <i64 0, i64 1, i64 2, i64 3, i64 0, i64 1, i64 2, i64 3>264 call void @llvm.x86.avx512.mask.scatter.qps.512(ptr %stbuf, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i64> %ind2, <8 x float> %x, i32 4)265 ret void266}267 268define <2 x double> @test_int_x86_avx512_mask_gather3div2_df(<2 x double> %x0, ptr %x1, <2 x i64> %x2, i8 %x3) {269; CHECK-LABEL: test_int_x86_avx512_mask_gather3div2_df:270; CHECK: # %bb.0:271; CHECK-NEXT: kmovd %esi, %k1272; CHECK-NEXT: vgatherqpd (%rdi,%xmm1,4), %xmm0 {%k1}273; CHECK-NEXT: kxnorw %k0, %k0, %k1274; CHECK-NEXT: vxorpd %xmm2, %xmm2, %xmm2275; CHECK-NEXT: vgatherqpd (%rdi,%xmm1,2), %xmm2 {%k1}276; CHECK-NEXT: vaddpd %xmm2, %xmm0, %xmm0277; CHECK-NEXT: retq278 %1 = bitcast i8 %x3 to <8 x i1>279 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>280 %res = call <2 x double> @llvm.x86.avx512.mask.gather3div2.df(<2 x double> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> %extract, i32 4)281 %res1 = call <2 x double> @llvm.x86.avx512.mask.gather3div2.df(<2 x double> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> <i1 true, i1 true>, i32 2)282 %res2 = fadd <2 x double> %res, %res1283 ret <2 x double> %res2284}285 286define <2 x i64> @test_int_x86_avx512_mask_gather3div2_di(<2 x i64> %x0, ptr %x1, <2 x i64> %x2, i8 %x3) {287; CHECK-LABEL: test_int_x86_avx512_mask_gather3div2_di:288; CHECK: # %bb.0:289; CHECK-NEXT: kmovd %esi, %k1290; CHECK-NEXT: vpgatherqq (%rdi,%xmm1,8), %xmm0 {%k1}291; CHECK-NEXT: vpaddq %xmm0, %xmm0, %xmm0292; CHECK-NEXT: retq293 %1 = bitcast i8 %x3 to <8 x i1>294 %extract1 = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>295 %res = call <2 x i64> @llvm.x86.avx512.mask.gather3div2.di(<2 x i64> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> %extract1, i32 8)296 %2 = bitcast i8 %x3 to <8 x i1>297 %extract = shufflevector <8 x i1> %2, <8 x i1> %2, <2 x i32> <i32 0, i32 1>298 %res1 = call <2 x i64> @llvm.x86.avx512.mask.gather3div2.di(<2 x i64> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> %extract, i32 8)299 %res2 = add <2 x i64> %res, %res1300 ret <2 x i64> %res2301}302 303define <4 x double> @test_int_x86_avx512_mask_gather3div4_df(<4 x double> %x0, ptr %x1, <4 x i64> %x2, i8 %x3) {304; CHECK-LABEL: test_int_x86_avx512_mask_gather3div4_df:305; CHECK: # %bb.0:306; CHECK-NEXT: kmovd %esi, %k1307; CHECK-NEXT: vgatherqpd (%rdi,%ymm1,4), %ymm0 {%k1}308; CHECK-NEXT: kxnorw %k0, %k0, %k1309; CHECK-NEXT: vxorpd %xmm2, %xmm2, %xmm2310; CHECK-NEXT: vgatherqpd (%rdi,%ymm1,2), %ymm2 {%k1}311; CHECK-NEXT: vaddpd %ymm2, %ymm0, %ymm0312; CHECK-NEXT: retq313 %1 = bitcast i8 %x3 to <8 x i1>314 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>315 %res = call <4 x double> @llvm.x86.avx512.mask.gather3div4.df(<4 x double> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> %extract, i32 4)316 %res1 = call <4 x double> @llvm.x86.avx512.mask.gather3div4.df(<4 x double> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 2)317 %res2 = fadd <4 x double> %res, %res1318 ret <4 x double> %res2319}320 321define <4 x i64> @test_int_x86_avx512_mask_gather3div4_di(<4 x i64> %x0, ptr %x1, <4 x i64> %x2, i8 %x3) {322; CHECK-LABEL: test_int_x86_avx512_mask_gather3div4_di:323; CHECK: # %bb.0:324; CHECK-NEXT: kmovd %esi, %k1325; CHECK-NEXT: vpgatherqq (%rdi,%ymm1,8), %ymm0 {%k1}326; CHECK-NEXT: kxnorw %k0, %k0, %k1327; CHECK-NEXT: vpxor %xmm2, %xmm2, %xmm2328; CHECK-NEXT: vpgatherqq (%rdi,%ymm1,8), %ymm2 {%k1}329; CHECK-NEXT: vpaddq %ymm2, %ymm0, %ymm0330; CHECK-NEXT: retq331 %1 = bitcast i8 %x3 to <8 x i1>332 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>333 %res = call <4 x i64> @llvm.x86.avx512.mask.gather3div4.di(<4 x i64> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> %extract, i32 8)334 %res1 = call <4 x i64> @llvm.x86.avx512.mask.gather3div4.di(<4 x i64> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 8)335 %res2 = add <4 x i64> %res, %res1336 ret <4 x i64> %res2337}338 339define <4 x float> @test_int_x86_avx512_mask_gather3div4_sf(<4 x float> %x0, ptr %x1, <2 x i64> %x2, i8 %x3) {340; CHECK-LABEL: test_int_x86_avx512_mask_gather3div4_sf:341; CHECK: # %bb.0:342; CHECK-NEXT: kmovd %esi, %k1343; CHECK-NEXT: vgatherqps (%rdi,%xmm1,4), %xmm0 {%k1}344; CHECK-NEXT: kxnorw %k0, %k0, %k1345; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2346; CHECK-NEXT: vgatherqps (%rdi,%xmm1,2), %xmm2 {%k1}347; CHECK-NEXT: vaddps %xmm2, %xmm0, %xmm0348; CHECK-NEXT: retq349 %1 = bitcast i8 %x3 to <8 x i1>350 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>351 %res = call <4 x float> @llvm.x86.avx512.mask.gather3div4.sf(<4 x float> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> %extract, i32 4)352 %res1 = call <4 x float> @llvm.x86.avx512.mask.gather3div4.sf(<4 x float> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> <i1 true, i1 true>, i32 2)353 %res2 = fadd <4 x float> %res, %res1354 ret <4 x float> %res2355}356 357define <4 x i32> @test_int_x86_avx512_mask_gather3div4_si(<4 x i32> %x0, ptr %x1, <2 x i64> %x2, i8 %x3) {358; CHECK-LABEL: test_int_x86_avx512_mask_gather3div4_si:359; CHECK: # %bb.0:360; CHECK-NEXT: kxnorw %k0, %k0, %k1361; CHECK-NEXT: vpxor %xmm2, %xmm2, %xmm2362; CHECK-NEXT: vpgatherqd (%rdi,%xmm1,4), %xmm2 {%k1}363; CHECK-NEXT: kmovd %esi, %k1364; CHECK-NEXT: vpgatherqd (%rdi,%xmm1,4), %xmm0 {%k1}365; CHECK-NEXT: vpaddd %xmm0, %xmm2, %xmm0366; CHECK-NEXT: retq367 %res = call <4 x i32> @llvm.x86.avx512.mask.gather3div4.si(<4 x i32> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> <i1 true, i1 true>, i32 4)368 %1 = bitcast i8 %x3 to <8 x i1>369 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>370 %res1 = call <4 x i32> @llvm.x86.avx512.mask.gather3div4.si(<4 x i32> %x0, ptr %x1, <2 x i64> %x2, <2 x i1> %extract, i32 4)371 %res2 = add <4 x i32> %res, %res1372 ret <4 x i32> %res2373}374 375define <4 x float> @test_int_x86_avx512_mask_gather3div8_sf(<4 x float> %x0, ptr %x1, <4 x i64> %x2, i8 %x3) {376; CHECK-LABEL: test_int_x86_avx512_mask_gather3div8_sf:377; CHECK: # %bb.0:378; CHECK-NEXT: kmovd %esi, %k1379; CHECK-NEXT: vgatherqps (%rdi,%ymm1,4), %xmm0 {%k1}380; CHECK-NEXT: kxnorw %k0, %k0, %k1381; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2382; CHECK-NEXT: vgatherqps (%rdi,%ymm1,2), %xmm2 {%k1}383; CHECK-NEXT: vaddps %xmm2, %xmm0, %xmm0384; CHECK-NEXT: vzeroupper385; CHECK-NEXT: retq386 %1 = bitcast i8 %x3 to <8 x i1>387 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>388 %res = call <4 x float> @llvm.x86.avx512.mask.gather3div8.sf(<4 x float> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> %extract, i32 4)389 %res1 = call <4 x float> @llvm.x86.avx512.mask.gather3div8.sf(<4 x float> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 2)390 %res2 = fadd <4 x float> %res, %res1391 ret <4 x float> %res2392}393 394define <4 x i32> @test_int_x86_avx512_mask_gather3div8_si(<4 x i32> %x0, ptr %x1, <4 x i64> %x2, i8 %x3) {395; CHECK-LABEL: test_int_x86_avx512_mask_gather3div8_si:396; CHECK: # %bb.0:397; CHECK-NEXT: kmovd %esi, %k1398; CHECK-NEXT: vmovdqa %xmm0, %xmm2399; CHECK-NEXT: kmovq %k1, %k2400; CHECK-NEXT: vpgatherqd (%rdi,%ymm1,4), %xmm2 {%k2}401; CHECK-NEXT: vpgatherqd (%rdi,%ymm1,2), %xmm0 {%k1}402; CHECK-NEXT: vpaddd %xmm0, %xmm2, %xmm0403; CHECK-NEXT: vzeroupper404; CHECK-NEXT: retq405 %1 = bitcast i8 %x3 to <8 x i1>406 %extract1 = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>407 %res = call <4 x i32> @llvm.x86.avx512.mask.gather3div8.si(<4 x i32> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> %extract1, i32 4)408 %2 = bitcast i8 %x3 to <8 x i1>409 %extract = shufflevector <8 x i1> %2, <8 x i1> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>410 %res1 = call <4 x i32> @llvm.x86.avx512.mask.gather3div8.si(<4 x i32> %x0, ptr %x1, <4 x i64> %x2, <4 x i1> %extract, i32 2)411 %res2 = add <4 x i32> %res, %res1412 ret <4 x i32> %res2413}414 415define <2 x double> @test_int_x86_avx512_mask_gather3siv2_df(<2 x double> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {416; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv2_df:417; CHECK: # %bb.0:418; CHECK-NEXT: kmovd %esi, %k1419; CHECK-NEXT: vgatherdpd (%rdi,%xmm1,4), %xmm0 {%k1}420; CHECK-NEXT: kxnorw %k0, %k0, %k1421; CHECK-NEXT: vxorpd %xmm2, %xmm2, %xmm2422; CHECK-NEXT: vgatherdpd (%rdi,%xmm1,2), %xmm2 {%k1}423; CHECK-NEXT: vaddpd %xmm2, %xmm0, %xmm0424; CHECK-NEXT: retq425 %1 = bitcast i8 %x3 to <8 x i1>426 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>427 %res = call <2 x double> @llvm.x86.avx512.mask.gather3siv2.df(<2 x double> %x0, ptr %x1, <4 x i32> %x2, <2 x i1> %extract, i32 4)428 %res1 = call <2 x double> @llvm.x86.avx512.mask.gather3siv2.df(<2 x double> %x0, ptr %x1, <4 x i32> %x2, <2 x i1> <i1 true, i1 true>, i32 2)429 %res2 = fadd <2 x double> %res, %res1430 ret <2 x double> %res2431}432 433define <2 x i64> @test_int_x86_avx512_mask_gather3siv2_di(<2 x i64> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {434; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv2_di:435; CHECK: # %bb.0:436; CHECK-NEXT: kmovd %esi, %k1437; CHECK-NEXT: vpgatherdq (%rdi,%xmm1,8), %xmm0 {%k1}438; CHECK-NEXT: vpaddq %xmm0, %xmm0, %xmm0439; CHECK-NEXT: retq440 %1 = bitcast i8 %x3 to <8 x i1>441 %extract1 = shufflevector <8 x i1> %1, <8 x i1> %1, <2 x i32> <i32 0, i32 1>442 %res = call <2 x i64> @llvm.x86.avx512.mask.gather3siv2.di(<2 x i64> %x0, ptr %x1, <4 x i32> %x2, <2 x i1> %extract1, i32 8)443 %2 = bitcast i8 %x3 to <8 x i1>444 %extract = shufflevector <8 x i1> %2, <8 x i1> %2, <2 x i32> <i32 0, i32 1>445 %res1 = call <2 x i64> @llvm.x86.avx512.mask.gather3siv2.di(<2 x i64> %x0, ptr %x1, <4 x i32> %x2, <2 x i1> %extract, i32 8)446 %res2 = add <2 x i64> %res, %res1447 ret <2 x i64> %res2448}449 450define <4 x double> @test_int_x86_avx512_mask_gather3siv4_df(<4 x double> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {451; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv4_df:452; CHECK: # %bb.0:453; CHECK-NEXT: kmovd %esi, %k1454; CHECK-NEXT: vgatherdpd (%rdi,%xmm1,4), %ymm0 {%k1}455; CHECK-NEXT: kxnorw %k0, %k0, %k1456; CHECK-NEXT: vxorpd %xmm2, %xmm2, %xmm2457; CHECK-NEXT: vgatherdpd (%rdi,%xmm1,2), %ymm2 {%k1}458; CHECK-NEXT: vaddpd %ymm2, %ymm0, %ymm0459; CHECK-NEXT: retq460 %1 = bitcast i8 %x3 to <8 x i1>461 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>462 %res = call <4 x double> @llvm.x86.avx512.mask.gather3siv4.df(<4 x double> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> %extract, i32 4)463 %res1 = call <4 x double> @llvm.x86.avx512.mask.gather3siv4.df(<4 x double> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 2)464 %res2 = fadd <4 x double> %res, %res1465 ret <4 x double> %res2466}467 468define <4 x i64> @test_int_x86_avx512_mask_gather3siv4_di(<4 x i64> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {469; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv4_di:470; CHECK: # %bb.0:471; CHECK-NEXT: kmovd %esi, %k1472; CHECK-NEXT: vpgatherdq (%rdi,%xmm1,8), %ymm0 {%k1}473; CHECK-NEXT: vpaddq %ymm0, %ymm0, %ymm0474; CHECK-NEXT: retq475 %1 = bitcast i8 %x3 to <8 x i1>476 %extract1 = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>477 %res = call <4 x i64> @llvm.x86.avx512.mask.gather3siv4.di(<4 x i64> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> %extract1, i32 8)478 %2 = bitcast i8 %x3 to <8 x i1>479 %extract = shufflevector <8 x i1> %2, <8 x i1> %2, <4 x i32> <i32 0, i32 1, i32 2, i32 3>480 %res1 = call <4 x i64> @llvm.x86.avx512.mask.gather3siv4.di(<4 x i64> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> %extract, i32 8)481 %res2 = add <4 x i64> %res, %res1482 ret <4 x i64> %res2483}484 485define <4 x float> @test_int_x86_avx512_mask_gather3siv4_sf(<4 x float> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {486; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv4_sf:487; CHECK: # %bb.0:488; CHECK-NEXT: kmovd %esi, %k1489; CHECK-NEXT: vgatherdps (%rdi,%xmm1,4), %xmm0 {%k1}490; CHECK-NEXT: kxnorw %k0, %k0, %k1491; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2492; CHECK-NEXT: vgatherdps (%rdi,%xmm1,2), %xmm2 {%k1}493; CHECK-NEXT: vaddps %xmm2, %xmm0, %xmm0494; CHECK-NEXT: retq495 %1 = bitcast i8 %x3 to <8 x i1>496 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>497 %res = call <4 x float> @llvm.x86.avx512.mask.gather3siv4.sf(<4 x float> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> %extract, i32 4)498 %res1 = call <4 x float> @llvm.x86.avx512.mask.gather3siv4.sf(<4 x float> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 2)499 %res2 = fadd <4 x float> %res, %res1500 ret <4 x float> %res2501}502 503define <4 x i32> @test_int_x86_avx512_mask_gather3siv4_si(<4 x i32> %x0, ptr %x1, <4 x i32> %x2, i8 %x3) {504; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv4_si:505; CHECK: # %bb.0:506; CHECK-NEXT: kxnorw %k0, %k0, %k1507; CHECK-NEXT: vpxor %xmm2, %xmm2, %xmm2508; CHECK-NEXT: vpgatherdd (%rdi,%xmm1,4), %xmm2 {%k1}509; CHECK-NEXT: kmovd %esi, %k1510; CHECK-NEXT: vpgatherdd (%rdi,%xmm1,2), %xmm0 {%k1}511; CHECK-NEXT: vpaddd %xmm0, %xmm2, %xmm0512; CHECK-NEXT: retq513 %res = call <4 x i32> @llvm.x86.avx512.mask.gather3siv4.si(<4 x i32> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, i32 4)514 %1 = bitcast i8 %x3 to <8 x i1>515 %extract = shufflevector <8 x i1> %1, <8 x i1> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>516 %res1 = call <4 x i32> @llvm.x86.avx512.mask.gather3siv4.si(<4 x i32> %x0, ptr %x1, <4 x i32> %x2, <4 x i1> %extract, i32 2)517 %res2 = add <4 x i32> %res, %res1518 ret <4 x i32> %res2519}520 521define <8 x float> @test_int_x86_avx512_mask_gather3siv8_sf(<8 x float> %x0, ptr %x1, <8 x i32> %x2, i8 %x3) {522; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv8_sf:523; CHECK: # %bb.0:524; CHECK-NEXT: kmovd %esi, %k1525; CHECK-NEXT: vgatherdps (%rdi,%ymm1,4), %ymm0 {%k1}526; CHECK-NEXT: kxnorb %k0, %k0, %k1527; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2528; CHECK-NEXT: vgatherdps (%rdi,%ymm1,2), %ymm2 {%k1}529; CHECK-NEXT: vaddps %ymm2, %ymm0, %ymm0530; CHECK-NEXT: retq531 %1 = bitcast i8 %x3 to <8 x i1>532 %res = call <8 x float> @llvm.x86.avx512.mask.gather3siv8.sf(<8 x float> %x0, ptr %x1, <8 x i32> %x2, <8 x i1> %1, i32 4)533 %res1 = call <8 x float> @llvm.x86.avx512.mask.gather3siv8.sf(<8 x float> %x0, ptr %x1, <8 x i32> %x2, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 2)534 %res2 = fadd <8 x float> %res, %res1535 ret <8 x float> %res2536}537 538define <8 x i32> @test_int_x86_avx512_mask_gather3siv8_si(<8 x i32> %x0, ptr %x1, <8 x i32> %x2, i8 %x3) {539; CHECK-LABEL: test_int_x86_avx512_mask_gather3siv8_si:540; CHECK: # %bb.0:541; CHECK-NEXT: kmovd %esi, %k1542; CHECK-NEXT: vmovdqa %ymm0, %ymm2543; CHECK-NEXT: kmovq %k1, %k2544; CHECK-NEXT: vpgatherdd (%rdi,%ymm1,4), %ymm2 {%k2}545; CHECK-NEXT: vpgatherdd (%rdi,%ymm1,2), %ymm0 {%k1}546; CHECK-NEXT: vpaddd %ymm0, %ymm2, %ymm0547; CHECK-NEXT: retq548 %1 = bitcast i8 %x3 to <8 x i1>549 %res = call <8 x i32> @llvm.x86.avx512.mask.gather3siv8.si(<8 x i32> %x0, ptr %x1, <8 x i32> %x2, <8 x i1> %1, i32 4)550 %2 = bitcast i8 %x3 to <8 x i1>551 %res1 = call <8 x i32> @llvm.x86.avx512.mask.gather3siv8.si(<8 x i32> %x0, ptr %x1, <8 x i32> %x2, <8 x i1> %2, i32 2)552 %res2 = add <8 x i32> %res, %res1553 ret <8 x i32> %res2554}555 556define dso_local void@test_int_x86_avx512_scatterdiv2_df(ptr %x0, i8 %x1, <2 x i64> %x2, <2 x double> %x3) {557; CHECK-LABEL: test_int_x86_avx512_scatterdiv2_df:558; CHECK: # %bb.0:559; CHECK-NEXT: kmovd %esi, %k1560; CHECK-NEXT: kxnorw %k0, %k0, %k2561; CHECK-NEXT: vscatterqpd %xmm1, (%rdi,%xmm0,2) {%k2}562; CHECK-NEXT: vscatterqpd %xmm1, (%rdi,%xmm0,4) {%k1}563; CHECK-NEXT: retq564 %1 = bitcast i8 %x1 to <8 x i1>565 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>566 call void @llvm.x86.avx512.mask.scatterdiv2.df(ptr %x0, <2 x i1> <i1 true, i1 true>, <2 x i64> %x2, <2 x double> %x3, i32 2)567 call void @llvm.x86.avx512.mask.scatterdiv2.df(ptr %x0, <2 x i1> %2, <2 x i64> %x2, <2 x double> %x3, i32 4)568 ret void569}570 571define dso_local void@test_int_x86_avx512_scatterdiv2_di(ptr %x0, i8 %x1, <2 x i64> %x2, <2 x i64> %x3) {572; CHECK-LABEL: test_int_x86_avx512_scatterdiv2_di:573; CHECK: # %bb.0:574; CHECK-NEXT: kmovd %esi, %k1575; CHECK-NEXT: vpscatterqq %xmm1, (%rdi,%xmm0,2) {%k1}576; CHECK-NEXT: kxnorw %k0, %k0, %k1577; CHECK-NEXT: vpscatterqq %xmm1, (%rdi,%xmm0,4) {%k1}578; CHECK-NEXT: retq579 %1 = bitcast i8 %x1 to <8 x i1>580 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>581 call void @llvm.x86.avx512.mask.scatterdiv2.di(ptr %x0, <2 x i1> %2, <2 x i64> %x2, <2 x i64> %x3, i32 2)582 call void @llvm.x86.avx512.mask.scatterdiv2.di(ptr %x0, <2 x i1> <i1 true, i1 true>, <2 x i64> %x2, <2 x i64> %x3, i32 4)583 ret void584}585 586define dso_local void@test_int_x86_avx512_scatterdiv4_df(ptr %x0, i8 %x1, <4 x i64> %x2, <4 x double> %x3) {587; CHECK-LABEL: test_int_x86_avx512_scatterdiv4_df:588; CHECK: # %bb.0:589; CHECK-NEXT: kmovd %esi, %k1590; CHECK-NEXT: vscatterqpd %ymm1, (%rdi,%ymm0,2) {%k1}591; CHECK-NEXT: kxnorw %k0, %k0, %k1592; CHECK-NEXT: vscatterqpd %ymm1, (%rdi,%ymm0,4) {%k1}593; CHECK-NEXT: vzeroupper594; CHECK-NEXT: retq595 %1 = bitcast i8 %x1 to <8 x i1>596 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>597 call void @llvm.x86.avx512.mask.scatterdiv4.df(ptr %x0, <4 x i1> %2, <4 x i64> %x2, <4 x double> %x3, i32 2)598 call void @llvm.x86.avx512.mask.scatterdiv4.df(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i64> %x2, <4 x double> %x3, i32 4)599 ret void600}601 602define dso_local void@test_int_x86_avx512_scatterdiv4_di(ptr %x0, i8 %x1, <4 x i64> %x2, <4 x i64> %x3) {603; CHECK-LABEL: test_int_x86_avx512_scatterdiv4_di:604; CHECK: # %bb.0:605; CHECK-NEXT: kmovd %esi, %k1606; CHECK-NEXT: vpscatterqq %ymm1, (%rdi,%ymm0,2) {%k1}607; CHECK-NEXT: kxnorw %k0, %k0, %k1608; CHECK-NEXT: vpscatterqq %ymm1, (%rdi,%ymm0,4) {%k1}609; CHECK-NEXT: vzeroupper610; CHECK-NEXT: retq611 %1 = bitcast i8 %x1 to <8 x i1>612 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>613 call void @llvm.x86.avx512.mask.scatterdiv4.di(ptr %x0, <4 x i1> %2, <4 x i64> %x2, <4 x i64> %x3, i32 2)614 call void @llvm.x86.avx512.mask.scatterdiv4.di(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i64> %x2, <4 x i64> %x3, i32 4)615 ret void616}617 618define dso_local void@test_int_x86_avx512_scatterdiv4_sf(ptr %x0, i8 %x1, <2 x i64> %x2, <4 x float> %x3) {619; CHECK-LABEL: test_int_x86_avx512_scatterdiv4_sf:620; CHECK: # %bb.0:621; CHECK-NEXT: kmovd %esi, %k1622; CHECK-NEXT: vscatterqps %xmm1, (%rdi,%xmm0,2) {%k1}623; CHECK-NEXT: kxnorw %k0, %k0, %k1624; CHECK-NEXT: vscatterqps %xmm1, (%rdi,%xmm0,4) {%k1}625; CHECK-NEXT: retq626 %1 = bitcast i8 %x1 to <8 x i1>627 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>628 call void @llvm.x86.avx512.mask.scatterdiv4.sf(ptr %x0, <2 x i1> %2, <2 x i64> %x2, <4 x float> %x3, i32 2)629 call void @llvm.x86.avx512.mask.scatterdiv4.sf(ptr %x0, <2 x i1> <i1 true, i1 true>, <2 x i64> %x2, <4 x float> %x3, i32 4)630 ret void631}632 633define dso_local void@test_int_x86_avx512_scatterdiv4_si(ptr %x0, i8 %x1, <2 x i64> %x2, <4 x i32> %x3) {634; CHECK-LABEL: test_int_x86_avx512_scatterdiv4_si:635; CHECK: # %bb.0:636; CHECK-NEXT: kmovd %esi, %k1637; CHECK-NEXT: kxnorw %k0, %k0, %k2638; CHECK-NEXT: vpscatterqd %xmm1, (%rdi,%xmm0,2) {%k2}639; CHECK-NEXT: vpscatterqd %xmm1, (%rdi,%xmm0,4) {%k1}640; CHECK-NEXT: retq641 %1 = bitcast i8 %x1 to <8 x i1>642 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>643 call void @llvm.x86.avx512.mask.scatterdiv4.si(ptr %x0, <2 x i1> <i1 true, i1 true>, <2 x i64> %x2, <4 x i32> %x3, i32 2)644 call void @llvm.x86.avx512.mask.scatterdiv4.si(ptr %x0, <2 x i1> %2, <2 x i64> %x2, <4 x i32> %x3, i32 4)645 ret void646}647 648define dso_local void@test_int_x86_avx512_scatterdiv8_sf(ptr %x0, i8 %x1, <4 x i64> %x2, <4 x float> %x3) {649; CHECK-LABEL: test_int_x86_avx512_scatterdiv8_sf:650; CHECK: # %bb.0:651; CHECK-NEXT: kmovd %esi, %k1652; CHECK-NEXT: vscatterqps %xmm1, (%rdi,%ymm0,2) {%k1}653; CHECK-NEXT: kxnorw %k0, %k0, %k1654; CHECK-NEXT: vscatterqps %xmm1, (%rdi,%ymm0,4) {%k1}655; CHECK-NEXT: vzeroupper656; CHECK-NEXT: retq657 %1 = bitcast i8 %x1 to <8 x i1>658 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>659 call void @llvm.x86.avx512.mask.scatterdiv8.sf(ptr %x0, <4 x i1> %2, <4 x i64> %x2, <4 x float> %x3, i32 2)660 call void @llvm.x86.avx512.mask.scatterdiv8.sf(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i64> %x2, <4 x float> %x3, i32 4)661 ret void662}663 664define dso_local void@test_int_x86_avx512_scatterdiv8_si(ptr %x0, i8 %x1, <4 x i64> %x2, <4 x i32> %x3) {665; CHECK-LABEL: test_int_x86_avx512_scatterdiv8_si:666; CHECK: # %bb.0:667; CHECK-NEXT: kmovd %esi, %k1668; CHECK-NEXT: vpscatterqd %xmm1, (%rdi,%ymm0,2) {%k1}669; CHECK-NEXT: kxnorw %k0, %k0, %k1670; CHECK-NEXT: vpscatterqd %xmm1, (%rdi,%ymm0,4) {%k1}671; CHECK-NEXT: vzeroupper672; CHECK-NEXT: retq673 %1 = bitcast i8 %x1 to <8 x i1>674 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>675 call void @llvm.x86.avx512.mask.scatterdiv8.si(ptr %x0, <4 x i1> %2, <4 x i64> %x2, <4 x i32> %x3, i32 2)676 call void @llvm.x86.avx512.mask.scatterdiv8.si(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i64> %x2, <4 x i32> %x3, i32 4)677 ret void678}679 680define dso_local void@test_int_x86_avx512_scattersiv2_df(ptr %x0, i8 %x1, <4 x i32> %x2, <2 x double> %x3) {681; CHECK-LABEL: test_int_x86_avx512_scattersiv2_df:682; CHECK: # %bb.0:683; CHECK-NEXT: kmovd %esi, %k1684; CHECK-NEXT: kxnorw %k0, %k0, %k2685; CHECK-NEXT: vscatterdpd %xmm1, (%rdi,%xmm0,2) {%k2}686; CHECK-NEXT: vscatterdpd %xmm1, (%rdi,%xmm0,4) {%k1}687; CHECK-NEXT: retq688 %1 = bitcast i8 %x1 to <8 x i1>689 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>690 call void @llvm.x86.avx512.mask.scattersiv2.df(ptr %x0, <2 x i1> <i1 true, i1 true>, <4 x i32> %x2, <2 x double> %x3, i32 2)691 call void @llvm.x86.avx512.mask.scattersiv2.df(ptr %x0, <2 x i1> %2, <4 x i32> %x2, <2 x double> %x3, i32 4)692 ret void693}694 695define dso_local void@test_int_x86_avx512_scattersiv2_di(ptr %x0, i8 %x1, <4 x i32> %x2, <2 x i64> %x3) {696; CHECK-LABEL: test_int_x86_avx512_scattersiv2_di:697; CHECK: # %bb.0:698; CHECK-NEXT: kmovd %esi, %k1699; CHECK-NEXT: kxnorw %k0, %k0, %k2700; CHECK-NEXT: vpscatterdq %xmm1, (%rdi,%xmm0,2) {%k2}701; CHECK-NEXT: vpscatterdq %xmm1, (%rdi,%xmm0,4) {%k1}702; CHECK-NEXT: retq703 %1 = bitcast i8 %x1 to <8 x i1>704 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>705 call void @llvm.x86.avx512.mask.scattersiv2.di(ptr %x0, <2 x i1> <i1 true, i1 true>, <4 x i32> %x2, <2 x i64> %x3, i32 2)706 call void @llvm.x86.avx512.mask.scattersiv2.di(ptr %x0, <2 x i1> %2, <4 x i32> %x2, <2 x i64> %x3, i32 4)707 ret void708}709 710define dso_local void@test_int_x86_avx512_scattersiv4_df(ptr %x0, i8 %x1, <4 x i32> %x2, <4 x double> %x3) {711; CHECK-LABEL: test_int_x86_avx512_scattersiv4_df:712; CHECK: # %bb.0:713; CHECK-NEXT: kmovd %esi, %k1714; CHECK-NEXT: vscatterdpd %ymm1, (%rdi,%xmm0,2) {%k1}715; CHECK-NEXT: kxnorw %k0, %k0, %k1716; CHECK-NEXT: vscatterdpd %ymm1, (%rdi,%xmm0,4) {%k1}717; CHECK-NEXT: vzeroupper718; CHECK-NEXT: retq719 %1 = bitcast i8 %x1 to <8 x i1>720 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>721 call void @llvm.x86.avx512.mask.scattersiv4.df(ptr %x0, <4 x i1> %2, <4 x i32> %x2, <4 x double> %x3, i32 2)722 call void @llvm.x86.avx512.mask.scattersiv4.df(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> %x2, <4 x double> %x3, i32 4)723 ret void724}725 726define dso_local void@test_int_x86_avx512_scattersiv4_di(ptr %x0, i8 %x1, <4 x i32> %x2, <4 x i64> %x3) {727; CHECK-LABEL: test_int_x86_avx512_scattersiv4_di:728; CHECK: # %bb.0:729; CHECK-NEXT: kmovd %esi, %k1730; CHECK-NEXT: kxnorw %k0, %k0, %k2731; CHECK-NEXT: vpscatterdq %ymm1, (%rdi,%xmm0,2) {%k2}732; CHECK-NEXT: vpscatterdq %ymm1, (%rdi,%xmm0,4) {%k1}733; CHECK-NEXT: vzeroupper734; CHECK-NEXT: retq735 %1 = bitcast i8 %x1 to <8 x i1>736 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>737 call void @llvm.x86.avx512.mask.scattersiv4.di(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> %x2, <4 x i64> %x3, i32 2)738 call void @llvm.x86.avx512.mask.scattersiv4.di(ptr %x0, <4 x i1> %2, <4 x i32> %x2, <4 x i64> %x3, i32 4)739 ret void740}741 742define dso_local void@test_int_x86_avx512_scattersiv4_sf(ptr %x0, i8 %x1, <4 x i32> %x2, <4 x float> %x3) {743; CHECK-LABEL: test_int_x86_avx512_scattersiv4_sf:744; CHECK: # %bb.0:745; CHECK-NEXT: kmovd %esi, %k1746; CHECK-NEXT: vscatterdps %xmm1, (%rdi,%xmm0,2) {%k1}747; CHECK-NEXT: kxnorw %k0, %k0, %k1748; CHECK-NEXT: vscatterdps %xmm1, (%rdi,%xmm0,4) {%k1}749; CHECK-NEXT: retq750 %1 = bitcast i8 %x1 to <8 x i1>751 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>752 call void @llvm.x86.avx512.mask.scattersiv4.sf(ptr %x0, <4 x i1> %2, <4 x i32> %x2, <4 x float> %x3, i32 2)753 call void @llvm.x86.avx512.mask.scattersiv4.sf(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> %x2, <4 x float> %x3, i32 4)754 ret void755}756 757define dso_local void@test_int_x86_avx512_scattersiv4_si(ptr %x0, i8 %x1, <4 x i32> %x2, <4 x i32> %x3) {758; CHECK-LABEL: test_int_x86_avx512_scattersiv4_si:759; CHECK: # %bb.0:760; CHECK-NEXT: kmovd %esi, %k1761; CHECK-NEXT: vpscatterdd %xmm1, (%rdi,%xmm0,2) {%k1}762; CHECK-NEXT: kxnorw %k0, %k0, %k1763; CHECK-NEXT: vpscatterdd %xmm1, (%rdi,%xmm0,4) {%k1}764; CHECK-NEXT: retq765 %1 = bitcast i8 %x1 to <8 x i1>766 %2 = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>767 call void @llvm.x86.avx512.mask.scattersiv4.si(ptr %x0, <4 x i1> %2, <4 x i32> %x2, <4 x i32> %x3, i32 2)768 call void @llvm.x86.avx512.mask.scattersiv4.si(ptr %x0, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> %x2, <4 x i32> %x3, i32 4)769 ret void770}771 772define dso_local void@test_int_x86_avx512_scattersiv8_sf(ptr %x0, i8 %x1, <8 x i32> %x2, <8 x float> %x3) {773; CHECK-LABEL: test_int_x86_avx512_scattersiv8_sf:774; CHECK: # %bb.0:775; CHECK-NEXT: kmovd %esi, %k1776; CHECK-NEXT: vscatterdps %ymm1, (%rdi,%ymm0,2) {%k1}777; CHECK-NEXT: kxnorb %k0, %k0, %k1778; CHECK-NEXT: vscatterdps %ymm1, (%rdi,%ymm0,4) {%k1}779; CHECK-NEXT: vzeroupper780; CHECK-NEXT: retq781 %1 = bitcast i8 %x1 to <8 x i1>782 call void @llvm.x86.avx512.mask.scattersiv8.sf(ptr %x0, <8 x i1> %1, <8 x i32> %x2, <8 x float> %x3, i32 2)783 call void @llvm.x86.avx512.mask.scattersiv8.sf(ptr %x0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i32> %x2, <8 x float> %x3, i32 4)784 ret void785}786 787define dso_local void@test_int_x86_avx512_scattersiv8_si(ptr %x0, i8 %x1, <8 x i32> %x2, <8 x i32> %x3) {788; CHECK-LABEL: test_int_x86_avx512_scattersiv8_si:789; CHECK: # %bb.0:790; CHECK-NEXT: kmovd %esi, %k1791; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,2) {%k1}792; CHECK-NEXT: kxnorb %k0, %k0, %k1793; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,4) {%k1}794; CHECK-NEXT: vzeroupper795; CHECK-NEXT: retq796 %1 = bitcast i8 %x1 to <8 x i1>797 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> %1, <8 x i32> %x2, <8 x i32> %x3, i32 2)798 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i32> %x2, <8 x i32> %x3, i32 4)799 ret void800}801 802define dso_local void @scatter_mask_test(ptr %x0, <8 x i32> %x2, <8 x i32> %x3) {803; CHECK-LABEL: scatter_mask_test:804; CHECK: # %bb.0:805; CHECK-NEXT: kxnorb %k0, %k0, %k1806; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,2) {%k1}807; CHECK-NEXT: kxorb %k0, %k0, %k1808; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,4) {%k1}809; CHECK-NEXT: movb $1, %al810; CHECK-NEXT: kmovd %eax, %k1811; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,2) {%k1}812; CHECK-NEXT: movb $96, %al813; CHECK-NEXT: kmovd %eax, %k1814; CHECK-NEXT: vpscatterdd %ymm1, (%rdi,%ymm0,4) {%k1}815; CHECK-NEXT: vzeroupper816; CHECK-NEXT: retq817 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i32> %x2, <8 x i32> %x3, i32 2)818 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> zeroinitializer, <8 x i32> %x2, <8 x i32> %x3, i32 4)819 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> bitcast (<1 x i8> <i8 1> to <8 x i1>), <8 x i32> %x2, <8 x i32> %x3, i32 2)820 call void @llvm.x86.avx512.mask.scattersiv8.si(ptr %x0, <8 x i1> bitcast (<1 x i8> <i8 96> to <8 x i1>), <8 x i32> %x2, <8 x i32> %x3, i32 4)821 ret void822}823 824define <16 x float> @gather_mask_test(<16 x i32> %ind, <16 x float> %src, ptr %base) {825; CHECK-LABEL: gather_mask_test:826; CHECK: # %bb.0:827; CHECK-NEXT: kxnorw %k0, %k0, %k1828; CHECK-NEXT: vxorps %xmm2, %xmm2, %xmm2829; CHECK-NEXT: vgatherdps (%rdi,%zmm0,4), %zmm2 {%k1}830; CHECK-NEXT: kxorw %k0, %k0, %k1831; CHECK-NEXT: vmovaps %zmm1, %zmm3832; CHECK-NEXT: vgatherdps (%rdi,%zmm0,4), %zmm3 {%k1}833; CHECK-NEXT: vaddps %zmm3, %zmm2, %zmm2834; CHECK-NEXT: movw $1, %ax835; CHECK-NEXT: kmovd %eax, %k1836; CHECK-NEXT: vmovaps %zmm1, %zmm3837; CHECK-NEXT: vgatherdps (%rdi,%zmm0,4), %zmm3 {%k1}838; CHECK-NEXT: movw $220, %ax839; CHECK-NEXT: kmovd %eax, %k1840; CHECK-NEXT: vgatherdps (%rdi,%zmm0,4), %zmm1 {%k1}841; CHECK-NEXT: vaddps %zmm3, %zmm1, %zmm0842; CHECK-NEXT: vaddps %zmm2, %zmm0, %zmm0843; CHECK-NEXT: retq844 %res = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)845 %res1 = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> zeroinitializer, i32 4)846 %res2 = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> bitcast (<1 x i16> <i16 1> to <16 x i1>), i32 4)847 %res3 = call <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float> %src, ptr %base, <16 x i32> %ind, <16 x i1> bitcast (<1 x i16> <i16 220> to <16 x i1>), i32 4)848 %res4 = fadd <16 x float> %res, %res1849 %res5 = fadd <16 x float> %res3, %res2850 %res6 = fadd <16 x float> %res5, %res4851 ret <16 x float> %res6852}853 854@x = dso_local global [1024 x float] zeroinitializer, align 16855 856define <8 x float> @gather_global(<8 x i64>, ptr nocapture readnone) {857; CHECK-LABEL: gather_global:858; CHECK: # %bb.0:859; CHECK-NEXT: kxnorb %k0, %k0, %k1860; CHECK-NEXT: vxorps %xmm1, %xmm1, %xmm1861; CHECK-NEXT: vgatherqps x(,%zmm0,4), %ymm1 {%k1}862; CHECK-NEXT: vmovaps %ymm1, %ymm0863; CHECK-NEXT: retq864 %3 = tail call <8 x float> @llvm.x86.avx512.mask.gather.qps.512(<8 x float> zeroinitializer, ptr @x, <8 x i64> %0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i32 4)865 ret <8 x float> %3866}867 868declare <16 x float> @llvm.x86.avx512.mask.gather.dps.512(<16 x float>, ptr, <16 x i32>, <16 x i1>, i32)869declare <8 x double> @llvm.x86.avx512.mask.gather.dpd.512(<8 x double>, ptr, <8 x i32>, <8 x i1>, i32)870declare <8 x float> @llvm.x86.avx512.mask.gather.qps.512(<8 x float>, ptr, <8 x i64>, <8 x i1>, i32)871declare <8 x double> @llvm.x86.avx512.mask.gather.qpd.512(<8 x double>, ptr, <8 x i64>, <8 x i1>, i32)872declare <16 x i32> @llvm.x86.avx512.mask.gather.dpi.512(<16 x i32>, ptr, <16 x i32>, <16 x i1>, i32)873declare <8 x i64> @llvm.x86.avx512.mask.gather.dpq.512(<8 x i64>, ptr, <8 x i32>, <8 x i1>, i32)874declare <8 x i32> @llvm.x86.avx512.mask.gather.qpi.512(<8 x i32>, ptr, <8 x i64>, <8 x i1>, i32)875declare <8 x i64> @llvm.x86.avx512.mask.gather.qpq.512(<8 x i64>, ptr, <8 x i64>, <8 x i1>, i32)876declare <2 x double> @llvm.x86.avx512.mask.gather3div2.df(<2 x double>, ptr, <2 x i64>, <2 x i1>, i32)877declare <2 x i64> @llvm.x86.avx512.mask.gather3div2.di(<2 x i64>, ptr, <2 x i64>, <2 x i1>, i32)878declare <4 x double> @llvm.x86.avx512.mask.gather3div4.df(<4 x double>, ptr, <4 x i64>, <4 x i1>, i32)879declare <4 x i64> @llvm.x86.avx512.mask.gather3div4.di(<4 x i64>, ptr, <4 x i64>, <4 x i1>, i32)880declare <4 x float> @llvm.x86.avx512.mask.gather3div4.sf(<4 x float>, ptr, <2 x i64>, <2 x i1>, i32)881declare <4 x i32> @llvm.x86.avx512.mask.gather3div4.si(<4 x i32>, ptr, <2 x i64>, <2 x i1>, i32)882declare <4 x float> @llvm.x86.avx512.mask.gather3div8.sf(<4 x float>, ptr, <4 x i64>, <4 x i1>, i32)883declare <4 x i32> @llvm.x86.avx512.mask.gather3div8.si(<4 x i32>, ptr, <4 x i64>, <4 x i1>, i32)884declare <2 x double> @llvm.x86.avx512.mask.gather3siv2.df(<2 x double>, ptr, <4 x i32>, <2 x i1>, i32)885declare <2 x i64> @llvm.x86.avx512.mask.gather3siv2.di(<2 x i64>, ptr, <4 x i32>, <2 x i1>, i32)886declare <4 x double> @llvm.x86.avx512.mask.gather3siv4.df(<4 x double>, ptr, <4 x i32>, <4 x i1>, i32)887declare <4 x i64> @llvm.x86.avx512.mask.gather3siv4.di(<4 x i64>, ptr, <4 x i32>, <4 x i1>, i32)888declare <4 x float> @llvm.x86.avx512.mask.gather3siv4.sf(<4 x float>, ptr, <4 x i32>, <4 x i1>, i32)889declare <4 x i32> @llvm.x86.avx512.mask.gather3siv4.si(<4 x i32>, ptr, <4 x i32>, <4 x i1>, i32)890declare <8 x float> @llvm.x86.avx512.mask.gather3siv8.sf(<8 x float>, ptr, <8 x i32>, <8 x i1>, i32)891declare <8 x i32> @llvm.x86.avx512.mask.gather3siv8.si(<8 x i32>, ptr, <8 x i32>, <8 x i1>, i32)892declare void @llvm.x86.avx512.mask.scatter.dps.512(ptr, <16 x i1>, <16 x i32>, <16 x float>, i32)893declare void @llvm.x86.avx512.mask.scatter.dpd.512(ptr, <8 x i1>, <8 x i32>, <8 x double>, i32)894declare void @llvm.x86.avx512.mask.scatter.qps.512(ptr, <8 x i1>, <8 x i64>, <8 x float>, i32)895declare void @llvm.x86.avx512.mask.scatter.qpd.512(ptr, <8 x i1>, <8 x i64>, <8 x double>, i32)896declare void @llvm.x86.avx512.mask.scatter.dpi.512(ptr, <16 x i1>, <16 x i32>, <16 x i32>, i32)897declare void @llvm.x86.avx512.mask.scatter.dpq.512(ptr, <8 x i1>, <8 x i32>, <8 x i64>, i32)898declare void @llvm.x86.avx512.mask.scatter.qpi.512(ptr, <8 x i1>, <8 x i64>, <8 x i32>, i32)899declare void @llvm.x86.avx512.mask.scatter.qpq.512(ptr, <8 x i1>, <8 x i64>, <8 x i64>, i32)900declare void @llvm.x86.avx512.mask.scatterdiv2.df(ptr, <2 x i1>, <2 x i64>, <2 x double>, i32)901declare void @llvm.x86.avx512.mask.scatterdiv2.di(ptr, <2 x i1>, <2 x i64>, <2 x i64>, i32)902declare void @llvm.x86.avx512.mask.scatterdiv4.df(ptr, <4 x i1>, <4 x i64>, <4 x double>, i32)903declare void @llvm.x86.avx512.mask.scatterdiv4.di(ptr, <4 x i1>, <4 x i64>, <4 x i64>, i32)904declare void @llvm.x86.avx512.mask.scatterdiv4.sf(ptr, <2 x i1>, <2 x i64>, <4 x float>, i32)905declare void @llvm.x86.avx512.mask.scatterdiv4.si(ptr, <2 x i1>, <2 x i64>, <4 x i32>, i32)906declare void @llvm.x86.avx512.mask.scatterdiv8.sf(ptr, <4 x i1>, <4 x i64>, <4 x float>, i32)907declare void @llvm.x86.avx512.mask.scatterdiv8.si(ptr, <4 x i1>, <4 x i64>, <4 x i32>, i32)908declare void @llvm.x86.avx512.mask.scattersiv2.df(ptr, <2 x i1>, <4 x i32>, <2 x double>, i32)909declare void @llvm.x86.avx512.mask.scattersiv2.di(ptr, <2 x i1>, <4 x i32>, <2 x i64>, i32)910declare void @llvm.x86.avx512.mask.scattersiv4.df(ptr, <4 x i1>, <4 x i32>, <4 x double>, i32)911declare void @llvm.x86.avx512.mask.scattersiv4.di(ptr, <4 x i1>, <4 x i32>, <4 x i64>, i32)912declare void @llvm.x86.avx512.mask.scattersiv4.sf(ptr, <4 x i1>, <4 x i32>, <4 x float>, i32)913declare void @llvm.x86.avx512.mask.scattersiv4.si(ptr, <4 x i1>, <4 x i32>, <4 x i32>, i32)914declare void @llvm.x86.avx512.mask.scattersiv8.sf(ptr, <8 x i1>, <8 x i32>, <8 x float>, i32)915declare void @llvm.x86.avx512.mask.scattersiv8.si(ptr, <8 x i1>, <8 x i32>, <8 x i32>, i32)916 917