xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512vbmi-intrinsics.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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