436 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx10.2 --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx10.2 --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X644 5; VNNI FP166 7define <16 x float> @test_mm512_dpph_ps(<16 x float> %__W, <32 x half> %__A, <32 x half> %__B) {8; CHECK-LABEL: test_mm512_dpph_ps:9; CHECK: # %bb.0:10; CHECK-NEXT: vdpphps %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x74,0x48,0x52,0xc2]11; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]12 %res = tail call <16 x float> @llvm.x86.avx10.vdpphps.512(<16 x float> %__W, <32 x half> %__A, <32 x half> %__B)13 ret <16 x float> %res14}15 16define <16 x float> @test_mm512_mask_dpph_ps(<16 x float> %__W, i16 zeroext %__U, <32 x half> %__A, <32 x half> %__B) {17; X86-LABEL: test_mm512_mask_dpph_ps:18; X86: # %bb.0:19; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]20; X86-NEXT: vdpphps %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0x52,0xc2]21; X86-NEXT: retl # encoding: [0xc3]22;23; X64-LABEL: test_mm512_mask_dpph_ps:24; X64: # %bb.0:25; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]26; X64-NEXT: vdpphps %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0x52,0xc2]27; X64-NEXT: retq # encoding: [0xc3]28 %dph = tail call <16 x float> @llvm.x86.avx10.vdpphps.512(<16 x float> %__W, <32 x half> %__A, <32 x half> %__B)29 %bst = bitcast i16 %__U to <16 x i1>30 %res = select <16 x i1> %bst, <16 x float> %dph, <16 x float> %__W31 ret <16 x float> %res32}33 34define <16 x float> @test_mm512_maskz_dpph_ps(i16 zeroext %__U, <16 x float> %__W, <32 x half> %__A, <32 x half> %__B) {35; X86-LABEL: test_mm512_maskz_dpph_ps:36; X86: # %bb.0:37; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]38; X86-NEXT: vdpphps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0x52,0xc2]39; X86-NEXT: retl # encoding: [0xc3]40;41; X64-LABEL: test_mm512_maskz_dpph_ps:42; X64: # %bb.0:43; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]44; X64-NEXT: vdpphps %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0x52,0xc2]45; X64-NEXT: retq # encoding: [0xc3]46 %dph = tail call <16 x float> @llvm.x86.avx10.vdpphps.512(<16 x float> %__W, <32 x half> %__A, <32 x half> %__B)47 %bst = bitcast i16 %__U to <16 x i1>48 %res = select <16 x i1> %bst, <16 x float> %dph, <16 x float> zeroinitializer49 ret <16 x float> %res50}51 52declare <16 x float> @llvm.x86.avx10.vdpphps.512(<16 x float>, <32 x half>, <32 x half>)53 54; VNNI INT855 56define <16 x i32> @test_mm512_dpbssd_epi32(<16 x i32> %__W, <64 x i8> %__A, ptr %pB) {57; X86-LABEL: test_mm512_dpbssd_epi32:58; X86: # %bb.0:59; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]60; X86-NEXT: vpdpbssd (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x77,0x48,0x50,0x00]61; X86-NEXT: retl # encoding: [0xc3]62;63; X64-LABEL: test_mm512_dpbssd_epi32:64; X64: # %bb.0:65; X64-NEXT: vpdpbssd (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x77,0x48,0x50,0x07]66; X64-NEXT: retq # encoding: [0xc3]67 %__B = load <64 x i8>, ptr %pB68 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpbssd.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)69 ret <16 x i32> %res70}71 72define <16 x i32> @test_mm512_mask_dpbssds_epi32(<16 x i32> %__W, i16 zeroext %__U, <64 x i8> %__A, <64 x i8> %__B) {73; X86-LABEL: test_mm512_mask_dpbssds_epi32:74; X86: # %bb.0:75; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]76; X86-NEXT: vpdpbssds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x77,0x49,0x51,0xc2]77; X86-NEXT: retl # encoding: [0xc3]78;79; X64-LABEL: test_mm512_mask_dpbssds_epi32:80; X64: # %bb.0:81; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]82; X64-NEXT: vpdpbssds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x77,0x49,0x51,0xc2]83; X64-NEXT: retq # encoding: [0xc3]84 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbssds.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)85 %bst = bitcast i16 %__U to <16 x i1>86 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W87 ret <16 x i32> %res88}89 90define <16 x i32> @test_mm512_maskz_dpbssd_epi32(i16 zeroext %__U, <16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B) {91; X86-LABEL: test_mm512_maskz_dpbssd_epi32:92; X86: # %bb.0:93; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]94; X86-NEXT: vpdpbssd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x77,0xc9,0x50,0xc2]95; X86-NEXT: retl # encoding: [0xc3]96;97; X64-LABEL: test_mm512_maskz_dpbssd_epi32:98; X64: # %bb.0:99; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]100; X64-NEXT: vpdpbssd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x77,0xc9,0x50,0xc2]101; X64-NEXT: retq # encoding: [0xc3]102 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbssd.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)103 %bst = bitcast i16 %__U to <16 x i1>104 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer105 ret <16 x i32> %res106}107 108declare <16 x i32> @llvm.x86.avx10.vpdpbssd.512(<16 x i32>, <64 x i8>, <64 x i8>)109declare <16 x i32> @llvm.x86.avx10.vpdpbssds.512(<16 x i32>, <64 x i8>, <64 x i8>)110 111define <16 x i32> @test_mm512_dpbsud_epi32(<16 x i32> %__W, <64 x i8> %__A, ptr %pB) {112; X86-LABEL: test_mm512_dpbsud_epi32:113; X86: # %bb.0:114; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]115; X86-NEXT: vpdpbsud (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x76,0x48,0x50,0x00]116; X86-NEXT: retl # encoding: [0xc3]117;118; X64-LABEL: test_mm512_dpbsud_epi32:119; X64: # %bb.0:120; X64-NEXT: vpdpbsud (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x76,0x48,0x50,0x07]121; X64-NEXT: retq # encoding: [0xc3]122 %__B = load <64 x i8>, ptr %pB123 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpbsud.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)124 ret <16 x i32> %res125}126 127define <16 x i32> @test_mm512_mask_dpbsuds_epi32(<16 x i32> %__W, i16 zeroext %__U, <64 x i8> %__A, <64 x i8> %__B) {128; X86-LABEL: test_mm512_mask_dpbsuds_epi32:129; X86: # %bb.0:130; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]131; X86-NEXT: vpdpbsuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0x51,0xc2]132; X86-NEXT: retl # encoding: [0xc3]133;134; X64-LABEL: test_mm512_mask_dpbsuds_epi32:135; X64: # %bb.0:136; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]137; X64-NEXT: vpdpbsuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0x51,0xc2]138; X64-NEXT: retq # encoding: [0xc3]139 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbsuds.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)140 %bst = bitcast i16 %__U to <16 x i1>141 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W142 ret <16 x i32> %res143}144 145define <16 x i32> @test_mm512_maskz_dpbsud_epi32(i16 zeroext %__U, <16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B) {146; X86-LABEL: test_mm512_maskz_dpbsud_epi32:147; X86: # %bb.0:148; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]149; X86-NEXT: vpdpbsud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0x50,0xc2]150; X86-NEXT: retl # encoding: [0xc3]151;152; X64-LABEL: test_mm512_maskz_dpbsud_epi32:153; X64: # %bb.0:154; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]155; X64-NEXT: vpdpbsud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0x50,0xc2]156; X64-NEXT: retq # encoding: [0xc3]157 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbsud.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)158 %bst = bitcast i16 %__U to <16 x i1>159 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer160 ret <16 x i32> %res161}162 163declare <16 x i32> @llvm.x86.avx10.vpdpbsud.512(<16 x i32>, <64 x i8>, <64 x i8>)164declare <16 x i32> @llvm.x86.avx10.vpdpbsuds.512(<16 x i32>, <64 x i8>, <64 x i8>)165 166define <16 x i32> @test_mm512_dpbuud_epi32(<16 x i32> %__W, <64 x i8> %__A, ptr %pB) {167; X86-LABEL: test_mm512_dpbuud_epi32:168; X86: # %bb.0:169; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]170; X86-NEXT: vpdpbuud (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x74,0x48,0x50,0x00]171; X86-NEXT: retl # encoding: [0xc3]172;173; X64-LABEL: test_mm512_dpbuud_epi32:174; X64: # %bb.0:175; X64-NEXT: vpdpbuud (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x74,0x48,0x50,0x07]176; X64-NEXT: retq # encoding: [0xc3]177 %__B = load <64 x i8>, ptr %pB178 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpbuud.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)179 ret <16 x i32> %res180}181 182define <16 x i32> @test_mm512_mask_dpbuuds_epi32(<16 x i32> %__W, i16 zeroext %__U, <64 x i8> %__A, <64 x i8> %__B) {183; X86-LABEL: test_mm512_mask_dpbuuds_epi32:184; X86: # %bb.0:185; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]186; X86-NEXT: vpdpbuuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0x51,0xc2]187; X86-NEXT: retl # encoding: [0xc3]188;189; X64-LABEL: test_mm512_mask_dpbuuds_epi32:190; X64: # %bb.0:191; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]192; X64-NEXT: vpdpbuuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0x51,0xc2]193; X64-NEXT: retq # encoding: [0xc3]194 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbuuds.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)195 %bst = bitcast i16 %__U to <16 x i1>196 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W197 ret <16 x i32> %res198}199 200define <16 x i32> @test_mm512_maskz_dpbuud_epi32(i16 zeroext %__U, <16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B) {201; X86-LABEL: test_mm512_maskz_dpbuud_epi32:202; X86: # %bb.0:203; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]204; X86-NEXT: vpdpbuud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0x50,0xc2]205; X86-NEXT: retl # encoding: [0xc3]206;207; X64-LABEL: test_mm512_maskz_dpbuud_epi32:208; X64: # %bb.0:209; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]210; X64-NEXT: vpdpbuud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0x50,0xc2]211; X64-NEXT: retq # encoding: [0xc3]212 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpbuud.512(<16 x i32> %__W, <64 x i8> %__A, <64 x i8> %__B)213 %bst = bitcast i16 %__U to <16 x i1>214 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer215 ret <16 x i32> %res216}217 218declare <16 x i32> @llvm.x86.avx10.vpdpbuud.512(<16 x i32>, <64 x i8>, <64 x i8>)219declare <16 x i32> @llvm.x86.avx10.vpdpbuuds.512(<16 x i32>, <64 x i8>, <64 x i8>)220 221; VNNI INT16222 223define <16 x i32> @test_mm512_dpwsud_epi32(<16 x i32> %__W, <16 x i32> %__A, ptr %pB) {224; X86-LABEL: test_mm512_dpwsud_epi32:225; X86: # %bb.0:226; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]227; X86-NEXT: vpdpwsud (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x76,0x48,0xd2,0x00]228; X86-NEXT: retl # encoding: [0xc3]229;230; X64-LABEL: test_mm512_dpwsud_epi32:231; X64: # %bb.0:232; X64-NEXT: vpdpwsud (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x76,0x48,0xd2,0x07]233; X64-NEXT: retq # encoding: [0xc3]234 %__B = load <16 x i32>, ptr %pB235 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)236 ret <16 x i32> %res237}238 239define <16 x i32> @test_mm512_mask_dpwsuds_epi32(<16 x i32> %__W, i16 zeroext %__U, <16 x i32> %__A, <16 x i32> %__B) {240; X86-LABEL: test_mm512_mask_dpwsuds_epi32:241; X86: # %bb.0:242; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]243; X86-NEXT: vpdpwsuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0xd3,0xc2]244; X86-NEXT: retl # encoding: [0xc3]245;246; X64-LABEL: test_mm512_mask_dpwsuds_epi32:247; X64: # %bb.0:248; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]249; X64-NEXT: vpdpwsuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x76,0x49,0xd3,0xc2]250; X64-NEXT: retq # encoding: [0xc3]251 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwsuds.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)252 %bst = bitcast i16 %__U to <16 x i1>253 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W254 ret <16 x i32> %res255}256 257define <16 x i32> @test_mm512_maskz_dpwsud_epi32(i16 zeroext %__U, <16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B) {258; X86-LABEL: test_mm512_maskz_dpwsud_epi32:259; X86: # %bb.0:260; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]261; X86-NEXT: vpdpwsud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0xd2,0xc2]262; X86-NEXT: retl # encoding: [0xc3]263;264; X64-LABEL: test_mm512_maskz_dpwsud_epi32:265; X64: # %bb.0:266; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]267; X64-NEXT: vpdpwsud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x76,0xc9,0xd2,0xc2]268; X64-NEXT: retq # encoding: [0xc3]269 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)270 %bst = bitcast i16 %__U to <16 x i1>271 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer272 ret <16 x i32> %res273}274 275declare <16 x i32> @llvm.x86.avx10.vpdpwsud.512(<16 x i32>, <16 x i32>, <16 x i32>)276declare <16 x i32> @llvm.x86.avx10.vpdpwsuds.512(<16 x i32>, <16 x i32>, <16 x i32>)277 278define <16 x i32> @test_mm512_dpwusd_epi32(<16 x i32> %__W, <16 x i32> %__A, ptr %pB) {279; X86-LABEL: test_mm512_dpwusd_epi32:280; X86: # %bb.0:281; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]282; X86-NEXT: vpdpwusd (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xd2,0x00]283; X86-NEXT: retl # encoding: [0xc3]284;285; X64-LABEL: test_mm512_dpwusd_epi32:286; X64: # %bb.0:287; X64-NEXT: vpdpwusd (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0xd2,0x07]288; X64-NEXT: retq # encoding: [0xc3]289 %__B = load <16 x i32>, ptr %pB290 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)291 ret <16 x i32> %res292}293 294define <16 x i32> @test_mm512_mask_dpwusds_epi32(<16 x i32> %__W, i16 zeroext %__U, <16 x i32> %__A, <16 x i32> %__B) {295; X86-LABEL: test_mm512_mask_dpwusds_epi32:296; X86: # %bb.0:297; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]298; X86-NEXT: vpdpwusds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x75,0x49,0xd3,0xc2]299; X86-NEXT: retl # encoding: [0xc3]300;301; X64-LABEL: test_mm512_mask_dpwusds_epi32:302; X64: # %bb.0:303; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]304; X64-NEXT: vpdpwusds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x75,0x49,0xd3,0xc2]305; X64-NEXT: retq # encoding: [0xc3]306 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwusds.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)307 %bst = bitcast i16 %__U to <16 x i1>308 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W309 ret <16 x i32> %res310}311 312define <16 x i32> @test_mm512_maskz_dpwusd_epi32(i16 zeroext %__U, <16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B) {313; X86-LABEL: test_mm512_maskz_dpwusd_epi32:314; X86: # %bb.0:315; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]316; X86-NEXT: vpdpwusd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xd2,0xc2]317; X86-NEXT: retl # encoding: [0xc3]318;319; X64-LABEL: test_mm512_maskz_dpwusd_epi32:320; X64: # %bb.0:321; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]322; X64-NEXT: vpdpwusd %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0xd2,0xc2]323; X64-NEXT: retq # encoding: [0xc3]324 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)325 %bst = bitcast i16 %__U to <16 x i1>326 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer327 ret <16 x i32> %res328}329 330declare <16 x i32> @llvm.x86.avx10.vpdpwusd.512(<16 x i32>, <16 x i32>, <16 x i32>)331declare <16 x i32> @llvm.x86.avx10.vpdpwusds.512(<16 x i32>, <16 x i32>, <16 x i32>)332 333define <16 x i32> @test_mm512_dpwuud_epi32(<16 x i32> %__W, <16 x i32> %__A, ptr %pB) {334; X86-LABEL: test_mm512_dpwuud_epi32:335; X86: # %bb.0:336; X86-NEXT: movl {{[0-9]+}}(%esp), %eax # encoding: [0x8b,0x44,0x24,0x04]337; X86-NEXT: vpdpwuud (%eax), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x74,0x48,0xd2,0x00]338; X86-NEXT: retl # encoding: [0xc3]339;340; X64-LABEL: test_mm512_dpwuud_epi32:341; X64: # %bb.0:342; X64-NEXT: vpdpwuud (%rdi), %zmm1, %zmm0 # encoding: [0x62,0xf2,0x74,0x48,0xd2,0x07]343; X64-NEXT: retq # encoding: [0xc3]344 %__B = load <16 x i32>, ptr %pB345 %res = tail call <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)346 ret <16 x i32> %res347}348 349define <16 x i32> @test_mm512_mask_dpwuuds_epi32(<16 x i32> %__W, i16 zeroext %__U, <16 x i32> %__A, <16 x i32> %__B) {350; X86-LABEL: test_mm512_mask_dpwuuds_epi32:351; X86: # %bb.0:352; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]353; X86-NEXT: vpdpwuuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0xd3,0xc2]354; X86-NEXT: retl # encoding: [0xc3]355;356; X64-LABEL: test_mm512_mask_dpwuuds_epi32:357; X64: # %bb.0:358; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]359; X64-NEXT: vpdpwuuds %zmm2, %zmm1, %zmm0 {%k1} # encoding: [0x62,0xf2,0x74,0x49,0xd3,0xc2]360; X64-NEXT: retq # encoding: [0xc3]361 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwuuds.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)362 %bst = bitcast i16 %__U to <16 x i1>363 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> %__W364 ret <16 x i32> %res365}366 367define <16 x i32> @test_mm512_maskz_dpwuud_epi32(i16 zeroext %__U, <16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B) {368; X86-LABEL: test_mm512_maskz_dpwuud_epi32:369; X86: # %bb.0:370; X86-NEXT: kmovw {{[0-9]+}}(%esp), %k1 # encoding: [0xc5,0xf8,0x90,0x4c,0x24,0x04]371; X86-NEXT: vpdpwuud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0xd2,0xc2]372; X86-NEXT: retl # encoding: [0xc3]373;374; X64-LABEL: test_mm512_maskz_dpwuud_epi32:375; X64: # %bb.0:376; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]377; X64-NEXT: vpdpwuud %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x74,0xc9,0xd2,0xc2]378; X64-NEXT: retq # encoding: [0xc3]379 %dpi = tail call <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32> %__W, <16 x i32> %__A, <16 x i32> %__B)380 %bst = bitcast i16 %__U to <16 x i1>381 %res = select <16 x i1> %bst, <16 x i32> %dpi, <16 x i32> zeroinitializer382 ret <16 x i32> %res383}384 385declare <16 x i32> @llvm.x86.avx10.vpdpwuud.512(<16 x i32>, <16 x i32>, <16 x i32>)386declare <16 x i32> @llvm.x86.avx10.vpdpwuuds.512(<16 x i32>, <16 x i32>, <16 x i32>)387 388; VMPSADBW389 390define { <32 x i16>, <32 x i16>, <32 x i16> } @test_mm512_mask_mpsadbw(<64 x i8> %x0, <64 x i8> %x1, <32 x i16> %x3, i32 %x4) {391; X86-LABEL: test_mm512_mask_mpsadbw:392; X86: # %bb.0:393; X86-NEXT: vmovdqa64 %zmm2, %zmm4 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xe2]394; X86-NEXT: kmovd {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf9,0x90,0x4c,0x24,0x04]395; X86-NEXT: vmpsadbw $2, %zmm1, %zmm0, %zmm3 # encoding: [0x62,0xf3,0x7e,0x48,0x42,0xd9,0x02]396; X86-NEXT: vmpsadbw $3, %zmm1, %zmm0, %zmm4 {%k1} # encoding: [0x62,0xf3,0x7e,0x49,0x42,0xe1,0x03]397; X86-NEXT: vmpsadbw $4, %zmm1, %zmm0, %zmm2 {%k1} {z} # encoding: [0x62,0xf3,0x7e,0xc9,0x42,0xd1,0x04]398; X86-NEXT: vmovdqa64 %zmm3, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc3]399; X86-NEXT: vmovdqa64 %zmm4, %zmm1 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xcc]400; X86-NEXT: retl # encoding: [0xc3]401;402; X64-LABEL: test_mm512_mask_mpsadbw:403; X64: # %bb.0:404; X64-NEXT: vmovdqa64 %zmm2, %zmm4 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xe2]405; X64-NEXT: kmovd %edi, %k1 # encoding: [0xc5,0xfb,0x92,0xcf]406; X64-NEXT: vmpsadbw $2, %zmm1, %zmm0, %zmm3 # encoding: [0x62,0xf3,0x7e,0x48,0x42,0xd9,0x02]407; X64-NEXT: vmpsadbw $3, %zmm1, %zmm0, %zmm4 {%k1} # encoding: [0x62,0xf3,0x7e,0x49,0x42,0xe1,0x03]408; X64-NEXT: vmpsadbw $4, %zmm1, %zmm0, %zmm2 {%k1} {z} # encoding: [0x62,0xf3,0x7e,0xc9,0x42,0xd1,0x04]409; X64-NEXT: vmovdqa64 %zmm3, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc3]410; X64-NEXT: vmovdqa64 %zmm4, %zmm1 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xcc]411; X64-NEXT: retq # encoding: [0xc3]412 %msk = bitcast i32 %x4 to <32 x i1>413 %rs1 = call <32 x i16> @llvm.x86.avx10.vmpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i8 2)414 %ad2 = call <32 x i16> @llvm.x86.avx10.vmpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i8 3)415 %rs2 = select <32 x i1> %msk, <32 x i16> %ad2, <32 x i16> %x3416 %ad3 = call <32 x i16> @llvm.x86.avx10.vmpsadbw.512(<64 x i8> %x0, <64 x i8> %x1, i8 4)417 %rs3 = select <32 x i1> %msk, <32 x i16> %ad3, <32 x i16> zeroinitializer418 %rs4 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } undef, <32 x i16> %rs1, 0419 %rs5 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } %rs4, <32 x i16> %rs2, 1420 %rs6 = insertvalue { <32 x i16>, <32 x i16>, <32 x i16> } %rs5, <32 x i16> %rs3, 2421 ret { <32 x i16>, <32 x i16>, <32 x i16> } %rs6422}423 424declare <32 x i16> @llvm.x86.avx10.vmpsadbw.512(<64 x i8>, <64 x i8>, i8)425 426; Regression test427 428define <8 x float> @avx_dp_ps(<8 x float> %a, <8 x float> %b) {429; CHECK-LABEL: avx_dp_ps:430; CHECK: # %bb.0:431; CHECK-NEXT: vdpps $255, %ymm1, %ymm0, %ymm0 # encoding: [0xc4,0xe3,0x7d,0x40,0xc1,0xff]432; CHECK-NEXT: ret{{[l|q]}} # encoding: [0xc3]433 %r = tail call <8 x float> @llvm.x86.avx.dp.ps.256(<8 x float> %a, <8 x float> %b, i8 -1)434 ret <8 x float> %r435}436