1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -mattr=+avx512vbmi | FileCheck %s 3*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.mask.permvar.qi.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <64 x i8>@test_int_x86_avx512_mask_permvar_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_permvar_qi_512: 7*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermb %zmm0, %zmm1, %zmm2 {%k1} 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermb %zmm0, %zmm1, %zmm3 {%k1} {z} 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermb %zmm0, %zmm1, %zmm0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm3, %zmm2, %zmm1 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm0, %zmm1, %zmm0 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 15*9880d681SAndroid Build Coastguard Worker %res = call <64 x i8> @llvm.x86.avx512.mask.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) 16*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> zeroinitializer, i64 %x3) 17*9880d681SAndroid Build Coastguard Worker %res2 = call <64 x i8> @llvm.x86.avx512.mask.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1) 18*9880d681SAndroid Build Coastguard Worker %res3 = add <64 x i8> %res, %res1 19*9880d681SAndroid Build Coastguard Worker %res4 = add <64 x i8> %res3, %res2 20*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res4 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.mask.pmultishift.qb.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <64 x i8>@test_int_x86_avx512_mask_pmultishift_qb_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_pmultishift_qb_512: 27*9880d681SAndroid Build Coastguard Worker; CHECK: vpmultishiftqb %zmm1, %zmm0, %zmm2 {%k1} 28*9880d681SAndroid Build Coastguard Worker; CHECK: vpmultishiftqb %zmm1, %zmm0, %zmm3 {%k1} {z} 29*9880d681SAndroid Build Coastguard Worker; CHECK: vpmultishiftqb %zmm1, %zmm0, %zmm0 30*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb %zmm3, %zmm2, %zmm1 31*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb %zmm0, %zmm1, %zmm0 32*9880d681SAndroid Build Coastguard Worker %res = call <64 x i8> @llvm.x86.avx512.mask.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) 33*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> zeroinitializer, i64 %x3) 34*9880d681SAndroid Build Coastguard Worker %res2 = call <64 x i8> @llvm.x86.avx512.mask.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1) 35*9880d681SAndroid Build Coastguard Worker %res3 = add <64 x i8> %res, %res1 36*9880d681SAndroid Build Coastguard Worker %res4 = add <64 x i8> %res3, %res2 37*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res4 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.mask.vpermi2var.qi.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine <64 x i8>@test_int_x86_avx512_mask_vpermi2var_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpermi2var_qi_512: 44*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm3 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm3 {%k1} 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm1 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm4 {%k1} {z} 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm4, %zmm3, %zmm0 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm1, %zmm0, %zmm0 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 54*9880d681SAndroid Build Coastguard Worker %res = call <64 x i8> @llvm.x86.avx512.mask.vpermi2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) 55*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.vpermi2var.qi.512(<64 x i8> %x0, <64 x i8> zeroinitializer, <64 x i8> %x2, i64 %x3) 56*9880d681SAndroid Build Coastguard Worker %res2 = call <64 x i8> @llvm.x86.avx512.mask.vpermi2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1) 57*9880d681SAndroid Build Coastguard Worker %res3 = add <64 x i8> %res, %res1 58*9880d681SAndroid Build Coastguard Worker %res4 = add <64 x i8> %res3, %res2 59*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res4 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.mask.vpermt2var.qi.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine <64 x i8>@test_int_x86_avx512_mask_vpermt2var_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) { 65*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpermt2var_qi_512: 66*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm3 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm3 {%k1} 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm1 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm4, %zmm4, %zmm4 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm4 {%k1} {z} 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm4, %zmm3, %zmm0 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddb %zmm1, %zmm0, %zmm0 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 76*9880d681SAndroid Build Coastguard Worker %res = call <64 x i8> @llvm.x86.avx512.mask.vpermt2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) 77*9880d681SAndroid Build Coastguard Worker %res1 = call <64 x i8> @llvm.x86.avx512.mask.vpermt2var.qi.512(<64 x i8> %x0, <64 x i8> zeroinitializer, <64 x i8> %x2, i64 %x3) 78*9880d681SAndroid Build Coastguard Worker %res2 = call <64 x i8> @llvm.x86.avx512.mask.vpermt2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 -1) 79*9880d681SAndroid Build Coastguard Worker %res3 = add <64 x i8> %res, %res1 80*9880d681SAndroid Build Coastguard Worker %res4 = add <64 x i8> %res3, %res2 81*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res4 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdeclare <64 x i8> @llvm.x86.avx512.maskz.vpermt2var.qi.512(<64 x i8>, <64 x i8>, <64 x i8>, i64) 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine <64 x i8>@test_int_x86_avx512_maskz_vpermt2var_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) { 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_maskz_vpermt2var_qi_512: 88*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovq %rdi, %k1 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpermt2b %zmm2, %zmm0, %zmm1 {%k1} {z} 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovaps %zmm1, %zmm0 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 93*9880d681SAndroid Build Coastguard Worker %res = call <64 x i8> @llvm.x86.avx512.maskz.vpermt2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2, i64 %x3) 94*9880d681SAndroid Build Coastguard Worker ret <64 x i8> %res 95*9880d681SAndroid Build Coastguard Worker} 96