219 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -fast-isel -mtriple=i686-unknown-unknown -mattr=+avx512ifma,+avx512vl | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512ifma,+avx512vl | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512ifmavl-builtins.c6 7define <2 x i64> @test_mm_madd52hi_epu64(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z) {8; CHECK-LABEL: test_mm_madd52hi_epu64:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm011; CHECK-NEXT: ret{{[l|q]}}12entry:13 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z)14 ret <2 x i64> %015}16 17define <2 x i64> @test_mm_mask_madd52hi_epu64(<2 x i64> %__W, i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) {18; X86-LABEL: test_mm_mask_madd52hi_epu64:19; X86: # %bb.0: # %entry20; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax21; X86-NEXT: kmovw %eax, %k122; X86-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm0 {%k1}23; X86-NEXT: retl24;25; X64-LABEL: test_mm_mask_madd52hi_epu64:26; X64: # %bb.0: # %entry27; X64-NEXT: kmovw %edi, %k128; X64-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm0 {%k1}29; X64-NEXT: retq30entry:31 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %__W, <2 x i64> %__X, <2 x i64> %__Y)32 %1 = bitcast i8 %__M to <8 x i1>33 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>34 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__W35 ret <2 x i64> %236}37 38define <2 x i64> @test_mm_maskz_madd52hi_epu64(i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z) {39; X86-LABEL: test_mm_maskz_madd52hi_epu64:40; X86: # %bb.0: # %entry41; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax42; X86-NEXT: kmovw %eax, %k143; X86-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm0 {%k1} {z}44; X86-NEXT: retl45;46; X64-LABEL: test_mm_maskz_madd52hi_epu64:47; X64: # %bb.0: # %entry48; X64-NEXT: kmovw %edi, %k149; X64-NEXT: vpmadd52huq %xmm2, %xmm1, %xmm0 {%k1} {z}50; X64-NEXT: retq51entry:52 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z)53 %1 = bitcast i8 %__M to <8 x i1>54 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>55 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> zeroinitializer56 ret <2 x i64> %257}58 59define <4 x i64> @test_mm256_madd52hi_epu64(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z) {60; CHECK-LABEL: test_mm256_madd52hi_epu64:61; CHECK: # %bb.0: # %entry62; CHECK-NEXT: vpmadd52huq %ymm2, %ymm1, %ymm063; CHECK-NEXT: ret{{[l|q]}}64entry:65 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z)66 ret <4 x i64> %067}68 69define <4 x i64> @test_mm256_mask_madd52hi_epu64(<4 x i64> %__W, i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) {70; X86-LABEL: test_mm256_mask_madd52hi_epu64:71; X86: # %bb.0: # %entry72; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax73; X86-NEXT: kmovw %eax, %k174; X86-NEXT: vpmadd52huq %ymm2, %ymm1, %ymm0 {%k1}75; X86-NEXT: retl76;77; X64-LABEL: test_mm256_mask_madd52hi_epu64:78; X64: # %bb.0: # %entry79; X64-NEXT: kmovw %edi, %k180; X64-NEXT: vpmadd52huq %ymm2, %ymm1, %ymm0 {%k1}81; X64-NEXT: retq82entry:83 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %__W, <4 x i64> %__X, <4 x i64> %__Y)84 %1 = bitcast i8 %__M to <8 x i1>85 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>86 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__W87 ret <4 x i64> %288}89 90define <4 x i64> @test_mm256_maskz_madd52hi_epu64(i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z) {91; X86-LABEL: test_mm256_maskz_madd52hi_epu64:92; X86: # %bb.0: # %entry93; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax94; X86-NEXT: kmovw %eax, %k195; X86-NEXT: vpmadd52huq %ymm2, %ymm1, %ymm0 {%k1} {z}96; X86-NEXT: retl97;98; X64-LABEL: test_mm256_maskz_madd52hi_epu64:99; X64: # %bb.0: # %entry100; X64-NEXT: kmovw %edi, %k1101; X64-NEXT: vpmadd52huq %ymm2, %ymm1, %ymm0 {%k1} {z}102; X64-NEXT: retq103entry:104 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z)105 %1 = bitcast i8 %__M to <8 x i1>106 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>107 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> zeroinitializer108 ret <4 x i64> %2109}110 111define <2 x i64> @test_mm_madd52lo_epu64(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z) {112; CHECK-LABEL: test_mm_madd52lo_epu64:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0115; CHECK-NEXT: ret{{[l|q]}}116entry:117 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z)118 ret <2 x i64> %0119}120 121define <2 x i64> @test_mm_mask_madd52lo_epu64(<2 x i64> %__W, i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) {122; X86-LABEL: test_mm_mask_madd52lo_epu64:123; X86: # %bb.0: # %entry124; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax125; X86-NEXT: kmovw %eax, %k1126; X86-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0 {%k1}127; X86-NEXT: retl128;129; X64-LABEL: test_mm_mask_madd52lo_epu64:130; X64: # %bb.0: # %entry131; X64-NEXT: kmovw %edi, %k1132; X64-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0 {%k1}133; X64-NEXT: retq134entry:135 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %__W, <2 x i64> %__X, <2 x i64> %__Y)136 %1 = bitcast i8 %__M to <8 x i1>137 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>138 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__W139 ret <2 x i64> %2140}141 142define <2 x i64> @test_mm_maskz_madd52lo_epu64(i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z) {143; X86-LABEL: test_mm_maskz_madd52lo_epu64:144; X86: # %bb.0: # %entry145; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax146; X86-NEXT: kmovw %eax, %k1147; X86-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0 {%k1} {z}148; X86-NEXT: retl149;150; X64-LABEL: test_mm_maskz_madd52lo_epu64:151; X64: # %bb.0: # %entry152; X64-NEXT: kmovw %edi, %k1153; X64-NEXT: vpmadd52luq %xmm2, %xmm1, %xmm0 {%k1} {z}154; X64-NEXT: retq155entry:156 %0 = tail call <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64> %__X, <2 x i64> %__Y, <2 x i64> %__Z)157 %1 = bitcast i8 %__M to <8 x i1>158 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>159 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> zeroinitializer160 ret <2 x i64> %2161}162 163define <4 x i64> @test_mm256_madd52lo_epu64(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z) {164; CHECK-LABEL: test_mm256_madd52lo_epu64:165; CHECK: # %bb.0: # %entry166; CHECK-NEXT: vpmadd52luq %ymm2, %ymm1, %ymm0167; CHECK-NEXT: ret{{[l|q]}}168entry:169 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z)170 ret <4 x i64> %0171}172 173define <4 x i64> @test_mm256_mask_madd52lo_epu64(<4 x i64> %__W, i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) {174; X86-LABEL: test_mm256_mask_madd52lo_epu64:175; X86: # %bb.0: # %entry176; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax177; X86-NEXT: kmovw %eax, %k1178; X86-NEXT: vpmadd52luq %ymm2, %ymm1, %ymm0 {%k1}179; X86-NEXT: retl180;181; X64-LABEL: test_mm256_mask_madd52lo_epu64:182; X64: # %bb.0: # %entry183; X64-NEXT: kmovw %edi, %k1184; X64-NEXT: vpmadd52luq %ymm2, %ymm1, %ymm0 {%k1}185; X64-NEXT: retq186entry:187 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %__W, <4 x i64> %__X, <4 x i64> %__Y)188 %1 = bitcast i8 %__M to <8 x i1>189 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>190 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__W191 ret <4 x i64> %2192}193 194define <4 x i64> @test_mm256_maskz_madd52lo_epu64(i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z) {195; X86-LABEL: test_mm256_maskz_madd52lo_epu64:196; X86: # %bb.0: # %entry197; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax198; X86-NEXT: kmovw %eax, %k1199; X86-NEXT: vpmadd52luq %ymm2, %ymm1, %ymm0 {%k1} {z}200; X86-NEXT: retl201;202; X64-LABEL: test_mm256_maskz_madd52lo_epu64:203; X64: # %bb.0: # %entry204; X64-NEXT: kmovw %edi, %k1205; X64-NEXT: vpmadd52luq %ymm2, %ymm1, %ymm0 {%k1} {z}206; X64-NEXT: retq207entry:208 %0 = tail call <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64> %__X, <4 x i64> %__Y, <4 x i64> %__Z)209 %1 = bitcast i8 %__M to <8 x i1>210 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>211 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> zeroinitializer212 ret <4 x i64> %2213}214 215declare <2 x i64> @llvm.x86.avx512.vpmadd52h.uq.128(<2 x i64>, <2 x i64>, <2 x i64>)216declare <4 x i64> @llvm.x86.avx512.vpmadd52h.uq.256(<4 x i64>, <4 x i64>, <4 x i64>)217declare <2 x i64> @llvm.x86.avx512.vpmadd52l.uq.128(<2 x i64>, <2 x i64>, <2 x i64>)218declare <4 x i64> @llvm.x86.avx512.vpmadd52l.uq.256(<4 x i64>, <4 x i64>, <4 x i64>)219