xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512bwvl-arith.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512vl| FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; 256-bit
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddb256_test
6*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb %ymm{{.*}}
7*9880d681SAndroid Build Coastguard Worker; CHECK: ret
8*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vpaddb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
9*9880d681SAndroid Build Coastguard Worker  %x = add <32 x i8> %i, %j
10*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddb256_fold_test
14*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb (%rdi), %ymm{{.*}}
15*9880d681SAndroid Build Coastguard Worker; CHECK: ret
16*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vpaddb256_fold_test(<32 x i8> %i, <32 x i8>* %j) nounwind {
17*9880d681SAndroid Build Coastguard Worker  %tmp = load <32 x i8>, <32 x i8>* %j, align 4
18*9880d681SAndroid Build Coastguard Worker  %x = add <32 x i8> %i, %tmp
19*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_test
23*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %ymm{{.*}}
24*9880d681SAndroid Build Coastguard Worker; CHECK: ret
25*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
26*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
27*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_fold_test
31*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %ymm{{.*}}
32*9880d681SAndroid Build Coastguard Worker; CHECK: ret
33*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_fold_test(<16 x i16> %i, <16 x i16>* %j) nounwind {
34*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i16>, <16 x i16>* %j, align 4
35*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %tmp
36*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_mask_test
40*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %ymm{{.*%k[1-7].*}}
41*9880d681SAndroid Build Coastguard Worker; CHECK: ret
42*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_mask_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {
43*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i16> %mask1, zeroinitializer
44*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
45*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i
46*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_maskz_test
50*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %ymm{{.*{%k[1-7]} {z}.*}}
51*9880d681SAndroid Build Coastguard Worker; CHECK: ret
52*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_maskz_test(<16 x i16> %i, <16 x i16> %j, <16 x i16> %mask1) nounwind readnone {
53*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i16> %mask1, zeroinitializer
54*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
55*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
56*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_mask_fold_test
60*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %ymm{{.*%k[1-7]}}
61*9880d681SAndroid Build Coastguard Worker; CHECK: ret
62*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_mask_fold_test(<16 x i16> %i, <16 x i16>* %j.ptr, <16 x i16> %mask1) nounwind readnone {
63*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i16> %mask1, zeroinitializer
64*9880d681SAndroid Build Coastguard Worker  %j = load <16 x i16>, <16 x i16>* %j.ptr
65*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
66*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> %i
67*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw256_maskz_fold_test
71*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %ymm{{.*{%k[1-7]} {z}}}
72*9880d681SAndroid Build Coastguard Worker; CHECK: ret
73*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpaddw256_maskz_fold_test(<16 x i16> %i, <16 x i16>* %j.ptr, <16 x i16> %mask1) nounwind readnone {
74*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <16 x i16> %mask1, zeroinitializer
75*9880d681SAndroid Build Coastguard Worker  %j = load <16 x i16>, <16 x i16>* %j.ptr
76*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
77*9880d681SAndroid Build Coastguard Worker  %r = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
78*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
79*9880d681SAndroid Build Coastguard Worker}
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubb256_test
82*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubb %ymm{{.*}}
83*9880d681SAndroid Build Coastguard Worker; CHECK: ret
84*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @vpsubb256_test(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
85*9880d681SAndroid Build Coastguard Worker  %x = sub <32 x i8> %i, %j
86*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubw256_test
90*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubw %ymm{{.*}}
91*9880d681SAndroid Build Coastguard Worker; CHECK: ret
92*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpsubw256_test(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
93*9880d681SAndroid Build Coastguard Worker  %x = sub <16 x i16> %i, %j
94*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmullw256_test
98*9880d681SAndroid Build Coastguard Worker; CHECK: vpmullw %ymm{{.*}}
99*9880d681SAndroid Build Coastguard Worker; CHECK: ret
100*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @vpmullw256_test(<16 x i16> %i, <16 x i16> %j) {
101*9880d681SAndroid Build Coastguard Worker  %x = mul <16 x i16> %i, %j
102*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; 128-bit
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddb128_test
108*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb %xmm{{.*}}
109*9880d681SAndroid Build Coastguard Worker; CHECK: ret
110*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vpaddb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
111*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i8> %i, %j
112*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddb128_fold_test
116*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddb (%rdi), %xmm{{.*}}
117*9880d681SAndroid Build Coastguard Worker; CHECK: ret
118*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vpaddb128_fold_test(<16 x i8> %i, <16 x i8>* %j) nounwind {
119*9880d681SAndroid Build Coastguard Worker  %tmp = load <16 x i8>, <16 x i8>* %j, align 4
120*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i8> %i, %tmp
121*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_test
125*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %xmm{{.*}}
126*9880d681SAndroid Build Coastguard Worker; CHECK: ret
127*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
128*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
129*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_fold_test
133*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %xmm{{.*}}
134*9880d681SAndroid Build Coastguard Worker; CHECK: ret
135*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_fold_test(<8 x i16> %i, <8 x i16>* %j) nounwind {
136*9880d681SAndroid Build Coastguard Worker  %tmp = load <8 x i16>, <8 x i16>* %j, align 4
137*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %tmp
138*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_mask_test
142*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %xmm{{.*%k[1-7].*}}
143*9880d681SAndroid Build Coastguard Worker; CHECK: ret
144*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_mask_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {
145*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i16> %mask1, zeroinitializer
146*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
147*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i
148*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_maskz_test
152*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw %xmm{{.*{%k[1-7]} {z}.*}}
153*9880d681SAndroid Build Coastguard Worker; CHECK: ret
154*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_maskz_test(<8 x i16> %i, <8 x i16> %j, <8 x i16> %mask1) nounwind readnone {
155*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i16> %mask1, zeroinitializer
156*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
157*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
158*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_mask_fold_test
162*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %xmm{{.*%k[1-7]}}
163*9880d681SAndroid Build Coastguard Worker; CHECK: ret
164*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_mask_fold_test(<8 x i16> %i, <8 x i16>* %j.ptr, <8 x i16> %mask1) nounwind readnone {
165*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i16> %mask1, zeroinitializer
166*9880d681SAndroid Build Coastguard Worker  %j = load <8 x i16>, <8 x i16>* %j.ptr
167*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
168*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> %i
169*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpaddw128_maskz_fold_test
173*9880d681SAndroid Build Coastguard Worker; CHECK: vpaddw (%rdi), %xmm{{.*{%k[1-7]} {z}}}
174*9880d681SAndroid Build Coastguard Worker; CHECK: ret
175*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpaddw128_maskz_fold_test(<8 x i16> %i, <8 x i16>* %j.ptr, <8 x i16> %mask1) nounwind readnone {
176*9880d681SAndroid Build Coastguard Worker  %mask = icmp ne <8 x i16> %mask1, zeroinitializer
177*9880d681SAndroid Build Coastguard Worker  %j = load <8 x i16>, <8 x i16>* %j.ptr
178*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
179*9880d681SAndroid Build Coastguard Worker  %r = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
180*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubb128_test
184*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubb %xmm{{.*}}
185*9880d681SAndroid Build Coastguard Worker; CHECK: ret
186*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vpsubb128_test(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
187*9880d681SAndroid Build Coastguard Worker  %x = sub <16 x i8> %i, %j
188*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpsubw128_test
192*9880d681SAndroid Build Coastguard Worker; CHECK: vpsubw %xmm{{.*}}
193*9880d681SAndroid Build Coastguard Worker; CHECK: ret
194*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpsubw128_test(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
195*9880d681SAndroid Build Coastguard Worker  %x = sub <8 x i16> %i, %j
196*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpmullw128_test
200*9880d681SAndroid Build Coastguard Worker; CHECK: vpmullw %xmm{{.*}}
201*9880d681SAndroid Build Coastguard Worker; CHECK: ret
202*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @vpmullw128_test(<8 x i16> %i, <8 x i16> %j) {
203*9880d681SAndroid Build Coastguard Worker  %x = mul <8 x i16> %i, %j
204*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207