1850 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -disable-peephole -mtriple=i686-unknown-unknown -mattr=+avx512bw --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512bw --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X644 5define i32 @test_int_x86_avx512_kadd_d(<32 x i16> %A, <32 x i16> %B) nounwind {6; CHECK-LABEL: test_int_x86_avx512_kadd_d:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: vptestmw %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0xfd,0x48,0x26,0xc0]9; CHECK-NEXT: vptestmw %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0xf5,0x48,0x26,0xc9]10; CHECK-NEXT: kaddd %k1, %k0, %k0 # encoding: [0xc4,0xe1,0xfd,0x4a,0xc1]11; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]12; CHECK-NEXT: kortestd %k0, %k0 # encoding: [0xc4,0xe1,0xf9,0x98,0xc0]13; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]14; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]15; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]16entry:17 %0 = icmp ne <32 x i16> %A, zeroinitializer18 %1 = icmp ne <32 x i16> %B, zeroinitializer19 %2 = call <32 x i1> @llvm.x86.avx512.kadd.d(<32 x i1> %0, <32 x i1> %1)20 %3 = bitcast <32 x i1> %2 to i3221 %4 = icmp eq i32 %3, 022 %5 = zext i1 %4 to i3223 ret i32 %524}25declare <32 x i1> @llvm.x86.avx512.kadd.d(<32 x i1>, <32 x i1>)26 27define i32 @test_int_x86_avx512_kadd_q(<64 x i8> %A, <64 x i8> %B) nounwind {28; X86-LABEL: test_int_x86_avx512_kadd_q:29; X86: # %bb.0: # %entry30; X86-NEXT: vptestmb %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0x7d,0x48,0x26,0xc0]31; X86-NEXT: vptestmb %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0x75,0x48,0x26,0xc9]32; X86-NEXT: kaddq %k1, %k0, %k0 # encoding: [0xc4,0xe1,0xfc,0x4a,0xc1]33; X86-NEXT: kshiftrq $32, %k0, %k1 # encoding: [0xc4,0xe3,0xf9,0x31,0xc8,0x20]34; X86-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]35; X86-NEXT: kortestd %k1, %k0 # encoding: [0xc4,0xe1,0xf9,0x98,0xc1]36; X86-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]37; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]38; X86-NEXT: retl # encoding: [0xc3]39;40; X64-LABEL: test_int_x86_avx512_kadd_q:41; X64: # %bb.0: # %entry42; X64-NEXT: vptestmb %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0x7d,0x48,0x26,0xc0]43; X64-NEXT: vptestmb %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0x75,0x48,0x26,0xc9]44; X64-NEXT: kaddq %k1, %k0, %k0 # encoding: [0xc4,0xe1,0xfc,0x4a,0xc1]45; X64-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]46; X64-NEXT: kortestq %k0, %k0 # encoding: [0xc4,0xe1,0xf8,0x98,0xc0]47; X64-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]48; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]49; X64-NEXT: retq # encoding: [0xc3]50entry:51 %0 = icmp ne <64 x i8> %A, zeroinitializer52 %1 = icmp ne <64 x i8> %B, zeroinitializer53 %2 = call <64 x i1> @llvm.x86.avx512.kadd.q(<64 x i1> %0, <64 x i1> %1)54 %3 = bitcast <64 x i1> %2 to i6455 %4 = icmp eq i64 %3, 056 %5 = zext i1 %4 to i3257 ret i32 %558}59declare <64 x i1> @llvm.x86.avx512.kadd.q(<64 x i1>, <64 x i1>)60 61define i32 @test_x86_avx512_ktestc_d(<32 x i16> %A, <32 x i16> %B) {62; CHECK-LABEL: test_x86_avx512_ktestc_d:63; CHECK: # %bb.0:64; CHECK-NEXT: vptestmw %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0xfd,0x48,0x26,0xc0]65; CHECK-NEXT: vptestmw %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0xf5,0x48,0x26,0xc9]66; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]67; CHECK-NEXT: ktestd %k1, %k0 # encoding: [0xc4,0xe1,0xf9,0x99,0xc1]68; CHECK-NEXT: setb %al # encoding: [0x0f,0x92,0xc0]69; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]70; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]71 %1 = icmp ne <32 x i16> %A, zeroinitializer72 %2 = icmp ne <32 x i16> %B, zeroinitializer73 %res = call i32 @llvm.x86.avx512.ktestc.d(<32 x i1> %1, <32 x i1> %2) ; <i32> [#uses=1]74 ret i32 %res75}76declare i32 @llvm.x86.avx512.ktestc.d(<32 x i1>, <32 x i1>) nounwind readnone77 78define i32 @test_x86_avx512_ktestz_d(<32 x i16> %A, <32 x i16> %B) {79; CHECK-LABEL: test_x86_avx512_ktestz_d:80; CHECK: # %bb.0:81; CHECK-NEXT: vptestmw %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0xfd,0x48,0x26,0xc0]82; CHECK-NEXT: vptestmw %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0xf5,0x48,0x26,0xc9]83; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]84; CHECK-NEXT: ktestd %k1, %k0 # encoding: [0xc4,0xe1,0xf9,0x99,0xc1]85; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]86; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]87; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]88 %1 = icmp ne <32 x i16> %A, zeroinitializer89 %2 = icmp ne <32 x i16> %B, zeroinitializer90 %res = call i32 @llvm.x86.avx512.ktestz.d(<32 x i1> %1, <32 x i1> %2) ; <i32> [#uses=1]91 ret i32 %res92}93declare i32 @llvm.x86.avx512.ktestz.d(<32 x i1>, <32 x i1>) nounwind readnone94 95define i32 @test_x86_avx512_ktestc_q(<64 x i8> %A, <64 x i8> %B) {96; CHECK-LABEL: test_x86_avx512_ktestc_q:97; CHECK: # %bb.0:98; CHECK-NEXT: vptestmb %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0x7d,0x48,0x26,0xc0]99; CHECK-NEXT: vptestmb %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0x75,0x48,0x26,0xc9]100; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]101; CHECK-NEXT: ktestq %k1, %k0 # encoding: [0xc4,0xe1,0xf8,0x99,0xc1]102; CHECK-NEXT: setb %al # encoding: [0x0f,0x92,0xc0]103; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]104; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]105 %1 = icmp ne <64 x i8> %A, zeroinitializer106 %2 = icmp ne <64 x i8> %B, zeroinitializer107 %res = call i32 @llvm.x86.avx512.ktestc.q(<64 x i1> %1, <64 x i1> %2) ; <i32> [#uses=1]108 ret i32 %res109}110declare i32 @llvm.x86.avx512.ktestc.q(<64 x i1>, <64 x i1>) nounwind readnone111 112define i32 @test_x86_avx512_ktestz_q(<64 x i8> %A, <64 x i8> %B) {113; CHECK-LABEL: test_x86_avx512_ktestz_q:114; CHECK: # %bb.0:115; CHECK-NEXT: vptestmb %zmm0, %zmm0, %k0 # encoding: [0x62,0xf2,0x7d,0x48,0x26,0xc0]116; CHECK-NEXT: vptestmb %zmm1, %zmm1, %k1 # encoding: [0x62,0xf2,0x75,0x48,0x26,0xc9]117; CHECK-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]118; CHECK-NEXT: ktestq %k1, %k0 # encoding: [0xc4,0xe1,0xf8,0x99,0xc1]119; CHECK-NEXT: sete %al # encoding: [0x0f,0x94,0xc0]120; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]121; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]122 %1 = icmp ne <64 x i8> %A, zeroinitializer123 %2 = icmp ne <64 x i8> %B, zeroinitializer124 %res = call i32 @llvm.x86.avx512.ktestz.q(<64 x i1> %1, <64 x i1> %2) ; <i32> [#uses=1]125 ret i32 %res126}127declare i32 @llvm.x86.avx512.ktestz.q(<64 x i1>, <64 x i1>) nounwind readnone128 129define <32 x i16> @test_mask_packs_epi32_rr_512(<16 x i32> %a, <16 x i32> %b) {130; CHECK-LABEL: test_mask_packs_epi32_rr_512:131; CHECK: # %bb.0:132; CHECK-NEXT: vpackssdw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x6b,0xc1]133; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]134 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)135 ret <32 x i16> %1136}137 138define <32 x i16> @test_mask_packs_epi32_rrk_512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask) {139; X86-LABEL: test_mask_packs_epi32_rrk_512:140; X86: # %bb.0:141; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]142; X86-NEXT: vpackssdw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x6b,0xd1]143; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]144; X86-NEXT: retl # encoding: [0xc3]145;146; X64-LABEL: test_mask_packs_epi32_rrk_512:147; X64: # %bb.0:148; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]149; X64-NEXT: vpackssdw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x6b,0xd1]150; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]151; X64-NEXT: retq # encoding: [0xc3]152 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)153 %2 = bitcast i32 %mask to <32 x i1>154 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru155 ret <32 x i16> %3156}157 158define <32 x i16> @test_mask_packs_epi32_rrkz_512(<16 x i32> %a, <16 x i32> %b, i32 %mask) {159; X86-LABEL: test_mask_packs_epi32_rrkz_512:160; X86: # %bb.0:161; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]162; X86-NEXT: vpackssdw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x6b,0xc1]163; X86-NEXT: retl # encoding: [0xc3]164;165; X64-LABEL: test_mask_packs_epi32_rrkz_512:166; X64: # %bb.0:167; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]168; X64-NEXT: vpackssdw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x6b,0xc1]169; X64-NEXT: retq # encoding: [0xc3]170 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)171 %2 = bitcast i32 %mask to <32 x i1>172 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer173 ret <32 x i16> %3174}175 176define <32 x i16> @test_mask_packs_epi32_rm_512(<16 x i32> %a, ptr %ptr_b) {177; X86-LABEL: test_mask_packs_epi32_rm_512:178; X86: # %bb.0:179; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]180; X86-NEXT: vpackssdw (%eax), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x6b,0x00]181; X86-NEXT: retl # encoding: [0xc3]182;183; X64-LABEL: test_mask_packs_epi32_rm_512:184; X64: # %bb.0:185; X64-NEXT: vpackssdw (%rdi), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x6b,0x07]186; X64-NEXT: retq # encoding: [0xc3]187 %b = load <16 x i32>, ptr %ptr_b188 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)189 ret <32 x i16> %1190}191 192define <32 x i16> @test_mask_packs_epi32_rmk_512(<16 x i32> %a, ptr %ptr_b, <32 x i16> %passThru, i32 %mask) {193; X86-LABEL: test_mask_packs_epi32_rmk_512:194; X86: # %bb.0:195; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]196; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]197; X86-NEXT: vpackssdw (%eax), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x6b,0x08]198; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]199; X86-NEXT: retl # encoding: [0xc3]200;201; X64-LABEL: test_mask_packs_epi32_rmk_512:202; X64: # %bb.0:203; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]204; X64-NEXT: vpackssdw (%rdi), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x6b,0x0f]205; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]206; X64-NEXT: retq # encoding: [0xc3]207 %b = load <16 x i32>, ptr %ptr_b208 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)209 %2 = bitcast i32 %mask to <32 x i1>210 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru211 ret <32 x i16> %3212}213 214define <32 x i16> @test_mask_packs_epi32_rmkz_512(<16 x i32> %a, ptr %ptr_b, i32 %mask) {215; X86-LABEL: test_mask_packs_epi32_rmkz_512:216; X86: # %bb.0:217; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]218; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]219; X86-NEXT: vpackssdw (%eax), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x6b,0x00]220; X86-NEXT: retl # encoding: [0xc3]221;222; X64-LABEL: test_mask_packs_epi32_rmkz_512:223; X64: # %bb.0:224; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]225; X64-NEXT: vpackssdw (%rdi), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x6b,0x07]226; X64-NEXT: retq # encoding: [0xc3]227 %b = load <16 x i32>, ptr %ptr_b228 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)229 %2 = bitcast i32 %mask to <32 x i1>230 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer231 ret <32 x i16> %3232}233 234define <32 x i16> @test_mask_packs_epi32_rmb_512(<16 x i32> %a, ptr %ptr_b) {235; X86-LABEL: test_mask_packs_epi32_rmb_512:236; X86: # %bb.0:237; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]238; X86-NEXT: vpackssdw (%eax){1to16}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x58,0x6b,0x00]239; X86-NEXT: retl # encoding: [0xc3]240;241; X64-LABEL: test_mask_packs_epi32_rmb_512:242; X64: # %bb.0:243; X64-NEXT: vpackssdw (%rdi){1to16}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x58,0x6b,0x07]244; X64-NEXT: retq # encoding: [0xc3]245 %q = load i32, ptr %ptr_b246 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0247 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer248 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)249 ret <32 x i16> %1250}251 252define <32 x i16> @test_mask_packs_epi32_rmbk_512(<16 x i32> %a, ptr %ptr_b, <32 x i16> %passThru, i32 %mask) {253; X86-LABEL: test_mask_packs_epi32_rmbk_512:254; X86: # %bb.0:255; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]256; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]257; X86-NEXT: vpackssdw (%eax){1to16}, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x59,0x6b,0x08]258; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]259; X86-NEXT: retl # encoding: [0xc3]260;261; X64-LABEL: test_mask_packs_epi32_rmbk_512:262; X64: # %bb.0:263; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]264; X64-NEXT: vpackssdw (%rdi){1to16}, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x59,0x6b,0x0f]265; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]266; X64-NEXT: retq # encoding: [0xc3]267 %q = load i32, ptr %ptr_b268 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0269 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer270 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)271 %2 = bitcast i32 %mask to <32 x i1>272 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru273 ret <32 x i16> %3274}275 276define <32 x i16> @test_mask_packs_epi32_rmbkz_512(<16 x i32> %a, ptr %ptr_b, i32 %mask) {277; X86-LABEL: test_mask_packs_epi32_rmbkz_512:278; X86: # %bb.0:279; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]280; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]281; X86-NEXT: vpackssdw (%eax){1to16}, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xd9,0x6b,0x00]282; X86-NEXT: retl # encoding: [0xc3]283;284; X64-LABEL: test_mask_packs_epi32_rmbkz_512:285; X64: # %bb.0:286; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]287; X64-NEXT: vpackssdw (%rdi){1to16}, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xd9,0x6b,0x07]288; X64-NEXT: retq # encoding: [0xc3]289 %q = load i32, ptr %ptr_b290 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0291 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer292 %1 = call <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32> %a, <16 x i32> %b)293 %2 = bitcast i32 %mask to <32 x i1>294 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer295 ret <32 x i16> %3296}297 298declare <32 x i16> @llvm.x86.avx512.packssdw.512(<16 x i32>, <16 x i32>)299 300define <64 x i8> @test_mask_packs_epi16_rr_512(<32 x i16> %a, <32 x i16> %b) {301; CHECK-LABEL: test_mask_packs_epi16_rr_512:302; CHECK: # %bb.0:303; CHECK-NEXT: vpacksswb %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x63,0xc1]304; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]305 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)306 ret <64 x i8> %1307}308 309define <64 x i8> @test_mask_packs_epi16_rrk_512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask) {310; X86-LABEL: test_mask_packs_epi16_rrk_512:311; X86: # %bb.0:312; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]313; X86-NEXT: vpacksswb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x63,0xd1]314; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]315; X86-NEXT: retl # encoding: [0xc3]316;317; X64-LABEL: test_mask_packs_epi16_rrk_512:318; X64: # %bb.0:319; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]320; X64-NEXT: vpacksswb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x63,0xd1]321; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]322; X64-NEXT: retq # encoding: [0xc3]323 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)324 %2 = bitcast i64 %mask to <64 x i1>325 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %passThru326 ret <64 x i8> %3327}328 329define <64 x i8> @test_mask_packs_epi16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i64 %mask) {330; X86-LABEL: test_mask_packs_epi16_rrkz_512:331; X86: # %bb.0:332; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]333; X86-NEXT: vpacksswb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x63,0xc1]334; X86-NEXT: retl # encoding: [0xc3]335;336; X64-LABEL: test_mask_packs_epi16_rrkz_512:337; X64: # %bb.0:338; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]339; X64-NEXT: vpacksswb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x63,0xc1]340; X64-NEXT: retq # encoding: [0xc3]341 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)342 %2 = bitcast i64 %mask to <64 x i1>343 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer344 ret <64 x i8> %3345}346 347define <64 x i8> @test_mask_packs_epi16_rm_512(<32 x i16> %a, ptr %ptr_b) {348; X86-LABEL: test_mask_packs_epi16_rm_512:349; X86: # %bb.0:350; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]351; X86-NEXT: vpacksswb (%eax), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x63,0x00]352; X86-NEXT: retl # encoding: [0xc3]353;354; X64-LABEL: test_mask_packs_epi16_rm_512:355; X64: # %bb.0:356; X64-NEXT: vpacksswb (%rdi), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x63,0x07]357; X64-NEXT: retq # encoding: [0xc3]358 %b = load <32 x i16>, ptr %ptr_b359 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)360 ret <64 x i8> %1361}362 363define <64 x i8> @test_mask_packs_epi16_rmk_512(<32 x i16> %a, ptr %ptr_b, <64 x i8> %passThru, i64 %mask) {364; X86-LABEL: test_mask_packs_epi16_rmk_512:365; X86: # %bb.0:366; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]367; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x08]368; X86-NEXT: vpacksswb (%eax), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x63,0x08]369; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]370; X86-NEXT: retl # encoding: [0xc3]371;372; X64-LABEL: test_mask_packs_epi16_rmk_512:373; X64: # %bb.0:374; X64-NEXT: kmovq %rsi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xce]375; X64-NEXT: vpacksswb (%rdi), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x63,0x0f]376; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]377; X64-NEXT: retq # encoding: [0xc3]378 %b = load <32 x i16>, ptr %ptr_b379 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)380 %2 = bitcast i64 %mask to <64 x i1>381 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %passThru382 ret <64 x i8> %3383}384 385define <64 x i8> @test_mask_packs_epi16_rmkz_512(<32 x i16> %a, ptr %ptr_b, i64 %mask) {386; X86-LABEL: test_mask_packs_epi16_rmkz_512:387; X86: # %bb.0:388; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]389; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x08]390; X86-NEXT: vpacksswb (%eax), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x63,0x00]391; X86-NEXT: retl # encoding: [0xc3]392;393; X64-LABEL: test_mask_packs_epi16_rmkz_512:394; X64: # %bb.0:395; X64-NEXT: kmovq %rsi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xce]396; X64-NEXT: vpacksswb (%rdi), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x63,0x07]397; X64-NEXT: retq # encoding: [0xc3]398 %b = load <32 x i16>, ptr %ptr_b399 %1 = call <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16> %a, <32 x i16> %b)400 %2 = bitcast i64 %mask to <64 x i1>401 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer402 ret <64 x i8> %3403}404 405declare <64 x i8> @llvm.x86.avx512.packsswb.512(<32 x i16>, <32 x i16>)406 407 408define <32 x i16> @test_mask_packus_epi32_rr_512(<16 x i32> %a, <16 x i32> %b) {409; CHECK-LABEL: test_mask_packus_epi32_rr_512:410; CHECK: # %bb.0:411; CHECK-NEXT: vpackusdw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x2b,0xc1]412; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]413 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)414 ret <32 x i16> %1415}416 417define <32 x i16> @test_mask_packus_epi32_rrk_512(<16 x i32> %a, <16 x i32> %b, <32 x i16> %passThru, i32 %mask) {418; X86-LABEL: test_mask_packus_epi32_rrk_512:419; X86: # %bb.0:420; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]421; X86-NEXT: vpackusdw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x2b,0xd1]422; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]423; X86-NEXT: retl # encoding: [0xc3]424;425; X64-LABEL: test_mask_packus_epi32_rrk_512:426; X64: # %bb.0:427; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]428; X64-NEXT: vpackusdw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x2b,0xd1]429; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]430; X64-NEXT: retq # encoding: [0xc3]431 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)432 %2 = bitcast i32 %mask to <32 x i1>433 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru434 ret <32 x i16> %3435}436 437define <32 x i16> @test_mask_packus_epi32_rrkz_512(<16 x i32> %a, <16 x i32> %b, i32 %mask) {438; X86-LABEL: test_mask_packus_epi32_rrkz_512:439; X86: # %bb.0:440; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]441; X86-NEXT: vpackusdw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x2b,0xc1]442; X86-NEXT: retl # encoding: [0xc3]443;444; X64-LABEL: test_mask_packus_epi32_rrkz_512:445; X64: # %bb.0:446; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]447; X64-NEXT: vpackusdw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x2b,0xc1]448; X64-NEXT: retq # encoding: [0xc3]449 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)450 %2 = bitcast i32 %mask to <32 x i1>451 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer452 ret <32 x i16> %3453}454 455define <32 x i16> @test_mask_packus_epi32_rm_512(<16 x i32> %a, ptr %ptr_b) {456; X86-LABEL: test_mask_packus_epi32_rm_512:457; X86: # %bb.0:458; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]459; X86-NEXT: vpackusdw (%eax), %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x2b,0x00]460; X86-NEXT: retl # encoding: [0xc3]461;462; X64-LABEL: test_mask_packus_epi32_rm_512:463; X64: # %bb.0:464; X64-NEXT: vpackusdw (%rdi), %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x2b,0x07]465; X64-NEXT: retq # encoding: [0xc3]466 %b = load <16 x i32>, ptr %ptr_b467 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)468 ret <32 x i16> %1469}470 471define <32 x i16> @test_mask_packus_epi32_rmk_512(<16 x i32> %a, ptr %ptr_b, <32 x i16> %passThru, i32 %mask) {472; X86-LABEL: test_mask_packus_epi32_rmk_512:473; X86: # %bb.0:474; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]475; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]476; X86-NEXT: vpackusdw (%eax), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x2b,0x08]477; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]478; X86-NEXT: retl # encoding: [0xc3]479;480; X64-LABEL: test_mask_packus_epi32_rmk_512:481; X64: # %bb.0:482; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]483; X64-NEXT: vpackusdw (%rdi), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x2b,0x0f]484; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]485; X64-NEXT: retq # encoding: [0xc3]486 %b = load <16 x i32>, ptr %ptr_b487 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)488 %2 = bitcast i32 %mask to <32 x i1>489 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru490 ret <32 x i16> %3491}492 493define <32 x i16> @test_mask_packus_epi32_rmkz_512(<16 x i32> %a, ptr %ptr_b, i32 %mask) {494; X86-LABEL: test_mask_packus_epi32_rmkz_512:495; X86: # %bb.0:496; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]497; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]498; X86-NEXT: vpackusdw (%eax), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x2b,0x00]499; X86-NEXT: retl # encoding: [0xc3]500;501; X64-LABEL: test_mask_packus_epi32_rmkz_512:502; X64: # %bb.0:503; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]504; X64-NEXT: vpackusdw (%rdi), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x2b,0x07]505; X64-NEXT: retq # encoding: [0xc3]506 %b = load <16 x i32>, ptr %ptr_b507 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)508 %2 = bitcast i32 %mask to <32 x i1>509 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer510 ret <32 x i16> %3511}512 513define <32 x i16> @test_mask_packus_epi32_rmb_512(<16 x i32> %a, ptr %ptr_b) {514; X86-LABEL: test_mask_packus_epi32_rmb_512:515; X86: # %bb.0:516; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]517; X86-NEXT: vpackusdw (%eax){1to16}, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x58,0x2b,0x00]518; X86-NEXT: retl # encoding: [0xc3]519;520; X64-LABEL: test_mask_packus_epi32_rmb_512:521; X64: # %bb.0:522; X64-NEXT: vpackusdw (%rdi){1to16}, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x58,0x2b,0x07]523; X64-NEXT: retq # encoding: [0xc3]524 %q = load i32, ptr %ptr_b525 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0526 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer527 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)528 ret <32 x i16> %1529}530 531define <32 x i16> @test_mask_packus_epi32_rmbk_512(<16 x i32> %a, ptr %ptr_b, <32 x i16> %passThru, i32 %mask) {532; X86-LABEL: test_mask_packus_epi32_rmbk_512:533; X86: # %bb.0:534; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]535; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]536; X86-NEXT: vpackusdw (%eax){1to16}, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x59,0x2b,0x08]537; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]538; X86-NEXT: retl # encoding: [0xc3]539;540; X64-LABEL: test_mask_packus_epi32_rmbk_512:541; X64: # %bb.0:542; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]543; X64-NEXT: vpackusdw (%rdi){1to16}, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x59,0x2b,0x0f]544; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]545; X64-NEXT: retq # encoding: [0xc3]546 %q = load i32, ptr %ptr_b547 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0548 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer549 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)550 %2 = bitcast i32 %mask to <32 x i1>551 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %passThru552 ret <32 x i16> %3553}554 555define <32 x i16> @test_mask_packus_epi32_rmbkz_512(<16 x i32> %a, ptr %ptr_b, i32 %mask) {556; X86-LABEL: test_mask_packus_epi32_rmbkz_512:557; X86: # %bb.0:558; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]559; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]560; X86-NEXT: vpackusdw (%eax){1to16}, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xd9,0x2b,0x00]561; X86-NEXT: retl # encoding: [0xc3]562;563; X64-LABEL: test_mask_packus_epi32_rmbkz_512:564; X64: # %bb.0:565; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]566; X64-NEXT: vpackusdw (%rdi){1to16}, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xd9,0x2b,0x07]567; X64-NEXT: retq # encoding: [0xc3]568 %q = load i32, ptr %ptr_b569 %vecinit.i = insertelement <16 x i32> undef, i32 %q, i32 0570 %b = shufflevector <16 x i32> %vecinit.i, <16 x i32> undef, <16 x i32> zeroinitializer571 %1 = call <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32> %a, <16 x i32> %b)572 %2 = bitcast i32 %mask to <32 x i1>573 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer574 ret <32 x i16> %3575}576 577declare <32 x i16> @llvm.x86.avx512.packusdw.512(<16 x i32>, <16 x i32>)578 579define <64 x i8> @test_mask_packus_epi16_rr_512(<32 x i16> %a, <32 x i16> %b) {580; CHECK-LABEL: test_mask_packus_epi16_rr_512:581; CHECK: # %bb.0:582; CHECK-NEXT: vpackuswb %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x67,0xc1]583; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]584 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)585 ret <64 x i8> %1586}587 588define <64 x i8> @test_mask_packus_epi16_rrk_512(<32 x i16> %a, <32 x i16> %b, <64 x i8> %passThru, i64 %mask) {589; X86-LABEL: test_mask_packus_epi16_rrk_512:590; X86: # %bb.0:591; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]592; X86-NEXT: vpackuswb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x67,0xd1]593; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]594; X86-NEXT: retl # encoding: [0xc3]595;596; X64-LABEL: test_mask_packus_epi16_rrk_512:597; X64: # %bb.0:598; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]599; X64-NEXT: vpackuswb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x67,0xd1]600; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]601; X64-NEXT: retq # encoding: [0xc3]602 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)603 %2 = bitcast i64 %mask to <64 x i1>604 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %passThru605 ret <64 x i8> %3606}607 608define <64 x i8> @test_mask_packus_epi16_rrkz_512(<32 x i16> %a, <32 x i16> %b, i64 %mask) {609; X86-LABEL: test_mask_packus_epi16_rrkz_512:610; X86: # %bb.0:611; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]612; X86-NEXT: vpackuswb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x67,0xc1]613; X86-NEXT: retl # encoding: [0xc3]614;615; X64-LABEL: test_mask_packus_epi16_rrkz_512:616; X64: # %bb.0:617; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]618; X64-NEXT: vpackuswb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x67,0xc1]619; X64-NEXT: retq # encoding: [0xc3]620 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)621 %2 = bitcast i64 %mask to <64 x i1>622 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer623 ret <64 x i8> %3624}625 626define <64 x i8> @test_mask_packus_epi16_rm_512(<32 x i16> %a, ptr %ptr_b) {627; X86-LABEL: test_mask_packus_epi16_rm_512:628; X86: # %bb.0:629; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]630; X86-NEXT: vpackuswb (%eax), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x67,0x00]631; X86-NEXT: retl # encoding: [0xc3]632;633; X64-LABEL: test_mask_packus_epi16_rm_512:634; X64: # %bb.0:635; X64-NEXT: vpackuswb (%rdi), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x67,0x07]636; X64-NEXT: retq # encoding: [0xc3]637 %b = load <32 x i16>, ptr %ptr_b638 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)639 ret <64 x i8> %1640}641 642define <64 x i8> @test_mask_packus_epi16_rmk_512(<32 x i16> %a, ptr %ptr_b, <64 x i8> %passThru, i64 %mask) {643; X86-LABEL: test_mask_packus_epi16_rmk_512:644; X86: # %bb.0:645; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]646; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x08]647; X86-NEXT: vpackuswb (%eax), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x67,0x08]648; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]649; X86-NEXT: retl # encoding: [0xc3]650;651; X64-LABEL: test_mask_packus_epi16_rmk_512:652; X64: # %bb.0:653; X64-NEXT: kmovq %rsi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xce]654; X64-NEXT: vpackuswb (%rdi), %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0x67,0x0f]655; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]656; X64-NEXT: retq # encoding: [0xc3]657 %b = load <32 x i16>, ptr %ptr_b658 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)659 %2 = bitcast i64 %mask to <64 x i1>660 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %passThru661 ret <64 x i8> %3662}663 664define <64 x i8> @test_mask_packus_epi16_rmkz_512(<32 x i16> %a, ptr %ptr_b, i64 %mask) {665; X86-LABEL: test_mask_packus_epi16_rmkz_512:666; X86: # %bb.0:667; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]668; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x08]669; X86-NEXT: vpackuswb (%eax), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x67,0x00]670; X86-NEXT: retl # encoding: [0xc3]671;672; X64-LABEL: test_mask_packus_epi16_rmkz_512:673; X64: # %bb.0:674; X64-NEXT: kmovq %rsi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xce]675; X64-NEXT: vpackuswb (%rdi), %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x67,0x07]676; X64-NEXT: retq # encoding: [0xc3]677 %b = load <32 x i16>, ptr %ptr_b678 %1 = call <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16> %a, <32 x i16> %b)679 %2 = bitcast i64 %mask to <64 x i1>680 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer681 ret <64 x i8> %3682}683 684declare <64 x i8> @llvm.x86.avx512.packuswb.512(<32 x i16>, <32 x i16>)685 686define <32 x i16>@test_int_x86_avx512_vpermt2var_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {687; CHECK-LABEL: test_int_x86_avx512_vpermt2var_hi_512:688; CHECK: # %bb.0:689; CHECK-NEXT: vpermi2w %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0x75,0xc2]690; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]691 %1 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %x1, <32 x i16> %x0, <32 x i16> %x2)692 ret <32 x i16> %1693}694 695define <32 x i16>@test_int_x86_avx512_mask_vpermt2var_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {696; X86-LABEL: test_int_x86_avx512_mask_vpermt2var_hi_512:697; X86: # %bb.0:698; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]699; X86-NEXT: vpermt2w %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x7d,0xca]700; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]701; X86-NEXT: retl # encoding: [0xc3]702;703; X64-LABEL: test_int_x86_avx512_mask_vpermt2var_hi_512:704; X64: # %bb.0:705; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]706; X64-NEXT: vpermt2w %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x7d,0xca]707; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]708; X64-NEXT: retq # encoding: [0xc3]709 %1 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %x1, <32 x i16> %x0, <32 x i16> %x2)710 %2 = bitcast i32 %x3 to <32 x i1>711 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x1712 ret <32 x i16> %3713}714 715define <32 x i16>@test_int_x86_avx512_maskz_vpermt2var_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {716; X86-LABEL: test_int_x86_avx512_maskz_vpermt2var_hi_512:717; X86: # %bb.0:718; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]719; X86-NEXT: vpermi2w %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0x75,0xc2]720; X86-NEXT: retl # encoding: [0xc3]721;722; X64-LABEL: test_int_x86_avx512_maskz_vpermt2var_hi_512:723; X64: # %bb.0:724; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]725; X64-NEXT: vpermi2w %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0x75,0xc2]726; X64-NEXT: retq # encoding: [0xc3]727 %1 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %x1, <32 x i16> %x0, <32 x i16> %x2)728 %2 = bitcast i32 %x3 to <32 x i1>729 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer730 ret <32 x i16> %3731}732 733declare <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16>, <32 x i16>, <32 x i16>)734 735define <32 x i16>@test_int_x86_avx512_vpermi2var_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {736; CHECK-LABEL: test_int_x86_avx512_vpermi2var_hi_512:737; CHECK: # %bb.0:738; CHECK-NEXT: vpermt2w %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0x7d,0xc2]739; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]740 %1 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2)741 ret <32 x i16> %1742}743 744define <32 x i16>@test_int_x86_avx512_mask_vpermi2var_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {745; X86-LABEL: test_int_x86_avx512_mask_vpermi2var_hi_512:746; X86: # %bb.0:747; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]748; X86-NEXT: vpermi2w %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x75,0xca]749; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]750; X86-NEXT: retl # encoding: [0xc3]751;752; X64-LABEL: test_int_x86_avx512_mask_vpermi2var_hi_512:753; X64: # %bb.0:754; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]755; X64-NEXT: vpermi2w %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x75,0xca]756; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]757; X64-NEXT: retq # encoding: [0xc3]758 %1 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2)759 %2 = bitcast i32 %x3 to <32 x i1>760 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x1761 ret <32 x i16> %3762}763 764declare <64 x i8> @llvm.x86.avx512.pavg.b.512(<64 x i8>, <64 x i8>)765 766define <64 x i8> @test_int_x86_avx512_pavg_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2) {767; CHECK-LABEL: test_int_x86_avx512_pavg_b_512:768; CHECK: # %bb.0:769; CHECK-NEXT: vpavgb %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xe0,0xc1]770; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]771 %1 = call <64 x i8> @llvm.x86.avx512.pavg.b.512(<64 x i8> %x0, <64 x i8> %x1)772 ret <64 x i8> %1773}774 775define <64 x i8> @test_int_x86_avx512_mask_pavg_b_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) {776; X86-LABEL: test_int_x86_avx512_mask_pavg_b_512:777; X86: # %bb.0:778; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]779; X86-NEXT: vpavgb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe0,0xd1]780; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]781; X86-NEXT: retl # encoding: [0xc3]782;783; X64-LABEL: test_int_x86_avx512_mask_pavg_b_512:784; X64: # %bb.0:785; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]786; X64-NEXT: vpavgb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe0,0xd1]787; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]788; X64-NEXT: retq # encoding: [0xc3]789 %1 = call <64 x i8> @llvm.x86.avx512.pavg.b.512(<64 x i8> %x0, <64 x i8> %x1)790 %2 = bitcast i64 %x3 to <64 x i1>791 %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %x2792 ret <64 x i8> %3793}794 795declare <32 x i16> @llvm.x86.avx512.pavg.w.512(<32 x i16>, <32 x i16>)796 797define <32 x i16> @test_int_x86_avx512_pavg_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {798; CHECK-LABEL: test_int_x86_avx512_pavg_w_512:799; CHECK: # %bb.0:800; CHECK-NEXT: vpavgw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xe3,0xc1]801; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]802 %1 = call <32 x i16> @llvm.x86.avx512.pavg.w.512(<32 x i16> %x0, <32 x i16> %x1)803 ret <32 x i16> %1804}805 806define <32 x i16> @test_int_x86_avx512_mask_pavg_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {807; X86-LABEL: test_int_x86_avx512_mask_pavg_w_512:808; X86: # %bb.0:809; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]810; X86-NEXT: vpavgw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe3,0xd1]811; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]812; X86-NEXT: retl # encoding: [0xc3]813;814; X64-LABEL: test_int_x86_avx512_mask_pavg_w_512:815; X64: # %bb.0:816; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]817; X64-NEXT: vpavgw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe3,0xd1]818; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]819; X64-NEXT: retq # encoding: [0xc3]820 %1 = call <32 x i16> @llvm.x86.avx512.pavg.w.512(<32 x i16> %x0, <32 x i16> %x1)821 %2 = bitcast i32 %x3 to <32 x i1>822 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x2823 ret <32 x i16> %3824}825 826declare <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8>, <64 x i8>)827 828define <64 x i8>@test_int_x86_avx512_pshuf_b_512(<64 x i8> %x0, <64 x i8> %x1) {829; CHECK-LABEL: test_int_x86_avx512_pshuf_b_512:830; CHECK: # %bb.0:831; CHECK-NEXT: vpshufb %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x00,0xc1]832; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]833 %res = call <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8> %x0, <64 x i8> %x1)834 ret <64 x i8> %res835}836 837define <64 x i8>@test_int_x86_avx512_pshuf_b_512_mask(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %mask) {838; X86-LABEL: test_int_x86_avx512_pshuf_b_512_mask:839; X86: # %bb.0:840; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]841; X86-NEXT: vpshufb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x00,0xd1]842; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]843; X86-NEXT: retl # encoding: [0xc3]844;845; X64-LABEL: test_int_x86_avx512_pshuf_b_512_mask:846; X64: # %bb.0:847; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]848; X64-NEXT: vpshufb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x00,0xd1]849; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]850; X64-NEXT: retq # encoding: [0xc3]851 %res = call <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8> %x0, <64 x i8> %x1)852 %mask.cast = bitcast i64 %mask to <64 x i1>853 %res2 = select <64 x i1> %mask.cast, <64 x i8> %res, <64 x i8> %x2854 ret <64 x i8> %res2855}856 857define <64 x i8>@test_int_x86_avx512_pshuf_b_512_maskz(<64 x i8> %x0, <64 x i8> %x1, i64 %mask) {858; X86-LABEL: test_int_x86_avx512_pshuf_b_512_maskz:859; X86: # %bb.0:860; X86-NEXT: kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]861; X86-NEXT: vpshufb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x00,0xc1]862; X86-NEXT: retl # encoding: [0xc3]863;864; X64-LABEL: test_int_x86_avx512_pshuf_b_512_maskz:865; X64: # %bb.0:866; X64-NEXT: kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]867; X64-NEXT: vpshufb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x7d,0xc9,0x00,0xc1]868; X64-NEXT: retq # encoding: [0xc3]869 %res = call <64 x i8> @llvm.x86.avx512.pshuf.b.512(<64 x i8> %x0, <64 x i8> %x1)870 %mask.cast = bitcast i64 %mask to <64 x i1>871 %res2 = select <64 x i1> %mask.cast, <64 x i8> %res, <64 x i8> zeroinitializer872 ret <64 x i8> %res2873}874 875declare <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16>, <32 x i16>)876 877define <32 x i16> @test_int_x86_avx512_pmulhu_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {878; CHECK-LABEL: test_int_x86_avx512_pmulhu_w_512:879; CHECK: # %bb.0:880; CHECK-NEXT: vpmulhuw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xe4,0xc1]881; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]882 %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16> %x0, <32 x i16> %x1)883 ret <32 x i16> %1884}885 886define <32 x i16> @test_int_x86_avx512_mask_pmulhu_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {887; X86-LABEL: test_int_x86_avx512_mask_pmulhu_w_512:888; X86: # %bb.0:889; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]890; X86-NEXT: vpmulhuw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe4,0xd1]891; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]892; X86-NEXT: retl # encoding: [0xc3]893;894; X64-LABEL: test_int_x86_avx512_mask_pmulhu_w_512:895; X64: # %bb.0:896; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]897; X64-NEXT: vpmulhuw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe4,0xd1]898; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]899; X64-NEXT: retq # encoding: [0xc3]900 %1 = call <32 x i16> @llvm.x86.avx512.pmulhu.w.512(<32 x i16> %x0, <32 x i16> %x1)901 %2 = bitcast i32 %x3 to <32 x i1>902 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x2903 ret <32 x i16> %3904}905 906declare <32 x i16> @llvm.x86.avx512.pmulh.w.512(<32 x i16>, <32 x i16>)907 908define <32 x i16> @test_int_x86_avx512_pmulh_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {909; CHECK-LABEL: test_int_x86_avx512_pmulh_w_512:910; CHECK: # %bb.0:911; CHECK-NEXT: vpmulhw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xe5,0xc1]912; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]913 %1 = call <32 x i16> @llvm.x86.avx512.pmulh.w.512(<32 x i16> %x0, <32 x i16> %x1)914 ret <32 x i16> %1915}916 917define <32 x i16> @test_int_x86_avx512_mask_pmulh_w_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {918; X86-LABEL: test_int_x86_avx512_mask_pmulh_w_512:919; X86: # %bb.0:920; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]921; X86-NEXT: vpmulhw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe5,0xd1]922; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]923; X86-NEXT: retl # encoding: [0xc3]924;925; X64-LABEL: test_int_x86_avx512_mask_pmulh_w_512:926; X64: # %bb.0:927; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]928; X64-NEXT: vpmulhw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe5,0xd1]929; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]930; X64-NEXT: retq # encoding: [0xc3]931 %1 = call <32 x i16> @llvm.x86.avx512.pmulh.w.512(<32 x i16> %x0, <32 x i16> %x1)932 %2 = bitcast i32 %x3 to <32 x i1>933 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x2934 ret <32 x i16> %3935}936 937declare <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16>, <32 x i16>)938 939define <32 x i16> @test_int_x86_avx512_pmulhr_sw_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2) {940; CHECK-LABEL: test_int_x86_avx512_pmulhr_sw_512:941; CHECK: # %bb.0:942; CHECK-NEXT: vpmulhrsw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x0b,0xc1]943; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]944 %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %x0, <32 x i16> %x1)945 ret <32 x i16> %1946}947 948define <32 x i16> @test_int_x86_avx512_mask_pmulhr_sw_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {949; X86-LABEL: test_int_x86_avx512_mask_pmulhr_sw_512:950; X86: # %bb.0:951; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]952; X86-NEXT: vpmulhrsw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x0b,0xd1]953; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]954; X86-NEXT: retl # encoding: [0xc3]955;956; X64-LABEL: test_int_x86_avx512_mask_pmulhr_sw_512:957; X64: # %bb.0:958; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]959; X64-NEXT: vpmulhrsw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x0b,0xd1]960; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]961; X64-NEXT: retq # encoding: [0xc3]962 %1 = call <32 x i16> @llvm.x86.avx512.pmul.hr.sw.512(<32 x i16> %x0, <32 x i16> %x1)963 %2 = bitcast i32 %x3 to <32 x i1>964 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x2965 ret <32 x i16> %3966}967 968define <32 x i8>@test_int_x86_avx512_pmov_wb_512(<32 x i16> %x0) {969; CHECK-LABEL: test_int_x86_avx512_pmov_wb_512:970; CHECK: # %bb.0:971; CHECK-NEXT: vpmovwb %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x30,0xc0]972; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]973 %1 = trunc <32 x i16> %x0 to <32 x i8>974 ret <32 x i8> %1975}976 977define <32 x i8>@test_int_x86_avx512_mask_pmov_wb_512(<32 x i16> %x0, <32 x i8> %x1, i32 %x2) {978; X86-LABEL: test_int_x86_avx512_mask_pmov_wb_512:979; X86: # %bb.0:980; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]981; X86-NEXT: vpmovwb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x30,0xc1]982; X86-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]983; X86-NEXT: retl # encoding: [0xc3]984;985; X64-LABEL: test_int_x86_avx512_mask_pmov_wb_512:986; X64: # %bb.0:987; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]988; X64-NEXT: vpmovwb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x30,0xc1]989; X64-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]990; X64-NEXT: retq # encoding: [0xc3]991 %1 = trunc <32 x i16> %x0 to <32 x i8>992 %2 = bitcast i32 %x2 to <32 x i1>993 %3 = select <32 x i1> %2, <32 x i8> %1, <32 x i8> %x1994 ret <32 x i8> %3995}996 997define <32 x i8>@test_int_x86_avx512_maskz_pmov_wb_512(<32 x i16> %x0, i32 %x2) {998; X86-LABEL: test_int_x86_avx512_maskz_pmov_wb_512:999; X86: # %bb.0:1000; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1001; X86-NEXT: vpmovwb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x30,0xc0]1002; X86-NEXT: retl # encoding: [0xc3]1003;1004; X64-LABEL: test_int_x86_avx512_maskz_pmov_wb_512:1005; X64: # %bb.0:1006; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1007; X64-NEXT: vpmovwb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x30,0xc0]1008; X64-NEXT: retq # encoding: [0xc3]1009 %1 = trunc <32 x i16> %x0 to <32 x i8>1010 %2 = bitcast i32 %x2 to <32 x i1>1011 %3 = select <32 x i1> %2, <32 x i8> %1, <32 x i8> zeroinitializer1012 ret <32 x i8> %31013}1014 1015declare void @llvm.x86.avx512.mask.pmov.wb.mem.512(ptr %ptr, <32 x i16>, i32)1016 1017define void @test_int_x86_avx512_mask_pmov_wb_mem_512(ptr %ptr, <32 x i16> %x1, i32 %x2) {1018; X86-LABEL: test_int_x86_avx512_mask_pmov_wb_mem_512:1019; X86: # %bb.0:1020; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]1021; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1022; X86-NEXT: vpmovwb %zmm0, (%eax) # encoding: [0x62,0xf2,0x7e,0x48,0x30,0x00]1023; X86-NEXT: vpmovwb %zmm0, (%eax) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x30,0x00]1024; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1025; X86-NEXT: retl # encoding: [0xc3]1026;1027; X64-LABEL: test_int_x86_avx512_mask_pmov_wb_mem_512:1028; X64: # %bb.0:1029; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]1030; X64-NEXT: vpmovwb %zmm0, (%rdi) # encoding: [0x62,0xf2,0x7e,0x48,0x30,0x07]1031; X64-NEXT: vpmovwb %zmm0, (%rdi) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x30,0x07]1032; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1033; X64-NEXT: retq # encoding: [0xc3]1034 call void @llvm.x86.avx512.mask.pmov.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 -1)1035 call void @llvm.x86.avx512.mask.pmov.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 %x2)1036 ret void1037}1038 1039declare <32 x i8> @llvm.x86.avx512.mask.pmovs.wb.512(<32 x i16>, <32 x i8>, i32)1040 1041define <32 x i8>@test_int_x86_avx512_pmovs_wb_512(<32 x i16> %x0, <32 x i8> %x1) {1042; CHECK-LABEL: test_int_x86_avx512_pmovs_wb_512:1043; CHECK: # %bb.0:1044; CHECK-NEXT: vpmovswb %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x20,0xc0]1045; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1046 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovs.wb.512(<32 x i16> %x0, <32 x i8> %x1, i32 -1)1047 ret <32 x i8> %res1048}1049 1050define <32 x i8>@test_int_x86_avx512_mask_pmovs_wb_512(<32 x i16> %x0, <32 x i8> %x1, i32 %x2) {1051; X86-LABEL: test_int_x86_avx512_mask_pmovs_wb_512:1052; X86: # %bb.0:1053; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1054; X86-NEXT: vpmovswb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x20,0xc1]1055; X86-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]1056; X86-NEXT: retl # encoding: [0xc3]1057;1058; X64-LABEL: test_int_x86_avx512_mask_pmovs_wb_512:1059; X64: # %bb.0:1060; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1061; X64-NEXT: vpmovswb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x20,0xc1]1062; X64-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]1063; X64-NEXT: retq # encoding: [0xc3]1064 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovs.wb.512(<32 x i16> %x0, <32 x i8> %x1, i32 %x2)1065 ret <32 x i8> %res1066}1067 1068define <32 x i8>@test_int_x86_avx512_maskz_pmovs_wb_512(<32 x i16> %x0, i32 %x2) {1069; X86-LABEL: test_int_x86_avx512_maskz_pmovs_wb_512:1070; X86: # %bb.0:1071; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1072; X86-NEXT: vpmovswb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x20,0xc0]1073; X86-NEXT: retl # encoding: [0xc3]1074;1075; X64-LABEL: test_int_x86_avx512_maskz_pmovs_wb_512:1076; X64: # %bb.0:1077; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1078; X64-NEXT: vpmovswb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x20,0xc0]1079; X64-NEXT: retq # encoding: [0xc3]1080 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovs.wb.512(<32 x i16> %x0, <32 x i8> zeroinitializer, i32 %x2)1081 ret <32 x i8> %res1082}1083 1084declare void @llvm.x86.avx512.mask.pmovs.wb.mem.512(ptr %ptr, <32 x i16>, i32)1085 1086define void @test_int_x86_avx512_mask_pmovs_wb_mem_512(ptr %ptr, <32 x i16> %x1, i32 %x2) {1087; X86-LABEL: test_int_x86_avx512_mask_pmovs_wb_mem_512:1088; X86: # %bb.0:1089; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]1090; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1091; X86-NEXT: vpmovswb %zmm0, (%eax) # encoding: [0x62,0xf2,0x7e,0x48,0x20,0x00]1092; X86-NEXT: vpmovswb %zmm0, (%eax) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x20,0x00]1093; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1094; X86-NEXT: retl # encoding: [0xc3]1095;1096; X64-LABEL: test_int_x86_avx512_mask_pmovs_wb_mem_512:1097; X64: # %bb.0:1098; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]1099; X64-NEXT: vpmovswb %zmm0, (%rdi) # encoding: [0x62,0xf2,0x7e,0x48,0x20,0x07]1100; X64-NEXT: vpmovswb %zmm0, (%rdi) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x20,0x07]1101; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1102; X64-NEXT: retq # encoding: [0xc3]1103 call void @llvm.x86.avx512.mask.pmovs.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 -1)1104 call void @llvm.x86.avx512.mask.pmovs.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 %x2)1105 ret void1106}1107 1108declare <32 x i8> @llvm.x86.avx512.mask.pmovus.wb.512(<32 x i16>, <32 x i8>, i32)1109 1110define <32 x i8>@test_int_x86_avx512_pmovus_wb_512(<32 x i16> %x0, <32 x i8> %x1) {1111; CHECK-LABEL: test_int_x86_avx512_pmovus_wb_512:1112; CHECK: # %bb.0:1113; CHECK-NEXT: vpmovuswb %zmm0, %ymm0 # encoding: [0x62,0xf2,0x7e,0x48,0x10,0xc0]1114; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1115 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovus.wb.512(<32 x i16> %x0, <32 x i8> %x1, i32 -1)1116 ret <32 x i8> %res1117}1118 1119define <32 x i8>@test_int_x86_avx512_mask_pmovus_wb_512(<32 x i16> %x0, <32 x i8> %x1, i32 %x2) {1120; X86-LABEL: test_int_x86_avx512_mask_pmovus_wb_512:1121; X86: # %bb.0:1122; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1123; X86-NEXT: vpmovuswb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x10,0xc1]1124; X86-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]1125; X86-NEXT: retl # encoding: [0xc3]1126;1127; X64-LABEL: test_int_x86_avx512_mask_pmovus_wb_512:1128; X64: # %bb.0:1129; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1130; X64-NEXT: vpmovuswb %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x10,0xc1]1131; X64-NEXT: vmovdqa %ymm1, %ymm0 # encoding: [0xc5,0xfd,0x6f,0xc1]1132; X64-NEXT: retq # encoding: [0xc3]1133 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovus.wb.512(<32 x i16> %x0, <32 x i8> %x1, i32 %x2)1134 ret <32 x i8> %res1135}1136 1137define <32 x i8>@test_int_x86_avx512_maskz_pmovus_wb_512(<32 x i16> %x0, i32 %x2) {1138; X86-LABEL: test_int_x86_avx512_maskz_pmovus_wb_512:1139; X86: # %bb.0:1140; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1141; X86-NEXT: vpmovuswb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x10,0xc0]1142; X86-NEXT: retl # encoding: [0xc3]1143;1144; X64-LABEL: test_int_x86_avx512_maskz_pmovus_wb_512:1145; X64: # %bb.0:1146; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1147; X64-NEXT: vpmovuswb %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf2,0x7e,0xc9,0x10,0xc0]1148; X64-NEXT: retq # encoding: [0xc3]1149 %res = call <32 x i8> @llvm.x86.avx512.mask.pmovus.wb.512(<32 x i16> %x0, <32 x i8> zeroinitializer, i32 %x2)1150 ret <32 x i8> %res1151}1152 1153declare void @llvm.x86.avx512.mask.pmovus.wb.mem.512(ptr %ptr, <32 x i16>, i32)1154 1155define void @test_int_x86_avx512_mask_pmovus_wb_mem_512(ptr %ptr, <32 x i16> %x1, i32 %x2) {1156; X86-LABEL: test_int_x86_avx512_mask_pmovus_wb_mem_512:1157; X86: # %bb.0:1158; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x08]1159; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1160; X86-NEXT: vpmovuswb %zmm0, (%eax) # encoding: [0x62,0xf2,0x7e,0x48,0x10,0x00]1161; X86-NEXT: vpmovuswb %zmm0, (%eax) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x10,0x00]1162; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1163; X86-NEXT: retl # encoding: [0xc3]1164;1165; X64-LABEL: test_int_x86_avx512_mask_pmovus_wb_mem_512:1166; X64: # %bb.0:1167; X64-NEXT: kmovd %esi, %k1 # encoding: [0xc5,0xfb,0x92,0xce]1168; X64-NEXT: vpmovuswb %zmm0, (%rdi) # encoding: [0x62,0xf2,0x7e,0x48,0x10,0x07]1169; X64-NEXT: vpmovuswb %zmm0, (%rdi) {%k1} # encoding: [0x62,0xf2,0x7e,0x49,0x10,0x07]1170; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]1171; X64-NEXT: retq # encoding: [0xc3]1172 call void @llvm.x86.avx512.mask.pmovus.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 -1)1173 call void @llvm.x86.avx512.mask.pmovus.wb.mem.512(ptr %ptr, <32 x i16> %x1, i32 %x2)1174 ret void1175}1176 1177declare <32 x i16> @llvm.x86.avx512.pmaddubs.w.512(<64 x i8>, <64 x i8>)1178 1179define <32 x i16> @test_int_x86_avx512_pmaddubs_w_512(<64 x i8> %x0, <64 x i8> %x1) {1180; CHECK-LABEL: test_int_x86_avx512_pmaddubs_w_512:1181; CHECK: # %bb.0:1182; CHECK-NEXT: vpmaddubsw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0x7d,0x48,0x04,0xc1]1183; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1184 %1 = call <32 x i16> @llvm.x86.avx512.pmaddubs.w.512(<64 x i8> %x0, <64 x i8> %x1)1185 ret <32 x i16> %11186}1187 1188define <32 x i16> @test_int_x86_avx512_mask_pmaddubs_w_512(<64 x i8> %x0, <64 x i8> %x1, <32 x i16> %x2, i32 %x3) {1189; X86-LABEL: test_int_x86_avx512_mask_pmaddubs_w_512:1190; X86: # %bb.0:1191; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1192; X86-NEXT: vpmaddubsw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x04,0xd1]1193; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1194; X86-NEXT: retl # encoding: [0xc3]1195;1196; X64-LABEL: test_int_x86_avx512_mask_pmaddubs_w_512:1197; X64: # %bb.0:1198; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1199; X64-NEXT: vpmaddubsw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x04,0xd1]1200; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1201; X64-NEXT: retq # encoding: [0xc3]1202 %1 = call <32 x i16> @llvm.x86.avx512.pmaddubs.w.512(<64 x i8> %x0, <64 x i8> %x1)1203 %2 = bitcast i32 %x3 to <32 x i1>1204 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x21205 ret <32 x i16> %31206}1207 1208declare <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16>, <32 x i16>)1209 1210define <16 x i32> @test_int_x86_avx512_pmaddw_d_512(<32 x i16> %x0, <32 x i16> %x1) {1211; CHECK-LABEL: test_int_x86_avx512_pmaddw_d_512:1212; CHECK: # %bb.0:1213; CHECK-NEXT: vpmaddwd %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xf5,0xc1]1214; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1215 %1 = call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %x0, <32 x i16> %x1)1216 ret <16 x i32> %11217}1218 1219define <16 x i32> @test_int_x86_avx512_mask_pmaddw_d_512(<32 x i16> %x0, <32 x i16> %x1, <16 x i32> %x2, i16 %x3) {1220; X86-LABEL: test_int_x86_avx512_mask_pmaddw_d_512:1221; X86: # %bb.0:1222; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]1223; X86-NEXT: vpmaddwd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xf5,0xd1]1224; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1225; X86-NEXT: retl # encoding: [0xc3]1226;1227; X64-LABEL: test_int_x86_avx512_mask_pmaddw_d_512:1228; X64: # %bb.0:1229; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1230; X64-NEXT: vpmaddwd %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xf5,0xd1]1231; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1232; X64-NEXT: retq # encoding: [0xc3]1233 %1 = call <16 x i32> @llvm.x86.avx512.pmaddw.d.512(<32 x i16> %x0, <32 x i16> %x1)1234 %2 = bitcast i16 %x3 to <16 x i1>1235 %3 = select <16 x i1> %2, <16 x i32> %1, <16 x i32> %x21236 ret <16 x i32> %31237}1238 1239declare <32 x i16> @llvm.x86.avx512.dbpsadbw.512(<64 x i8>, <64 x i8>, i32)1240 1241define { <32 x i16>, <32 x i16>, <32 x i16> } @test_int_x86_avx512_mask_dbpsadbw_512(<64 x i8> %x0, <64 x i8> %x1, <32 x i16> %x3, i32 %x4) {1242; X86-LABEL: test_int_x86_avx512_mask_dbpsadbw_512:1243; X86: # %bb.0:1244; X86-NEXT: vmovdqa64 %zmm2, %zmm4 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xe2]1245; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1246; X86-NEXT: vdbpsadbw $2, %zmm1, %zmm0, %zmm4 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x42,0xe1,0x02]1247; X86-NEXT: vdbpsadbw $3, %zmm1, %zmm0, %zmm3 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x42,0xd9,0x03]1248; X86-NEXT: vdbpsadbw $4, %zmm1, %zmm0, %zmm2 # encoding: [0x62,0xf3,0x7d,0x48,0x42,0xd1,0x04]1249; X86-NEXT: vmovdqa64 %zmm4, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc4]1250; X86-NEXT: vmovdqa64 %zmm3, %zmm1 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xcb]1251; X86-NEXT: retl # encoding: [0xc3]1252;1253; X64-LABEL: test_int_x86_avx512_mask_dbpsadbw_512:1254; X64: # %bb.0:1255; X64-NEXT: vmovdqa64 %zmm2, %zmm4 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xe2]1256; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1257; X64-NEXT: vdbpsadbw $2, %zmm1, %zmm0, %zmm4 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x42,0xe1,0x02]1258; X64-NEXT: vdbpsadbw $3, %zmm1, %zmm0, %zmm3 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x42,0xd9,0x03]1259; X64-NEXT: vdbpsadbw $4, %zmm1, %zmm0, %zmm2 # encoding: [0x62,0xf3,0x7d,0x48,0x42,0xd1,0x04]1260; X64-NEXT: vmovdqa64 %zmm4, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc4]1261; X64-NEXT: vmovdqa64 %zmm3, %zmm1 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xcb]1262; X64-NEXT: retq # encoding: [0xc3]1263 %1 = call <32 x i16> @llvm.x86.avx512.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 2)1264 %2 = bitcast i32 %x4 to <32 x i1>1265 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x31266 %4 = call <32 x i16> @llvm.x86.avx512.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 3)1267 %5 = bitcast i32 %x4 to <32 x i1>1268 %6 = select <32 x i1> %5, <32 x i16> %4, <32 x i16> zeroinitializer1269 %7 = call <32 x i16> @llvm.x86.avx512.dbpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i32 4)1270 %res1 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } poison, <32 x i16> %3, 01271 %res2 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } %res1, <32 x i16> %6, 11272 %res3 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } %res2, <32 x i16> %7, 21273 ret { <32 x i16>, <32 x i16>, <32 x i16> } %res31274}1275 1276declare <8 x i64> @llvm.x86.avx512.psad.bw.512(<64 x i8>, <64 x i8>)1277 1278define { <8 x i64>, <8 x i64> } @test_int_x86_avx512_mask_psadb_w_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2){1279; CHECK-LABEL: test_int_x86_avx512_mask_psadb_w_512:1280; CHECK: # %bb.0:1281; CHECK-NEXT: vpsadbw %zmm1, %zmm0, %zmm3 # encoding: [0x62,0xf1,0x7d,0x48,0xf6,0xd9]1282; CHECK-NEXT: vpsadbw %zmm2, %zmm0, %zmm1 # encoding: [0x62,0xf1,0x7d,0x48,0xf6,0xca]1283; CHECK-NEXT: vmovdqa64 %zmm3, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc3]1284; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1285 %res0 = call <8 x i64> @llvm.x86.avx512.psad.bw.512(<64 x i8> %x0, <64 x i8> %x1)1286 %res1 = call <8 x i64> @llvm.x86.avx512.psad.bw.512(<64 x i8> %x0, <64 x i8> %x2)1287 %res2 = insertvalue { <8 x i64>, <8 x i64> } poison, <8 x i64> %res0, 01288 %res3 = insertvalue { <8 x i64>, <8 x i64> } %res2, <8 x i64> %res1, 11289 ret { <8 x i64>, <8 x i64> } %res31290}1291 1292declare <32 x i16> @llvm.x86.avx512.psrlv.w.512(<32 x i16>, <32 x i16>) nounwind readnone1293 1294define <32 x i16> @test_x86_avx512_psrlv_w_512_const() optsize {1295; X86-LABEL: test_x86_avx512_psrlv_w_512_const:1296; X86: # %bb.0:1297; X86-NEXT: vpmovsxbw {{.*#+}} zmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,65535]1298; X86-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x20,0x05,A,A,A,A]1299; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41300; X86-NEXT: vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x10,0x05,A,A,A,A]1301; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41302; X86-NEXT: retl # encoding: [0xc3]1303;1304; X64-LABEL: test_x86_avx512_psrlv_w_512_const:1305; X64: # %bb.0:1306; X64-NEXT: vpmovsxbw {{.*#+}} zmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,65535]1307; X64-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x20,0x05,A,A,A,A]1308; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1309; X64-NEXT: vpsrlvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x10,0x05,A,A,A,A]1310; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1311; X64-NEXT: retq # encoding: [0xc3]1312 %res1 = call <32 x i16> @llvm.x86.avx512.psrlv.w.512(<32 x i16> <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 -1>, <32 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 -1>)1313 ret <32 x i16> %res11314}1315 1316define <32 x i16>@test_int_x86_avx512_psrlv32hi(<32 x i16> %x0, <32 x i16> %x1) {1317; CHECK-LABEL: test_int_x86_avx512_psrlv32hi:1318; CHECK: # %bb.0:1319; CHECK-NEXT: vpsrlvw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x10,0xc1]1320; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1321 %1 = call <32 x i16> @llvm.x86.avx512.psrlv.w.512(<32 x i16> %x0, <32 x i16> %x1)1322 ret <32 x i16> %11323}1324 1325define <32 x i16>@test_int_x86_avx512_mask_psrlv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {1326; X86-LABEL: test_int_x86_avx512_mask_psrlv32hi:1327; X86: # %bb.0:1328; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1329; X86-NEXT: vpsrlvw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x10,0xd1]1330; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1331; X86-NEXT: retl # encoding: [0xc3]1332;1333; X64-LABEL: test_int_x86_avx512_mask_psrlv32hi:1334; X64: # %bb.0:1335; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1336; X64-NEXT: vpsrlvw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x10,0xd1]1337; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1338; X64-NEXT: retq # encoding: [0xc3]1339 %1 = call <32 x i16> @llvm.x86.avx512.psrlv.w.512(<32 x i16> %x0, <32 x i16> %x1)1340 %2 = bitcast i32 %x3 to <32 x i1>1341 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x21342 ret <32 x i16> %31343}1344 1345define <32 x i16>@test_int_x86_avx512_maskz_psrlv32hi(<32 x i16> %x0, <32 x i16> %x1, i32 %x3) {1346; X86-LABEL: test_int_x86_avx512_maskz_psrlv32hi:1347; X86: # %bb.0:1348; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1349; X86-NEXT: vpsrlvw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x10,0xc1]1350; X86-NEXT: retl # encoding: [0xc3]1351;1352; X64-LABEL: test_int_x86_avx512_maskz_psrlv32hi:1353; X64: # %bb.0:1354; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1355; X64-NEXT: vpsrlvw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x10,0xc1]1356; X64-NEXT: retq # encoding: [0xc3]1357 %1 = call <32 x i16> @llvm.x86.avx512.psrlv.w.512(<32 x i16> %x0, <32 x i16> %x1)1358 %2 = bitcast i32 %x3 to <32 x i1>1359 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer1360 ret <32 x i16> %31361}1362 1363declare <32 x i16> @llvm.x86.avx512.psrav.w.512(<32 x i16>, <32 x i16>)1364 1365define <32 x i16>@test_int_x86_avx512_psrav32_hi(<32 x i16> %x0, <32 x i16> %x1) {1366; CHECK-LABEL: test_int_x86_avx512_psrav32_hi:1367; CHECK: # %bb.0:1368; CHECK-NEXT: vpsravw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x11,0xc1]1369; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1370 %1 = call <32 x i16> @llvm.x86.avx512.psrav.w.512(<32 x i16> %x0, <32 x i16> %x1)1371 ret <32 x i16> %11372}1373 1374define <32 x i16>@test_int_x86_avx512_mask_psrav32_hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {1375; X86-LABEL: test_int_x86_avx512_mask_psrav32_hi:1376; X86: # %bb.0:1377; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1378; X86-NEXT: vpsravw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x11,0xd1]1379; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1380; X86-NEXT: retl # encoding: [0xc3]1381;1382; X64-LABEL: test_int_x86_avx512_mask_psrav32_hi:1383; X64: # %bb.0:1384; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1385; X64-NEXT: vpsravw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x11,0xd1]1386; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1387; X64-NEXT: retq # encoding: [0xc3]1388 %1 = call <32 x i16> @llvm.x86.avx512.psrav.w.512(<32 x i16> %x0, <32 x i16> %x1)1389 %2 = bitcast i32 %x3 to <32 x i1>1390 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x21391 ret <32 x i16> %31392}1393 1394define <32 x i16>@test_int_x86_avx512_maskz_psrav32_hi(<32 x i16> %x0, <32 x i16> %x1, i32 %x3) {1395; X86-LABEL: test_int_x86_avx512_maskz_psrav32_hi:1396; X86: # %bb.0:1397; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1398; X86-NEXT: vpsravw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x11,0xc1]1399; X86-NEXT: retl # encoding: [0xc3]1400;1401; X64-LABEL: test_int_x86_avx512_maskz_psrav32_hi:1402; X64: # %bb.0:1403; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1404; X64-NEXT: vpsravw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x11,0xc1]1405; X64-NEXT: retq # encoding: [0xc3]1406 %1 = call <32 x i16> @llvm.x86.avx512.psrav.w.512(<32 x i16> %x0, <32 x i16> %x1)1407 %2 = bitcast i32 %x3 to <32 x i1>1408 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer1409 ret <32 x i16> %31410}1411 1412define <32 x i16>@test_int_x86_avx512_mask_psrav32_hi_const(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {1413; X86-LABEL: test_int_x86_avx512_mask_psrav32_hi_const:1414; X86: # %bb.0:1415; X86-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = [2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51]1416; X86-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x5a,0x05,A,A,A,A]1417; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41418; X86-NEXT: # zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1419; X86-NEXT: vpsravw {{\.?LCPI[0-9]+_[0-9]+}}, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x11,0x05,A,A,A,A]1420; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41421; X86-NEXT: retl # encoding: [0xc3]1422;1423; X64-LABEL: test_int_x86_avx512_mask_psrav32_hi_const:1424; X64: # %bb.0:1425; X64-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = [2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51,2,9,65524,23,65510,37,65496,51]1426; X64-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x5a,0x05,A,A,A,A]1427; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1428; X64-NEXT: # zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]1429; X64-NEXT: vpsravw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x11,0x05,A,A,A,A]1430; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1431; X64-NEXT: retq # encoding: [0xc3]1432 %1 = call <32 x i16> @llvm.x86.avx512.psrav.w.512(<32 x i16> <i16 2, i16 9, i16 -12, i16 23, i16 -26, i16 37, i16 -40, i16 51, i16 2, i16 9, i16 -12, i16 23, i16 -26, i16 37, i16 -40, i16 51, i16 2, i16 9, i16 -12, i16 23, i16 -26, i16 37, i16 -40, i16 51, i16 2, i16 9, i16 -12, i16 23, i16 -26, i16 37, i16 -40, i16 51>, <32 x i16> <i16 1, i16 10, i16 35, i16 52, i16 69, i16 9, i16 16, i16 49, i16 1, i16 10, i16 35, i16 52, i16 69, i16 9, i16 16, i16 49, i16 1, i16 10, i16 35, i16 52, i16 69, i16 9, i16 16, i16 49, i16 1, i16 10, i16 35, i16 52, i16 69, i16 9, i16 16, i16 49>)1433 ret <32 x i16> %11434}1435 1436define <32 x i16>@test_int_x86_avx512_psllv32hi(<32 x i16> %x0, <32 x i16> %x1) {1437; CHECK-LABEL: test_int_x86_avx512_psllv32hi:1438; CHECK: # %bb.0:1439; CHECK-NEXT: vpsllvw %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x12,0xc1]1440; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1441 %1 = call <32 x i16> @llvm.x86.avx512.psllv.w.512(<32 x i16> %x0, <32 x i16> %x1)1442 ret <32 x i16> %11443}1444 1445define <32 x i16>@test_int_x86_avx512_mask_psllv32hi(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {1446; X86-LABEL: test_int_x86_avx512_mask_psllv32hi:1447; X86: # %bb.0:1448; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1449; X86-NEXT: vpsllvw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x12,0xd1]1450; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1451; X86-NEXT: retl # encoding: [0xc3]1452;1453; X64-LABEL: test_int_x86_avx512_mask_psllv32hi:1454; X64: # %bb.0:1455; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1456; X64-NEXT: vpsllvw %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x12,0xd1]1457; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1458; X64-NEXT: retq # encoding: [0xc3]1459 %1 = call <32 x i16> @llvm.x86.avx512.psllv.w.512(<32 x i16> %x0, <32 x i16> %x1)1460 %2 = bitcast i32 %x3 to <32 x i1>1461 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x21462 ret <32 x i16> %31463}1464 1465define <32 x i16>@test_int_x86_avx512_maskz_psllv32hi(<32 x i16> %x0, <32 x i16> %x1, i32 %x3) {1466; X86-LABEL: test_int_x86_avx512_maskz_psllv32hi:1467; X86: # %bb.0:1468; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1469; X86-NEXT: vpsllvw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x12,0xc1]1470; X86-NEXT: retl # encoding: [0xc3]1471;1472; X64-LABEL: test_int_x86_avx512_maskz_psllv32hi:1473; X64: # %bb.0:1474; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1475; X64-NEXT: vpsllvw %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x12,0xc1]1476; X64-NEXT: retq # encoding: [0xc3]1477 %1 = call <32 x i16> @llvm.x86.avx512.psllv.w.512(<32 x i16> %x0, <32 x i16> %x1)1478 %2 = bitcast i32 %x3 to <32 x i1>1479 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer1480 ret <32 x i16> %31481}1482 1483declare <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16>, <32 x i16>)1484 1485define <32 x i16>@test_int_x86_avx512_permvar_hi_512(<32 x i16> %x0, <32 x i16> %x1) {1486; CHECK-LABEL: test_int_x86_avx512_permvar_hi_512:1487; CHECK: # %bb.0:1488; CHECK-NEXT: vpermw %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf2,0xf5,0x48,0x8d,0xc0]1489; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1490 %1 = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1)1491 ret <32 x i16> %11492}1493 1494define <32 x i16>@test_int_x86_avx512_mask_permvar_hi_512(<32 x i16> %x0, <32 x i16> %x1, <32 x i16> %x2, i32 %x3) {1495; X86-LABEL: test_int_x86_avx512_mask_permvar_hi_512:1496; X86: # %bb.0:1497; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1498; X86-NEXT: vpermw %zmm0, %zmm1, %zmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x49,0x8d,0xd0]1499; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1500; X86-NEXT: retl # encoding: [0xc3]1501;1502; X64-LABEL: test_int_x86_avx512_mask_permvar_hi_512:1503; X64: # %bb.0:1504; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1505; X64-NEXT: vpermw %zmm0, %zmm1, %zmm2 {%k1} # encoding: [0x62,0xf2,0xf5,0x49,0x8d,0xd0]1506; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1507; X64-NEXT: retq # encoding: [0xc3]1508 %1 = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1)1509 %2 = bitcast i32 %x3 to <32 x i1>1510 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> %x21511 ret <32 x i16> %31512}1513 1514define <32 x i16>@test_int_x86_avx512_maskz_permvar_hi_512(<32 x i16> %x0, <32 x i16> %x1, i32 %x3) {1515; X86-LABEL: test_int_x86_avx512_maskz_permvar_hi_512:1516; X86: # %bb.0:1517; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1518; X86-NEXT: vpermw %zmm0, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0x8d,0xc0]1519; X86-NEXT: retl # encoding: [0xc3]1520;1521; X64-LABEL: test_int_x86_avx512_maskz_permvar_hi_512:1522; X64: # %bb.0:1523; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1524; X64-NEXT: vpermw %zmm0, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xf5,0xc9,0x8d,0xc0]1525; X64-NEXT: retq # encoding: [0xc3]1526 %1 = call <32 x i16> @llvm.x86.avx512.permvar.hi.512(<32 x i16> %x0, <32 x i16> %x1)1527 %2 = bitcast i32 %x3 to <32 x i1>1528 %3 = select <32 x i1> %2, <32 x i16> %1, <32 x i16> zeroinitializer1529 ret <32 x i16> %31530}1531 1532define <32 x i16> @test_x86_avx512_psll_w_512(<32 x i16> %a0, <8 x i16> %a1) {1533; CHECK-LABEL: test_x86_avx512_psll_w_512:1534; CHECK: # %bb.0:1535; CHECK-NEXT: vpsllw %xmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xf1,0xc1]1536; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1537 %res = call <32 x i16> @llvm.x86.avx512.psll.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1538 ret <32 x i16> %res1539}1540define <32 x i16> @test_x86_avx512_mask_psll_w_512(<32 x i16> %a0, <8 x i16> %a1, <32 x i16> %passthru, i32 %mask) {1541; X86-LABEL: test_x86_avx512_mask_psll_w_512:1542; X86: # %bb.0:1543; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1544; X86-NEXT: vpsllw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xf1,0xd1]1545; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1546; X86-NEXT: retl # encoding: [0xc3]1547;1548; X64-LABEL: test_x86_avx512_mask_psll_w_512:1549; X64: # %bb.0:1550; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1551; X64-NEXT: vpsllw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xf1,0xd1]1552; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1553; X64-NEXT: retq # encoding: [0xc3]1554 %res = call <32 x i16> @llvm.x86.avx512.psll.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1555 %mask.cast = bitcast i32 %mask to <32 x i1>1556 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1557 ret <32 x i16> %res21558}1559define <32 x i16> @test_x86_avx512_maskz_psll_w_512(<32 x i16> %a0, <8 x i16> %a1, i32 %mask) {1560; X86-LABEL: test_x86_avx512_maskz_psll_w_512:1561; X86: # %bb.0:1562; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1563; X86-NEXT: vpsllw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xf1,0xc1]1564; X86-NEXT: retl # encoding: [0xc3]1565;1566; X64-LABEL: test_x86_avx512_maskz_psll_w_512:1567; X64: # %bb.0:1568; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1569; X64-NEXT: vpsllw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xf1,0xc1]1570; X64-NEXT: retq # encoding: [0xc3]1571 %res = call <32 x i16> @llvm.x86.avx512.psll.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1572 %mask.cast = bitcast i32 %mask to <32 x i1>1573 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1574 ret <32 x i16> %res21575}1576declare <32 x i16> @llvm.x86.avx512.psll.w.512(<32 x i16>, <8 x i16>) nounwind readnone1577 1578 1579define <32 x i16> @test_x86_avx512_psllv_w_512_const() optsize {1580; X86-LABEL: test_x86_avx512_psllv_w_512_const:1581; X86: # %bb.0:1582; X86-NEXT: vpmovsxbw {{.*#+}} zmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,65535]1583; X86-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x20,0x05,A,A,A,A]1584; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41585; X86-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x12,0x05,A,A,A,A]1586; X86-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: FK_Data_41587; X86-NEXT: retl # encoding: [0xc3]1588;1589; X64-LABEL: test_x86_avx512_psllv_w_512_const:1590; X64: # %bb.0:1591; X64-NEXT: vpmovsxbw {{.*#+}} zmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,65535]1592; X64-NEXT: # encoding: [0x62,0xf2,0x7d,0x48,0x20,0x05,A,A,A,A]1593; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1594; X64-NEXT: vpsllvw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x12,0x05,A,A,A,A]1595; X64-NEXT: # fixup A - offset: 6, value: {{\.?LCPI[0-9]+_[0-9]+}}, kind: reloc_riprel_4byte1596; X64-NEXT: retq # encoding: [0xc3]1597 %res1 = call <32 x i16> @llvm.x86.avx512.psllv.w.512(<32 x i16> <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 -1>, <32 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 -1>)1598 ret <32 x i16> %res11599}1600declare <32 x i16> @llvm.x86.avx512.psllv.w.512(<32 x i16>, <32 x i16>) nounwind readnone1601 1602define <32 x i16> @test_x86_avx512_pslli_w_512(<32 x i16> %a0) {1603; CHECK-LABEL: test_x86_avx512_pslli_w_512:1604; CHECK: # %bb.0:1605; CHECK-NEXT: vpsllw $7, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x71,0xf0,0x07]1606; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1607 %res = call <32 x i16> @llvm.x86.avx512.pslli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1608 ret <32 x i16> %res1609}1610define <32 x i16> @test_x86_avx512_mask_pslli_w_512(<32 x i16> %a0, <32 x i16> %passthru, i32 %mask) {1611; X86-LABEL: test_x86_avx512_mask_pslli_w_512:1612; X86: # %bb.0:1613; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1614; X86-NEXT: vpsllw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xf0,0x07]1615; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1616; X86-NEXT: retl # encoding: [0xc3]1617;1618; X64-LABEL: test_x86_avx512_mask_pslli_w_512:1619; X64: # %bb.0:1620; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1621; X64-NEXT: vpsllw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xf0,0x07]1622; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1623; X64-NEXT: retq # encoding: [0xc3]1624 %res = call <32 x i16> @llvm.x86.avx512.pslli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1625 %mask.cast = bitcast i32 %mask to <32 x i1>1626 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1627 ret <32 x i16> %res21628}1629define <32 x i16> @test_x86_avx512_maskz_pslli_w_512(<32 x i16> %a0, i32 %mask) {1630; X86-LABEL: test_x86_avx512_maskz_pslli_w_512:1631; X86: # %bb.0:1632; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1633; X86-NEXT: vpsllw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xf0,0x07]1634; X86-NEXT: retl # encoding: [0xc3]1635;1636; X64-LABEL: test_x86_avx512_maskz_pslli_w_512:1637; X64: # %bb.0:1638; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1639; X64-NEXT: vpsllw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xf0,0x07]1640; X64-NEXT: retq # encoding: [0xc3]1641 %res = call <32 x i16> @llvm.x86.avx512.pslli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1642 %mask.cast = bitcast i32 %mask to <32 x i1>1643 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1644 ret <32 x i16> %res21645}1646declare <32 x i16> @llvm.x86.avx512.pslli.w.512(<32 x i16>, i32) nounwind readnone1647 1648 1649define <32 x i16> @test_x86_avx512_psra_w_512(<32 x i16> %a0, <8 x i16> %a1) {1650; CHECK-LABEL: test_x86_avx512_psra_w_512:1651; CHECK: # %bb.0:1652; CHECK-NEXT: vpsraw %xmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xe1,0xc1]1653; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1654 %res = call <32 x i16> @llvm.x86.avx512.psra.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1655 ret <32 x i16> %res1656}1657define <32 x i16> @test_x86_avx512_mask_psra_w_512(<32 x i16> %a0, <8 x i16> %a1, <32 x i16> %passthru, i32 %mask) {1658; X86-LABEL: test_x86_avx512_mask_psra_w_512:1659; X86: # %bb.0:1660; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1661; X86-NEXT: vpsraw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe1,0xd1]1662; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1663; X86-NEXT: retl # encoding: [0xc3]1664;1665; X64-LABEL: test_x86_avx512_mask_psra_w_512:1666; X64: # %bb.0:1667; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1668; X64-NEXT: vpsraw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xe1,0xd1]1669; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1670; X64-NEXT: retq # encoding: [0xc3]1671 %res = call <32 x i16> @llvm.x86.avx512.psra.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1672 %mask.cast = bitcast i32 %mask to <32 x i1>1673 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1674 ret <32 x i16> %res21675}1676define <32 x i16> @test_x86_avx512_maskz_psra_w_512(<32 x i16> %a0, <8 x i16> %a1, i32 %mask) {1677; X86-LABEL: test_x86_avx512_maskz_psra_w_512:1678; X86: # %bb.0:1679; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1680; X86-NEXT: vpsraw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xe1,0xc1]1681; X86-NEXT: retl # encoding: [0xc3]1682;1683; X64-LABEL: test_x86_avx512_maskz_psra_w_512:1684; X64: # %bb.0:1685; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1686; X64-NEXT: vpsraw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xe1,0xc1]1687; X64-NEXT: retq # encoding: [0xc3]1688 %res = call <32 x i16> @llvm.x86.avx512.psra.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1689 %mask.cast = bitcast i32 %mask to <32 x i1>1690 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1691 ret <32 x i16> %res21692}1693declare <32 x i16> @llvm.x86.avx512.psra.w.512(<32 x i16>, <8 x i16>) nounwind readnone1694 1695 1696define <32 x i16> @test_x86_avx512_psrai_w_512(<32 x i16> %a0) {1697; CHECK-LABEL: test_x86_avx512_psrai_w_512:1698; CHECK: # %bb.0:1699; CHECK-NEXT: vpsraw $7, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x71,0xe0,0x07]1700; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1701 %res = call <32 x i16> @llvm.x86.avx512.psrai.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1702 ret <32 x i16> %res1703}1704define <32 x i16> @test_x86_avx512_mask_psrai_w_512(<32 x i16> %a0, <32 x i16> %passthru, i32 %mask) {1705; X86-LABEL: test_x86_avx512_mask_psrai_w_512:1706; X86: # %bb.0:1707; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1708; X86-NEXT: vpsraw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xe0,0x07]1709; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1710; X86-NEXT: retl # encoding: [0xc3]1711;1712; X64-LABEL: test_x86_avx512_mask_psrai_w_512:1713; X64: # %bb.0:1714; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1715; X64-NEXT: vpsraw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xe0,0x07]1716; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1717; X64-NEXT: retq # encoding: [0xc3]1718 %res = call <32 x i16> @llvm.x86.avx512.psrai.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1719 %mask.cast = bitcast i32 %mask to <32 x i1>1720 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1721 ret <32 x i16> %res21722}1723define <32 x i16> @test_x86_avx512_maskz_psrai_w_512(<32 x i16> %a0, <32 x i16> %passthru, i32 %mask) {1724; X86-LABEL: test_x86_avx512_maskz_psrai_w_512:1725; X86: # %bb.0:1726; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1727; X86-NEXT: vpsraw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xe0,0x07]1728; X86-NEXT: retl # encoding: [0xc3]1729;1730; X64-LABEL: test_x86_avx512_maskz_psrai_w_512:1731; X64: # %bb.0:1732; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1733; X64-NEXT: vpsraw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xe0,0x07]1734; X64-NEXT: retq # encoding: [0xc3]1735 %res = call <32 x i16> @llvm.x86.avx512.psrai.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1736 %mask.cast = bitcast i32 %mask to <32 x i1>1737 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1738 ret <32 x i16> %res21739}1740declare <32 x i16> @llvm.x86.avx512.psrai.w.512(<32 x i16>, i32) nounwind readnone1741 1742 1743define <32 x i16> @test_x86_avx512_psrl_w_512(<32 x i16> %a0, <8 x i16> %a1) {1744; CHECK-LABEL: test_x86_avx512_psrl_w_512:1745; CHECK: # %bb.0:1746; CHECK-NEXT: vpsrlw %xmm1, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xd1,0xc1]1747; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1748 %res = call <32 x i16> @llvm.x86.avx512.psrl.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1749 ret <32 x i16> %res1750}1751define <32 x i16> @test_x86_avx512_mask_psrl_w_512(<32 x i16> %a0, <8 x i16> %a1, <32 x i16> %passthru, i32 %mask) {1752; X86-LABEL: test_x86_avx512_mask_psrl_w_512:1753; X86: # %bb.0:1754; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1755; X86-NEXT: vpsrlw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xd1,0xd1]1756; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1757; X86-NEXT: retl # encoding: [0xc3]1758;1759; X64-LABEL: test_x86_avx512_mask_psrl_w_512:1760; X64: # %bb.0:1761; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1762; X64-NEXT: vpsrlw %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf1,0x7d,0x49,0xd1,0xd1]1763; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]1764; X64-NEXT: retq # encoding: [0xc3]1765 %res = call <32 x i16> @llvm.x86.avx512.psrl.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1766 %mask.cast = bitcast i32 %mask to <32 x i1>1767 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1768 ret <32 x i16> %res21769}1770define <32 x i16> @test_x86_avx512_maskz_psrl_w_512(<32 x i16> %a0, <8 x i16> %a1, i32 %mask) {1771; X86-LABEL: test_x86_avx512_maskz_psrl_w_512:1772; X86: # %bb.0:1773; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1774; X86-NEXT: vpsrlw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xd1,0xc1]1775; X86-NEXT: retl # encoding: [0xc3]1776;1777; X64-LABEL: test_x86_avx512_maskz_psrl_w_512:1778; X64: # %bb.0:1779; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1780; X64-NEXT: vpsrlw %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0xd1,0xc1]1781; X64-NEXT: retq # encoding: [0xc3]1782 %res = call <32 x i16> @llvm.x86.avx512.psrl.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1783 %mask.cast = bitcast i32 %mask to <32 x i1>1784 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1785 ret <32 x i16> %res21786}1787declare <32 x i16> @llvm.x86.avx512.psrl.w.512(<32 x i16>, <8 x i16>) nounwind readnone1788 1789define <32 x i16> @test_x86_avx512_psrl_w_512_load(<32 x i16> %a0, ptr %p) {1790; X86-LABEL: test_x86_avx512_psrl_w_512_load:1791; X86: # %bb.0:1792; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]1793; X86-NEXT: vpsrlw (%eax), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xd1,0x00]1794; X86-NEXT: retl # encoding: [0xc3]1795;1796; X64-LABEL: test_x86_avx512_psrl_w_512_load:1797; X64: # %bb.0:1798; X64-NEXT: vpsrlw (%rdi), %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0xd1,0x07]1799; X64-NEXT: retq # encoding: [0xc3]1800 %a1 = load <8 x i16>, ptr %p1801 %res = call <32 x i16> @llvm.x86.avx512.psrl.w.512(<32 x i16> %a0, <8 x i16> %a1) ; <<32 x i16>> [#uses=1]1802 ret <32 x i16> %res1803}1804 1805define <32 x i16> @test_x86_avx512_psrli_w_512(<32 x i16> %a0) {1806; CHECK-LABEL: test_x86_avx512_psrli_w_512:1807; CHECK: # %bb.0:1808; CHECK-NEXT: vpsrlw $7, %zmm0, %zmm0 # encoding: [0x62,0xf1,0x7d,0x48,0x71,0xd0,0x07]1809; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]1810 %res = call <32 x i16> @llvm.x86.avx512.psrli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1811 ret <32 x i16> %res1812}1813define <32 x i16> @test_x86_avx512_mask_psrli_w_512(<32 x i16> %a0, <32 x i16> %passthru, i32 %mask) {1814; X86-LABEL: test_x86_avx512_mask_psrli_w_512:1815; X86: # %bb.0:1816; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1817; X86-NEXT: vpsrlw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xd0,0x07]1818; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1819; X86-NEXT: retl # encoding: [0xc3]1820;1821; X64-LABEL: test_x86_avx512_mask_psrli_w_512:1822; X64: # %bb.0:1823; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1824; X64-NEXT: vpsrlw $7, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0x75,0x49,0x71,0xd0,0x07]1825; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]1826; X64-NEXT: retq # encoding: [0xc3]1827 %res = call <32 x i16> @llvm.x86.avx512.psrli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1828 %mask.cast = bitcast i32 %mask to <32 x i1>1829 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> %passthru1830 ret <32 x i16> %res21831}1832define <32 x i16> @test_x86_avx512_maskz_psrli_w_512(<32 x i16> %a0, i32 %mask) {1833; X86-LABEL: test_x86_avx512_maskz_psrli_w_512:1834; X86: # %bb.0:1835; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]1836; X86-NEXT: vpsrlw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xd0,0x07]1837; X86-NEXT: retl # encoding: [0xc3]1838;1839; X64-LABEL: test_x86_avx512_maskz_psrli_w_512:1840; X64: # %bb.0:1841; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]1842; X64-NEXT: vpsrlw $7, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf1,0x7d,0xc9,0x71,0xd0,0x07]1843; X64-NEXT: retq # encoding: [0xc3]1844 %res = call <32 x i16> @llvm.x86.avx512.psrli.w.512(<32 x i16> %a0, i32 7) ; <<32 x i16>> [#uses=1]1845 %mask.cast = bitcast i32 %mask to <32 x i1>1846 %res2 = select <32 x i1> %mask.cast, <32 x i16> %res, <32 x i16> zeroinitializer1847 ret <32 x i16> %res21848}1849declare <32 x i16> @llvm.x86.avx512.psrli.w.512(<32 x i16>, i32) nounwind readnone1850