• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512vbmi --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X86
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vbmi --show-mc-encoding | FileCheck %s --check-prefixes=CHECK,X64
4
5declare <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8>, <64 x i8>)
6
7define <64 x i8>@test_int_x86_avx512_permvar_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2) {
8; CHECK-LABEL: test_int_x86_avx512_permvar_qi_512:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    vpermb %zmm0, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0x8d,0xc0]
11; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
12  %1 = call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1)
13  ret <64 x i8> %1
14}
15
16define <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) {
17; X86-LABEL: test_int_x86_avx512_mask_permvar_qi_512:
18; X86:       # %bb.0:
19; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
20; X86-NEXT:    vpermb %zmm0, %zmm1, %zmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x49,0x8d,0xd0]
21; X86-NEXT:    vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]
22; X86-NEXT:    retl # encoding: [0xc3]
23;
24; X64-LABEL: test_int_x86_avx512_mask_permvar_qi_512:
25; X64:       # %bb.0:
26; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
27; X64-NEXT:    vpermb %zmm0, %zmm1, %zmm2 {%k1} # encoding: [0x62,0xf2,0x75,0x49,0x8d,0xd0]
28; X64-NEXT:    vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]
29; X64-NEXT:    retq # encoding: [0xc3]
30  %1 = call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1)
31  %2 = bitcast i64 %x3 to <64 x i1>
32  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %x2
33  ret <64 x i8> %3
34}
35
36define <64 x i8>@test_int_x86_avx512_maskz_permvar_qi_512(<64 x i8> %x0, <64 x i8> %x1, i64 %x3) {
37; X86-LABEL: test_int_x86_avx512_maskz_permvar_qi_512:
38; X86:       # %bb.0:
39; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
40; X86-NEXT:    vpermb %zmm0, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0x8d,0xc0]
41; X86-NEXT:    retl # encoding: [0xc3]
42;
43; X64-LABEL: test_int_x86_avx512_maskz_permvar_qi_512:
44; X64:       # %bb.0:
45; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
46; X64-NEXT:    vpermb %zmm0, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0x8d,0xc0]
47; X64-NEXT:    retq # encoding: [0xc3]
48  %1 = call <64 x i8> @llvm.x86.avx512.permvar.qi.512(<64 x i8> %x0, <64 x i8> %x1)
49  %2 = bitcast i64 %x3 to <64 x i1>
50  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer
51  ret <64 x i8> %3
52}
53
54declare <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8>, <64 x i8>)
55
56define <64 x i8>@test_int_x86_avx512_pmultishift_qb_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2) {
57; CHECK-LABEL: test_int_x86_avx512_pmultishift_qb_512:
58; CHECK:       # %bb.0:
59; CHECK-NEXT:    vpmultishiftqb %zmm1, %zmm0, %zmm0 # encoding: [0x62,0xf2,0xfd,0x48,0x83,0xc1]
60; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
61  %1 = call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1)
62  ret <64 x i8> %1
63}
64
65define <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) {
66; X86-LABEL: test_int_x86_avx512_mask_pmultishift_qb_512:
67; X86:       # %bb.0:
68; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
69; X86-NEXT:    vpmultishiftqb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x83,0xd1]
70; X86-NEXT:    vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]
71; X86-NEXT:    retl # encoding: [0xc3]
72;
73; X64-LABEL: test_int_x86_avx512_mask_pmultishift_qb_512:
74; X64:       # %bb.0:
75; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
76; X64-NEXT:    vpmultishiftqb %zmm1, %zmm0, %zmm2 {%k1} # encoding: [0x62,0xf2,0xfd,0x49,0x83,0xd1]
77; X64-NEXT:    vmovdqa64 %zmm2, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc2]
78; X64-NEXT:    retq # encoding: [0xc3]
79  %1 = call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1)
80  %2 = bitcast i64 %x3 to <64 x i1>
81  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %x2
82  ret <64 x i8> %3
83}
84
85define <64 x i8>@test_int_x86_avx512_maskz_pmultishift_qb_512(<64 x i8> %x0, <64 x i8> %x1, i64 %x3) {
86; X86-LABEL: test_int_x86_avx512_maskz_pmultishift_qb_512:
87; X86:       # %bb.0:
88; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
89; X86-NEXT:    vpmultishiftqb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x83,0xc1]
90; X86-NEXT:    retl # encoding: [0xc3]
91;
92; X64-LABEL: test_int_x86_avx512_maskz_pmultishift_qb_512:
93; X64:       # %bb.0:
94; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
95; X64-NEXT:    vpmultishiftqb %zmm1, %zmm0, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0xfd,0xc9,0x83,0xc1]
96; X64-NEXT:    retq # encoding: [0xc3]
97  %1 = call <64 x i8> @llvm.x86.avx512.pmultishift.qb.512(<64 x i8> %x0, <64 x i8> %x1)
98  %2 = bitcast i64 %x3 to <64 x i1>
99  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer
100  ret <64 x i8> %3
101}
102
103declare <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8>, <64 x i8>, <64 x i8>)
104
105define <64 x i8>@test_int_x86_avx512_vpermi2var_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2) {
106; CHECK-LABEL: test_int_x86_avx512_vpermi2var_qi_512:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    vpermt2b %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0x7d,0xc2]
109; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
110  %1 = call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2)
111  ret <64 x i8> %1
112}
113
114define <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) {
115; X86-LABEL: test_int_x86_avx512_mask_vpermi2var_qi_512:
116; X86:       # %bb.0:
117; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
118; X86-NEXT:    vpermi2b %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x75,0xca]
119; X86-NEXT:    vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]
120; X86-NEXT:    retl # encoding: [0xc3]
121;
122; X64-LABEL: test_int_x86_avx512_mask_vpermi2var_qi_512:
123; X64:       # %bb.0:
124; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
125; X64-NEXT:    vpermi2b %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x75,0xca]
126; X64-NEXT:    vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]
127; X64-NEXT:    retq # encoding: [0xc3]
128  %1 = call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2)
129  %2 = bitcast i64 %x3 to <64 x i1>
130  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %x1
131  ret <64 x i8> %3
132}
133
134define <64 x i8>@test_int_x86_avx512_vpermt2var_qi_512(<64 x i8> %x0, <64 x i8> %x1, <64 x i8> %x2) {
135; CHECK-LABEL: test_int_x86_avx512_vpermt2var_qi_512:
136; CHECK:       # %bb.0:
137; CHECK-NEXT:    vpermi2b %zmm2, %zmm1, %zmm0 # encoding: [0x62,0xf2,0x75,0x48,0x75,0xc2]
138; CHECK-NEXT:    ret{{[l|q]}} # encoding: [0xc3]
139  %1 = call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %x1, <64 x i8> %x0, <64 x i8> %x2)
140  ret <64 x i8> %1
141}
142
143define <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) {
144; X86-LABEL: test_int_x86_avx512_mask_vpermt2var_qi_512:
145; X86:       # %bb.0:
146; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
147; X86-NEXT:    vpermt2b %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x7d,0xca]
148; X86-NEXT:    vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]
149; X86-NEXT:    retl # encoding: [0xc3]
150;
151; X64-LABEL: test_int_x86_avx512_mask_vpermt2var_qi_512:
152; X64:       # %bb.0:
153; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
154; X64-NEXT:    vpermt2b %zmm2, %zmm0, %zmm1 {%k1} # encoding: [0x62,0xf2,0x7d,0x49,0x7d,0xca]
155; X64-NEXT:    vmovdqa64 %zmm1, %zmm0 # encoding: [0x62,0xf1,0xfd,0x48,0x6f,0xc1]
156; X64-NEXT:    retq # encoding: [0xc3]
157  %1 = call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %x1, <64 x i8> %x0, <64 x i8> %x2)
158  %2 = bitcast i64 %x3 to <64 x i1>
159  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> %x1
160  ret <64 x i8> %3
161}
162
163define <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) {
164; X86-LABEL: test_int_x86_avx512_maskz_vpermt2var_qi_512:
165; X86:       # %bb.0:
166; X86-NEXT:    kmovq {{[0-9]+}}(%esp), %k1 # encoding: [0xc4,0xe1,0xf8,0x90,0x4c,0x24,0x04]
167; X86-NEXT:    vpermi2b %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0x75,0xc2]
168; X86-NEXT:    retl # encoding: [0xc3]
169;
170; X64-LABEL: test_int_x86_avx512_maskz_vpermt2var_qi_512:
171; X64:       # %bb.0:
172; X64-NEXT:    kmovq %rdi, %k1 # encoding: [0xc4,0xe1,0xfb,0x92,0xcf]
173; X64-NEXT:    vpermi2b %zmm2, %zmm1, %zmm0 {%k1} {z} # encoding: [0x62,0xf2,0x75,0xc9,0x75,0xc2]
174; X64-NEXT:    retq # encoding: [0xc3]
175  %1 = call <64 x i8> @llvm.x86.avx512.vpermi2var.qi.512(<64 x i8> %x1, <64 x i8> %x0, <64 x i8> %x2)
176  %2 = bitcast i64 %x3 to <64 x i1>
177  %3 = select <64 x i1> %2, <64 x i8> %1, <64 x i8> zeroinitializer
178  ret <64 x i8> %3
179}
180