xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-logic.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 | FileCheck %s --check-prefix=ALL --check-prefix=KNL
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpandd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
7*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpandd:
8*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
9*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
10*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandd %zmm1, %zmm0, %zmm0
11*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
14*9880d681SAndroid Build Coastguard Worker  %a2 = add <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,
15*9880d681SAndroid Build Coastguard Worker                            i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
16*9880d681SAndroid Build Coastguard Worker  %x = and <16 x i32> %a2, %b
17*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpandnd(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
21*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpandnd:
22*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
23*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
24*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandnd %zmm0, %zmm1, %zmm0
25*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
26*9880d681SAndroid Build Coastguard Workerentry:
27*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
28*9880d681SAndroid Build Coastguard Worker  %a2 = add <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,
29*9880d681SAndroid Build Coastguard Worker                            i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
30*9880d681SAndroid Build Coastguard Worker  %b2 = xor <16 x i32> %b, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1,
31*9880d681SAndroid Build Coastguard Worker                            i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
32*9880d681SAndroid Build Coastguard Worker  %x = and <16 x i32> %a2, %b2
33*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
37*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpord:
38*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
39*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
40*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpord %zmm1, %zmm0, %zmm0
41*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
44*9880d681SAndroid Build Coastguard Worker  %a2 = add <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,
45*9880d681SAndroid Build Coastguard Worker                            i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
46*9880d681SAndroid Build Coastguard Worker  %x = or <16 x i32> %a2, %b
47*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @vpxord(<16 x i32> %a, <16 x i32> %b) nounwind uwtable readnone ssp {
51*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpxord:
52*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
53*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddd {{.*}}(%rip){1to16}, %zmm0, %zmm0
54*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpxord %zmm1, %zmm0, %zmm0
55*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
58*9880d681SAndroid Build Coastguard Worker  %a2 = add <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,
59*9880d681SAndroid Build Coastguard Worker                            i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
60*9880d681SAndroid Build Coastguard Worker  %x = xor <16 x i32> %a2, %b
61*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
62*9880d681SAndroid Build Coastguard Worker}
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpandq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
65*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpandq:
66*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
67*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
68*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandq %zmm1, %zmm0, %zmm0
69*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
70*9880d681SAndroid Build Coastguard Workerentry:
71*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
72*9880d681SAndroid Build Coastguard Worker  %a2 = add <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
73*9880d681SAndroid Build Coastguard Worker  %x = and <8 x i64> %a2, %b
74*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpandnq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
78*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpandnq:
79*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
80*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
81*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
82*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
83*9880d681SAndroid Build Coastguard Workerentry:
84*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
85*9880d681SAndroid Build Coastguard Worker  %a2 = add <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
86*9880d681SAndroid Build Coastguard Worker  %b2 = xor <8 x i64> %b, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
87*9880d681SAndroid Build Coastguard Worker  %x = and <8 x i64> %a2, %b2
88*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vporq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
92*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vporq:
93*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
94*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
95*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vporq %zmm1, %zmm0, %zmm0
96*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
97*9880d681SAndroid Build Coastguard Workerentry:
98*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
99*9880d681SAndroid Build Coastguard Worker  %a2 = add <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
100*9880d681SAndroid Build Coastguard Worker  %x = or <8 x i64> %a2, %b
101*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @vpxorq(<8 x i64> %a, <8 x i64> %b) nounwind uwtable readnone ssp {
105*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: vpxorq:
106*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
107*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpaddq {{.*}}(%rip){1to8}, %zmm0, %zmm0
108*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
109*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
110*9880d681SAndroid Build Coastguard Workerentry:
111*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
112*9880d681SAndroid Build Coastguard Worker  %a2 = add <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
113*9880d681SAndroid Build Coastguard Worker  %x = xor <8 x i64> %a2, %b
114*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @orq_broadcast(<8 x i64> %a) nounwind {
119*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: orq_broadcast:
120*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
121*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vporq {{.*}}(%rip){1to8}, %zmm0, %zmm0
122*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
123*9880d681SAndroid Build Coastguard Worker  %b = or <8 x i64> %a, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2, i64 2>
124*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %b
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @andd512fold(<16 x i32> %y, <16 x i32>* %x) {
128*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: andd512fold:
129*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
130*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandd (%rdi), %zmm0, %zmm0
131*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
132*9880d681SAndroid Build Coastguard Workerentry:
133*9880d681SAndroid Build Coastguard Worker  %a = load <16 x i32>, <16 x i32>* %x, align 4
134*9880d681SAndroid Build Coastguard Worker  %b = and <16 x i32> %y, %a
135*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %b
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @andqbrst(<8 x i64> %p1, i64* %ap) {
139*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: andqbrst:
140*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0: ## %entry
141*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpandq (%rdi){1to8}, %zmm0, %zmm0
142*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
143*9880d681SAndroid Build Coastguard Workerentry:
144*9880d681SAndroid Build Coastguard Worker  %a = load i64, i64* %ap, align 8
145*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i64> undef, i64 %a, i32 0
146*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x i64> %b, <8 x i64> undef, <8 x i32> zeroinitializer
147*9880d681SAndroid Build Coastguard Worker  %d = and <8 x i64> %p1, %c
148*9880d681SAndroid Build Coastguard Worker  ret <8 x i64>%d
149*9880d681SAndroid Build Coastguard Worker}
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @and_v64i8(<64 x i8> %a, <64 x i8> %b) {
152*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: and_v64i8:
153*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
154*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandps %ymm2, %ymm0, %ymm0
155*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandps %ymm3, %ymm1, %ymm1
156*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker;
158*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: and_v64i8:
159*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
160*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %zmm1, %zmm0, %zmm0
161*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
162*9880d681SAndroid Build Coastguard Worker  %res = and <64 x i8> %a, %b
163*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %res
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @andn_v64i8(<64 x i8> %a, <64 x i8> %b) {
167*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: andn_v64i8:
168*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
169*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandnps %ymm0, %ymm2, %ymm0
170*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandnps %ymm1, %ymm3, %ymm1
171*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
172*9880d681SAndroid Build Coastguard Worker;
173*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: andn_v64i8:
174*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
175*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
176*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
177*9880d681SAndroid Build Coastguard Worker  %b2 = xor <64 x i8> %b, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
178*9880d681SAndroid Build Coastguard Worker                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
179*9880d681SAndroid Build Coastguard Worker                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
180*9880d681SAndroid Build Coastguard Worker                           i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
181*9880d681SAndroid Build Coastguard Worker  %res = and <64 x i8> %a, %b2
182*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %res
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @or_v64i8(<64 x i8> %a, <64 x i8> %b) {
186*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: or_v64i8:
187*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
188*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vorps %ymm2, %ymm0, %ymm0
189*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vorps %ymm3, %ymm1, %ymm1
190*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
191*9880d681SAndroid Build Coastguard Worker;
192*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: or_v64i8:
193*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
194*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vporq %zmm1, %zmm0, %zmm0
195*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
196*9880d681SAndroid Build Coastguard Worker  %res = or <64 x i8> %a, %b
197*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %res
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @xor_v64i8(<64 x i8> %a, <64 x i8> %b) {
201*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: xor_v64i8:
202*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
203*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vxorps %ymm2, %ymm0, %ymm0
204*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vxorps %ymm3, %ymm1, %ymm1
205*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
206*9880d681SAndroid Build Coastguard Worker;
207*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: xor_v64i8:
208*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
209*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
210*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
211*9880d681SAndroid Build Coastguard Worker  %res = xor <64 x i8> %a, %b
212*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %res
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @and_v32i16(<32 x i16> %a, <32 x i16> %b) {
216*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: and_v32i16:
217*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
218*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandps %ymm2, %ymm0, %ymm0
219*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandps %ymm3, %ymm1, %ymm1
220*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
221*9880d681SAndroid Build Coastguard Worker;
222*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: and_v32i16:
223*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
224*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %zmm1, %zmm0, %zmm0
225*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
226*9880d681SAndroid Build Coastguard Worker  %res = and <32 x i16> %a, %b
227*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %res
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @andn_v32i16(<32 x i16> %a, <32 x i16> %b) {
231*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: andn_v32i16:
232*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
233*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandnps %ymm0, %ymm2, %ymm0
234*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandnps %ymm1, %ymm3, %ymm1
235*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
236*9880d681SAndroid Build Coastguard Worker;
237*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: andn_v32i16:
238*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
239*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandnq %zmm0, %zmm1, %zmm0
240*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
241*9880d681SAndroid Build Coastguard Worker  %b2 = xor <32 x i16> %b, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1,
242*9880d681SAndroid Build Coastguard Worker                            i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
243*9880d681SAndroid Build Coastguard Worker  %res = and <32 x i16> %a, %b2
244*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %res
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @or_v32i16(<32 x i16> %a, <32 x i16> %b) {
248*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: or_v32i16:
249*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
250*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vorps %ymm2, %ymm0, %ymm0
251*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vorps %ymm3, %ymm1, %ymm1
252*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
253*9880d681SAndroid Build Coastguard Worker;
254*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: or_v32i16:
255*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
256*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vporq %zmm1, %zmm0, %zmm0
257*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
258*9880d681SAndroid Build Coastguard Worker  %res = or <32 x i16> %a, %b
259*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %res
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @xor_v32i16(<32 x i16> %a, <32 x i16> %b) {
263*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: xor_v32i16:
264*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
265*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vxorps %ymm2, %ymm0, %ymm0
266*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vxorps %ymm3, %ymm1, %ymm1
267*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker;
269*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: xor_v32i16:
270*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
271*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
272*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
273*9880d681SAndroid Build Coastguard Worker  %res = xor <32 x i16> %a, %b
274*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %res
275*9880d681SAndroid Build Coastguard Worker}
276