781 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512dq --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X644 5declare <2 x double> @llvm.x86.avx512.mask.vextractf64x2.512(<8 x double>, i32, <2 x double>, i8)6 7define <2 x double>@test_int_x86_avx512_vextractf64x2_512(<8 x double> %x0, <2 x double> %x2) {8; CHECK-LABEL: test_int_x86_avx512_vextractf64x2_512:9; CHECK: # %bb.0:10; CHECK-NEXT: vextractf128 $1, %ymm0, %xmm0 # encoding: [0xc4,0xe3,0x7d,0x19,0xc0,0x01]11; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]12; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]13 %res = call <2 x double> @llvm.x86.avx512.mask.vextractf64x2.512(<8 x double> %x0,i32 1, <2 x double> zeroinitializer, i8 -1)14 ret <2 x double> %res15}16 17define <2 x double>@test_int_x86_avx512_mask_vextractf64x2_512(<8 x double> %x0, <2 x double> %x2, i8 %x3) {18; X86-LABEL: test_int_x86_avx512_mask_vextractf64x2_512:19; X86: # %bb.0:20; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]21; X86-NEXT: vextractf64x2 $1, %zmm0, %xmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x19,0xc1,0x01]22; X86-NEXT: vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]23; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]24; X86-NEXT: retl # encoding: [0xc3]25;26; X64-LABEL: test_int_x86_avx512_mask_vextractf64x2_512:27; X64: # %bb.0:28; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]29; X64-NEXT: vextractf64x2 $1, %zmm0, %xmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x19,0xc1,0x01]30; X64-NEXT: vmovapd %xmm1, %xmm0 # encoding: [0xc5,0xf9,0x28,0xc1]31; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]32; X64-NEXT: retq # encoding: [0xc3]33 %res = call <2 x double> @llvm.x86.avx512.mask.vextractf64x2.512(<8 x double> %x0,i32 1, <2 x double> %x2, i8 %x3)34 ret <2 x double> %res35}36 37define <2 x double>@test_int_x86_avx512_maskz_vextractf64x2_512(<8 x double> %x0, i8 %x3) {38; X86-LABEL: test_int_x86_avx512_maskz_vextractf64x2_512:39; X86: # %bb.0:40; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]41; X86-NEXT: vextractf64x2 $1, %zmm0, %xmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x19,0xc0,0x01]42; X86-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]43; X86-NEXT: retl # encoding: [0xc3]44;45; X64-LABEL: test_int_x86_avx512_maskz_vextractf64x2_512:46; X64: # %bb.0:47; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]48; X64-NEXT: vextractf64x2 $1, %zmm0, %xmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x19,0xc0,0x01]49; X64-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]50; X64-NEXT: retq # encoding: [0xc3]51 %res = call <2 x double> @llvm.x86.avx512.mask.vextractf64x2.512(<8 x double> %x0,i32 1, <2 x double> zeroinitializer, i8 %x3)52 ret <2 x double> %res53}54 55declare <8 x float> @llvm.x86.avx512.mask.vextractf32x8.512(<16 x float>, i32, <8 x float>, i8)56 57define <8 x float>@test_int_x86_avx512_vextractf32x8(<16 x float> %x0, <8 x float> %x2) {58; CHECK-LABEL: test_int_x86_avx512_vextractf32x8:59; CHECK: # %bb.0:60; CHECK-NEXT: vextractf64x4 $1, %zmm0, %ymm0 # encoding: [0x62,0xf3,0xfd,0x48,0x1b,0xc0,0x01]61; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]62 %res = call <8 x float> @llvm.x86.avx512.mask.vextractf32x8.512(<16 x float> %x0,i32 1, <8 x float> zeroinitializer, i8 -1)63 ret <8 x float> %res64}65 66define <8 x float>@test_int_x86_avx512_mask_vextractf32x8(<16 x float> %x0, <8 x float> %x2, i8 %x3) {67; X86-LABEL: test_int_x86_avx512_mask_vextractf32x8:68; X86: # %bb.0:69; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]70; X86-NEXT: vextractf32x8 $1, %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1b,0xc1,0x01]71; X86-NEXT: vmovaps %ymm1, %ymm0 # encoding: [0xc5,0xfc,0x28,0xc1]72; X86-NEXT: retl # encoding: [0xc3]73;74; X64-LABEL: test_int_x86_avx512_mask_vextractf32x8:75; X64: # %bb.0:76; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]77; X64-NEXT: vextractf32x8 $1, %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1b,0xc1,0x01]78; X64-NEXT: vmovaps %ymm1, %ymm0 # encoding: [0xc5,0xfc,0x28,0xc1]79; X64-NEXT: retq # encoding: [0xc3]80 %res = call <8 x float> @llvm.x86.avx512.mask.vextractf32x8.512(<16 x float> %x0,i32 1, <8 x float> %x2, i8 %x3)81 ret <8 x float> %res82}83 84define <8 x float>@test_int_x86_avx512_maskz_vextractf32x8(<16 x float> %x0, i8 %x3) {85; X86-LABEL: test_int_x86_avx512_maskz_vextractf32x8:86; X86: # %bb.0:87; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]88; X86-NEXT: vextractf32x8 $1, %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1b,0xc0,0x01]89; X86-NEXT: retl # encoding: [0xc3]90;91; X64-LABEL: test_int_x86_avx512_maskz_vextractf32x8:92; X64: # %bb.0:93; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]94; X64-NEXT: vextractf32x8 $1, %zmm0, %ymm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1b,0xc0,0x01]95; X64-NEXT: retq # encoding: [0xc3]96 %res = call <8 x float> @llvm.x86.avx512.mask.vextractf32x8.512(<16 x float> %x0,i32 1, <8 x float> zeroinitializer, i8 %x3)97 ret <8 x float> %res98}99 100declare <16 x float> @llvm.x86.avx512.mask.insertf32x8.512(<16 x float>, <8 x float>, i32, <16 x float>, i16)101 102define <16 x float>@test_int_x86_avx512_insertf32x8_512(<16 x float> %x0, <8 x float> %x1, <16 x float> %x3) {103; CHECK-LABEL: test_int_x86_avx512_insertf32x8_512:104; CHECK: # %bb.0:105; CHECK-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x1a,0xc1,0x01]106; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]107 %res = call <16 x float> @llvm.x86.avx512.mask.insertf32x8.512(<16 x float> %x0, <8 x float> %x1, i32 1, <16 x float> %x3, i16 -1)108 ret <16 x float> %res109}110 111define <16 x float>@test_int_x86_avx512_mask_insertf32x8_512(<16 x float> %x0, <8 x float> %x1, <16 x float> %x3, i16 %x4) {112; X86-LABEL: test_int_x86_avx512_mask_insertf32x8_512:113; X86: # %bb.0:114; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]115; X86-NEXT: vinsertf32x8 $1, %ymm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1a,0xd1,0x01]116; X86-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]117; X86-NEXT: retl # encoding: [0xc3]118;119; X64-LABEL: test_int_x86_avx512_mask_insertf32x8_512:120; X64: # %bb.0:121; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]122; X64-NEXT: vinsertf32x8 $1, %ymm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1a,0xd1,0x01]123; X64-NEXT: vmovaps %zmm2, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc2]124; X64-NEXT: retq # encoding: [0xc3]125 %res = call <16 x float> @llvm.x86.avx512.mask.insertf32x8.512(<16 x float> %x0, <8 x float> %x1, i32 1, <16 x float> %x3, i16 %x4)126 ret <16 x float> %res127}128 129define <16 x float>@test_int_x86_avx512_maskz_insertf32x8_512(<16 x float> %x0, <8 x float> %x1, i16 %x4) {130; X86-LABEL: test_int_x86_avx512_maskz_insertf32x8_512:131; X86: # %bb.0:132; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]133; X86-NEXT: vinsertf32x8 $1, %ymm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1a,0xc1,0x01]134; X86-NEXT: retl # encoding: [0xc3]135;136; X64-LABEL: test_int_x86_avx512_maskz_insertf32x8_512:137; X64: # %bb.0:138; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]139; X64-NEXT: vinsertf32x8 $1, %ymm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1a,0xc1,0x01]140; X64-NEXT: retq # encoding: [0xc3]141 %res = call <16 x float> @llvm.x86.avx512.mask.insertf32x8.512(<16 x float> %x0, <8 x float> %x1, i32 1, <16 x float> zeroinitializer, i16 %x4)142 ret <16 x float> %res143}144 145declare <8 x double> @llvm.x86.avx512.mask.insertf64x2.512(<8 x double>, <2 x double>, i32, <8 x double>, i8)146 147define <8 x double>@test_int_x86_avx512_insertf64x2_512(<8 x double> %x0, <2 x double> %x1,<8 x double> %x3) {148; CHECK-LABEL: test_int_x86_avx512_insertf64x2_512:149; CHECK: # %bb.0:150; CHECK-NEXT: vinsertf32x4 $1, %xmm1, %zmm0, %zmm0 # encoding: [0x62,0xf3,0x7d,0x48,0x18,0xc1,0x01]151; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]152 %res = call <8 x double> @llvm.x86.avx512.mask.insertf64x2.512(<8 x double> %x0, <2 x double> %x1, i32 1, <8 x double> %x3, i8 -1)153 ret <8 x double> %res154}155 156define <8 x double>@test_int_x86_avx512_mask_insertf64x2_512(<8 x double> %x0, <2 x double> %x1,<8 x double> %x3, i8 %x4) {157; X86-LABEL: test_int_x86_avx512_mask_insertf64x2_512:158; X86: # %bb.0:159; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]160; X86-NEXT: vinsertf64x2 $1, %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x18,0xd1,0x01]161; X86-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]162; X86-NEXT: retl # encoding: [0xc3]163;164; X64-LABEL: test_int_x86_avx512_mask_insertf64x2_512:165; X64: # %bb.0:166; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]167; X64-NEXT: vinsertf64x2 $1, %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x18,0xd1,0x01]168; X64-NEXT: vmovapd %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc2]169; X64-NEXT: retq # encoding: [0xc3]170 %res = call <8 x double> @llvm.x86.avx512.mask.insertf64x2.512(<8 x double> %x0, <2 x double> %x1, i32 1, <8 x double> %x3, i8 %x4)171 ret <8 x double> %res172}173 174define <8 x double>@test_int_x86_avx512_maskz_insertf64x2_512(<8 x double> %x0, <2 x double> %x1, i8 %x4) {175; X86-LABEL: test_int_x86_avx512_maskz_insertf64x2_512:176; X86: # %bb.0:177; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]178; X86-NEXT: vinsertf64x2 $1, %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x18,0xc1,0x01]179; X86-NEXT: retl # encoding: [0xc3]180;181; X64-LABEL: test_int_x86_avx512_maskz_insertf64x2_512:182; X64: # %bb.0:183; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]184; X64-NEXT: vinsertf64x2 $1, %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x18,0xc1,0x01]185; X64-NEXT: retq # encoding: [0xc3]186 %res = call <8 x double> @llvm.x86.avx512.mask.insertf64x2.512(<8 x double> %x0, <2 x double> %x1, i32 1, <8 x double> zeroinitializer, i8 %x4)187 ret <8 x double> %res188}189 190declare <16 x i32> @llvm.x86.avx512.mask.inserti32x8.512(<16 x i32>, <8 x i32>, i32, <16 x i32>, i16)191 192define <16 x i32>@test_int_x86_avx512_inserti32x8_512(<16 x i32> %x0, <8 x i32> %x1, <16 x i32> %x3) {193; CHECK-LABEL: test_int_x86_avx512_inserti32x8_512:194; CHECK: # %bb.0:195; CHECK-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x1a,0xc1,0x01]196; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]197 %res = call <16 x i32> @llvm.x86.avx512.mask.inserti32x8.512(<16 x i32> %x0, <8 x i32> %x1, i32 1, <16 x i32> %x3, i16 -1)198 ret <16 x i32> %res199}200 201define <16 x i32>@test_int_x86_avx512_mask_inserti32x8_512(<16 x i32> %x0, <8 x i32> %x1, <16 x i32> %x3, i16 %x4) {202; X86-LABEL: test_int_x86_avx512_mask_inserti32x8_512:203; X86: # %bb.0:204; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]205; X86-NEXT: vinserti32x8 $1, %ymm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x3a,0xd1,0x01]206; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]207; X86-NEXT: retl # encoding: [0xc3]208;209; X64-LABEL: test_int_x86_avx512_mask_inserti32x8_512:210; X64: # %bb.0:211; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]212; X64-NEXT: vinserti32x8 $1, %ymm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x3a,0xd1,0x01]213; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]214; X64-NEXT: retq # encoding: [0xc3]215 %res = call <16 x i32> @llvm.x86.avx512.mask.inserti32x8.512(<16 x i32> %x0, <8 x i32> %x1, i32 1, <16 x i32> %x3, i16 %x4)216 ret <16 x i32> %res217}218 219define <16 x i32>@test_int_x86_avx512_maskz_inserti32x8_512(<16 x i32> %x0, <8 x i32> %x1, i16 %x4) {220; X86-LABEL: test_int_x86_avx512_maskz_inserti32x8_512:221; X86: # %bb.0:222; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]223; X86-NEXT: vinserti32x8 $1, %ymm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x3a,0xc1,0x01]224; X86-NEXT: retl # encoding: [0xc3]225;226; X64-LABEL: test_int_x86_avx512_maskz_inserti32x8_512:227; X64: # %bb.0:228; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]229; X64-NEXT: vinserti32x8 $1, %ymm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x3a,0xc1,0x01]230; X64-NEXT: retq # encoding: [0xc3]231 %res = call <16 x i32> @llvm.x86.avx512.mask.inserti32x8.512(<16 x i32> %x0, <8 x i32> %x1, i32 1, <16 x i32> zeroinitializer, i16 %x4)232 ret <16 x i32> %res233}234 235declare <8 x i64> @llvm.x86.avx512.mask.inserti64x2.512(<8 x i64>, <2 x i64>, i32, <8 x i64>, i8)236 237define <8 x i64>@test_int_x86_avx512_inserti64x2_512(<8 x i64> %x0, <2 x i64> %x1, <8 x i64> %x3) {238; CHECK-LABEL: test_int_x86_avx512_inserti64x2_512:239; CHECK: # %bb.0:240; CHECK-NEXT: vinsertf32x4 $1, %xmm1, %zmm0, %zmm0 # encoding: [0x62,0xf3,0x7d,0x48,0x18,0xc1,0x01]241; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]242 %res = call <8 x i64> @llvm.x86.avx512.mask.inserti64x2.512(<8 x i64> %x0, <2 x i64> %x1, i32 1, <8 x i64> %x3, i8 -1)243 ret <8 x i64> %res244}245 246define <8 x i64>@test_int_x86_avx512_mask_inserti64x2_512(<8 x i64> %x0, <2 x i64> %x1, <8 x i64> %x3, i8 %x4) {247; X86-LABEL: test_int_x86_avx512_mask_inserti64x2_512:248; X86: # %bb.0:249; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]250; X86-NEXT: vinserti64x2 $1, %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x38,0xd1,0x01]251; X86-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]252; X86-NEXT: retl # encoding: [0xc3]253;254; X64-LABEL: test_int_x86_avx512_mask_inserti64x2_512:255; X64: # %bb.0:256; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]257; X64-NEXT: vinserti64x2 $1, %xmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x38,0xd1,0x01]258; X64-NEXT: vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]259; X64-NEXT: retq # encoding: [0xc3]260 %res = call <8 x i64> @llvm.x86.avx512.mask.inserti64x2.512(<8 x i64> %x0, <2 x i64> %x1, i32 1, <8 x i64> %x3, i8 %x4)261 ret <8 x i64> %res262}263 264define <8 x i64>@test_int_x86_avx512_maskz_inserti64x2_512(<8 x i64> %x0, <2 x i64> %x1, i8 %x4) {265; X86-LABEL: test_int_x86_avx512_maskz_inserti64x2_512:266; X86: # %bb.0:267; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]268; X86-NEXT: vinserti64x2 $1, %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x38,0xc1,0x01]269; X86-NEXT: retl # encoding: [0xc3]270;271; X64-LABEL: test_int_x86_avx512_maskz_inserti64x2_512:272; X64: # %bb.0:273; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]274; X64-NEXT: vinserti64x2 $1, %xmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x38,0xc1,0x01]275; X64-NEXT: retq # encoding: [0xc3]276 %res = call <8 x i64> @llvm.x86.avx512.mask.inserti64x2.512(<8 x i64> %x0, <2 x i64> %x1, i32 1, <8 x i64> zeroinitializer, i8 %x4)277 ret <8 x i64> %res278}279 280 281declare <16 x i32> @llvm.x86.avx512.cvtmask2d.512(i16)282 283define <16 x i32>@test_int_x86_avx512_cvtmask2d_512(i16 %x0) {284; X86-LABEL: test_int_x86_avx512_cvtmask2d_512:285; X86: # %bb.0:286; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k0 # encoding: [0xc5,0xf8,0x90,0x44,0x24,0x04]287; X86-NEXT: vpmovm2d %k0, %zmm0 # encoding: [0x62,0xf2,0x7e,0x48,0x38,0xc0]288; X86-NEXT: retl # encoding: [0xc3]289;290; X64-LABEL: test_int_x86_avx512_cvtmask2d_512:291; X64: # %bb.0:292; X64-NEXT: kmovw %edi, %k0 # encoding: [0xc5,0xf8,0x92,0xc7]293; X64-NEXT: vpmovm2d %k0, %zmm0 # encoding: [0x62,0xf2,0x7e,0x48,0x38,0xc0]294; X64-NEXT: retq # encoding: [0xc3]295 %res = call <16 x i32> @llvm.x86.avx512.cvtmask2d.512(i16 %x0)296 ret <16 x i32> %res297}298 299declare <8 x i64> @llvm.x86.avx512.cvtmask2q.512(i8)300 301define <8 x i64>@test_int_x86_avx512_cvtmask2q_512(i8 %x0) {302; X86-LABEL: test_int_x86_avx512_cvtmask2q_512:303; X86: # %bb.0:304; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k0 # encoding: [0xc5,0xf9,0x90,0x44,0x24,0x04]305; X86-NEXT: vpmovm2q %k0, %zmm0 # encoding: [0x62,0xf2,0xfe,0x48,0x38,0xc0]306; X86-NEXT: retl # encoding: [0xc3]307;308; X64-LABEL: test_int_x86_avx512_cvtmask2q_512:309; X64: # %bb.0:310; X64-NEXT: kmovw %edi, %k0 # encoding: [0xc5,0xf8,0x92,0xc7]311; X64-NEXT: vpmovm2q %k0, %zmm0 # encoding: [0x62,0xf2,0xfe,0x48,0x38,0xc0]312; X64-NEXT: retq # encoding: [0xc3]313 %res = call <8 x i64> @llvm.x86.avx512.cvtmask2q.512(i8 %x0)314 ret <8 x i64> %res315}316 317declare <16 x float> @llvm.x86.avx512.mask.broadcastf32x8.512(<8 x float>, <16 x float>, i16)318 319define <16 x float>@test_int_x86_avx512_broadcastf32x8_512(<8 x float> %x0, <16 x float> %x2) {320; CHECK-LABEL: test_int_x86_avx512_broadcastf32x8_512:321; CHECK: # %bb.0:322; CHECK-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0323; CHECK-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x1a,0xc0,0x01]324; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]325 326 %res = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x8.512(<8 x float> %x0, <16 x float> %x2, i16 -1)327 ret <16 x float> %res328}329 330define <16 x float>@test_int_x86_avx512_mask_broadcastf32x8_512(<8 x float> %x0, <16 x float> %x2, i16 %mask) {331; X86-LABEL: test_int_x86_avx512_mask_broadcastf32x8_512:332; X86: # %bb.0:333; X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0334; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]335; X86-NEXT: vinsertf32x8 $1, %ymm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1a,0xc8,0x01]336; X86-NEXT: vmovaps %zmm1, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc1]337; X86-NEXT: retl # encoding: [0xc3]338;339; X64-LABEL: test_int_x86_avx512_mask_broadcastf32x8_512:340; X64: # %bb.0:341; X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0342; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]343; X64-NEXT: vinsertf32x8 $1, %ymm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x1a,0xc8,0x01]344; X64-NEXT: vmovaps %zmm1, %zmm0 # encoding: [0x62,0xf1,0x7c,0x48,0x28,0xc1]345; X64-NEXT: retq # encoding: [0xc3]346 347 %res = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x8.512(<8 x float> %x0, <16 x float> %x2, i16 %mask)348 ret <16 x float> %res349}350 351define <16 x float>@test_int_x86_avx512_maskz_broadcastf32x8_512(<8 x float> %x0, i16 %mask) {352; X86-LABEL: test_int_x86_avx512_maskz_broadcastf32x8_512:353; X86: # %bb.0:354; X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0355; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]356; X86-NEXT: vinsertf32x8 $1, %ymm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1a,0xc0,0x01]357; X86-NEXT: retl # encoding: [0xc3]358;359; X64-LABEL: test_int_x86_avx512_maskz_broadcastf32x8_512:360; X64: # %bb.0:361; X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0362; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]363; X64-NEXT: vinsertf32x8 $1, %ymm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x1a,0xc0,0x01]364; X64-NEXT: retq # encoding: [0xc3]365 366 %res = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x8.512(<8 x float> %x0, <16 x float> zeroinitializer, i16 %mask)367 ret <16 x float> %res368}369 370define <16 x float>@test_int_x86_avx512_mask_broadcastf32x8_512_load(ptr %x0ptr, <16 x float> %x2, i16 %mask) {371; X86-LABEL: test_int_x86_avx512_mask_broadcastf32x8_512_load:372; X86: # %bb.0:373; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]374; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x08]375; X86-NEXT: vbroadcastf32x8 (%eax), %zmm0 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x1b,0x00]376; X86-NEXT: # zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]377; X86-NEXT: retl # encoding: [0xc3]378;379; X64-LABEL: test_int_x86_avx512_mask_broadcastf32x8_512_load:380; X64: # %bb.0:381; X64-NEXT: kmovw %esi, %k1 # encoding: [0xc5,0xf8,0x92,0xce]382; X64-NEXT: vbroadcastf32x8 (%rdi), %zmm0 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x1b,0x07]383; X64-NEXT: # zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]384; X64-NEXT: retq # encoding: [0xc3]385 386 %x0 = load <8 x float>, ptr %x0ptr387 %res = call <16 x float> @llvm.x86.avx512.mask.broadcastf32x8.512(<8 x float> %x0, <16 x float> %x2, i16 %mask)388 ret <16 x float> %res389}390 391declare <8 x double> @llvm.x86.avx512.mask.broadcastf64x2.512(<2 x double>, <8 x double>, i8)392 393define <8 x double>@test_int_x86_avx512_broadcastf64x2_512(<2 x double> %x0, <8 x double> %x2) {394; CHECK-LABEL: test_int_x86_avx512_broadcastf64x2_512:395; CHECK: # %bb.0:396; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0397; CHECK-NEXT: vshuff64x2 $0, %zmm0, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x23,0xc0,0x00]398; CHECK-NEXT: # zmm0 = zmm0[0,1,0,1,0,1,0,1]399; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]400 401 %res = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x2.512(<2 x double> %x0, <8 x double> %x2, i8 -1)402 ret <8 x double> %res403}404 405define <8 x double>@test_int_x86_avx512_mask_broadcastf64x2_512(<2 x double> %x0, <8 x double> %x2, i8 %mask) {406; X86-LABEL: test_int_x86_avx512_mask_broadcastf64x2_512:407; X86: # %bb.0:408; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0409; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]410; X86-NEXT: vshuff64x2 $0, %zmm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x23,0xc8,0x00]411; X86-NEXT: # zmm1 {%k1} = zmm0[0,1,0,1,0,1,0,1]412; X86-NEXT: vmovapd %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc1]413; X86-NEXT: retl # encoding: [0xc3]414;415; X64-LABEL: test_int_x86_avx512_mask_broadcastf64x2_512:416; X64: # %bb.0:417; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0418; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]419; X64-NEXT: vshuff64x2 $0, %zmm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x23,0xc8,0x00]420; X64-NEXT: # zmm1 {%k1} = zmm0[0,1,0,1,0,1,0,1]421; X64-NEXT: vmovapd %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x28,0xc1]422; X64-NEXT: retq # encoding: [0xc3]423 424 %res = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x2.512(<2 x double> %x0, <8 x double> %x2, i8 %mask)425 ret <8 x double> %res426}427 428define <8 x double>@test_int_x86_avx512_maskz_broadcastf64x2_512(<2 x double> %x0, i8 %mask) {429; X86-LABEL: test_int_x86_avx512_maskz_broadcastf64x2_512:430; X86: # %bb.0:431; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0432; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]433; X86-NEXT: vshuff64x2 $0, %zmm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x23,0xc0,0x00]434; X86-NEXT: # zmm0 {%k1} {z} = zmm0[0,1,0,1,0,1,0,1]435; X86-NEXT: retl # encoding: [0xc3]436;437; X64-LABEL: test_int_x86_avx512_maskz_broadcastf64x2_512:438; X64: # %bb.0:439; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0440; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]441; X64-NEXT: vshuff64x2 $0, %zmm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x23,0xc0,0x00]442; X64-NEXT: # zmm0 {%k1} {z} = zmm0[0,1,0,1,0,1,0,1]443; X64-NEXT: retq # encoding: [0xc3]444 445 %res = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x2.512(<2 x double> %x0, <8 x double> zeroinitializer, i8 %mask)446 ret <8 x double> %res447}448 449define <8 x double>@test_int_x86_avx512_mask_broadcastf64x2_512_load(ptr %x0ptr, <8 x double> %x2, i8 %mask) {450; X86-LABEL: test_int_x86_avx512_mask_broadcastf64x2_512_load:451; X86: # %bb.0:452; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]453; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x08]454; X86-NEXT: vbroadcastf64x2 (%eax), %zmm0 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x1a,0x00]455; X86-NEXT: # zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]456; X86-NEXT: retl # encoding: [0xc3]457;458; X64-LABEL: test_int_x86_avx512_mask_broadcastf64x2_512_load:459; X64: # %bb.0:460; X64-NEXT: kmovw %esi, %k1 # encoding: [0xc5,0xf8,0x92,0xce]461; X64-NEXT: vbroadcastf64x2 (%rdi), %zmm0 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x1a,0x07]462; X64-NEXT: # zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]463; X64-NEXT: retq # encoding: [0xc3]464 465 %x0 = load <2 x double>, ptr %x0ptr466 %res = call <8 x double> @llvm.x86.avx512.mask.broadcastf64x2.512(<2 x double> %x0, <8 x double> %x2, i8 %mask)467 ret <8 x double> %res468}469 470declare <16 x i32> @llvm.x86.avx512.mask.broadcasti32x8.512(<8 x i32>, <16 x i32>, i16)471 472define <16 x i32>@test_int_x86_avx512_broadcasti32x8_512(<8 x i32> %x0, <16 x i32> %x2) {473; CHECK-LABEL: test_int_x86_avx512_broadcasti32x8_512:474; CHECK: # %bb.0:475; CHECK-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0476; CHECK-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x1a,0xc0,0x01]477; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]478 479 %res = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x8.512(<8 x i32> %x0, <16 x i32> %x2, i16 -1)480 ret <16 x i32> %res481}482 483define <16 x i32>@test_int_x86_avx512_mask_broadcasti32x8_512(<8 x i32> %x0, <16 x i32> %x2, i16 %mask) {484; X86-LABEL: test_int_x86_avx512_mask_broadcasti32x8_512:485; X86: # %bb.0:486; X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0487; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]488; X86-NEXT: vinserti32x8 $1, %ymm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x3a,0xc8,0x01]489; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]490; X86-NEXT: retl # encoding: [0xc3]491;492; X64-LABEL: test_int_x86_avx512_mask_broadcasti32x8_512:493; X64: # %bb.0:494; X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0495; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]496; X64-NEXT: vinserti32x8 $1, %ymm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x3a,0xc8,0x01]497; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]498; X64-NEXT: retq # encoding: [0xc3]499 500 %res = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x8.512(<8 x i32> %x0, <16 x i32> %x2, i16 %mask)501 ret <16 x i32> %res502}503 504define <16 x i32>@test_int_x86_avx512_maskz_broadcasti32x8_512(<8 x i32> %x0, i16 %mask) {505; X86-LABEL: test_int_x86_avx512_maskz_broadcasti32x8_512:506; X86: # %bb.0:507; X86-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0508; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]509; X86-NEXT: vinserti32x8 $1, %ymm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x3a,0xc0,0x01]510; X86-NEXT: retl # encoding: [0xc3]511;512; X64-LABEL: test_int_x86_avx512_maskz_broadcasti32x8_512:513; X64: # %bb.0:514; X64-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0515; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]516; X64-NEXT: vinserti32x8 $1, %ymm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0x7d,0xc9,0x3a,0xc0,0x01]517; X64-NEXT: retq # encoding: [0xc3]518 519 %res = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x8.512(<8 x i32> %x0, <16 x i32> zeroinitializer, i16 %mask)520 ret <16 x i32> %res521}522 523define <16 x i32>@test_int_x86_avx512_mask_broadcasti32x8_512_load(ptr %x0ptr, <16 x i32> %x2, i16 %mask) {524; X86-LABEL: test_int_x86_avx512_mask_broadcasti32x8_512_load:525; X86: # %bb.0:526; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]527; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x08]528; X86-NEXT: vbroadcasti32x8 (%eax), %zmm0 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x5b,0x00]529; X86-NEXT: # zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]530; X86-NEXT: retl # encoding: [0xc3]531;532; X64-LABEL: test_int_x86_avx512_mask_broadcasti32x8_512_load:533; X64: # %bb.0:534; X64-NEXT: kmovw %esi, %k1 # encoding: [0xc5,0xf8,0x92,0xce]535; X64-NEXT: vbroadcasti32x8 (%rdi), %zmm0 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x5b,0x07]536; X64-NEXT: # zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]537; X64-NEXT: retq # encoding: [0xc3]538 539 %x0 = load <8 x i32>, ptr %x0ptr540 %res = call <16 x i32> @llvm.x86.avx512.mask.broadcasti32x8.512(<8 x i32> %x0, <16 x i32> %x2, i16 %mask)541 ret <16 x i32> %res542}543 544declare <8 x i64> @llvm.x86.avx512.mask.broadcasti64x2.512(<2 x i64>, <8 x i64>, i8)545 546define <8 x i64>@test_int_x86_avx512_broadcasti64x2_512(<2 x i64> %x0, <8 x i64> %x2) {547; CHECK-LABEL: test_int_x86_avx512_broadcasti64x2_512:548; CHECK: # %bb.0:549; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0550; CHECK-NEXT: vshufi64x2 $0, %zmm0, %zmm0, %zmm0 # encoding: [0x62,0xf3,0xfd,0x48,0x43,0xc0,0x00]551; CHECK-NEXT: # zmm0 = zmm0[0,1,0,1,0,1,0,1]552; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]553 554 %res = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x2.512(<2 x i64> %x0, <8 x i64> %x2, i8 -1)555 ret <8 x i64> %res556}557 558define <8 x i64>@test_int_x86_avx512_mask_broadcasti64x2_512(<2 x i64> %x0, <8 x i64> %x2, i8 %mask) {559; X86-LABEL: test_int_x86_avx512_mask_broadcasti64x2_512:560; X86: # %bb.0:561; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0562; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]563; X86-NEXT: vshufi64x2 $0, %zmm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x43,0xc8,0x00]564; X86-NEXT: # zmm1 {%k1} = zmm0[0,1,0,1,0,1,0,1]565; X86-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]566; X86-NEXT: retl # encoding: [0xc3]567;568; X64-LABEL: test_int_x86_avx512_mask_broadcasti64x2_512:569; X64: # %bb.0:570; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0571; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]572; X64-NEXT: vshufi64x2 $0, %zmm0, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x43,0xc8,0x00]573; X64-NEXT: # zmm1 {%k1} = zmm0[0,1,0,1,0,1,0,1]574; X64-NEXT: vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]575; X64-NEXT: retq # encoding: [0xc3]576 577 %res = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x2.512(<2 x i64> %x0, <8 x i64> %x2, i8 %mask)578 ret <8 x i64> %res579}580 581define <8 x i64>@test_int_x86_avx512_maskz_broadcasti64x2_512(<2 x i64> %x0, i8 %mask) {582; X86-LABEL: test_int_x86_avx512_maskz_broadcasti64x2_512:583; X86: # %bb.0:584; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0585; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]586; X86-NEXT: vshufi64x2 $0, %zmm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x43,0xc0,0x00]587; X86-NEXT: # zmm0 {%k1} {z} = zmm0[0,1,0,1,0,1,0,1]588; X86-NEXT: retl # encoding: [0xc3]589;590; X64-LABEL: test_int_x86_avx512_maskz_broadcasti64x2_512:591; X64: # %bb.0:592; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0593; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]594; X64-NEXT: vshufi64x2 $0, %zmm0, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf3,0xfd,0xc9,0x43,0xc0,0x00]595; X64-NEXT: # zmm0 {%k1} {z} = zmm0[0,1,0,1,0,1,0,1]596; X64-NEXT: retq # encoding: [0xc3]597 598 %res = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x2.512(<2 x i64> %x0, <8 x i64> zeroinitializer, i8 %mask)599 ret <8 x i64> %res600}601 602define <8 x i64>@test_int_x86_avx512_mask_broadcasti64x2_512_load(ptr %x0ptr, <8 x i64> %x2, i8 %mask) {603; X86-LABEL: test_int_x86_avx512_mask_broadcasti64x2_512_load:604; X86: # %bb.0:605; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]606; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x08]607; X86-NEXT: vbroadcasti64x2 (%eax), %zmm0 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x5a,0x00]608; X86-NEXT: # zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]609; X86-NEXT: retl # encoding: [0xc3]610;611; X64-LABEL: test_int_x86_avx512_mask_broadcasti64x2_512_load:612; X64: # %bb.0:613; X64-NEXT: kmovw %esi, %k1 # encoding: [0xc5,0xf8,0x92,0xce]614; X64-NEXT: vbroadcasti64x2 (%rdi), %zmm0 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x5a,0x07]615; X64-NEXT: # zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]616; X64-NEXT: retq # encoding: [0xc3]617 618 %x0 = load <2 x i64>, ptr %x0ptr619 %res = call <8 x i64> @llvm.x86.avx512.mask.broadcasti64x2.512(<2 x i64> %x0, <8 x i64> %x2, i8 %mask)620 ret <8 x i64> %res621}622 623declare i16 @llvm.x86.avx512.cvtd2mask.512(<16 x i32>)624 625define i16@test_int_x86_avx512_cvtd2mask_512(<16 x i32> %x0) {626; CHECK-LABEL: test_int_x86_avx512_cvtd2mask_512:627; CHECK: # %bb.0:628; CHECK-NEXT: vpmovd2m %zmm0, %k0 # encoding: [0x62,0xf2,0x7e,0x48,0x39,0xc0]629; CHECK-NEXT: kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]630; CHECK-NEXT: # kill: def $ax killed $ax killed $eax631; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]632; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]633 %res = call i16 @llvm.x86.avx512.cvtd2mask.512(<16 x i32> %x0)634 ret i16 %res635}636 637declare i8 @llvm.x86.avx512.cvtq2mask.512(<8 x i64>)638 639define i8@test_int_x86_avx512_cvtq2mask_512(<8 x i64> %x0) {640; CHECK-LABEL: test_int_x86_avx512_cvtq2mask_512:641; CHECK: # %bb.0:642; CHECK-NEXT: vpmovq2m %zmm0, %k0 # encoding: [0x62,0xf2,0xfe,0x48,0x39,0xc0]643; CHECK-NEXT: kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]644; CHECK-NEXT: # kill: def $al killed $al killed $eax645; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]646; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]647 %res = call i8 @llvm.x86.avx512.cvtq2mask.512(<8 x i64> %x0)648 ret i8 %res649}650 651declare i8 @llvm.x86.avx512.mask.fpclass.pd.512(<8 x double>, i32, i8)652 653define i8 @test_int_x86_avx512_mask_fpclass_pd_512(<8 x double> %x0) {654; CHECK-LABEL: test_int_x86_avx512_mask_fpclass_pd_512:655; CHECK: # %bb.0:656; CHECK-NEXT: vfpclasspd $2, %zmm0, %k1 # encoding: [0x62,0xf3,0xfd,0x48,0x66,0xc8,0x02]657; CHECK-NEXT: # k1 = isPositiveZero(zmm0)658; CHECK-NEXT: vfpclasspd $4, %zmm0, %k0 {%k1} # encoding: [0x62,0xf3,0xfd,0x49,0x66,0xc0,0x04]659; CHECK-NEXT: # k0 {%k1} = isNegativeZero(zmm0)660; CHECK-NEXT: kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]661; CHECK-NEXT: # kill: def $al killed $al killed $eax662; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]663; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]664 %res = call i8 @llvm.x86.avx512.mask.fpclass.pd.512(<8 x double> %x0, i32 4, i8 -1)665 %res1 = call i8 @llvm.x86.avx512.mask.fpclass.pd.512(<8 x double> %x0, i32 2, i8 %res)666 ret i8 %res1667}668declare i16 @llvm.x86.avx512.mask.fpclass.ps.512(<16 x float>, i32, i16)669 670define i16@test_int_x86_avx512_mask_fpclass_ps_512(<16 x float> %x0) {671; CHECK-LABEL: test_int_x86_avx512_mask_fpclass_ps_512:672; CHECK: # %bb.0:673; CHECK-NEXT: vfpclassps $2, %zmm0, %k1 # encoding: [0x62,0xf3,0x7d,0x48,0x66,0xc8,0x02]674; CHECK-NEXT: # k1 = isPositiveZero(zmm0)675; CHECK-NEXT: vfpclassps $4, %zmm0, %k0 {%k1} # encoding: [0x62,0xf3,0x7d,0x49,0x66,0xc0,0x04]676; CHECK-NEXT: # k0 {%k1} = isNegativeZero(zmm0)677; CHECK-NEXT: kmovw %k0, %eax # encoding: [0xc5,0xf8,0x93,0xc0]678; CHECK-NEXT: # kill: def $ax killed $ax killed $eax679; CHECK-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]680; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]681 %res = call i16 @llvm.x86.avx512.mask.fpclass.ps.512(<16 x float> %x0, i32 4, i16 -1)682 %res1 = call i16 @llvm.x86.avx512.mask.fpclass.ps.512(<16 x float> %x0, i32 2, i16 %res)683 ret i16 %res1684}685 686declare <8 x double> @llvm.x86.avx512.mask.cvtqq2pd.512(<8 x i64>, <8 x double>, i8, i32)687 688define <8 x double>@test_int_x86_avx512_mask_cvt_qq2pd_512(<8 x i64> %x0, <8 x double> %x1, i8 %x2) {689; X86-LABEL: test_int_x86_avx512_mask_cvt_qq2pd_512:690; X86: # %bb.0:691; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]692; X86-NEXT: vcvtqq2pd %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0xfe,0x49,0xe6,0xc8]693; X86-NEXT: vcvtqq2pd {rn-sae}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0xfe,0x18,0xe6,0xc0]694; X86-NEXT: vaddpd %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf1,0xf5,0x48,0x58,0xc0]695; X86-NEXT: retl # encoding: [0xc3]696;697; X64-LABEL: test_int_x86_avx512_mask_cvt_qq2pd_512:698; X64: # %bb.0:699; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]700; X64-NEXT: vcvtqq2pd %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0xfe,0x49,0xe6,0xc8]701; X64-NEXT: vcvtqq2pd {rn-sae}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0xfe,0x18,0xe6,0xc0]702; X64-NEXT: vaddpd %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf1,0xf5,0x48,0x58,0xc0]703; X64-NEXT: retq # encoding: [0xc3]704 %res = call <8 x double> @llvm.x86.avx512.mask.cvtqq2pd.512(<8 x i64> %x0, <8 x double> %x1, i8 %x2, i32 4)705 %res1 = call <8 x double> @llvm.x86.avx512.mask.cvtqq2pd.512(<8 x i64> %x0, <8 x double> %x1, i8 -1, i32 8)706 %res2 = fadd <8 x double> %res, %res1707 ret <8 x double> %res2708}709 710declare <8 x float> @llvm.x86.avx512.mask.cvtqq2ps.512(<8 x i64>, <8 x float>, i8, i32)711 712define <8 x float> @test_int_x86_avx512_mask_cvt_qq2ps_512(<8 x i64> %x0, <8 x float> %x1, i8 %x2) {713; X86-LABEL: test_int_x86_avx512_mask_cvt_qq2ps_512:714; X86: # %bb.0:715; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]716; X86-NEXT: vcvtqq2ps %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf1,0xfc,0x49,0x5b,0xc8]717; X86-NEXT: vcvtqq2ps {rn-sae}, %zmm0, %ymm0 # encoding: [0x62,0xf1,0xfc,0x18,0x5b,0xc0]718; X86-NEXT: vaddps %ymm0, %ymm1, %ymm0 # encoding: [0xc5,0xf4,0x58,0xc0]719; X86-NEXT: retl # encoding: [0xc3]720;721; X64-LABEL: test_int_x86_avx512_mask_cvt_qq2ps_512:722; X64: # %bb.0:723; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]724; X64-NEXT: vcvtqq2ps %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf1,0xfc,0x49,0x5b,0xc8]725; X64-NEXT: vcvtqq2ps {rn-sae}, %zmm0, %ymm0 # encoding: [0x62,0xf1,0xfc,0x18,0x5b,0xc0]726; X64-NEXT: vaddps %ymm0, %ymm1, %ymm0 # encoding: [0xc5,0xf4,0x58,0xc0]727; X64-NEXT: retq # encoding: [0xc3]728 %res = call <8 x float> @llvm.x86.avx512.mask.cvtqq2ps.512(<8 x i64> %x0, <8 x float> %x1, i8 %x2, i32 4)729 %res1 = call <8 x float> @llvm.x86.avx512.mask.cvtqq2ps.512(<8 x i64> %x0, <8 x float> %x1, i8 -1, i32 8)730 %res2 = fadd <8 x float> %res, %res1731 ret <8 x float> %res2732}733 734declare <8 x double> @llvm.x86.avx512.mask.cvtuqq2pd.512(<8 x i64>, <8 x double>, i8, i32)735 736define <8 x double> @test_int_x86_avx512_mask_cvt_uqq2pd_512(<8 x i64> %x0, <8 x double> %x1, i8 %x2) {737; X86-LABEL: test_int_x86_avx512_mask_cvt_uqq2pd_512:738; X86: # %bb.0:739; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]740; X86-NEXT: vcvtuqq2pd %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0xfe,0x49,0x7a,0xc8]741; X86-NEXT: vcvtuqq2pd {rn-sae}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0xfe,0x18,0x7a,0xc0]742; X86-NEXT: vaddpd %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf1,0xf5,0x48,0x58,0xc0]743; X86-NEXT: retl # encoding: [0xc3]744;745; X64-LABEL: test_int_x86_avx512_mask_cvt_uqq2pd_512:746; X64: # %bb.0:747; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]748; X64-NEXT: vcvtuqq2pd %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf1,0xfe,0x49,0x7a,0xc8]749; X64-NEXT: vcvtuqq2pd {rn-sae}, %zmm0, %zmm0 # encoding: [0x62,0xf1,0xfe,0x18,0x7a,0xc0]750; X64-NEXT: vaddpd %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf1,0xf5,0x48,0x58,0xc0]751; X64-NEXT: retq # encoding: [0xc3]752 %res = call <8 x double> @llvm.x86.avx512.mask.cvtuqq2pd.512(<8 x i64> %x0, <8 x double> %x1, i8 %x2, i32 4)753 %res1 = call <8 x double> @llvm.x86.avx512.mask.cvtuqq2pd.512(<8 x i64> %x0, <8 x double> %x1, i8 -1, i32 8)754 %res2 = fadd <8 x double> %res, %res1755 ret <8 x double> %res2756}757 758declare <8 x float> @llvm.x86.avx512.mask.cvtuqq2ps.512(<8 x i64>, <8 x float>, i8, i32)759 760define <8 x float> @test_int_x86_avx512_mask_cvt_uqq2ps_512(<8 x i64> %x0, <8 x float> %x1, i8 %x2) {761; X86-LABEL: test_int_x86_avx512_mask_cvt_uqq2ps_512:762; X86: # %bb.0:763; X86-NEXT: kmovb {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf9,0x90,0x4c,0x24,0x04]764; X86-NEXT: vcvtuqq2ps %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x7a,0xc8]765; X86-NEXT: vcvtuqq2ps {rn-sae}, %zmm0, %ymm0 # encoding: [0x62,0xf1,0xff,0x18,0x7a,0xc0]766; X86-NEXT: vaddps %ymm0, %ymm1, %ymm0 # encoding: [0xc5,0xf4,0x58,0xc0]767; X86-NEXT: retl # encoding: [0xc3]768;769; X64-LABEL: test_int_x86_avx512_mask_cvt_uqq2ps_512:770; X64: # %bb.0:771; X64-NEXT: kmovw %edi, %k1 # encoding: [0xc5,0xf8,0x92,0xcf]772; X64-NEXT: vcvtuqq2ps %zmm0, %ymm1 {%k1} # encoding: [0x62,0xf1,0xff,0x49,0x7a,0xc8]773; X64-NEXT: vcvtuqq2ps {rn-sae}, %zmm0, %ymm0 # encoding: [0x62,0xf1,0xff,0x18,0x7a,0xc0]774; X64-NEXT: vaddps %ymm0, %ymm1, %ymm0 # encoding: [0xc5,0xf4,0x58,0xc0]775; X64-NEXT: retq # encoding: [0xc3]776 %res = call <8 x float> @llvm.x86.avx512.mask.cvtuqq2ps.512(<8 x i64> %x0, <8 x float> %x1, i8 %x2, i32 4)777 %res1 = call <8 x float> @llvm.x86.avx512.mask.cvtuqq2ps.512(<8 x i64> %x0, <8 x float> %x1, i8 -1, i32 8)778 %res2 = fadd <8 x float> %res, %res1779 ret <8 x float> %res2780}781