888 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -fast-isel -mtriple=i686-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512bw-builtins.c6 7define i64 @test_mm512_kunpackd(<8 x i64> %__A, <8 x i64> %__B, <8 x i64> %__C, <8 x i64> %__D, <8 x i64> %__E, <8 x i64> %__F) {8; X86-LABEL: test_mm512_kunpackd:9; X86: # %bb.0: # %entry10; X86-NEXT: pushl %ebp11; X86-NEXT: .cfi_def_cfa_offset 812; X86-NEXT: .cfi_offset %ebp, -813; X86-NEXT: movl %esp, %ebp14; X86-NEXT: .cfi_def_cfa_register %ebp15; X86-NEXT: andl $-64, %esp16; X86-NEXT: subl $64, %esp17; X86-NEXT: vmovdqa64 136(%ebp), %zmm318; X86-NEXT: vpcmpneqb %zmm0, %zmm1, %k019; X86-NEXT: vpcmpneqb 8(%ebp), %zmm2, %k120; X86-NEXT: vpcmpneqb 72(%ebp), %zmm3, %k221; X86-NEXT: kandd %k0, %k2, %k022; X86-NEXT: kmovd %k0, %eax23; X86-NEXT: kshiftrq $32, %k2, %k024; X86-NEXT: kandd %k1, %k0, %k025; X86-NEXT: kmovd %k0, %edx26; X86-NEXT: movl %ebp, %esp27; X86-NEXT: popl %ebp28; X86-NEXT: .cfi_def_cfa %esp, 429; X86-NEXT: vzeroupper30; X86-NEXT: retl31;32; X64-LABEL: test_mm512_kunpackd:33; X64: # %bb.0: # %entry34; X64-NEXT: vpcmpneqb %zmm0, %zmm1, %k035; X64-NEXT: vpcmpneqb %zmm3, %zmm2, %k136; X64-NEXT: kunpckdq %k0, %k1, %k137; X64-NEXT: vpcmpneqb %zmm5, %zmm4, %k0 {%k1}38; X64-NEXT: kmovq %k0, %rax39; X64-NEXT: vzeroupper40; X64-NEXT: retq41entry:42 %0 = bitcast <8 x i64> %__E to <64 x i8>43 %1 = bitcast <8 x i64> %__F to <64 x i8>44 %2 = bitcast <8 x i64> %__B to <64 x i8>45 %3 = bitcast <8 x i64> %__A to <64 x i8>46 %4 = icmp ne <64 x i8> %2, %347 %5 = bitcast <8 x i64> %__C to <64 x i8>48 %6 = bitcast <8 x i64> %__D to <64 x i8>49 %7 = icmp ne <64 x i8> %5, %650 %8 = shufflevector <64 x i1> %4, <64 x i1> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>51 %9 = shufflevector <64 x i1> %7, <64 x i1> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>52 %10 = shufflevector <32 x i1> %8, <32 x i1> %9, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>53 %11 = icmp ne <64 x i8> %0, %154 %12 = and <64 x i1> %11, %1055 %13 = bitcast <64 x i1> %12 to i6456 ret i64 %1357}58 59define i32 @test_mm512_kunpackw(<8 x i64> %__A, <8 x i64> %__B, <8 x i64> %__C, <8 x i64> %__D, <8 x i64> %__E, <8 x i64> %__F) {60; X86-LABEL: test_mm512_kunpackw:61; X86: # %bb.0: # %entry62; X86-NEXT: pushl %ebp63; X86-NEXT: .cfi_def_cfa_offset 864; X86-NEXT: .cfi_offset %ebp, -865; X86-NEXT: movl %esp, %ebp66; X86-NEXT: .cfi_def_cfa_register %ebp67; X86-NEXT: andl $-64, %esp68; X86-NEXT: subl $64, %esp69; X86-NEXT: vmovdqa64 136(%ebp), %zmm370; X86-NEXT: vpcmpneqw %zmm0, %zmm1, %k071; X86-NEXT: vpcmpneqw 8(%ebp), %zmm2, %k172; X86-NEXT: kunpckwd %k0, %k1, %k173; X86-NEXT: vpcmpneqw 72(%ebp), %zmm3, %k0 {%k1}74; X86-NEXT: kmovd %k0, %eax75; X86-NEXT: movl %ebp, %esp76; X86-NEXT: popl %ebp77; X86-NEXT: .cfi_def_cfa %esp, 478; X86-NEXT: vzeroupper79; X86-NEXT: retl80;81; X64-LABEL: test_mm512_kunpackw:82; X64: # %bb.0: # %entry83; X64-NEXT: vpcmpneqw %zmm0, %zmm1, %k084; X64-NEXT: vpcmpneqw %zmm3, %zmm2, %k185; X64-NEXT: kunpckwd %k0, %k1, %k186; X64-NEXT: vpcmpneqw %zmm5, %zmm4, %k0 {%k1}87; X64-NEXT: kmovd %k0, %eax88; X64-NEXT: vzeroupper89; X64-NEXT: retq90entry:91 %0 = bitcast <8 x i64> %__E to <32 x i16>92 %1 = bitcast <8 x i64> %__F to <32 x i16>93 %2 = bitcast <8 x i64> %__B to <32 x i16>94 %3 = bitcast <8 x i64> %__A to <32 x i16>95 %4 = icmp ne <32 x i16> %2, %396 %5 = bitcast <8 x i64> %__C to <32 x i16>97 %6 = bitcast <8 x i64> %__D to <32 x i16>98 %7 = icmp ne <32 x i16> %5, %699 %8 = shufflevector <32 x i1> %4, <32 x i1> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>100 %9 = shufflevector <32 x i1> %7, <32 x i1> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>101 %10 = shufflevector <16 x i1> %8, <16 x i1> %9, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>102 %11 = icmp ne <32 x i16> %0, %1103 %12 = and <32 x i1> %11, %10104 %13 = bitcast <32 x i1> %12 to i32105 ret i32 %13106}107 108 109define <8 x i64> @test_mm512_mask_set1_epi8(<8 x i64> %__O, i64 %__M, i8 signext %__A) {110; X86-LABEL: test_mm512_mask_set1_epi8:111; X86: # %bb.0: # %entry112; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k0113; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1114; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax115; X86-NEXT: kunpckdq %k1, %k0, %k1116; X86-NEXT: vpbroadcastb %eax, %zmm0 {%k1}117; X86-NEXT: retl118;119; X64-LABEL: test_mm512_mask_set1_epi8:120; X64: # %bb.0: # %entry121; X64-NEXT: kmovq %rdi, %k1122; X64-NEXT: vpbroadcastb %esi, %zmm0 {%k1}123; X64-NEXT: retq124 entry:125 %vecinit.i.i = insertelement <64 x i8> undef, i8 %__A, i32 0126 %vecinit63.i.i = shufflevector <64 x i8> %vecinit.i.i, <64 x i8> undef, <64 x i32> zeroinitializer127 %0 = bitcast <8 x i64> %__O to <64 x i8>128 %1 = bitcast i64 %__M to <64 x i1>129 %2 = select <64 x i1> %1, <64 x i8> %vecinit63.i.i, <64 x i8> %0130 %3 = bitcast <64 x i8> %2 to <8 x i64>131 ret <8 x i64> %3132}133 134define <8 x i64> @test_mm512_maskz_set1_epi8(i64 %__M, i8 signext %__A) {135; X86-LABEL: test_mm512_maskz_set1_epi8:136; X86: # %bb.0: # %entry137; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k0138; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1139; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax140; X86-NEXT: kunpckdq %k1, %k0, %k1141; X86-NEXT: vpbroadcastb %eax, %zmm0 {%k1} {z}142; X86-NEXT: retl143;144; X64-LABEL: test_mm512_maskz_set1_epi8:145; X64: # %bb.0: # %entry146; X64-NEXT: kmovq %rdi, %k1147; X64-NEXT: vpbroadcastb %esi, %zmm0 {%k1} {z}148; X64-NEXT: retq149 entry:150 %vecinit.i.i = insertelement <64 x i8> undef, i8 %__A, i32 0151 %vecinit63.i.i = shufflevector <64 x i8> %vecinit.i.i, <64 x i8> undef, <64 x i32> zeroinitializer152 %0 = bitcast i64 %__M to <64 x i1>153 %1 = select <64 x i1> %0, <64 x i8> %vecinit63.i.i, <64 x i8> zeroinitializer154 %2 = bitcast <64 x i8> %1 to <8 x i64>155 ret <8 x i64> %2156}157 158define <8 x i64> @test_mm512_mask_set1_epi16(<8 x i64> %__O, i32 %__M, i16 signext %__A) {159; X86-LABEL: test_mm512_mask_set1_epi16:160; X86: # %bb.0: # %entry161; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax162; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1163; X86-NEXT: vpbroadcastw %eax, %zmm0 {%k1}164; X86-NEXT: retl165;166; X64-LABEL: test_mm512_mask_set1_epi16:167; X64: # %bb.0: # %entry168; X64-NEXT: kmovd %edi, %k1169; X64-NEXT: vpbroadcastw %esi, %zmm0 {%k1}170; X64-NEXT: retq171 entry:172 %vecinit.i.i = insertelement <32 x i16> undef, i16 %__A, i32 0173 %vecinit31.i.i = shufflevector <32 x i16> %vecinit.i.i, <32 x i16> undef, <32 x i32> zeroinitializer174 %0 = bitcast <8 x i64> %__O to <32 x i16>175 %1 = bitcast i32 %__M to <32 x i1>176 %2 = select <32 x i1> %1, <32 x i16> %vecinit31.i.i, <32 x i16> %0177 %3 = bitcast <32 x i16> %2 to <8 x i64>178 ret <8 x i64> %3179}180 181define <8 x i64> @test_mm512_maskz_set1_epi16(i32 %__M, i16 signext %__A) {182; X86-LABEL: test_mm512_maskz_set1_epi16:183; X86: # %bb.0: # %entry184; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax185; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1186; X86-NEXT: vpbroadcastw %eax, %zmm0 {%k1} {z}187; X86-NEXT: retl188;189; X64-LABEL: test_mm512_maskz_set1_epi16:190; X64: # %bb.0: # %entry191; X64-NEXT: kmovd %edi, %k1192; X64-NEXT: vpbroadcastw %esi, %zmm0 {%k1} {z}193; X64-NEXT: retq194 entry:195 %vecinit.i.i = insertelement <32 x i16> undef, i16 %__A, i32 0196 %vecinit31.i.i = shufflevector <32 x i16> %vecinit.i.i, <32 x i16> undef, <32 x i32> zeroinitializer197 %0 = bitcast i32 %__M to <32 x i1>198 %1 = select <32 x i1> %0, <32 x i16> %vecinit31.i.i, <32 x i16> zeroinitializer199 %2 = bitcast <32 x i16> %1 to <8 x i64>200 ret <8 x i64> %2201}202 203define <8 x i64> @test_mm512_broadcastb_epi8(<2 x i64> %a0) {204; CHECK-LABEL: test_mm512_broadcastb_epi8:205; CHECK: # %bb.0:206; CHECK-NEXT: vpbroadcastb %xmm0, %zmm0207; CHECK-NEXT: ret{{[l|q]}}208 %arg0 = bitcast <2 x i64> %a0 to <16 x i8>209 %res0 = shufflevector <16 x i8> %arg0, <16 x i8> undef, <64 x i32> zeroinitializer210 %res1 = bitcast <64 x i8> %res0 to <8 x i64>211 ret <8 x i64> %res1212}213 214define <8 x i64> @test_mm512_mask_broadcastb_epi8(<8 x i64> %a0, ptr %a1, <2 x i64> %a2) {215; X86-LABEL: test_mm512_mask_broadcastb_epi8:216; X86: # %bb.0:217; X86-NEXT: movl {{[0-9]+}}(%esp), %eax218; X86-NEXT: kmovq (%eax), %k1219; X86-NEXT: vpbroadcastb %xmm1, %zmm0 {%k1}220; X86-NEXT: retl221;222; X64-LABEL: test_mm512_mask_broadcastb_epi8:223; X64: # %bb.0:224; X64-NEXT: kmovq (%rdi), %k1225; X64-NEXT: vpbroadcastb %xmm1, %zmm0 {%k1}226; X64-NEXT: retq227 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>228 %arg1 = load <64 x i1>, ptr %a1229 %arg2 = bitcast <2 x i64> %a2 to <16 x i8>230 %res0 = shufflevector <16 x i8> %arg2, <16 x i8> undef, <64 x i32> zeroinitializer231 %res1 = select <64 x i1> %arg1, <64 x i8> %res0, <64 x i8> %arg0232 %res2 = bitcast <64 x i8> %res1 to <8 x i64>233 ret <8 x i64> %res2234}235 236define <8 x i64> @test_mm512_maskz_broadcastb_epi8(ptr %a0, <2 x i64> %a1) {237; X86-LABEL: test_mm512_maskz_broadcastb_epi8:238; X86: # %bb.0:239; X86-NEXT: movl {{[0-9]+}}(%esp), %eax240; X86-NEXT: kmovq (%eax), %k1241; X86-NEXT: vpbroadcastb %xmm0, %zmm0 {%k1} {z}242; X86-NEXT: retl243;244; X64-LABEL: test_mm512_maskz_broadcastb_epi8:245; X64: # %bb.0:246; X64-NEXT: kmovq (%rdi), %k1247; X64-NEXT: vpbroadcastb %xmm0, %zmm0 {%k1} {z}248; X64-NEXT: retq249 %arg0 = load <64 x i1>, ptr %a0250 %arg1 = bitcast <2 x i64> %a1 to <16 x i8>251 %res0 = shufflevector <16 x i8> %arg1, <16 x i8> undef, <64 x i32> zeroinitializer252 %res1 = select <64 x i1> %arg0, <64 x i8> %res0, <64 x i8> zeroinitializer253 %res2 = bitcast <64 x i8> %res1 to <8 x i64>254 ret <8 x i64> %res2255}256 257define <8 x i64> @test_mm512_broadcastw_epi16(<2 x i64> %a0) {258; CHECK-LABEL: test_mm512_broadcastw_epi16:259; CHECK: # %bb.0:260; CHECK-NEXT: vpbroadcastw %xmm0, %zmm0261; CHECK-NEXT: ret{{[l|q]}}262 %arg0 = bitcast <2 x i64> %a0 to <8 x i16>263 %res0 = shufflevector <8 x i16> %arg0, <8 x i16> undef, <32 x i32> zeroinitializer264 %res1 = bitcast <32 x i16> %res0 to <8 x i64>265 ret <8 x i64> %res1266}267 268define <8 x i64> @test_mm512_mask_broadcastw_epi16(<8 x i64> %a0, i32 %a1, <2 x i64> %a2) {269; X86-LABEL: test_mm512_mask_broadcastw_epi16:270; X86: # %bb.0:271; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1272; X86-NEXT: vpbroadcastw %xmm1, %zmm0 {%k1}273; X86-NEXT: retl274;275; X64-LABEL: test_mm512_mask_broadcastw_epi16:276; X64: # %bb.0:277; X64-NEXT: kmovd %edi, %k1278; X64-NEXT: vpbroadcastw %xmm1, %zmm0 {%k1}279; X64-NEXT: retq280 %arg0 = bitcast <8 x i64> %a0 to <32 x i16>281 %arg1 = bitcast i32 %a1 to <32 x i1>282 %arg2 = bitcast <2 x i64> %a2 to <8 x i16>283 %res0 = shufflevector <8 x i16> %arg2, <8 x i16> undef, <32 x i32> zeroinitializer284 %res1 = select <32 x i1> %arg1, <32 x i16> %res0, <32 x i16> %arg0285 %res2 = bitcast <32 x i16> %res1 to <8 x i64>286 ret <8 x i64> %res2287}288 289define <8 x i64> @test_mm512_maskz_broadcastw_epi16(i32 %a0, <2 x i64> %a1) {290; X86-LABEL: test_mm512_maskz_broadcastw_epi16:291; X86: # %bb.0:292; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1293; X86-NEXT: vpbroadcastw %xmm0, %zmm0 {%k1} {z}294; X86-NEXT: retl295;296; X64-LABEL: test_mm512_maskz_broadcastw_epi16:297; X64: # %bb.0:298; X64-NEXT: kmovd %edi, %k1299; X64-NEXT: vpbroadcastw %xmm0, %zmm0 {%k1} {z}300; X64-NEXT: retq301 %arg0 = bitcast i32 %a0 to <32 x i1>302 %arg1 = bitcast <2 x i64> %a1 to <8 x i16>303 %res0 = shufflevector <8 x i16> %arg1, <8 x i16> undef, <32 x i32> zeroinitializer304 %res1 = select <32 x i1> %arg0, <32 x i16> %res0, <32 x i16> zeroinitializer305 %res2 = bitcast <32 x i16> %res1 to <8 x i64>306 ret <8 x i64> %res2307}308 309define <8 x i64> @test_mm512_bslli_epi128(<8 x i64> %a0) {310; CHECK-LABEL: test_mm512_bslli_epi128:311; CHECK: # %bb.0:312; CHECK-NEXT: vpsrldq {{.*#+}} zmm0 = zmm0[11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[43,44,45,46,47],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zmm0[59,60,61,62,63],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero313; CHECK-NEXT: ret{{[l|q]}}314 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>315 %res0 = shufflevector <64 x i8> %arg0, <64 x i8> zeroinitializer, <64 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 72, i32 73, i32 74, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 85, i32 86, i32 87, i32 88, i32 89, i32 90, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 101, i32 102, i32 103, i32 104, i32 105, i32 106, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116, i32 117, i32 118, i32 119, i32 120, i32 121, i32 122>316 %res1 = bitcast <64 x i8> %res0 to <8 x i64>317 ret <8 x i64> %res1318}319 320define <8 x i64> @test_mm512_bsrli_epi128(<8 x i64> %a0) {321; CHECK-LABEL: test_mm512_bsrli_epi128:322; CHECK: # %bb.0:323; CHECK-NEXT: vpsrldq {{.*#+}} zmm0 = zmm0[5,6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zmm0[21,22,23,24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zmm0[37,38,39,40,41,42,43,44,45,46,47],zero,zero,zero,zero,zero,zmm0[53,54,55,56,57,58,59,60,61,62,63],zero,zero,zero,zero,zero324; CHECK-NEXT: ret{{[l|q]}}325 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>326 %res0 = shufflevector <64 x i8> %arg0, <64 x i8> zeroinitializer, <64 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 80, i32 81, i32 82, i32 83, i32 84, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 96, i32 97, i32 98, i32 99, i32 100, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63, i32 112, i32 113, i32 114, i32 115, i32 116>327 %res1 = bitcast <64 x i8> %res0 to <8 x i64>328 ret <8 x i64> %res1329}330 331define <8 x i64> @test_mm512_unpackhi_epi8(<8 x i64> %a0, <8 x i64> %a1) {332; CHECK-LABEL: test_mm512_unpackhi_epi8:333; CHECK: # %bb.0:334; CHECK-NEXT: vpunpckhbw {{.*#+}} zmm0 = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]335; CHECK-NEXT: ret{{[l|q]}}336 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>337 %arg1 = bitcast <8 x i64> %a1 to <64 x i8>338 %res0 = shufflevector <64 x i8> %arg0, <64 x i8> %arg1, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>339 %res1 = bitcast <64 x i8> %res0 to <8 x i64>340 ret <8 x i64> %res1341}342 343; TODO - improve support for i64 -> mmask64 on 32-bit targets344define <8 x i64> @test_mm512_mask_unpackhi_epi8(<8 x i64> %a0, ptr %a1, <8 x i64> %a2, <8 x i64> %a3) {345; X86-LABEL: test_mm512_mask_unpackhi_epi8:346; X86: # %bb.0:347; X86-NEXT: movl {{[0-9]+}}(%esp), %eax348; X86-NEXT: kmovq (%eax), %k1349; X86-NEXT: vpunpckhbw {{.*#+}} zmm0 {%k1} = zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31],zmm1[40],zmm2[40],zmm1[41],zmm2[41],zmm1[42],zmm2[42],zmm1[43],zmm2[43],zmm1[44],zmm2[44],zmm1[45],zmm2[45],zmm1[46],zmm2[46],zmm1[47],zmm2[47],zmm1[56],zmm2[56],zmm1[57],zmm2[57],zmm1[58],zmm2[58],zmm1[59],zmm2[59],zmm1[60],zmm2[60],zmm1[61],zmm2[61],zmm1[62],zmm2[62],zmm1[63],zmm2[63]350; X86-NEXT: retl351;352; X64-LABEL: test_mm512_mask_unpackhi_epi8:353; X64: # %bb.0:354; X64-NEXT: kmovq (%rdi), %k1355; X64-NEXT: vpunpckhbw {{.*#+}} zmm0 {%k1} = zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31],zmm1[40],zmm2[40],zmm1[41],zmm2[41],zmm1[42],zmm2[42],zmm1[43],zmm2[43],zmm1[44],zmm2[44],zmm1[45],zmm2[45],zmm1[46],zmm2[46],zmm1[47],zmm2[47],zmm1[56],zmm2[56],zmm1[57],zmm2[57],zmm1[58],zmm2[58],zmm1[59],zmm2[59],zmm1[60],zmm2[60],zmm1[61],zmm2[61],zmm1[62],zmm2[62],zmm1[63],zmm2[63]356; X64-NEXT: retq357 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>358 %sel1 = load <64 x i1>, ptr %a1359 %arg2 = bitcast <8 x i64> %a2 to <64 x i8>360 %arg3 = bitcast <8 x i64> %a3 to <64 x i8>361 %res0 = shufflevector <64 x i8> %arg2, <64 x i8> %arg3, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>362 %res1 = select <64 x i1> %sel1, <64 x i8> %res0, <64 x i8> %arg0363 %res2 = bitcast <64 x i8> %res1 to <8 x i64>364 ret <8 x i64> %res2365}366 367define <8 x i64> @test_mm512_maskz_unpackhi_epi8(ptr %a0, <8 x i64> %a1, <8 x i64> %a2) {368; X86-LABEL: test_mm512_maskz_unpackhi_epi8:369; X86: # %bb.0:370; X86-NEXT: movl {{[0-9]+}}(%esp), %eax371; X86-NEXT: kmovq (%eax), %k1372; X86-NEXT: vpunpckhbw {{.*#+}} zmm0 {%k1} {z} = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]373; X86-NEXT: retl374;375; X64-LABEL: test_mm512_maskz_unpackhi_epi8:376; X64: # %bb.0:377; X64-NEXT: kmovq (%rdi), %k1378; X64-NEXT: vpunpckhbw {{.*#+}} zmm0 {%k1} {z} = zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31],zmm0[40],zmm1[40],zmm0[41],zmm1[41],zmm0[42],zmm1[42],zmm0[43],zmm1[43],zmm0[44],zmm1[44],zmm0[45],zmm1[45],zmm0[46],zmm1[46],zmm0[47],zmm1[47],zmm0[56],zmm1[56],zmm0[57],zmm1[57],zmm0[58],zmm1[58],zmm0[59],zmm1[59],zmm0[60],zmm1[60],zmm0[61],zmm1[61],zmm0[62],zmm1[62],zmm0[63],zmm1[63]379; X64-NEXT: retq380 %sel0 = load <64 x i1>, ptr %a0381 %arg1 = bitcast <8 x i64> %a1 to <64 x i8>382 %arg2 = bitcast <8 x i64> %a2 to <64 x i8>383 %res0 = shufflevector <64 x i8> %arg1, <64 x i8> %arg2, <64 x i32> <i32 8, i32 72, i32 9, i32 73, i32 10, i32 74, i32 11, i32 75, i32 12, i32 76, i32 13, i32 77, i32 14, i32 78, i32 15, i32 79, i32 24, i32 88, i32 25, i32 89, i32 26, i32 90, i32 27, i32 91, i32 28, i32 92, i32 29, i32 93, i32 30, i32 94, i32 31, i32 95, i32 40, i32 104, i32 41, i32 105, i32 42, i32 106, i32 43, i32 107, i32 44, i32 108, i32 45, i32 109, i32 46, i32 110, i32 47, i32 111, i32 56, i32 120, i32 57, i32 121, i32 58, i32 122, i32 59, i32 123, i32 60, i32 124, i32 61, i32 125, i32 62, i32 126, i32 63, i32 127>384 %res1 = select <64 x i1> %sel0, <64 x i8> %res0, <64 x i8> zeroinitializer385 %res2 = bitcast <64 x i8> %res1 to <8 x i64>386 ret <8 x i64> %res2387}388 389define <8 x i64> @test_mm512_unpackhi_epi16(<8 x i64> %a0, <8 x i64> %a1) {390; CHECK-LABEL: test_mm512_unpackhi_epi16:391; CHECK: # %bb.0:392; CHECK-NEXT: vpunpckhwd {{.*#+}} zmm0 = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]393; CHECK-NEXT: ret{{[l|q]}}394 %arg0 = bitcast <8 x i64> %a0 to <32 x i16>395 %arg1 = bitcast <8 x i64> %a1 to <32 x i16>396 %res0 = shufflevector <32 x i16> %arg0, <32 x i16> %arg1, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>397 %res1 = bitcast <32 x i16> %res0 to <8 x i64>398 ret <8 x i64> %res1399}400 401define <8 x i64> @test_mm512_mask_unpackhi_epi16(<8 x i64> %a0, i32 %a1, <8 x i64> %a2, <8 x i64> %a3) {402; X86-LABEL: test_mm512_mask_unpackhi_epi16:403; X86: # %bb.0:404; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1405; X86-NEXT: vpunpckhwd {{.*#+}} zmm0 {%k1} = zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31]406; X86-NEXT: retl407;408; X64-LABEL: test_mm512_mask_unpackhi_epi16:409; X64: # %bb.0:410; X64-NEXT: kmovd %edi, %k1411; X64-NEXT: vpunpckhwd {{.*#+}} zmm0 {%k1} = zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[12],zmm2[12],zmm1[13],zmm2[13],zmm1[14],zmm2[14],zmm1[15],zmm2[15],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[28],zmm2[28],zmm1[29],zmm2[29],zmm1[30],zmm2[30],zmm1[31],zmm2[31]412; X64-NEXT: retq413 %arg0 = bitcast <8 x i64> %a0 to <32 x i16>414 %arg1 = bitcast i32 %a1 to <32 x i1>415 %arg2 = bitcast <8 x i64> %a2 to <32 x i16>416 %arg3 = bitcast <8 x i64> %a3 to <32 x i16>417 %res0 = shufflevector <32 x i16> %arg2, <32 x i16> %arg3, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>418 %res1 = select <32 x i1> %arg1, <32 x i16> %res0, <32 x i16> %arg0419 %res2 = bitcast <32 x i16> %res1 to <8 x i64>420 ret <8 x i64> %res2421}422 423define <8 x i64> @test_mm512_maskz_unpackhi_epi16(i32 %a0, <8 x i64> %a1, <8 x i64> %a2) {424; X86-LABEL: test_mm512_maskz_unpackhi_epi16:425; X86: # %bb.0:426; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1427; X86-NEXT: vpunpckhwd {{.*#+}} zmm0 {%k1} {z} = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]428; X86-NEXT: retl429;430; X64-LABEL: test_mm512_maskz_unpackhi_epi16:431; X64: # %bb.0:432; X64-NEXT: kmovd %edi, %k1433; X64-NEXT: vpunpckhwd {{.*#+}} zmm0 {%k1} {z} = zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[12],zmm1[12],zmm0[13],zmm1[13],zmm0[14],zmm1[14],zmm0[15],zmm1[15],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[28],zmm1[28],zmm0[29],zmm1[29],zmm0[30],zmm1[30],zmm0[31],zmm1[31]434; X64-NEXT: retq435 %arg0 = bitcast i32 %a0 to <32 x i1>436 %arg1 = bitcast <8 x i64> %a1 to <32 x i16>437 %arg2 = bitcast <8 x i64> %a2 to <32 x i16>438 %res0 = shufflevector <32 x i16> %arg1, <32 x i16> %arg2, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>439 %res1 = select <32 x i1> %arg0, <32 x i16> %res0, <32 x i16> zeroinitializer440 %res2 = bitcast <32 x i16> %res1 to <8 x i64>441 ret <8 x i64> %res2442}443 444define <8 x i64> @test_mm512_unpacklo_epi8(<8 x i64> %a0, <8 x i64> %a1) {445; CHECK-LABEL: test_mm512_unpacklo_epi8:446; CHECK: # %bb.0:447; CHECK-NEXT: vpunpcklbw {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]448; CHECK-NEXT: ret{{[l|q]}}449 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>450 %arg1 = bitcast <8 x i64> %a1 to <64 x i8>451 %res0 = shufflevector <64 x i8> %arg0, <64 x i8> %arg1, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>452 %res1 = bitcast <64 x i8> %res0 to <8 x i64>453 ret <8 x i64> %res1454}455 456define <8 x i64> @test_mm512_mask_unpacklo_epi8(<8 x i64> %a0, ptr %a1, <8 x i64> %a2, <8 x i64> %a3) {457; X86-LABEL: test_mm512_mask_unpacklo_epi8:458; X86: # %bb.0:459; X86-NEXT: movl {{[0-9]+}}(%esp), %eax460; X86-NEXT: kmovq (%eax), %k1461; X86-NEXT: vpunpcklbw {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[32],zmm2[32],zmm1[33],zmm2[33],zmm1[34],zmm2[34],zmm1[35],zmm2[35],zmm1[36],zmm2[36],zmm1[37],zmm2[37],zmm1[38],zmm2[38],zmm1[39],zmm2[39],zmm1[48],zmm2[48],zmm1[49],zmm2[49],zmm1[50],zmm2[50],zmm1[51],zmm2[51],zmm1[52],zmm2[52],zmm1[53],zmm2[53],zmm1[54],zmm2[54],zmm1[55],zmm2[55]462; X86-NEXT: retl463;464; X64-LABEL: test_mm512_mask_unpacklo_epi8:465; X64: # %bb.0:466; X64-NEXT: kmovq (%rdi), %k1467; X64-NEXT: vpunpcklbw {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[4],zmm2[4],zmm1[5],zmm2[5],zmm1[6],zmm2[6],zmm1[7],zmm2[7],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[20],zmm2[20],zmm1[21],zmm2[21],zmm1[22],zmm2[22],zmm1[23],zmm2[23],zmm1[32],zmm2[32],zmm1[33],zmm2[33],zmm1[34],zmm2[34],zmm1[35],zmm2[35],zmm1[36],zmm2[36],zmm1[37],zmm2[37],zmm1[38],zmm2[38],zmm1[39],zmm2[39],zmm1[48],zmm2[48],zmm1[49],zmm2[49],zmm1[50],zmm2[50],zmm1[51],zmm2[51],zmm1[52],zmm2[52],zmm1[53],zmm2[53],zmm1[54],zmm2[54],zmm1[55],zmm2[55]468; X64-NEXT: retq469 %arg0 = bitcast <8 x i64> %a0 to <64 x i8>470 %sel1 = load <64 x i1>, ptr %a1471 %arg2 = bitcast <8 x i64> %a2 to <64 x i8>472 %arg3 = bitcast <8 x i64> %a3 to <64 x i8>473 %res0 = shufflevector <64 x i8> %arg2, <64 x i8> %arg3, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>474 %res1 = select <64 x i1> %sel1, <64 x i8> %res0, <64 x i8> %arg0475 %res2 = bitcast <64 x i8> %res1 to <8 x i64>476 ret <8 x i64> %res2477}478 479define <8 x i64> @test_mm512_maskz_unpacklo_epi8(ptr %a0, <8 x i64> %a1, <8 x i64> %a2) {480; X86-LABEL: test_mm512_maskz_unpacklo_epi8:481; X86: # %bb.0:482; X86-NEXT: movl {{[0-9]+}}(%esp), %eax483; X86-NEXT: kmovq (%eax), %k1484; X86-NEXT: vpunpcklbw {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]485; X86-NEXT: retl486;487; X64-LABEL: test_mm512_maskz_unpacklo_epi8:488; X64: # %bb.0:489; X64-NEXT: kmovq (%rdi), %k1490; X64-NEXT: vpunpcklbw {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[20],zmm1[20],zmm0[21],zmm1[21],zmm0[22],zmm1[22],zmm0[23],zmm1[23],zmm0[32],zmm1[32],zmm0[33],zmm1[33],zmm0[34],zmm1[34],zmm0[35],zmm1[35],zmm0[36],zmm1[36],zmm0[37],zmm1[37],zmm0[38],zmm1[38],zmm0[39],zmm1[39],zmm0[48],zmm1[48],zmm0[49],zmm1[49],zmm0[50],zmm1[50],zmm0[51],zmm1[51],zmm0[52],zmm1[52],zmm0[53],zmm1[53],zmm0[54],zmm1[54],zmm0[55],zmm1[55]491; X64-NEXT: retq492 %sel0 = load <64 x i1>, ptr %a0493 %arg1 = bitcast <8 x i64> %a1 to <64 x i8>494 %arg2 = bitcast <8 x i64> %a2 to <64 x i8>495 %res0 = shufflevector <64 x i8> %arg1, <64 x i8> %arg2, <64 x i32> <i32 0, i32 64, i32 1, i32 65, i32 2, i32 66, i32 3, i32 67, i32 4, i32 68, i32 5, i32 69, i32 6, i32 70, i32 7, i32 71, i32 16, i32 80, i32 17, i32 81, i32 18, i32 82, i32 19, i32 83, i32 20, i32 84, i32 21, i32 85, i32 22, i32 86, i32 23, i32 87, i32 32, i32 96, i32 33, i32 97, i32 34, i32 98, i32 35, i32 99, i32 36, i32 100, i32 37, i32 101, i32 38, i32 102, i32 39, i32 103, i32 48, i32 112, i32 49, i32 113, i32 50, i32 114, i32 51, i32 115, i32 52, i32 116, i32 53, i32 117, i32 54, i32 118, i32 55, i32 119>496 %res1 = select <64 x i1> %sel0, <64 x i8> %res0, <64 x i8> zeroinitializer497 %res2 = bitcast <64 x i8> %res1 to <8 x i64>498 ret <8 x i64> %res2499}500 501define <8 x i64> @test_mm512_unpacklo_epi16(<8 x i64> %a0, <8 x i64> %a1) {502; CHECK-LABEL: test_mm512_unpacklo_epi16:503; CHECK: # %bb.0:504; CHECK-NEXT: vpunpcklwd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]505; CHECK-NEXT: ret{{[l|q]}}506 %arg0 = bitcast <8 x i64> %a0 to <32 x i16>507 %arg1 = bitcast <8 x i64> %a1 to <32 x i16>508 %res0 = shufflevector <32 x i16> %arg0, <32 x i16> %arg1, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>509 %res1 = bitcast <32 x i16> %res0 to <8 x i64>510 ret <8 x i64> %res1511}512 513define <8 x i64> @test_mm512_mask_unpacklo_epi16(<8 x i64> %a0, i32 %a1, <8 x i64> %a2, <8 x i64> %a3) {514; X86-LABEL: test_mm512_mask_unpacklo_epi16:515; X86: # %bb.0:516; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1517; X86-NEXT: vpunpcklwd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27]518; X86-NEXT: retl519;520; X64-LABEL: test_mm512_mask_unpacklo_epi16:521; X64: # %bb.0:522; X64-NEXT: kmovd %edi, %k1523; X64-NEXT: vpunpcklwd {{.*#+}} zmm0 {%k1} = zmm1[0],zmm2[0],zmm1[1],zmm2[1],zmm1[2],zmm2[2],zmm1[3],zmm2[3],zmm1[8],zmm2[8],zmm1[9],zmm2[9],zmm1[10],zmm2[10],zmm1[11],zmm2[11],zmm1[16],zmm2[16],zmm1[17],zmm2[17],zmm1[18],zmm2[18],zmm1[19],zmm2[19],zmm1[24],zmm2[24],zmm1[25],zmm2[25],zmm1[26],zmm2[26],zmm1[27],zmm2[27]524; X64-NEXT: retq525 %arg0 = bitcast <8 x i64> %a0 to <32 x i16>526 %arg1 = bitcast i32 %a1 to <32 x i1>527 %arg2 = bitcast <8 x i64> %a2 to <32 x i16>528 %arg3 = bitcast <8 x i64> %a3 to <32 x i16>529 %res0 = shufflevector <32 x i16> %arg2, <32 x i16> %arg3, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>530 %res1 = select <32 x i1> %arg1, <32 x i16> %res0, <32 x i16> %arg0531 %res2 = bitcast <32 x i16> %res1 to <8 x i64>532 ret <8 x i64> %res2533}534 535define <8 x i64> @test_mm512_maskz_unpacklo_epi16(i32 %a0, <8 x i64> %a1, <8 x i64> %a2) {536; X86-LABEL: test_mm512_maskz_unpacklo_epi16:537; X86: # %bb.0:538; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1539; X86-NEXT: vpunpcklwd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]540; X86-NEXT: retl541;542; X64-LABEL: test_mm512_maskz_unpacklo_epi16:543; X64: # %bb.0:544; X64-NEXT: kmovd %edi, %k1545; X64-NEXT: vpunpcklwd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[16],zmm1[16],zmm0[17],zmm1[17],zmm0[18],zmm1[18],zmm0[19],zmm1[19],zmm0[24],zmm1[24],zmm0[25],zmm1[25],zmm0[26],zmm1[26],zmm0[27],zmm1[27]546; X64-NEXT: retq547 %arg0 = bitcast i32 %a0 to <32 x i1>548 %arg1 = bitcast <8 x i64> %a1 to <32 x i16>549 %arg2 = bitcast <8 x i64> %a2 to <32 x i16>550 %res0 = shufflevector <32 x i16> %arg1, <32 x i16> %arg2, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59>551 %res1 = select <32 x i1> %arg0, <32 x i16> %res0, <32 x i16> zeroinitializer552 %res2 = bitcast <32 x i16> %res1 to <8 x i64>553 ret <8 x i64> %res2554}555 556define i64 @test_mm512_test_epi8_mask(<8 x i64> %__A, <8 x i64> %__B) {557; X86-LABEL: test_mm512_test_epi8_mask:558; X86: # %bb.0: # %entry559; X86-NEXT: vptestmb %zmm0, %zmm1, %k0560; X86-NEXT: kshiftrq $32, %k0, %k1561; X86-NEXT: kmovd %k0, %eax562; X86-NEXT: kmovd %k1, %edx563; X86-NEXT: vzeroupper564; X86-NEXT: retl565;566; X64-LABEL: test_mm512_test_epi8_mask:567; X64: # %bb.0: # %entry568; X64-NEXT: vptestmb %zmm0, %zmm1, %k0569; X64-NEXT: kmovq %k0, %rax570; X64-NEXT: vzeroupper571; X64-NEXT: retq572entry:573 %and1.i.i = and <8 x i64> %__B, %__A574 %0 = bitcast <8 x i64> %and1.i.i to <64 x i8>575 %1 = icmp ne <64 x i8> %0, zeroinitializer576 %2 = bitcast <64 x i1> %1 to i64577 ret i64 %2578}579 580define i64 @test_mm512_mask_test_epi8_mask(i64 %__U, <8 x i64> %__A, <8 x i64> %__B) {581; X86-LABEL: test_mm512_mask_test_epi8_mask:582; X86: # %bb.0: # %entry583; X86-NEXT: vptestmb %zmm0, %zmm1, %k0584; X86-NEXT: kshiftrq $32, %k0, %k1585; X86-NEXT: kmovd %k1, %edx586; X86-NEXT: kmovd %k0, %eax587; X86-NEXT: andl {{[0-9]+}}(%esp), %eax588; X86-NEXT: andl {{[0-9]+}}(%esp), %edx589; X86-NEXT: vzeroupper590; X86-NEXT: retl591;592; X64-LABEL: test_mm512_mask_test_epi8_mask:593; X64: # %bb.0: # %entry594; X64-NEXT: kmovq %rdi, %k1595; X64-NEXT: vptestmb %zmm0, %zmm1, %k0 {%k1}596; X64-NEXT: kmovq %k0, %rax597; X64-NEXT: vzeroupper598; X64-NEXT: retq599entry:600 %and1.i.i = and <8 x i64> %__B, %__A601 %0 = bitcast <8 x i64> %and1.i.i to <64 x i8>602 %1 = icmp ne <64 x i8> %0, zeroinitializer603 %2 = bitcast i64 %__U to <64 x i1>604 %3 = and <64 x i1> %1, %2605 %4 = bitcast <64 x i1> %3 to i64606 ret i64 %4607}608 609define i32 @test_mm512_test_epi16_mask(<8 x i64> %__A, <8 x i64> %__B) {610; CHECK-LABEL: test_mm512_test_epi16_mask:611; CHECK: # %bb.0: # %entry612; CHECK-NEXT: vptestmw %zmm0, %zmm1, %k0613; CHECK-NEXT: kmovd %k0, %eax614; CHECK-NEXT: vzeroupper615; CHECK-NEXT: ret{{[l|q]}}616entry:617 %and1.i.i = and <8 x i64> %__B, %__A618 %0 = bitcast <8 x i64> %and1.i.i to <32 x i16>619 %1 = icmp ne <32 x i16> %0, zeroinitializer620 %2 = bitcast <32 x i1> %1 to i32621 ret i32 %2622}623 624define i32 @test_mm512_mask_test_epi16_mask(i32 %__U, <8 x i64> %__A, <8 x i64> %__B) {625; X86-LABEL: test_mm512_mask_test_epi16_mask:626; X86: # %bb.0: # %entry627; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1628; X86-NEXT: vptestmw %zmm0, %zmm1, %k0 {%k1}629; X86-NEXT: kmovd %k0, %eax630; X86-NEXT: vzeroupper631; X86-NEXT: retl632;633; X64-LABEL: test_mm512_mask_test_epi16_mask:634; X64: # %bb.0: # %entry635; X64-NEXT: kmovd %edi, %k1636; X64-NEXT: vptestmw %zmm0, %zmm1, %k0 {%k1}637; X64-NEXT: kmovd %k0, %eax638; X64-NEXT: vzeroupper639; X64-NEXT: retq640entry:641 %and1.i.i = and <8 x i64> %__B, %__A642 %0 = bitcast <8 x i64> %and1.i.i to <32 x i16>643 %1 = icmp ne <32 x i16> %0, zeroinitializer644 %2 = bitcast i32 %__U to <32 x i1>645 %3 = and <32 x i1> %1, %2646 %4 = bitcast <32 x i1> %3 to i32647 ret i32 %4648}649 650define i64 @test_mm512_testn_epi8_mask(<8 x i64> %__A, <8 x i64> %__B) {651; X86-LABEL: test_mm512_testn_epi8_mask:652; X86: # %bb.0: # %entry653; X86-NEXT: vptestnmb %zmm0, %zmm1, %k0654; X86-NEXT: kshiftrq $32, %k0, %k1655; X86-NEXT: kmovd %k0, %eax656; X86-NEXT: kmovd %k1, %edx657; X86-NEXT: vzeroupper658; X86-NEXT: retl659;660; X64-LABEL: test_mm512_testn_epi8_mask:661; X64: # %bb.0: # %entry662; X64-NEXT: vptestnmb %zmm0, %zmm1, %k0663; X64-NEXT: kmovq %k0, %rax664; X64-NEXT: vzeroupper665; X64-NEXT: retq666entry:667 %and1.i.i = and <8 x i64> %__B, %__A668 %0 = bitcast <8 x i64> %and1.i.i to <64 x i8>669 %1 = icmp eq <64 x i8> %0, zeroinitializer670 %2 = bitcast <64 x i1> %1 to i64671 ret i64 %2672}673 674define i64 @test_mm512_mask_testn_epi8_mask(i64 %__U, <8 x i64> %__A, <8 x i64> %__B) {675; X86-LABEL: test_mm512_mask_testn_epi8_mask:676; X86: # %bb.0: # %entry677; X86-NEXT: vptestnmb %zmm0, %zmm1, %k0678; X86-NEXT: kshiftrq $32, %k0, %k1679; X86-NEXT: kmovd %k1, %edx680; X86-NEXT: kmovd %k0, %eax681; X86-NEXT: andl {{[0-9]+}}(%esp), %eax682; X86-NEXT: andl {{[0-9]+}}(%esp), %edx683; X86-NEXT: vzeroupper684; X86-NEXT: retl685;686; X64-LABEL: test_mm512_mask_testn_epi8_mask:687; X64: # %bb.0: # %entry688; X64-NEXT: kmovq %rdi, %k1689; X64-NEXT: vptestnmb %zmm0, %zmm1, %k0 {%k1}690; X64-NEXT: kmovq %k0, %rax691; X64-NEXT: vzeroupper692; X64-NEXT: retq693entry:694 %and1.i.i = and <8 x i64> %__B, %__A695 %0 = bitcast <8 x i64> %and1.i.i to <64 x i8>696 %1 = icmp eq <64 x i8> %0, zeroinitializer697 %2 = bitcast i64 %__U to <64 x i1>698 %3 = and <64 x i1> %1, %2699 %4 = bitcast <64 x i1> %3 to i64700 ret i64 %4701}702 703define i32 @test_mm512_testn_epi16_mask(<8 x i64> %__A, <8 x i64> %__B) {704; CHECK-LABEL: test_mm512_testn_epi16_mask:705; CHECK: # %bb.0: # %entry706; CHECK-NEXT: vptestnmw %zmm0, %zmm1, %k0707; CHECK-NEXT: kmovd %k0, %eax708; CHECK-NEXT: vzeroupper709; CHECK-NEXT: ret{{[l|q]}}710entry:711 %and1.i.i = and <8 x i64> %__B, %__A712 %0 = bitcast <8 x i64> %and1.i.i to <32 x i16>713 %1 = icmp eq <32 x i16> %0, zeroinitializer714 %2 = bitcast <32 x i1> %1 to i32715 ret i32 %2716}717 718define i32 @test_mm512_mask_testn_epi16_mask(i32 %__U, <8 x i64> %__A, <8 x i64> %__B) {719; X86-LABEL: test_mm512_mask_testn_epi16_mask:720; X86: # %bb.0: # %entry721; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1722; X86-NEXT: vptestnmw %zmm0, %zmm1, %k0 {%k1}723; X86-NEXT: kmovd %k0, %eax724; X86-NEXT: vzeroupper725; X86-NEXT: retl726;727; X64-LABEL: test_mm512_mask_testn_epi16_mask:728; X64: # %bb.0: # %entry729; X64-NEXT: kmovd %edi, %k1730; X64-NEXT: vptestnmw %zmm0, %zmm1, %k0 {%k1}731; X64-NEXT: kmovd %k0, %eax732; X64-NEXT: vzeroupper733; X64-NEXT: retq734entry:735 %and1.i.i = and <8 x i64> %__B, %__A736 %0 = bitcast <8 x i64> %and1.i.i to <32 x i16>737 %1 = icmp eq <32 x i16> %0, zeroinitializer738 %2 = bitcast i32 %__U to <32 x i1>739 %3 = and <32 x i1> %1, %2740 %4 = bitcast <32 x i1> %3 to i32741 ret i32 %4742}743 744define <4 x i64> @test_mm512_cvtepi16_epi8(<8 x i64> %__A) {745; CHECK-LABEL: test_mm512_cvtepi16_epi8:746; CHECK: # %bb.0: # %entry747; CHECK-NEXT: vpmovwb %zmm0, %ymm0748; CHECK-NEXT: ret{{[l|q]}}749entry:750 %0 = bitcast <8 x i64> %__A to <32 x i16>751 %conv.i = trunc <32 x i16> %0 to <32 x i8>752 %1 = bitcast <32 x i8> %conv.i to <4 x i64>753 ret <4 x i64> %1754}755 756define <4 x i64> @test_mm512_mask_cvtepi16_epi8(<4 x i64> %__O, i32 %__M, <8 x i64> %__A) {757; X86-LABEL: test_mm512_mask_cvtepi16_epi8:758; X86: # %bb.0: # %entry759; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1760; X86-NEXT: vpmovwb %zmm1, %ymm0 {%k1}761; X86-NEXT: retl762;763; X64-LABEL: test_mm512_mask_cvtepi16_epi8:764; X64: # %bb.0: # %entry765; X64-NEXT: kmovd %edi, %k1766; X64-NEXT: vpmovwb %zmm1, %ymm0 {%k1}767; X64-NEXT: retq768entry:769 %0 = bitcast <8 x i64> %__A to <32 x i16>770 %conv.i.i = trunc <32 x i16> %0 to <32 x i8>771 %1 = bitcast <4 x i64> %__O to <32 x i8>772 %2 = bitcast i32 %__M to <32 x i1>773 %3 = select <32 x i1> %2, <32 x i8> %conv.i.i, <32 x i8> %1774 %4 = bitcast <32 x i8> %3 to <4 x i64>775 ret <4 x i64> %4776}777 778define <4 x i64> @test_mm512_maskz_cvtepi16_epi8(i32 %__M, <8 x i64> %__A) {779; X86-LABEL: test_mm512_maskz_cvtepi16_epi8:780; X86: # %bb.0: # %entry781; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1782; X86-NEXT: vpmovwb %zmm0, %ymm0 {%k1} {z}783; X86-NEXT: retl784;785; X64-LABEL: test_mm512_maskz_cvtepi16_epi8:786; X64: # %bb.0: # %entry787; X64-NEXT: kmovd %edi, %k1788; X64-NEXT: vpmovwb %zmm0, %ymm0 {%k1} {z}789; X64-NEXT: retq790entry:791 %0 = bitcast <8 x i64> %__A to <32 x i16>792 %conv.i.i = trunc <32 x i16> %0 to <32 x i8>793 %1 = bitcast i32 %__M to <32 x i1>794 %2 = select <32 x i1> %1, <32 x i8> %conv.i.i, <32 x i8> zeroinitializer795 %3 = bitcast <32 x i8> %2 to <4 x i64>796 ret <4 x i64> %3797}798 799define <8 x i64> @test_mm512_mask2_permutex2var_epi16(<8 x i64> %__A, <8 x i64> %__I, i32 %__U, <8 x i64> %__B) {800; X86-LABEL: test_mm512_mask2_permutex2var_epi16:801; X86: # %bb.0: # %entry802; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1803; X86-NEXT: vpermi2w %zmm2, %zmm0, %zmm1 {%k1}804; X86-NEXT: vmovdqa64 %zmm1, %zmm0805; X86-NEXT: retl806;807; X64-LABEL: test_mm512_mask2_permutex2var_epi16:808; X64: # %bb.0: # %entry809; X64-NEXT: kmovd %edi, %k1810; X64-NEXT: vpermi2w %zmm2, %zmm0, %zmm1 {%k1}811; X64-NEXT: vmovdqa64 %zmm1, %zmm0812; X64-NEXT: retq813entry:814 %0 = bitcast <8 x i64> %__A to <32 x i16>815 %1 = bitcast <8 x i64> %__I to <32 x i16>816 %2 = bitcast <8 x i64> %__B to <32 x i16>817 %3 = tail call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> %1, <32 x i16> %2)818 %4 = bitcast i32 %__U to <32 x i1>819 %5 = select <32 x i1> %4, <32 x i16> %3, <32 x i16> %1820 %6 = bitcast <32 x i16> %5 to <8 x i64>821 ret <8 x i64> %6822}823 824define <8 x i64> @test_mm512_permutex2var_epi16(<8 x i64> %__A, <8 x i64> %__I, <8 x i64> %__B) {825; CHECK-LABEL: test_mm512_permutex2var_epi16:826; CHECK: # %bb.0: # %entry827; CHECK-NEXT: vpermt2w %zmm2, %zmm1, %zmm0828; CHECK-NEXT: ret{{[l|q]}}829entry:830 %0 = bitcast <8 x i64> %__A to <32 x i16>831 %1 = bitcast <8 x i64> %__I to <32 x i16>832 %2 = bitcast <8 x i64> %__B to <32 x i16>833 %3 = tail call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> %1, <32 x i16> %2)834 %4 = bitcast <32 x i16> %3 to <8 x i64>835 ret <8 x i64> %4836}837 838define <8 x i64> @test_mm512_mask_permutex2var_epi16(<8 x i64> %__A, i32 %__U, <8 x i64> %__I, <8 x i64> %__B) {839; X86-LABEL: test_mm512_mask_permutex2var_epi16:840; X86: # %bb.0: # %entry841; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1842; X86-NEXT: vpermt2w %zmm2, %zmm1, %zmm0 {%k1}843; X86-NEXT: retl844;845; X64-LABEL: test_mm512_mask_permutex2var_epi16:846; X64: # %bb.0: # %entry847; X64-NEXT: kmovd %edi, %k1848; X64-NEXT: vpermt2w %zmm2, %zmm1, %zmm0 {%k1}849; X64-NEXT: retq850entry:851 %0 = bitcast <8 x i64> %__A to <32 x i16>852 %1 = bitcast <8 x i64> %__I to <32 x i16>853 %2 = bitcast <8 x i64> %__B to <32 x i16>854 %3 = tail call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> %1, <32 x i16> %2)855 %4 = bitcast i32 %__U to <32 x i1>856 %5 = select <32 x i1> %4, <32 x i16> %3, <32 x i16> %0857 %6 = bitcast <32 x i16> %5 to <8 x i64>858 ret <8 x i64> %6859}860 861define <8 x i64> @test_mm512_maskz_permutex2var_epi16(i32 %__U, <8 x i64> %__A, <8 x i64> %__I, <8 x i64> %__B) {862; X86-LABEL: test_mm512_maskz_permutex2var_epi16:863; X86: # %bb.0: # %entry864; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1865; X86-NEXT: vpermt2w %zmm2, %zmm1, %zmm0 {%k1} {z}866; X86-NEXT: retl867;868; X64-LABEL: test_mm512_maskz_permutex2var_epi16:869; X64: # %bb.0: # %entry870; X64-NEXT: kmovd %edi, %k1871; X64-NEXT: vpermt2w %zmm2, %zmm1, %zmm0 {%k1} {z}872; X64-NEXT: retq873entry:874 %0 = bitcast <8 x i64> %__A to <32 x i16>875 %1 = bitcast <8 x i64> %__I to <32 x i16>876 %2 = bitcast <8 x i64> %__B to <32 x i16>877 %3 = tail call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> %1, <32 x i16> %2)878 %4 = bitcast i32 %__U to <32 x i1>879 %5 = select <32 x i1> %4, <32 x i16> %3, <32 x i16> zeroinitializer880 %6 = bitcast <32 x i16> %5 to <8 x i64>881 ret <8 x i64> %6882}883 884declare <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16>, <32 x i16>, <32 x i16>)885 886!0 = !{i32 1}887 888