xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512cdvl-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=knl -mattr=+avx512cd -mattr=+avx512vl| FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readonly
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32>, <4 x i32>, i8)
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <4 x i32>@test_int_x86_avx512_mask_vplzcnt_d_128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) {
9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_d_128:
10*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntd %xmm0, %xmm1 {%k1}
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntd %xmm0, %xmm2 {%k1} {z}
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntd %xmm0, %xmm0
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
18*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2)
19*9880d681SAndroid Build Coastguard Worker  %res1 = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 -1)
20*9880d681SAndroid Build Coastguard Worker  %res3 = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> zeroinitializer, i8 %x2)
21*9880d681SAndroid Build Coastguard Worker  %res2 = add <4 x i32> %res, %res1
22*9880d681SAndroid Build Coastguard Worker  %res4 = add <4 x i32> %res2, %res3
23*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res4
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32>, <8 x i32>, i8)
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine <8 x i32>@test_int_x86_avx512_mask_vplzcnt_d_256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_d_256:
30*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntd %ymm0, %ymm1 {%k1}
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntd %ymm0, %ymm0
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %ymm0, %ymm1, %ymm0
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
36*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2)
37*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 -1)
38*9880d681SAndroid Build Coastguard Worker  %res2 = add <8 x i32> %res, %res1
39*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res2
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64>, <2 x i64>, i8)
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdefine <2 x i64>@test_int_x86_avx512_mask_vplzcnt_q_128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) {
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_q_128:
46*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntq %xmm0, %xmm1 {%k1}
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntq %xmm0, %xmm0
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %xmm0, %xmm1, %xmm0
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
52*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2)
53*9880d681SAndroid Build Coastguard Worker  %res1 = call <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 -1)
54*9880d681SAndroid Build Coastguard Worker  %res2 = add <2 x i64> %res, %res1
55*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res2
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64>, <4 x i64>, i8)
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine <4 x i64>@test_int_x86_avx512_mask_vplzcnt_q_256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) {
61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_q_256:
62*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntq %ymm0, %ymm1 {%k1}
65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vplzcntq %ymm0, %ymm0
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %ymm0, %ymm1, %ymm0
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
68*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2)
69*9880d681SAndroid Build Coastguard Worker  %res1 = call <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 -1)
70*9880d681SAndroid Build Coastguard Worker  %res2 = add <4 x i64> %res, %res1
71*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res2
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32>, <4 x i32>, i8)
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerdefine <4 x i32>@test_int_x86_avx512_mask_vpconflict_d_128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) {
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_d_128:
78*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictd %xmm0, %xmm1 {%k1}
81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictd %xmm0, %xmm2 {%k1} {z}
82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictd %xmm0, %xmm0
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm0, %xmm1, %xmm0
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
86*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2)
87*9880d681SAndroid Build Coastguard Worker  %res1 = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 -1)
88*9880d681SAndroid Build Coastguard Worker  %res3 = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> zeroinitializer, i8 %x2)
89*9880d681SAndroid Build Coastguard Worker  %res2 = add <4 x i32> %res, %res1
90*9880d681SAndroid Build Coastguard Worker  %res4 = add <4 x i32> %res2, %res3
91*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res4
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32>, <8 x i32>, i8)
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine <8 x i32>@test_int_x86_avx512_mask_vpconflict_d_256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) {
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_d_256:
98*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictd %ymm0, %ymm1 {%k1}
101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictd %ymm0, %ymm0
102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %ymm0, %ymm1, %ymm0
103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
104*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2)
105*9880d681SAndroid Build Coastguard Worker  %res1 = call <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 -1)
106*9880d681SAndroid Build Coastguard Worker  %res2 = add <8 x i32> %res, %res1
107*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res2
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64>, <2 x i64>, i8)
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Workerdefine <2 x i64>@test_int_x86_avx512_mask_vpconflict_q_128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) {
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_q_128:
114*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictq %xmm0, %xmm1 {%k1}
117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictq %xmm0, %xmm0
118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %xmm0, %xmm1, %xmm0
119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
120*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2)
121*9880d681SAndroid Build Coastguard Worker  %res1 = call <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 -1)
122*9880d681SAndroid Build Coastguard Worker  %res2 = add <2 x i64> %res, %res1
123*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res2
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64>, <4 x i64>, i8)
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdefine <4 x i64>@test_int_x86_avx512_mask_vpconflict_q_256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) {
129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_q_256:
130*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k1
132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictq %ymm0, %ymm1 {%k1}
133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpconflictq %ymm0, %ymm0
134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq %ymm0, %ymm1, %ymm0
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
136*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2)
137*9880d681SAndroid Build Coastguard Worker  %res1 = call <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 -1)
138*9880d681SAndroid Build Coastguard Worker  %res2 = add <4 x i64> %res, %res1
139*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res2
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_vbroadcastmw_256(i16 %a0) {
143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcastmw_256:
144*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k0
146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastmw2d %k0, %ymm0
147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
148*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx512.broadcastmw.256(i16 %a0) ;
149*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.broadcastmw.256(i16)
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_vbroadcastmw_128(i16 %a0) {
154*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcastmw_128:
155*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k0
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastmw2d %k0, %xmm0
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
159*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx512.broadcastmw.128(i16 %a0) ;
160*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.broadcastmw.128(i16)
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_broadcastmb_256(i8 %a0) {
165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_broadcastmb_256:
166*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k0
168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastmb2q %k0, %ymm0
169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
170*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx512.broadcastmb.256(i8 %a0) ;
171*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.broadcastmb.256(i8)
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_broadcastmb_128(i8 %a0) {
176*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_broadcastmb_128:
177*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0:
178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %edi, %k0
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastmb2q %k0, %xmm0
180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
181*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx512.broadcastmb.128(i8 %a0) ;
182*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.broadcastmb.128(i8)
185