brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 896a30a Raw
297 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vl | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vbmi,+avx512vl | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512vlvbmi-builtins.c6 7define <2 x i64> @test_mm_mask2_permutex2var_epi8(<2 x i64> %__A, <2 x i64> %__I, i16 zeroext %__U, <2 x i64> %__B) {8; X86-LABEL: test_mm_mask2_permutex2var_epi8:9; X86:       # %bb.0: # %entry10; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k111; X86-NEXT:    vpermi2b %xmm2, %xmm0, %xmm1 {%k1}12; X86-NEXT:    vmovdqa %xmm1, %xmm013; X86-NEXT:    retl14;15; X64-LABEL: test_mm_mask2_permutex2var_epi8:16; X64:       # %bb.0: # %entry17; X64-NEXT:    kmovd %edi, %k118; X64-NEXT:    vpermi2b %xmm2, %xmm0, %xmm1 {%k1}19; X64-NEXT:    vmovdqa %xmm1, %xmm020; X64-NEXT:    retq21entry:22  %0 = bitcast <2 x i64> %__A to <16 x i8>23  %1 = bitcast <2 x i64> %__I to <16 x i8>24  %2 = bitcast <2 x i64> %__B to <16 x i8>25  %3 = tail call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)26  %4 = bitcast i16 %__U to <16 x i1>27  %5 = select <16 x i1> %4, <16 x i8> %3, <16 x i8> %128  %6 = bitcast <16 x i8> %5 to <2 x i64>29  ret <2 x i64> %630}31 32define <4 x i64> @test_mm256_mask2_permutex2var_epi8(<4 x i64> %__A, <4 x i64> %__I, i32 %__U, <4 x i64> %__B) {33; X86-LABEL: test_mm256_mask2_permutex2var_epi8:34; X86:       # %bb.0: # %entry35; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k136; X86-NEXT:    vpermi2b %ymm2, %ymm0, %ymm1 {%k1}37; X86-NEXT:    vmovdqa %ymm1, %ymm038; X86-NEXT:    retl39;40; X64-LABEL: test_mm256_mask2_permutex2var_epi8:41; X64:       # %bb.0: # %entry42; X64-NEXT:    kmovd %edi, %k143; X64-NEXT:    vpermi2b %ymm2, %ymm0, %ymm1 {%k1}44; X64-NEXT:    vmovdqa %ymm1, %ymm045; X64-NEXT:    retq46entry:47  %0 = bitcast <4 x i64> %__A to <32 x i8>48  %1 = bitcast <4 x i64> %__I to <32 x i8>49  %2 = bitcast <4 x i64> %__B to <32 x i8>50  %3 = tail call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %0, <32 x i8> %1, <32 x i8> %2)51  %4 = bitcast i32 %__U to <32 x i1>52  %5 = select <32 x i1> %4, <32 x i8> %3, <32 x i8> %153  %6 = bitcast <32 x i8> %5 to <4 x i64>54  ret <4 x i64> %655}56 57define <2 x i64> @test_mm_permutex2var_epi8(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {58; CHECK-LABEL: test_mm_permutex2var_epi8:59; CHECK:       # %bb.0: # %entry60; CHECK-NEXT:    vpermt2b %xmm2, %xmm1, %xmm061; CHECK-NEXT:    ret{{[l|q]}}62entry:63  %0 = bitcast <2 x i64> %__A to <16 x i8>64  %1 = bitcast <2 x i64> %__I to <16 x i8>65  %2 = bitcast <2 x i64> %__B to <16 x i8>66  %3 = tail call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)67  %4 = bitcast <16 x i8> %3 to <2 x i64>68  ret <2 x i64> %469}70 71define <2 x i64> @test_mm_mask_permutex2var_epi8(<2 x i64> %__A, i16 zeroext %__U, <2 x i64> %__I, <2 x i64> %__B) {72; X86-LABEL: test_mm_mask_permutex2var_epi8:73; X86:       # %bb.0: # %entry74; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k175; X86-NEXT:    vpermt2b %xmm2, %xmm1, %xmm0 {%k1}76; X86-NEXT:    retl77;78; X64-LABEL: test_mm_mask_permutex2var_epi8:79; X64:       # %bb.0: # %entry80; X64-NEXT:    kmovd %edi, %k181; X64-NEXT:    vpermt2b %xmm2, %xmm1, %xmm0 {%k1}82; X64-NEXT:    retq83entry:84  %0 = bitcast <2 x i64> %__A to <16 x i8>85  %1 = bitcast <2 x i64> %__I to <16 x i8>86  %2 = bitcast <2 x i64> %__B to <16 x i8>87  %3 = tail call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)88  %4 = bitcast i16 %__U to <16 x i1>89  %5 = select <16 x i1> %4, <16 x i8> %3, <16 x i8> %090  %6 = bitcast <16 x i8> %5 to <2 x i64>91  ret <2 x i64> %692}93 94define <2 x i64> @test_mm_maskz_permutex2var_epi8(i16 zeroext %__U, <2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {95; X86-LABEL: test_mm_maskz_permutex2var_epi8:96; X86:       # %bb.0: # %entry97; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k198; X86-NEXT:    vpermt2b %xmm2, %xmm1, %xmm0 {%k1} {z}99; X86-NEXT:    retl100;101; X64-LABEL: test_mm_maskz_permutex2var_epi8:102; X64:       # %bb.0: # %entry103; X64-NEXT:    kmovd %edi, %k1104; X64-NEXT:    vpermt2b %xmm2, %xmm1, %xmm0 {%k1} {z}105; X64-NEXT:    retq106entry:107  %0 = bitcast <2 x i64> %__A to <16 x i8>108  %1 = bitcast <2 x i64> %__I to <16 x i8>109  %2 = bitcast <2 x i64> %__B to <16 x i8>110  %3 = tail call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2)111  %4 = bitcast i16 %__U to <16 x i1>112  %5 = select <16 x i1> %4, <16 x i8> %3, <16 x i8> zeroinitializer113  %6 = bitcast <16 x i8> %5 to <2 x i64>114  ret <2 x i64> %6115}116 117define <4 x i64> @test_mm256_permutex2var_epi8(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {118; CHECK-LABEL: test_mm256_permutex2var_epi8:119; CHECK:       # %bb.0: # %entry120; CHECK-NEXT:    vpermt2b %ymm2, %ymm1, %ymm0121; CHECK-NEXT:    ret{{[l|q]}}122entry:123  %0 = bitcast <4 x i64> %__A to <32 x i8>124  %1 = bitcast <4 x i64> %__I to <32 x i8>125  %2 = bitcast <4 x i64> %__B to <32 x i8>126  %3 = tail call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %0, <32 x i8> %1, <32 x i8> %2)127  %4 = bitcast <32 x i8> %3 to <4 x i64>128  ret <4 x i64> %4129}130 131define <4 x i64> @test_mm256_mask_permutex2var_epi8(<4 x i64> %__A, i32 %__U, <4 x i64> %__I, <4 x i64> %__B) {132; X86-LABEL: test_mm256_mask_permutex2var_epi8:133; X86:       # %bb.0: # %entry134; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1135; X86-NEXT:    vpermt2b %ymm2, %ymm1, %ymm0 {%k1}136; X86-NEXT:    retl137;138; X64-LABEL: test_mm256_mask_permutex2var_epi8:139; X64:       # %bb.0: # %entry140; X64-NEXT:    kmovd %edi, %k1141; X64-NEXT:    vpermt2b %ymm2, %ymm1, %ymm0 {%k1}142; X64-NEXT:    retq143entry:144  %0 = bitcast <4 x i64> %__A to <32 x i8>145  %1 = bitcast <4 x i64> %__I to <32 x i8>146  %2 = bitcast <4 x i64> %__B to <32 x i8>147  %3 = tail call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %0, <32 x i8> %1, <32 x i8> %2)148  %4 = bitcast i32 %__U to <32 x i1>149  %5 = select <32 x i1> %4, <32 x i8> %3, <32 x i8> %0150  %6 = bitcast <32 x i8> %5 to <4 x i64>151  ret <4 x i64> %6152}153 154define <4 x i64> @test_mm256_maskz_permutex2var_epi8(i32 %__U, <4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {155; X86-LABEL: test_mm256_maskz_permutex2var_epi8:156; X86:       # %bb.0: # %entry157; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1158; X86-NEXT:    vpermt2b %ymm2, %ymm1, %ymm0 {%k1} {z}159; X86-NEXT:    retl160;161; X64-LABEL: test_mm256_maskz_permutex2var_epi8:162; X64:       # %bb.0: # %entry163; X64-NEXT:    kmovd %edi, %k1164; X64-NEXT:    vpermt2b %ymm2, %ymm1, %ymm0 {%k1} {z}165; X64-NEXT:    retq166entry:167  %0 = bitcast <4 x i64> %__A to <32 x i8>168  %1 = bitcast <4 x i64> %__I to <32 x i8>169  %2 = bitcast <4 x i64> %__B to <32 x i8>170  %3 = tail call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %0, <32 x i8> %1, <32 x i8> %2)171  %4 = bitcast i32 %__U to <32 x i1>172  %5 = select <32 x i1> %4, <32 x i8> %3, <32 x i8> zeroinitializer173  %6 = bitcast <32 x i8> %5 to <4 x i64>174  ret <4 x i64> %6175}176 177define <2 x i64> @test_mm_mask_multishift_epi64_epi8(<2 x i64> %__W, i16 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) {178; X86-LABEL: test_mm_mask_multishift_epi64_epi8:179; X86:       # %bb.0: # %entry180; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1181; X86-NEXT:    vpmultishiftqb %xmm2, %xmm1, %xmm0 {%k1}182; X86-NEXT:    retl183;184; X64-LABEL: test_mm_mask_multishift_epi64_epi8:185; X64:       # %bb.0: # %entry186; X64-NEXT:    kmovd %edi, %k1187; X64-NEXT:    vpmultishiftqb %xmm2, %xmm1, %xmm0 {%k1}188; X64-NEXT:    retq189entry:190  %0 = bitcast <2 x i64> %__X to <16 x i8>191  %1 = bitcast <2 x i64> %__Y to <16 x i8>192  %2 = tail call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %0, <16 x i8> %1)193  %3 = bitcast <2 x i64> %__W to <16 x i8>194  %4 = bitcast i16 %__M to <16 x i1>195  %5 = select <16 x i1> %4, <16 x i8> %2, <16 x i8> %3196  %6 = bitcast <16 x i8> %5 to <2 x i64>197  ret <2 x i64> %6198}199 200define <2 x i64> @test_mm_maskz_multishift_epi64_epi8(i16 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) {201; X86-LABEL: test_mm_maskz_multishift_epi64_epi8:202; X86:       # %bb.0: # %entry203; X86-NEXT:    kmovw {{[0-9]+}}(%esp), %k1204; X86-NEXT:    vpmultishiftqb %xmm1, %xmm0, %xmm0 {%k1} {z}205; X86-NEXT:    retl206;207; X64-LABEL: test_mm_maskz_multishift_epi64_epi8:208; X64:       # %bb.0: # %entry209; X64-NEXT:    kmovd %edi, %k1210; X64-NEXT:    vpmultishiftqb %xmm1, %xmm0, %xmm0 {%k1} {z}211; X64-NEXT:    retq212entry:213  %0 = bitcast <2 x i64> %__X to <16 x i8>214  %1 = bitcast <2 x i64> %__Y to <16 x i8>215  %2 = tail call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %0, <16 x i8> %1)216  %3 = bitcast i16 %__M to <16 x i1>217  %4 = select <16 x i1> %3, <16 x i8> %2, <16 x i8> zeroinitializer218  %5 = bitcast <16 x i8> %4 to <2 x i64>219  ret <2 x i64> %5220}221 222define <2 x i64> @test_mm_multishift_epi64_epi8(<2 x i64> %__X, <2 x i64> %__Y) {223; CHECK-LABEL: test_mm_multishift_epi64_epi8:224; CHECK:       # %bb.0: # %entry225; CHECK-NEXT:    vpmultishiftqb %xmm1, %xmm0, %xmm0226; CHECK-NEXT:    ret{{[l|q]}}227entry:228  %0 = bitcast <2 x i64> %__X to <16 x i8>229  %1 = bitcast <2 x i64> %__Y to <16 x i8>230  %2 = tail call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %0, <16 x i8> %1)231  %3 = bitcast <16 x i8> %2 to <2 x i64>232  ret <2 x i64> %3233}234 235define <4 x i64> @test_mm256_mask_multishift_epi64_epi8(<4 x i64> %__W, i32 %__M, <4 x i64> %__X, <4 x i64> %__Y) {236; X86-LABEL: test_mm256_mask_multishift_epi64_epi8:237; X86:       # %bb.0: # %entry238; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1239; X86-NEXT:    vpmultishiftqb %ymm2, %ymm1, %ymm0 {%k1}240; X86-NEXT:    retl241;242; X64-LABEL: test_mm256_mask_multishift_epi64_epi8:243; X64:       # %bb.0: # %entry244; X64-NEXT:    kmovd %edi, %k1245; X64-NEXT:    vpmultishiftqb %ymm2, %ymm1, %ymm0 {%k1}246; X64-NEXT:    retq247entry:248  %0 = bitcast <4 x i64> %__X to <32 x i8>249  %1 = bitcast <4 x i64> %__Y to <32 x i8>250  %2 = tail call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %0, <32 x i8> %1)251  %3 = bitcast <4 x i64> %__W to <32 x i8>252  %4 = bitcast i32 %__M to <32 x i1>253  %5 = select <32 x i1> %4, <32 x i8> %2, <32 x i8> %3254  %6 = bitcast <32 x i8> %5 to <4 x i64>255  ret <4 x i64> %6256}257 258define <4 x i64> @test_mm256_maskz_multishift_epi64_epi8(i32 %__M, <4 x i64> %__X, <4 x i64> %__Y) {259; X86-LABEL: test_mm256_maskz_multishift_epi64_epi8:260; X86:       # %bb.0: # %entry261; X86-NEXT:    kmovd {{[0-9]+}}(%esp), %k1262; X86-NEXT:    vpmultishiftqb %ymm1, %ymm0, %ymm0 {%k1} {z}263; X86-NEXT:    retl264;265; X64-LABEL: test_mm256_maskz_multishift_epi64_epi8:266; X64:       # %bb.0: # %entry267; X64-NEXT:    kmovd %edi, %k1268; X64-NEXT:    vpmultishiftqb %ymm1, %ymm0, %ymm0 {%k1} {z}269; X64-NEXT:    retq270entry:271  %0 = bitcast <4 x i64> %__X to <32 x i8>272  %1 = bitcast <4 x i64> %__Y to <32 x i8>273  %2 = tail call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %0, <32 x i8> %1) #3274  %3 = bitcast i32 %__M to <32 x i1>275  %4 = select <32 x i1> %3, <32 x i8> %2, <32 x i8> zeroinitializer276  %5 = bitcast <32 x i8> %4 to <4 x i64>277  ret <4 x i64> %5278}279 280define <4 x i64> @test_mm256_multishift_epi64_epi8(<4 x i64> %__X, <4 x i64> %__Y) {281; CHECK-LABEL: test_mm256_multishift_epi64_epi8:282; CHECK:       # %bb.0: # %entry283; CHECK-NEXT:    vpmultishiftqb %ymm1, %ymm0, %ymm0284; CHECK-NEXT:    ret{{[l|q]}}285entry:286  %0 = bitcast <4 x i64> %__X to <32 x i8>287  %1 = bitcast <4 x i64> %__Y to <32 x i8>288  %2 = tail call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %0, <32 x i8> %1)289  %3 = bitcast <32 x i8> %2 to <4 x i64>290  ret <4 x i64> %3291}292 293declare <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8>, <16 x i8>, <16 x i8>)294declare <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8>, <32 x i8>, <32 x i8>)295declare <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8>, <16 x i8>)296declare <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8>, <32 x i8>)297