[flang][cuda] Do not register global constants (#118582)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-int-log.ll
blob687dd9445f387bde938d1decbc32c223439d1e57
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible  < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s
4 ; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
9 ; AND
12 define <8 x i8> @and_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
13 ; CHECK-LABEL: and_v8i8:
14 ; CHECK:       // %bb.0:
15 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
16 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
17 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
18 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
19 ; CHECK-NEXT:    ret
21 ; NONEON-NOSVE-LABEL: and_v8i8:
22 ; NONEON-NOSVE:       // %bb.0:
23 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
24 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
25 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
26 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
27 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
28 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
29 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
30 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]
31 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
32 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
33 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
34 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]
35 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
36 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
37 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
38 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]
39 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
40 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
41 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
42 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]
43 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
44 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
45 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
46 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]
47 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
48 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
49 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
50 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]
51 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
52 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
53 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
54 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]
55 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
56 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
57 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]
58 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
59 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
60 ; NONEON-NOSVE-NEXT:    ret
61   %res = and <8 x i8> %op1, %op2
62   ret <8 x i8> %res
65 define <16 x i8> @and_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
66 ; CHECK-LABEL: and_v16i8:
67 ; CHECK:       // %bb.0:
68 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
69 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
70 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
71 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
72 ; CHECK-NEXT:    ret
74 ; NONEON-NOSVE-LABEL: and_v16i8:
75 ; NONEON-NOSVE:       // %bb.0:
76 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
77 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
78 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
79 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
80 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
81 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
82 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]
83 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
84 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
85 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
86 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]
87 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
88 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
89 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
90 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #45]
91 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
92 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
93 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
94 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #44]
95 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
96 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
97 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
98 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #43]
99 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
100 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
101 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
102 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #42]
103 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
104 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
105 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
106 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #41]
107 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
108 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
109 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
110 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #40]
111 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
112 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
113 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
114 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #39]
115 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
116 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
117 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
118 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #38]
119 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
120 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
121 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
122 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #37]
123 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
124 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
125 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
126 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #36]
127 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
128 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
129 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
130 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #35]
131 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
132 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
133 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
134 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #34]
135 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
136 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
137 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
138 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #33]
139 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
140 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
141 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]
142 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
143 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
144 ; NONEON-NOSVE-NEXT:    ret
145   %res = and <16 x i8> %op1, %op2
146   ret <16 x i8> %res
149 define void @and_v32i8(ptr %a, ptr %b) {
150 ; CHECK-LABEL: and_v32i8:
151 ; CHECK:       // %bb.0:
152 ; CHECK-NEXT:    ldp q0, q3, [x1]
153 ; CHECK-NEXT:    ldp q1, q2, [x0]
154 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
155 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
156 ; CHECK-NEXT:    stp q0, q1, [x0]
157 ; CHECK-NEXT:    ret
159 ; NONEON-NOSVE-LABEL: and_v32i8:
160 ; NONEON-NOSVE:       // %bb.0:
161 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
162 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
163 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
164 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
165 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
166 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
167 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #63]
168 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #47]
169 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
170 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #46]
171 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #95]
172 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #62]
173 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
174 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #45]
175 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #94]
176 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #61]
177 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
178 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #44]
179 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #93]
180 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #60]
181 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
182 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #43]
183 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #92]
184 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #59]
185 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
186 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #42]
187 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #91]
188 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #58]
189 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
190 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #41]
191 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #90]
192 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #57]
193 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
194 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #40]
195 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #89]
196 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #56]
197 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
198 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #39]
199 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #88]
200 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #55]
201 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
202 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #38]
203 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #87]
204 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #54]
205 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
206 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #37]
207 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #86]
208 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #53]
209 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
210 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #36]
211 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #85]
212 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #52]
213 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
214 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #35]
215 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #84]
216 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #51]
217 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
218 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #34]
219 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]
220 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #50]
221 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
222 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #33]
223 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #82]
224 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #49]
225 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
226 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #32]
227 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]
228 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #48]
229 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
230 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
231 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]
232 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
233 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
234 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
235 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #79]
236 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
237 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
238 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
239 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #78]
240 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
241 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
242 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
243 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #77]
244 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
245 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
246 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
247 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #76]
248 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
249 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
250 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
251 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #75]
252 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
253 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
254 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
255 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #74]
256 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
257 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
258 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
259 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #73]
260 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
261 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
262 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
263 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #72]
264 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
265 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
266 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
267 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #71]
268 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
269 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
270 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
271 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #70]
272 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
273 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
274 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
275 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #69]
276 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
277 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
278 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
279 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #68]
280 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
281 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
282 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
283 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #67]
284 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
285 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
286 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
287 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #66]
288 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
289 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
290 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
291 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #65]
292 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
293 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
294 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #64]
295 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
296 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
297 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
298 ; NONEON-NOSVE-NEXT:    ret
299   %op1 = load <32 x i8>, ptr %a
300   %op2 = load <32 x i8>, ptr %b
301   %res = and <32 x i8> %op1, %op2
302   store <32 x i8> %res, ptr %a
303   ret void
306 define <4 x i16> @and_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
307 ; CHECK-LABEL: and_v4i16:
308 ; CHECK:       // %bb.0:
309 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
310 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
311 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
312 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
313 ; CHECK-NEXT:    ret
315 ; NONEON-NOSVE-LABEL: and_v4i16:
316 ; NONEON-NOSVE:       // %bb.0:
317 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
318 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
319 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
320 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
321 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
322 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
323 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
324 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]
325 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
326 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
327 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
328 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]
329 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
330 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
331 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
332 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]
333 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
334 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
335 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]
336 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
337 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
338 ; NONEON-NOSVE-NEXT:    ret
339   %res = and <4 x i16> %op1, %op2
340   ret <4 x i16> %res
343 define <8 x i16> @and_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
344 ; CHECK-LABEL: and_v8i16:
345 ; CHECK:       // %bb.0:
346 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
347 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
348 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
349 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
350 ; CHECK-NEXT:    ret
352 ; NONEON-NOSVE-LABEL: and_v8i16:
353 ; NONEON-NOSVE:       // %bb.0:
354 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
355 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
356 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
357 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
358 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
359 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
360 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]
361 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
362 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
363 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
364 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
365 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
366 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
367 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
368 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]
369 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
370 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
371 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
372 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #40]
373 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
374 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
375 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
376 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]
377 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
378 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
379 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
380 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #36]
381 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
382 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
383 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
384 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]
385 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
386 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
387 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]
388 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
389 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
390 ; NONEON-NOSVE-NEXT:    ret
391   %res = and <8 x i16> %op1, %op2
392   ret <8 x i16> %res
395 define void @and_v16i16(ptr %a, ptr %b) {
396 ; CHECK-LABEL: and_v16i16:
397 ; CHECK:       // %bb.0:
398 ; CHECK-NEXT:    ldp q0, q3, [x1]
399 ; CHECK-NEXT:    ldp q1, q2, [x0]
400 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
401 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
402 ; CHECK-NEXT:    stp q0, q1, [x0]
403 ; CHECK-NEXT:    ret
405 ; NONEON-NOSVE-LABEL: and_v16i16:
406 ; NONEON-NOSVE:       // %bb.0:
407 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
408 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
409 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
410 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
411 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
412 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
413 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #62]
414 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #46]
415 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
416 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #44]
417 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #94]
418 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #60]
419 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
420 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #42]
421 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #92]
422 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #58]
423 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
424 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #40]
425 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #90]
426 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #56]
427 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
428 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #38]
429 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #88]
430 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #54]
431 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
432 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #36]
433 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #86]
434 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #52]
435 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
436 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #34]
437 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #84]
438 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #50]
439 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
440 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #32]
441 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #82]
442 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #48]
443 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
444 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
445 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #80]
446 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
447 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
448 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
449 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #78]
450 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
451 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
452 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
453 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #76]
454 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
455 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
456 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
457 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #74]
458 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
459 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
460 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
461 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #72]
462 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
463 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
464 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
465 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #70]
466 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
467 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
468 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
469 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #68]
470 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
471 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
472 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
473 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]
474 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
475 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
476 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]
477 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
478 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
479 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
480 ; NONEON-NOSVE-NEXT:    ret
481   %op1 = load <16 x i16>, ptr %a
482   %op2 = load <16 x i16>, ptr %b
483   %res = and <16 x i16> %op1, %op2
484   store <16 x i16> %res, ptr %a
485   ret void
488 define <2 x i32> @and_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
489 ; CHECK-LABEL: and_v2i32:
490 ; CHECK:       // %bb.0:
491 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
492 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
493 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
494 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
495 ; CHECK-NEXT:    ret
497 ; NONEON-NOSVE-LABEL: and_v2i32:
498 ; NONEON-NOSVE:       // %bb.0:
499 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
500 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
501 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
502 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
503 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
504 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
505 ; NONEON-NOSVE-NEXT:    str w8, [sp, #28]
506 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
507 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
508 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
509 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
510 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
511 ; NONEON-NOSVE-NEXT:    ret
512   %res = and <2 x i32> %op1, %op2
513   ret <2 x i32> %res
516 define <4 x i32> @and_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
517 ; CHECK-LABEL: and_v4i32:
518 ; CHECK:       // %bb.0:
519 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
520 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
521 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
522 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
523 ; CHECK-NEXT:    ret
525 ; NONEON-NOSVE-LABEL: and_v4i32:
526 ; NONEON-NOSVE:       // %bb.0:
527 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
528 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
529 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
530 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
531 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
532 ; NONEON-NOSVE-NEXT:    str w8, [sp, #44]
533 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
534 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
535 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
536 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
537 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
538 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
539 ; NONEON-NOSVE-NEXT:    str w8, [sp, #36]
540 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
541 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
542 ; NONEON-NOSVE-NEXT:    str w8, [sp, #32]
543 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
544 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
545 ; NONEON-NOSVE-NEXT:    ret
546   %res = and <4 x i32> %op1, %op2
547   ret <4 x i32> %res
550 define void @and_v8i32(ptr %a, ptr %b) {
551 ; CHECK-LABEL: and_v8i32:
552 ; CHECK:       // %bb.0:
553 ; CHECK-NEXT:    ldp q0, q3, [x1]
554 ; CHECK-NEXT:    ldp q1, q2, [x0]
555 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
556 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
557 ; CHECK-NEXT:    stp q0, q1, [x0]
558 ; CHECK-NEXT:    ret
560 ; NONEON-NOSVE-LABEL: and_v8i32:
561 ; NONEON-NOSVE:       // %bb.0:
562 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
563 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
564 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
565 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
566 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
567 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
568 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #40]
569 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]
570 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
571 ; NONEON-NOSVE-NEXT:    str w8, [sp, #92]
572 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]
573 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
574 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #32]
575 ; NONEON-NOSVE-NEXT:    str w8, [sp, #88]
576 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]
577 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
578 ; NONEON-NOSVE-NEXT:    str w8, [sp, #84]
579 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]
580 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
581 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
582 ; NONEON-NOSVE-NEXT:    str w8, [sp, #80]
583 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
584 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
585 ; NONEON-NOSVE-NEXT:    str w8, [sp, #76]
586 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
587 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
588 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
589 ; NONEON-NOSVE-NEXT:    str w8, [sp, #72]
590 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
591 ; NONEON-NOSVE-NEXT:    and w8, w10, w8
592 ; NONEON-NOSVE-NEXT:    str w8, [sp, #68]
593 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
594 ; NONEON-NOSVE-NEXT:    and w8, w9, w8
595 ; NONEON-NOSVE-NEXT:    str w8, [sp, #64]
596 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
597 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
598 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
599 ; NONEON-NOSVE-NEXT:    ret
600   %op1 = load <8 x i32>, ptr %a
601   %op2 = load <8 x i32>, ptr %b
602   %res = and <8 x i32> %op1, %op2
603   store <8 x i32> %res, ptr %a
604   ret void
607 define <1 x i64> @and_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
608 ; CHECK-LABEL: and_v1i64:
609 ; CHECK:       // %bb.0:
610 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
611 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
612 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
613 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
614 ; CHECK-NEXT:    ret
616 ; NONEON-NOSVE-LABEL: and_v1i64:
617 ; NONEON-NOSVE:       // %bb.0:
618 ; NONEON-NOSVE-NEXT:    sub sp, sp, #16
619 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16
620 ; NONEON-NOSVE-NEXT:    fmov x8, d1
621 ; NONEON-NOSVE-NEXT:    fmov x9, d0
622 ; NONEON-NOSVE-NEXT:    and x8, x9, x8
623 ; NONEON-NOSVE-NEXT:    str x8, [sp, #8]
624 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
625 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
626 ; NONEON-NOSVE-NEXT:    ret
627   %res = and <1 x i64> %op1, %op2
628   ret <1 x i64> %res
631 define <2 x i64> @and_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
632 ; CHECK-LABEL: and_v2i64:
633 ; CHECK:       // %bb.0:
634 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
635 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
636 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
637 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
638 ; CHECK-NEXT:    ret
640 ; NONEON-NOSVE-LABEL: and_v2i64:
641 ; NONEON-NOSVE:       // %bb.0:
642 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
643 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
644 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
645 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
646 ; NONEON-NOSVE-NEXT:    and x8, x10, x8
647 ; NONEON-NOSVE-NEXT:    str x8, [sp, #40]
648 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
649 ; NONEON-NOSVE-NEXT:    and x8, x9, x8
650 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
651 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
652 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
653 ; NONEON-NOSVE-NEXT:    ret
654   %res = and <2 x i64> %op1, %op2
655   ret <2 x i64> %res
658 define void @and_v4i64(ptr %a, ptr %b) {
659 ; CHECK-LABEL: and_v4i64:
660 ; CHECK:       // %bb.0:
661 ; CHECK-NEXT:    ldp q0, q3, [x1]
662 ; CHECK-NEXT:    ldp q1, q2, [x0]
663 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
664 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
665 ; CHECK-NEXT:    stp q0, q1, [x0]
666 ; CHECK-NEXT:    ret
668 ; NONEON-NOSVE-LABEL: and_v4i64:
669 ; NONEON-NOSVE:       // %bb.0:
670 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
671 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
672 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
673 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
674 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
675 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
676 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp, #32]
677 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #56]
678 ; NONEON-NOSVE-NEXT:    and x8, x10, x8
679 ; NONEON-NOSVE-NEXT:    str x8, [sp, #88]
680 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #48]
681 ; NONEON-NOSVE-NEXT:    and x8, x9, x8
682 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
683 ; NONEON-NOSVE-NEXT:    str x8, [sp, #80]
684 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
685 ; NONEON-NOSVE-NEXT:    and x8, x10, x8
686 ; NONEON-NOSVE-NEXT:    str x8, [sp, #72]
687 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
688 ; NONEON-NOSVE-NEXT:    and x8, x9, x8
689 ; NONEON-NOSVE-NEXT:    str x8, [sp, #64]
690 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
691 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
692 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
693 ; NONEON-NOSVE-NEXT:    ret
694   %op1 = load <4 x i64>, ptr %a
695   %op2 = load <4 x i64>, ptr %b
696   %res = and <4 x i64> %op1, %op2
697   store <4 x i64> %res, ptr %a
698   ret void
702 ; OR
705 define <8 x i8> @or_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
706 ; CHECK-LABEL: or_v8i8:
707 ; CHECK:       // %bb.0:
708 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
709 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
710 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
711 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
712 ; CHECK-NEXT:    ret
714 ; NONEON-NOSVE-LABEL: or_v8i8:
715 ; NONEON-NOSVE:       // %bb.0:
716 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
717 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
718 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
719 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
720 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
721 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
722 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
723 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]
724 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
725 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
726 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
727 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]
728 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
729 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
730 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
731 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]
732 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
733 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
734 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
735 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]
736 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
737 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
738 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
739 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]
740 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
741 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
742 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
743 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]
744 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
745 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
746 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
747 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]
748 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
749 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
750 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]
751 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
752 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
753 ; NONEON-NOSVE-NEXT:    ret
754   %res = or <8 x i8> %op1, %op2
755   ret <8 x i8> %res
758 define <16 x i8> @or_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
759 ; CHECK-LABEL: or_v16i8:
760 ; CHECK:       // %bb.0:
761 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
762 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
763 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
764 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
765 ; CHECK-NEXT:    ret
767 ; NONEON-NOSVE-LABEL: or_v16i8:
768 ; NONEON-NOSVE:       // %bb.0:
769 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
770 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
771 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
772 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
773 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
774 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
775 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]
776 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
777 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
778 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
779 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]
780 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
781 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
782 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
783 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #45]
784 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
785 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
786 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
787 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #44]
788 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
789 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
790 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
791 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #43]
792 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
793 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
794 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
795 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #42]
796 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
797 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
798 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
799 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #41]
800 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
801 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
802 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
803 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #40]
804 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
805 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
806 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
807 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #39]
808 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
809 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
810 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
811 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #38]
812 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
813 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
814 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
815 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #37]
816 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
817 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
818 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
819 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #36]
820 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
821 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
822 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
823 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #35]
824 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
825 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
826 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
827 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #34]
828 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
829 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
830 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
831 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #33]
832 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
833 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
834 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]
835 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
836 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
837 ; NONEON-NOSVE-NEXT:    ret
838   %res = or <16 x i8> %op1, %op2
839   ret <16 x i8> %res
842 define void @or_v32i8(ptr %a, ptr %b) {
843 ; CHECK-LABEL: or_v32i8:
844 ; CHECK:       // %bb.0:
845 ; CHECK-NEXT:    ldp q0, q3, [x1]
846 ; CHECK-NEXT:    ldp q1, q2, [x0]
847 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
848 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
849 ; CHECK-NEXT:    stp q0, q1, [x0]
850 ; CHECK-NEXT:    ret
852 ; NONEON-NOSVE-LABEL: or_v32i8:
853 ; NONEON-NOSVE:       // %bb.0:
854 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
855 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
856 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
857 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
858 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
859 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
860 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #63]
861 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #47]
862 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
863 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #46]
864 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #95]
865 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #62]
866 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
867 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #45]
868 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #94]
869 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #61]
870 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
871 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #44]
872 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #93]
873 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #60]
874 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
875 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #43]
876 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #92]
877 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #59]
878 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
879 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #42]
880 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #91]
881 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #58]
882 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
883 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #41]
884 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #90]
885 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #57]
886 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
887 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #40]
888 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #89]
889 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #56]
890 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
891 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #39]
892 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #88]
893 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #55]
894 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
895 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #38]
896 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #87]
897 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #54]
898 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
899 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #37]
900 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #86]
901 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #53]
902 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
903 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #36]
904 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #85]
905 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #52]
906 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
907 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #35]
908 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #84]
909 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #51]
910 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
911 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #34]
912 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]
913 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #50]
914 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
915 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #33]
916 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #82]
917 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #49]
918 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
919 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #32]
920 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]
921 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #48]
922 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
923 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
924 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]
925 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
926 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
927 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
928 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #79]
929 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
930 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
931 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
932 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #78]
933 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
934 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
935 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
936 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #77]
937 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
938 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
939 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
940 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #76]
941 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
942 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
943 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
944 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #75]
945 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
946 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
947 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
948 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #74]
949 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
950 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
951 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
952 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #73]
953 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
954 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
955 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
956 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #72]
957 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
958 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
959 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
960 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #71]
961 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
962 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
963 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
964 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #70]
965 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
966 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
967 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
968 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #69]
969 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
970 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
971 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
972 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #68]
973 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
974 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
975 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
976 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #67]
977 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
978 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
979 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
980 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #66]
981 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
982 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
983 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
984 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #65]
985 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
986 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
987 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #64]
988 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
989 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
990 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
991 ; NONEON-NOSVE-NEXT:    ret
992   %op1 = load <32 x i8>, ptr %a
993   %op2 = load <32 x i8>, ptr %b
994   %res = or <32 x i8> %op1, %op2
995   store <32 x i8> %res, ptr %a
996   ret void
999 define <4 x i16> @or_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
1000 ; CHECK-LABEL: or_v4i16:
1001 ; CHECK:       // %bb.0:
1002 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1003 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1004 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1005 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1006 ; CHECK-NEXT:    ret
1008 ; NONEON-NOSVE-LABEL: or_v4i16:
1009 ; NONEON-NOSVE:       // %bb.0:
1010 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
1011 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
1012 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
1013 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1014 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1015 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1016 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1017 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]
1018 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1019 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1020 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1021 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]
1022 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1023 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1024 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1025 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]
1026 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1027 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1028 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]
1029 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1030 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
1031 ; NONEON-NOSVE-NEXT:    ret
1032   %res = or <4 x i16> %op1, %op2
1033   ret <4 x i16> %res
1036 define <8 x i16> @or_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
1037 ; CHECK-LABEL: or_v8i16:
1038 ; CHECK:       // %bb.0:
1039 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1040 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1041 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1042 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1043 ; CHECK-NEXT:    ret
1045 ; NONEON-NOSVE-LABEL: or_v8i16:
1046 ; NONEON-NOSVE:       // %bb.0:
1047 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1048 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1049 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
1050 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1051 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1052 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1053 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]
1054 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
1055 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1056 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1057 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
1058 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
1059 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1060 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1061 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]
1062 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
1063 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1064 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
1065 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #40]
1066 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1067 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1068 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
1069 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]
1070 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1071 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1072 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
1073 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #36]
1074 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1075 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1076 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
1077 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]
1078 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1079 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1080 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]
1081 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1082 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1083 ; NONEON-NOSVE-NEXT:    ret
1084   %res = or <8 x i16> %op1, %op2
1085   ret <8 x i16> %res
1088 define void @or_v16i16(ptr %a, ptr %b) {
1089 ; CHECK-LABEL: or_v16i16:
1090 ; CHECK:       // %bb.0:
1091 ; CHECK-NEXT:    ldp q0, q3, [x1]
1092 ; CHECK-NEXT:    ldp q1, q2, [x0]
1093 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
1094 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
1095 ; CHECK-NEXT:    stp q0, q1, [x0]
1096 ; CHECK-NEXT:    ret
1098 ; NONEON-NOSVE-LABEL: or_v16i16:
1099 ; NONEON-NOSVE:       // %bb.0:
1100 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1101 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1102 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1103 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1104 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1105 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1106 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #62]
1107 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #46]
1108 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1109 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #44]
1110 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #94]
1111 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #60]
1112 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1113 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #42]
1114 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #92]
1115 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #58]
1116 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1117 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #40]
1118 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #90]
1119 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #56]
1120 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1121 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #38]
1122 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #88]
1123 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #54]
1124 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1125 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #36]
1126 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #86]
1127 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #52]
1128 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1129 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #34]
1130 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #84]
1131 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #50]
1132 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1133 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #32]
1134 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #82]
1135 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #48]
1136 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1137 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1138 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #80]
1139 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
1140 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1141 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1142 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #78]
1143 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
1144 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1145 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1146 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #76]
1147 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
1148 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1149 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1150 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #74]
1151 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
1152 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1153 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
1154 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #72]
1155 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1156 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1157 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
1158 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #70]
1159 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1160 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1161 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
1162 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #68]
1163 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1164 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1165 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
1166 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]
1167 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1168 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1169 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]
1170 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1171 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1172 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1173 ; NONEON-NOSVE-NEXT:    ret
1174   %op1 = load <16 x i16>, ptr %a
1175   %op2 = load <16 x i16>, ptr %b
1176   %res = or <16 x i16> %op1, %op2
1177   store <16 x i16> %res, ptr %a
1178   ret void
1181 define <2 x i32> @or_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
1182 ; CHECK-LABEL: or_v2i32:
1183 ; CHECK:       // %bb.0:
1184 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1185 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1186 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1187 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1188 ; CHECK-NEXT:    ret
1190 ; NONEON-NOSVE-LABEL: or_v2i32:
1191 ; NONEON-NOSVE:       // %bb.0:
1192 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
1193 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
1194 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
1195 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1196 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1197 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1198 ; NONEON-NOSVE-NEXT:    str w8, [sp, #28]
1199 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1200 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1201 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
1202 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1203 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
1204 ; NONEON-NOSVE-NEXT:    ret
1205   %res = or <2 x i32> %op1, %op2
1206   ret <2 x i32> %res
1209 define <4 x i32> @or_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
1210 ; CHECK-LABEL: or_v4i32:
1211 ; CHECK:       // %bb.0:
1212 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1213 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1214 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1215 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1216 ; CHECK-NEXT:    ret
1218 ; NONEON-NOSVE-LABEL: or_v4i32:
1219 ; NONEON-NOSVE:       // %bb.0:
1220 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1221 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1222 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1223 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
1224 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1225 ; NONEON-NOSVE-NEXT:    str w8, [sp, #44]
1226 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
1227 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1228 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
1229 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
1230 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1231 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1232 ; NONEON-NOSVE-NEXT:    str w8, [sp, #36]
1233 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1234 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1235 ; NONEON-NOSVE-NEXT:    str w8, [sp, #32]
1236 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1237 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1238 ; NONEON-NOSVE-NEXT:    ret
1239   %res = or <4 x i32> %op1, %op2
1240   ret <4 x i32> %res
1243 define void @or_v8i32(ptr %a, ptr %b) {
1244 ; CHECK-LABEL: or_v8i32:
1245 ; CHECK:       // %bb.0:
1246 ; CHECK-NEXT:    ldp q0, q3, [x1]
1247 ; CHECK-NEXT:    ldp q1, q2, [x0]
1248 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
1249 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
1250 ; CHECK-NEXT:    stp q0, q1, [x0]
1251 ; CHECK-NEXT:    ret
1253 ; NONEON-NOSVE-LABEL: or_v8i32:
1254 ; NONEON-NOSVE:       // %bb.0:
1255 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1256 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1257 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1258 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1259 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1260 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1261 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #40]
1262 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]
1263 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1264 ; NONEON-NOSVE-NEXT:    str w8, [sp, #92]
1265 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]
1266 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1267 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #32]
1268 ; NONEON-NOSVE-NEXT:    str w8, [sp, #88]
1269 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]
1270 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1271 ; NONEON-NOSVE-NEXT:    str w8, [sp, #84]
1272 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]
1273 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1274 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1275 ; NONEON-NOSVE-NEXT:    str w8, [sp, #80]
1276 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
1277 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1278 ; NONEON-NOSVE-NEXT:    str w8, [sp, #76]
1279 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
1280 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1281 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
1282 ; NONEON-NOSVE-NEXT:    str w8, [sp, #72]
1283 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1284 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
1285 ; NONEON-NOSVE-NEXT:    str w8, [sp, #68]
1286 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1287 ; NONEON-NOSVE-NEXT:    orr w8, w9, w8
1288 ; NONEON-NOSVE-NEXT:    str w8, [sp, #64]
1289 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1290 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1291 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1292 ; NONEON-NOSVE-NEXT:    ret
1293   %op1 = load <8 x i32>, ptr %a
1294   %op2 = load <8 x i32>, ptr %b
1295   %res = or <8 x i32> %op1, %op2
1296   store <8 x i32> %res, ptr %a
1297   ret void
1300 define <1 x i64> @or_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
1301 ; CHECK-LABEL: or_v1i64:
1302 ; CHECK:       // %bb.0:
1303 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1304 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1305 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1306 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1307 ; CHECK-NEXT:    ret
1309 ; NONEON-NOSVE-LABEL: or_v1i64:
1310 ; NONEON-NOSVE:       // %bb.0:
1311 ; NONEON-NOSVE-NEXT:    sub sp, sp, #16
1312 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16
1313 ; NONEON-NOSVE-NEXT:    fmov x8, d1
1314 ; NONEON-NOSVE-NEXT:    fmov x9, d0
1315 ; NONEON-NOSVE-NEXT:    orr x8, x9, x8
1316 ; NONEON-NOSVE-NEXT:    str x8, [sp, #8]
1317 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
1318 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
1319 ; NONEON-NOSVE-NEXT:    ret
1320   %res = or <1 x i64> %op1, %op2
1321   ret <1 x i64> %res
1324 define <2 x i64> @or_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
1325 ; CHECK-LABEL: or_v2i64:
1326 ; CHECK:       // %bb.0:
1327 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1328 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1329 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
1330 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1331 ; CHECK-NEXT:    ret
1333 ; NONEON-NOSVE-LABEL: or_v2i64:
1334 ; NONEON-NOSVE:       // %bb.0:
1335 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1336 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1337 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
1338 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
1339 ; NONEON-NOSVE-NEXT:    orr x8, x10, x8
1340 ; NONEON-NOSVE-NEXT:    str x8, [sp, #40]
1341 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
1342 ; NONEON-NOSVE-NEXT:    orr x8, x9, x8
1343 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
1344 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1345 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1346 ; NONEON-NOSVE-NEXT:    ret
1347   %res = or <2 x i64> %op1, %op2
1348   ret <2 x i64> %res
1351 define void @or_v4i64(ptr %a, ptr %b) {
1352 ; CHECK-LABEL: or_v4i64:
1353 ; CHECK:       // %bb.0:
1354 ; CHECK-NEXT:    ldp q0, q3, [x1]
1355 ; CHECK-NEXT:    ldp q1, q2, [x0]
1356 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
1357 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
1358 ; CHECK-NEXT:    stp q0, q1, [x0]
1359 ; CHECK-NEXT:    ret
1361 ; NONEON-NOSVE-LABEL: or_v4i64:
1362 ; NONEON-NOSVE:       // %bb.0:
1363 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1364 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1365 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1366 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1367 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1368 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1369 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp, #32]
1370 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #56]
1371 ; NONEON-NOSVE-NEXT:    orr x8, x10, x8
1372 ; NONEON-NOSVE-NEXT:    str x8, [sp, #88]
1373 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #48]
1374 ; NONEON-NOSVE-NEXT:    orr x8, x9, x8
1375 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
1376 ; NONEON-NOSVE-NEXT:    str x8, [sp, #80]
1377 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
1378 ; NONEON-NOSVE-NEXT:    orr x8, x10, x8
1379 ; NONEON-NOSVE-NEXT:    str x8, [sp, #72]
1380 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
1381 ; NONEON-NOSVE-NEXT:    orr x8, x9, x8
1382 ; NONEON-NOSVE-NEXT:    str x8, [sp, #64]
1383 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1384 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1385 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1386 ; NONEON-NOSVE-NEXT:    ret
1387   %op1 = load <4 x i64>, ptr %a
1388   %op2 = load <4 x i64>, ptr %b
1389   %res = or <4 x i64> %op1, %op2
1390   store <4 x i64> %res, ptr %a
1391   ret void
1395 ; XOR
1398 define <8 x i8> @xor_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
1399 ; CHECK-LABEL: xor_v8i8:
1400 ; CHECK:       // %bb.0:
1401 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1402 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1403 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1404 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1405 ; CHECK-NEXT:    ret
1407 ; NONEON-NOSVE-LABEL: xor_v8i8:
1408 ; NONEON-NOSVE:       // %bb.0:
1409 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
1410 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
1411 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
1412 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
1413 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
1414 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1415 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
1416 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]
1417 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
1418 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1419 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
1420 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]
1421 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
1422 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1423 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
1424 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #29]
1425 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
1426 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1427 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
1428 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #28]
1429 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
1430 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1431 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
1432 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #27]
1433 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
1434 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1435 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
1436 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #26]
1437 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
1438 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1439 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
1440 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #25]
1441 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
1442 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1443 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #24]
1444 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1445 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
1446 ; NONEON-NOSVE-NEXT:    ret
1447   %res = xor <8 x i8> %op1, %op2
1448   ret <8 x i8> %res
1451 define <16 x i8> @xor_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
1452 ; CHECK-LABEL: xor_v16i8:
1453 ; CHECK:       // %bb.0:
1454 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1455 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1456 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1457 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1458 ; CHECK-NEXT:    ret
1460 ; NONEON-NOSVE-LABEL: xor_v16i8:
1461 ; NONEON-NOSVE:       // %bb.0:
1462 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1463 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1464 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
1465 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
1466 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1467 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
1468 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]
1469 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
1470 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1471 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
1472 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]
1473 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
1474 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1475 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
1476 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #45]
1477 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
1478 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1479 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
1480 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #44]
1481 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
1482 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1483 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
1484 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #43]
1485 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
1486 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1487 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
1488 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #42]
1489 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
1490 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1491 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
1492 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #41]
1493 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
1494 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1495 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
1496 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #40]
1497 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
1498 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1499 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
1500 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #39]
1501 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
1502 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1503 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
1504 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #38]
1505 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
1506 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1507 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
1508 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #37]
1509 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
1510 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1511 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
1512 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #36]
1513 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
1514 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1515 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
1516 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #35]
1517 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
1518 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1519 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
1520 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #34]
1521 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
1522 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1523 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
1524 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #33]
1525 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
1526 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1527 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]
1528 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1529 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1530 ; NONEON-NOSVE-NEXT:    ret
1531   %res = xor <16 x i8> %op1, %op2
1532   ret <16 x i8> %res
1535 define void @xor_v32i8(ptr %a, ptr %b) {
1536 ; CHECK-LABEL: xor_v32i8:
1537 ; CHECK:       // %bb.0:
1538 ; CHECK-NEXT:    ldp q0, q3, [x1]
1539 ; CHECK-NEXT:    ldp q1, q2, [x0]
1540 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
1541 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
1542 ; CHECK-NEXT:    stp q0, q1, [x0]
1543 ; CHECK-NEXT:    ret
1545 ; NONEON-NOSVE-LABEL: xor_v32i8:
1546 ; NONEON-NOSVE:       // %bb.0:
1547 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1548 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1549 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1550 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1551 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1552 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1553 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #63]
1554 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #47]
1555 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1556 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #46]
1557 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #95]
1558 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #62]
1559 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1560 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #45]
1561 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #94]
1562 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #61]
1563 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1564 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #44]
1565 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #93]
1566 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #60]
1567 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1568 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #43]
1569 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #92]
1570 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #59]
1571 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1572 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #42]
1573 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #91]
1574 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #58]
1575 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1576 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #41]
1577 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #90]
1578 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #57]
1579 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1580 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #40]
1581 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #89]
1582 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #56]
1583 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1584 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #39]
1585 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #88]
1586 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #55]
1587 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1588 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #38]
1589 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #87]
1590 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #54]
1591 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1592 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #37]
1593 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #86]
1594 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #53]
1595 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1596 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #36]
1597 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #85]
1598 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #52]
1599 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1600 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #35]
1601 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #84]
1602 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #51]
1603 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1604 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #34]
1605 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #83]
1606 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #50]
1607 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1608 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #33]
1609 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #82]
1610 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #49]
1611 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1612 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #32]
1613 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #81]
1614 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #48]
1615 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1616 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #15]
1617 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #80]
1618 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #31]
1619 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1620 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #14]
1621 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #79]
1622 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #30]
1623 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1624 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #13]
1625 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #78]
1626 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #29]
1627 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1628 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #12]
1629 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #77]
1630 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #28]
1631 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1632 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #11]
1633 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #76]
1634 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #27]
1635 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1636 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #10]
1637 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #75]
1638 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #26]
1639 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1640 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #9]
1641 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #74]
1642 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #25]
1643 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1644 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #8]
1645 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #73]
1646 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #24]
1647 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1648 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #7]
1649 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #72]
1650 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #23]
1651 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1652 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #6]
1653 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #71]
1654 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #22]
1655 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1656 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #5]
1657 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #70]
1658 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #21]
1659 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1660 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #4]
1661 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #69]
1662 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #20]
1663 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1664 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #3]
1665 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #68]
1666 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #19]
1667 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1668 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #2]
1669 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #67]
1670 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #18]
1671 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1672 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1]
1673 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #66]
1674 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #17]
1675 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1676 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp]
1677 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #65]
1678 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
1679 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1680 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #64]
1681 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1682 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1683 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1684 ; NONEON-NOSVE-NEXT:    ret
1685   %op1 = load <32 x i8>, ptr %a
1686   %op2 = load <32 x i8>, ptr %b
1687   %res = xor <32 x i8> %op1, %op2
1688   store <32 x i8> %res, ptr %a
1689   ret void
1692 define <4 x i16> @xor_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
1693 ; CHECK-LABEL: xor_v4i16:
1694 ; CHECK:       // %bb.0:
1695 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1696 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1697 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1698 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1699 ; CHECK-NEXT:    ret
1701 ; NONEON-NOSVE-LABEL: xor_v4i16:
1702 ; NONEON-NOSVE:       // %bb.0:
1703 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
1704 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
1705 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
1706 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1707 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1708 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1709 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1710 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]
1711 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1712 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1713 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1714 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]
1715 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1716 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1717 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1718 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #26]
1719 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1720 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1721 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #24]
1722 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1723 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
1724 ; NONEON-NOSVE-NEXT:    ret
1725   %res = xor <4 x i16> %op1, %op2
1726   ret <4 x i16> %res
1729 define <8 x i16> @xor_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
1730 ; CHECK-LABEL: xor_v8i16:
1731 ; CHECK:       // %bb.0:
1732 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1733 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1734 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1735 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1736 ; CHECK-NEXT:    ret
1738 ; NONEON-NOSVE-LABEL: xor_v8i16:
1739 ; NONEON-NOSVE:       // %bb.0:
1740 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1741 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1742 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
1743 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1744 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1745 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1746 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #46]
1747 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
1748 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1749 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1750 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
1751 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
1752 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1753 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1754 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #42]
1755 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
1756 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1757 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
1758 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #40]
1759 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1760 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1761 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
1762 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #38]
1763 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1764 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1765 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
1766 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #36]
1767 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1768 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1769 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
1770 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #34]
1771 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1772 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1773 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]
1774 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1775 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1776 ; NONEON-NOSVE-NEXT:    ret
1777   %res = xor <8 x i16> %op1, %op2
1778   ret <8 x i16> %res
1781 define void @xor_v16i16(ptr %a, ptr %b) {
1782 ; CHECK-LABEL: xor_v16i16:
1783 ; CHECK:       // %bb.0:
1784 ; CHECK-NEXT:    ldp q0, q3, [x1]
1785 ; CHECK-NEXT:    ldp q1, q2, [x0]
1786 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
1787 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
1788 ; CHECK-NEXT:    stp q0, q1, [x0]
1789 ; CHECK-NEXT:    ret
1791 ; NONEON-NOSVE-LABEL: xor_v16i16:
1792 ; NONEON-NOSVE:       // %bb.0:
1793 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1794 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1795 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1796 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1797 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1798 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1799 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #62]
1800 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #46]
1801 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1802 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #44]
1803 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #94]
1804 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #60]
1805 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1806 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #42]
1807 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #92]
1808 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #58]
1809 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1810 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #40]
1811 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #90]
1812 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #56]
1813 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1814 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #38]
1815 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #88]
1816 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #54]
1817 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1818 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #36]
1819 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #86]
1820 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #52]
1821 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1822 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #34]
1823 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #84]
1824 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #50]
1825 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1826 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #32]
1827 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #82]
1828 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #48]
1829 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1830 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
1831 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #80]
1832 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #30]
1833 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1834 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #12]
1835 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #78]
1836 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #28]
1837 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1838 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
1839 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #76]
1840 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #26]
1841 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1842 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #8]
1843 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #74]
1844 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #24]
1845 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1846 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #6]
1847 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #72]
1848 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #22]
1849 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1850 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #4]
1851 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #70]
1852 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #20]
1853 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1854 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #2]
1855 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #68]
1856 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #18]
1857 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1858 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp]
1859 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #66]
1860 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
1861 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1862 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #64]
1863 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1864 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1865 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1866 ; NONEON-NOSVE-NEXT:    ret
1867   %op1 = load <16 x i16>, ptr %a
1868   %op2 = load <16 x i16>, ptr %b
1869   %res = xor <16 x i16> %op1, %op2
1870   store <16 x i16> %res, ptr %a
1871   ret void
1874 define <2 x i32> @xor_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
1875 ; CHECK-LABEL: xor_v2i32:
1876 ; CHECK:       // %bb.0:
1877 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1878 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1879 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1880 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1881 ; CHECK-NEXT:    ret
1883 ; NONEON-NOSVE-LABEL: xor_v2i32:
1884 ; NONEON-NOSVE:       // %bb.0:
1885 ; NONEON-NOSVE-NEXT:    sub sp, sp, #32
1886 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 32
1887 ; NONEON-NOSVE-NEXT:    stp d0, d1, [sp, #8]
1888 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1889 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1890 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1891 ; NONEON-NOSVE-NEXT:    str w8, [sp, #28]
1892 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1893 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1894 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
1895 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1896 ; NONEON-NOSVE-NEXT:    add sp, sp, #32
1897 ; NONEON-NOSVE-NEXT:    ret
1898   %res = xor <2 x i32> %op1, %op2
1899   ret <2 x i32> %res
1902 define <4 x i32> @xor_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
1903 ; CHECK-LABEL: xor_v4i32:
1904 ; CHECK:       // %bb.0:
1905 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1906 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
1907 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1908 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1909 ; CHECK-NEXT:    ret
1911 ; NONEON-NOSVE-LABEL: xor_v4i32:
1912 ; NONEON-NOSVE:       // %bb.0:
1913 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
1914 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1915 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1916 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
1917 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1918 ; NONEON-NOSVE-NEXT:    str w8, [sp, #44]
1919 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
1920 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1921 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
1922 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
1923 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1924 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1925 ; NONEON-NOSVE-NEXT:    str w8, [sp, #36]
1926 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1927 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1928 ; NONEON-NOSVE-NEXT:    str w8, [sp, #32]
1929 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1930 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1931 ; NONEON-NOSVE-NEXT:    ret
1932   %res = xor <4 x i32> %op1, %op2
1933   ret <4 x i32> %res
1936 define void @xor_v8i32(ptr %a, ptr %b) {
1937 ; CHECK-LABEL: xor_v8i32:
1938 ; CHECK:       // %bb.0:
1939 ; CHECK-NEXT:    ldp q0, q3, [x1]
1940 ; CHECK-NEXT:    ldp q1, q2, [x0]
1941 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
1942 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
1943 ; CHECK-NEXT:    stp q0, q1, [x0]
1944 ; CHECK-NEXT:    ret
1946 ; NONEON-NOSVE-LABEL: xor_v8i32:
1947 ; NONEON-NOSVE:       // %bb.0:
1948 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
1949 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
1950 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
1951 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
1952 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
1953 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
1954 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #40]
1955 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]
1956 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1957 ; NONEON-NOSVE-NEXT:    str w8, [sp, #92]
1958 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]
1959 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1960 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #32]
1961 ; NONEON-NOSVE-NEXT:    str w8, [sp, #88]
1962 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]
1963 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1964 ; NONEON-NOSVE-NEXT:    str w8, [sp, #84]
1965 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]
1966 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1967 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp, #8]
1968 ; NONEON-NOSVE-NEXT:    str w8, [sp, #80]
1969 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]
1970 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1971 ; NONEON-NOSVE-NEXT:    str w8, [sp, #76]
1972 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]
1973 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1974 ; NONEON-NOSVE-NEXT:    ldp w9, w10, [sp]
1975 ; NONEON-NOSVE-NEXT:    str w8, [sp, #72]
1976 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]
1977 ; NONEON-NOSVE-NEXT:    eor w8, w10, w8
1978 ; NONEON-NOSVE-NEXT:    str w8, [sp, #68]
1979 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]
1980 ; NONEON-NOSVE-NEXT:    eor w8, w9, w8
1981 ; NONEON-NOSVE-NEXT:    str w8, [sp, #64]
1982 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
1983 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
1984 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
1985 ; NONEON-NOSVE-NEXT:    ret
1986   %op1 = load <8 x i32>, ptr %a
1987   %op2 = load <8 x i32>, ptr %b
1988   %res = xor <8 x i32> %op1, %op2
1989   store <8 x i32> %res, ptr %a
1990   ret void
1993 define <1 x i64> @xor_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
1994 ; CHECK-LABEL: xor_v1i64:
1995 ; CHECK:       // %bb.0:
1996 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1997 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
1998 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
1999 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
2000 ; CHECK-NEXT:    ret
2002 ; NONEON-NOSVE-LABEL: xor_v1i64:
2003 ; NONEON-NOSVE:       // %bb.0:
2004 ; NONEON-NOSVE-NEXT:    sub sp, sp, #16
2005 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 16
2006 ; NONEON-NOSVE-NEXT:    fmov x8, d1
2007 ; NONEON-NOSVE-NEXT:    fmov x9, d0
2008 ; NONEON-NOSVE-NEXT:    eor x8, x9, x8
2009 ; NONEON-NOSVE-NEXT:    str x8, [sp, #8]
2010 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]
2011 ; NONEON-NOSVE-NEXT:    add sp, sp, #16
2012 ; NONEON-NOSVE-NEXT:    ret
2013   %res = xor <1 x i64> %op1, %op2
2014   ret <1 x i64> %res
2017 define <2 x i64> @xor_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
2018 ; CHECK-LABEL: xor_v2i64:
2019 ; CHECK:       // %bb.0:
2020 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
2021 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
2022 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
2023 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2024 ; CHECK-NEXT:    ret
2026 ; NONEON-NOSVE-LABEL: xor_v2i64:
2027 ; NONEON-NOSVE:       // %bb.0:
2028 ; NONEON-NOSVE-NEXT:    stp q0, q1, [sp, #-48]!
2029 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
2030 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
2031 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
2032 ; NONEON-NOSVE-NEXT:    eor x8, x10, x8
2033 ; NONEON-NOSVE-NEXT:    str x8, [sp, #40]
2034 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
2035 ; NONEON-NOSVE-NEXT:    eor x8, x9, x8
2036 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
2037 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
2038 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
2039 ; NONEON-NOSVE-NEXT:    ret
2040   %res = xor <2 x i64> %op1, %op2
2041   ret <2 x i64> %res
2044 define void @xor_v4i64(ptr %a, ptr %b) {
2045 ; CHECK-LABEL: xor_v4i64:
2046 ; CHECK:       // %bb.0:
2047 ; CHECK-NEXT:    ldp q0, q3, [x1]
2048 ; CHECK-NEXT:    ldp q1, q2, [x0]
2049 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
2050 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
2051 ; CHECK-NEXT:    stp q0, q1, [x0]
2052 ; CHECK-NEXT:    ret
2054 ; NONEON-NOSVE-LABEL: xor_v4i64:
2055 ; NONEON-NOSVE:       // %bb.0:
2056 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
2057 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
2058 ; NONEON-NOSVE-NEXT:    ldp q3, q0, [x1]
2059 ; NONEON-NOSVE-NEXT:    ldp q2, q1, [x0]
2060 ; NONEON-NOSVE-NEXT:    stp q2, q3, [sp]
2061 ; NONEON-NOSVE-NEXT:    stp q1, q0, [sp, #32]
2062 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp, #32]
2063 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #56]
2064 ; NONEON-NOSVE-NEXT:    eor x8, x10, x8
2065 ; NONEON-NOSVE-NEXT:    str x8, [sp, #88]
2066 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #48]
2067 ; NONEON-NOSVE-NEXT:    eor x8, x9, x8
2068 ; NONEON-NOSVE-NEXT:    ldp x9, x10, [sp]
2069 ; NONEON-NOSVE-NEXT:    str x8, [sp, #80]
2070 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #24]
2071 ; NONEON-NOSVE-NEXT:    eor x8, x10, x8
2072 ; NONEON-NOSVE-NEXT:    str x8, [sp, #72]
2073 ; NONEON-NOSVE-NEXT:    ldr x8, [sp, #16]
2074 ; NONEON-NOSVE-NEXT:    eor x8, x9, x8
2075 ; NONEON-NOSVE-NEXT:    str x8, [sp, #64]
2076 ; NONEON-NOSVE-NEXT:    ldp q0, q1, [sp, #64]
2077 ; NONEON-NOSVE-NEXT:    stp q0, q1, [x0]
2078 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
2079 ; NONEON-NOSVE-NEXT:    ret
2080   %op1 = load <4 x i64>, ptr %a
2081   %op2 = load <4 x i64>, ptr %b
2082   %res = xor <4 x i64> %op1, %op2
2083   store <4 x i64> %res, ptr %a
2084   ret void