xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx-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-unknown-unknown -mattr=+avx | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andpd256:
7*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandpd %ymm0, %ymm1, %ymm0
9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %x to <4 x i64>
14*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x double> %y to <4 x i64>
15*9880d681SAndroid Build Coastguard Worker  %and.i = and <4 x i64> %0, %1
16*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %and.i to <4 x double>
17*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
18*9880d681SAndroid Build Coastguard Worker  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>
19*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andpd256fold:
24*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandpd {{.*}}(%rip), %ymm0, %ymm0
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
29*9880d681SAndroid Build Coastguard Workerentry:
30*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %y to <4 x i64>
31*9880d681SAndroid Build Coastguard Worker  %and.i = and <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507>
32*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i64> %and.i to <4 x double>
33*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
34*9880d681SAndroid Build Coastguard Worker  %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0>
35*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %2
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andps256:
40*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandps %ymm0, %ymm1, %ymm0
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
43*9880d681SAndroid Build Coastguard Workerentry:
44*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %x to <8 x i32>
45*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x float> %y to <8 x i32>
46*9880d681SAndroid Build Coastguard Worker  %and.i = and <8 x i32> %0, %1
47*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %and.i to <8 x float>
48*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andps256fold(<8 x float> %y) nounwind uwtable readnone ssp {
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andps256fold:
53*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
56*9880d681SAndroid Build Coastguard Workerentry:
57*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %y to <8 x i32>
58*9880d681SAndroid Build Coastguard Worker  %and.i = and <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938>
59*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i32> %and.i to <8 x float>
60*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %1
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @xorpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorpd256:
65*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm0, %ymm1, %ymm0
67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
70*9880d681SAndroid Build Coastguard Workerentry:
71*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %x to <4 x i64>
72*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x double> %y to <4 x i64>
73*9880d681SAndroid Build Coastguard Worker  %xor.i = xor <4 x i64> %0, %1
74*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %xor.i to <4 x double>
75*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
76*9880d681SAndroid Build Coastguard Worker  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>
77*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @xorpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorpd256fold:
82*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd {{.*}}(%rip), %ymm0, %ymm0
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %y to <4 x i64>
89*9880d681SAndroid Build Coastguard Worker  %xor.i = xor <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507>
90*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i64> %xor.i to <4 x double>
91*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
92*9880d681SAndroid Build Coastguard Worker  %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0>
93*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %2
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @xorps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorps256:
98*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps %ymm0, %ymm1, %ymm0
100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
101*9880d681SAndroid Build Coastguard Workerentry:
102*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %x to <8 x i32>
103*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x float> %y to <8 x i32>
104*9880d681SAndroid Build Coastguard Worker  %xor.i = xor <8 x i32> %0, %1
105*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %xor.i to <8 x float>
106*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @xorps256fold(<8 x float> %y) nounwind uwtable readnone ssp {
110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xorps256fold:
111*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %y to <8 x i32>
116*9880d681SAndroid Build Coastguard Worker  %xor.i = xor <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938>
117*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i32> %xor.i to <8 x float>
118*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %1
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @orpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {
122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orpd256:
123*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vorpd %ymm0, %ymm1, %ymm0
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
128*9880d681SAndroid Build Coastguard Workerentry:
129*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %x to <4 x i64>
130*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x double> %y to <4 x i64>
131*9880d681SAndroid Build Coastguard Worker  %or.i = or <4 x i64> %0, %1
132*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %or.i to <4 x double>
133*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
134*9880d681SAndroid Build Coastguard Worker  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>
135*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @orpd256fold(<4 x double> %y) nounwind uwtable readnone ssp {
139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orpd256fold:
140*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vorpd {{.*}}(%rip), %ymm0, %ymm0
142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
145*9880d681SAndroid Build Coastguard Workerentry:
146*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %y to <4 x i64>
147*9880d681SAndroid Build Coastguard Worker  %or.i = or <4 x i64> %0, <i64 4616752568008179712, i64 4614838538166547251, i64 4612361558371493478, i64 4608083138725491507>
148*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i64> %or.i to <4 x double>
149*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
150*9880d681SAndroid Build Coastguard Worker  %2 = fadd <4 x double> %1, <double 0x0, double 0x0, double 0x0, double 0x0>
151*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %2
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @orps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orps256:
156*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vorps %ymm0, %ymm1, %ymm0
158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
159*9880d681SAndroid Build Coastguard Workerentry:
160*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %x to <8 x i32>
161*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x float> %y to <8 x i32>
162*9880d681SAndroid Build Coastguard Worker  %or.i = or <8 x i32> %0, %1
163*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %or.i to <8 x float>
164*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @orps256fold(<8 x float> %y) nounwind uwtable readnone ssp {
168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: orps256fold:
169*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
172*9880d681SAndroid Build Coastguard Workerentry:
173*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %y to <8 x i32>
174*9880d681SAndroid Build Coastguard Worker  %or.i = or <8 x i32> %0, <i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938, i32 1083179008, i32 1079613850, i32 1075000115, i32 1067030938>
175*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i32> %or.i to <8 x float>
176*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %1
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andnotpd256(<4 x double> %y, <4 x double> %x) nounwind uwtable readnone ssp {
180*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotpd256:
181*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandnpd %ymm0, %ymm1, %ymm0
183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
186*9880d681SAndroid Build Coastguard Workerentry:
187*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %x to <4 x i64>
188*9880d681SAndroid Build Coastguard Worker  %neg.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1>
189*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x double> %y to <4 x i64>
190*9880d681SAndroid Build Coastguard Worker  %and.i = and <4 x i64> %1, %neg.i
191*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %and.i to <4 x double>
192*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
193*9880d681SAndroid Build Coastguard Worker  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>
194*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @andnotpd256fold(<4 x double> %y, <4 x double>* nocapture %x) nounwind uwtable readonly ssp {
198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotpd256fold:
199*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandnpd (%rdi), %ymm0, %ymm0
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vaddpd %ymm1, %ymm0, %ymm0
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
204*9880d681SAndroid Build Coastguard Workerentry:
205*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x double>, <4 x double>* %x, align 32
206*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x double> %y to <4 x i64>
207*9880d681SAndroid Build Coastguard Worker  %neg.i = xor <4 x i64> %0, <i64 -1, i64 -1, i64 -1, i64 -1>
208*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x double> %tmp2 to <4 x i64>
209*9880d681SAndroid Build Coastguard Worker  %and.i = and <4 x i64> %1, %neg.i
210*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <4 x i64> %and.i to <4 x double>
211*9880d681SAndroid Build Coastguard Worker  ; add forces execution domain
212*9880d681SAndroid Build Coastguard Worker  %3 = fadd <4 x double> %2, <double 0x0, double 0x0, double 0x0, double 0x0>
213*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %3
214*9880d681SAndroid Build Coastguard Worker}
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andnotps256(<8 x float> %y, <8 x float> %x) nounwind uwtable readnone ssp {
217*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotps256:
218*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandnps %ymm0, %ymm1, %ymm0
220*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
221*9880d681SAndroid Build Coastguard Workerentry:
222*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %x to <8 x i32>
223*9880d681SAndroid Build Coastguard Worker  %neg.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
224*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x float> %y to <8 x i32>
225*9880d681SAndroid Build Coastguard Worker  %and.i = and <8 x i32> %1, %neg.i
226*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %and.i to <8 x float>
227*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @andnotps256fold(<8 x float> %y, <8 x float>* nocapture %x) nounwind uwtable readonly ssp {
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: andnotps256fold:
232*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vandnps (%rdi), %ymm0, %ymm0
234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
235*9880d681SAndroid Build Coastguard Workerentry:
236*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x float>, <8 x float>* %x, align 32
237*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <8 x float> %y to <8 x i32>
238*9880d681SAndroid Build Coastguard Worker  %neg.i = xor <8 x i32> %0, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
239*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x float> %tmp2 to <8 x i32>
240*9880d681SAndroid Build Coastguard Worker  %and.i = and <8 x i32> %1, %neg.i
241*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %and.i to <8 x float>
242*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker;;; Test that basic 2 x i64 logic use the integer version on AVX
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandn(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
248*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpandn:
249*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
250*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm1
251*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpandn %xmm0, %xmm1, %xmm0
252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
253*9880d681SAndroid Build Coastguard Workerentry:
254*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
255*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
256*9880d681SAndroid Build Coastguard Worker  %y = xor <2 x i64> %a2, <i64 -1, i64 -1>
257*9880d681SAndroid Build Coastguard Worker  %x = and <2 x i64> %a, %y
258*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpand(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vpand:
263*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0: # %entry
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpand %xmm1, %xmm0, %xmm0
266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
267*9880d681SAndroid Build Coastguard Workerentry:
268*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
269*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
270*9880d681SAndroid Build Coastguard Worker  %x = and <2 x i64> %a2, %b
271*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274