[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-masked-load.ll
blob48a642c908bfe6ee8c51d1640e99221dd7b84521
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 -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
6 target triple = "aarch64-unknown-linux-gnu"
9 ; Masked Load
12 define <4 x i8> @masked_load_v4i8(ptr %src, <4 x i1> %mask) {
13 ; CHECK-LABEL: masked_load_v4i8:
14 ; CHECK:       // %bb.0:
15 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
16 ; CHECK-NEXT:    ptrue p0.h, vl4
17 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
18 ; CHECK-NEXT:    asr z0.h, z0.h, #15
19 ; CHECK-NEXT:    cmpne p0.h, p0/z, z0.h, #0
20 ; CHECK-NEXT:    ld1b { z0.h }, p0/z, [x0]
21 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
22 ; CHECK-NEXT:    ret
24 ; NONEON-NOSVE-LABEL: masked_load_v4i8:
25 ; NONEON-NOSVE:       // %bb.0:
26 ; NONEON-NOSVE-NEXT:    sub sp, sp, #128
27 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 128
28 ; NONEON-NOSVE-NEXT:    str d0, [sp, #112]
29 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #114]
30 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #116]
31 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #118]
32 ; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #112]
33 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
34 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
35 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
36 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
37 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x4
38 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
39 ; NONEON-NOSVE-NEXT:    bfxil w8, w11, #0, #1
40 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
41 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
42 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB0_2
43 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
44 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0]
45 ; NONEON-NOSVE-NEXT:    strh wzr, [sp, #110]
46 ; NONEON-NOSVE-NEXT:    stur wzr, [sp, #106]
47 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #104]
48 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #104]
49 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB0_3
50 ; NONEON-NOSVE-NEXT:    b .LBB0_4
51 ; NONEON-NOSVE-NEXT:  .LBB0_2:
52 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI0_0
53 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI0_0]
54 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB0_4
55 ; NONEON-NOSVE-NEXT:  .LBB0_3: // %cond.load1
56 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #1]
57 ; NONEON-NOSVE-NEXT:    str d0, [sp, #80]
58 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #96]
59 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #84]
60 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #96]
61 ; NONEON-NOSVE-NEXT:    str w9, [sp, #92]
62 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #80]
63 ; NONEON-NOSVE-NEXT:    str d0, [sp, #72]
64 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #88]
65 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #72]
66 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #90]
67 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #88]
68 ; NONEON-NOSVE-NEXT:  .LBB0_4: // %else2
69 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB0_7
70 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
71 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB0_8
72 ; NONEON-NOSVE-NEXT:  .LBB0_6: // %else8
73 ; NONEON-NOSVE-NEXT:    add sp, sp, #128
74 ; NONEON-NOSVE-NEXT:    ret
75 ; NONEON-NOSVE-NEXT:  .LBB0_7: // %cond.load4
76 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #2]
77 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
78 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #64]
79 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #54]
80 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #64]
81 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #62]
82 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #48]
83 ; NONEON-NOSVE-NEXT:    str d0, [sp, #40]
84 ; NONEON-NOSVE-NEXT:    str w9, [sp, #56]
85 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #40]
86 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #60]
87 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #56]
88 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB0_6
89 ; NONEON-NOSVE-NEXT:  .LBB0_8: // %cond.load7
90 ; NONEON-NOSVE-NEXT:    ldrb w8, [x0, #3]
91 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
92 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #32]
93 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]
94 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #32]
95 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]
96 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
97 ; NONEON-NOSVE-NEXT:    str d0, [sp, #16]
98 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
99 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #16]
100 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #30]
101 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
102 ; NONEON-NOSVE-NEXT:    add sp, sp, #128
103 ; NONEON-NOSVE-NEXT:    ret
104   %load = call <4 x i8> @llvm.masked.load.v4i8(ptr %src, i32 8, <4 x i1> %mask, <4 x i8> zeroinitializer)
105   ret <4 x i8> %load
108 define <8 x i8> @masked_load_v8i8(ptr %src, <8 x i1> %mask) {
109 ; CHECK-LABEL: masked_load_v8i8:
110 ; CHECK:       // %bb.0:
111 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
112 ; CHECK-NEXT:    ptrue p0.b, vl8
113 ; CHECK-NEXT:    lsl z0.b, z0.b, #7
114 ; CHECK-NEXT:    asr z0.b, z0.b, #7
115 ; CHECK-NEXT:    cmpne p0.b, p0/z, z0.b, #0
116 ; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x0]
117 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
118 ; CHECK-NEXT:    ret
120 ; NONEON-NOSVE-LABEL: masked_load_v8i8:
121 ; NONEON-NOSVE:       // %bb.0:
122 ; NONEON-NOSVE-NEXT:    sub sp, sp, #272
123 ; NONEON-NOSVE-NEXT:    str x29, [sp, #256] // 8-byte Folded Spill
124 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 272
125 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
126 ; NONEON-NOSVE-NEXT:    str d0, [sp, #240]
127 ; NONEON-NOSVE-NEXT:    add x9, sp, #176
128 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #242]
129 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #243]
130 ; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #241]
131 ; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #244]
132 ; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #245]
133 ; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #246]
134 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
135 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
136 ; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1
137 ; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #240]
138 ; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1
139 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
140 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x4
141 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
142 ; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1
143 ; NONEON-NOSVE-NEXT:    orr w8, w8, w10
144 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #247]
145 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x2
146 ; NONEON-NOSVE-NEXT:    and w13, w13, #0x10
147 ; NONEON-NOSVE-NEXT:    bfxil w11, w12, #0, #1
148 ; NONEON-NOSVE-NEXT:    and w12, w14, #0x20
149 ; NONEON-NOSVE-NEXT:    orr w8, w8, w13
150 ; NONEON-NOSVE-NEXT:    and w13, w15, #0x40
151 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
152 ; NONEON-NOSVE-NEXT:    orr w8, w11, w8
153 ; NONEON-NOSVE-NEXT:    orr w11, w12, w13
154 ; NONEON-NOSVE-NEXT:    orr w8, w8, w11
155 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x80
156 ; NONEON-NOSVE-NEXT:    add w10, w8, w10
157 ; NONEON-NOSVE-NEXT:    and w8, w10, #0xff
158 ; NONEON-NOSVE-NEXT:    tbz w10, #0, .LBB1_2
159 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
160 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0]
161 ; NONEON-NOSVE-NEXT:    strb wzr, [sp, #239]
162 ; NONEON-NOSVE-NEXT:    sturh wzr, [x9, #61]
163 ; NONEON-NOSVE-NEXT:    stur wzr, [x9, #57]
164 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #232]
165 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #232]
166 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB1_3
167 ; NONEON-NOSVE-NEXT:    b .LBB1_4
168 ; NONEON-NOSVE-NEXT:  .LBB1_2:
169 ; NONEON-NOSVE-NEXT:    adrp x10, .LCPI1_0
170 ; NONEON-NOSVE-NEXT:    ldr d0, [x10, :lo12:.LCPI1_0]
171 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB1_4
172 ; NONEON-NOSVE-NEXT:  .LBB1_3: // %cond.load1
173 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #1]
174 ; NONEON-NOSVE-NEXT:    str d0, [sp, #208]
175 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #224]
176 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #214]
177 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #224]
178 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #222]
179 ; NONEON-NOSVE-NEXT:    str d0, [sp, #200]
180 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #34]
181 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #42]
182 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #208]
183 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #216]
184 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #200]
185 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #217]
186 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #216]
187 ; NONEON-NOSVE-NEXT:  .LBB1_4: // %else2
188 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB1_12
189 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
190 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB1_13
191 ; NONEON-NOSVE-NEXT:  .LBB1_6: // %else8
192 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB1_14
193 ; NONEON-NOSVE-NEXT:  .LBB1_7: // %else11
194 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB1_15
195 ; NONEON-NOSVE-NEXT:  .LBB1_8: // %else14
196 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB1_16
197 ; NONEON-NOSVE-NEXT:  .LBB1_9: // %else17
198 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB1_11
199 ; NONEON-NOSVE-NEXT:  .LBB1_10: // %cond.load19
200 ; NONEON-NOSVE-NEXT:    ldrb w8, [x0, #7]
201 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
202 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #32]
203 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #14]
204 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #32]
205 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #30]
206 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]
207 ; NONEON-NOSVE-NEXT:    str d0, [sp, #16]
208 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #28]
209 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
210 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
211 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
212 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #31]
213 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
214 ; NONEON-NOSVE-NEXT:  .LBB1_11: // %else20
215 ; NONEON-NOSVE-NEXT:    ldr x29, [sp, #256] // 8-byte Folded Reload
216 ; NONEON-NOSVE-NEXT:    add sp, sp, #272
217 ; NONEON-NOSVE-NEXT:    ret
218 ; NONEON-NOSVE-NEXT:  .LBB1_12: // %cond.load4
219 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #2]
220 ; NONEON-NOSVE-NEXT:    str d0, [sp, #176]
221 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #192]
222 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #183]
223 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #192]
224 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #191]
225 ; NONEON-NOSVE-NEXT:    str d0, [sp, #168]
226 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #3]
227 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #11]
228 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #176]
229 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #184]
230 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #168]
231 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #186]
232 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #184]
233 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB1_6
234 ; NONEON-NOSVE-NEXT:  .LBB1_13: // %cond.load7
235 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #3]
236 ; NONEON-NOSVE-NEXT:    str d0, [sp, #144]
237 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #160]
238 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #148]
239 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #160]
240 ; NONEON-NOSVE-NEXT:    str w9, [sp, #156]
241 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #146]
242 ; NONEON-NOSVE-NEXT:    str d0, [sp, #136]
243 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #154]
244 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #144]
245 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #152]
246 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #136]
247 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #155]
248 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #152]
249 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB1_7
250 ; NONEON-NOSVE-NEXT:  .LBB1_14: // %cond.load10
251 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #4]
252 ; NONEON-NOSVE-NEXT:    str d0, [sp, #112]
253 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #128]
254 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #119]
255 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #128]
256 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #127]
257 ; NONEON-NOSVE-NEXT:    ldurh w9, [sp, #117]
258 ; NONEON-NOSVE-NEXT:    str d0, [sp, #104]
259 ; NONEON-NOSVE-NEXT:    sturh w9, [sp, #125]
260 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #112]
261 ; NONEON-NOSVE-NEXT:    str w9, [sp, #120]
262 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #104]
263 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #124]
264 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #120]
265 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB1_8
266 ; NONEON-NOSVE-NEXT:  .LBB1_15: // %cond.load13
267 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #5]
268 ; NONEON-NOSVE-NEXT:    str d0, [sp, #80]
269 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #96]
270 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #86]
271 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #96]
272 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #94]
273 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #84]
274 ; NONEON-NOSVE-NEXT:    str d0, [sp, #72]
275 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #92]
276 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #80]
277 ; NONEON-NOSVE-NEXT:    str w9, [sp, #88]
278 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #72]
279 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #93]
280 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #88]
281 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB1_9
282 ; NONEON-NOSVE-NEXT:  .LBB1_16: // %cond.load16
283 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #6]
284 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
285 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #64]
286 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #55]
287 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #64]
288 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #63]
289 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #52]
290 ; NONEON-NOSVE-NEXT:    str d0, [sp, #40]
291 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #60]
292 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #48]
293 ; NONEON-NOSVE-NEXT:    str w9, [sp, #56]
294 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #40]
295 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #62]
296 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #56]
297 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB1_10
298 ; NONEON-NOSVE-NEXT:    b .LBB1_11
299   %load = call <8 x i8> @llvm.masked.load.v8i8(ptr %src, i32 8, <8 x i1> %mask, <8 x i8> zeroinitializer)
300   ret <8 x i8> %load
303 define <16 x i8> @masked_load_v16i8(ptr %src, <16 x i1> %mask) {
304 ; CHECK-LABEL: masked_load_v16i8:
305 ; CHECK:       // %bb.0:
306 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
307 ; CHECK-NEXT:    ptrue p0.b, vl16
308 ; CHECK-NEXT:    lsl z0.b, z0.b, #7
309 ; CHECK-NEXT:    asr z0.b, z0.b, #7
310 ; CHECK-NEXT:    cmpne p0.b, p0/z, z0.b, #0
311 ; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x0]
312 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
313 ; CHECK-NEXT:    ret
315 ; NONEON-NOSVE-LABEL: masked_load_v16i8:
316 ; NONEON-NOSVE:       // %bb.0:
317 ; NONEON-NOSVE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
318 ; NONEON-NOSVE-NEXT:    sub sp, sp, #992
319 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 1008
320 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
321 ; NONEON-NOSVE-NEXT:    str q0, [sp, #976]
322 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #978]
323 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #979]
324 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #977]
325 ; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #980]
326 ; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #981]
327 ; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #982]
328 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
329 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
330 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
331 ; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #976]
332 ; NONEON-NOSVE-NEXT:    sbfx w12, w12, #0, #1
333 ; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1
334 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x4
335 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x8
336 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
337 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
338 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #983]
339 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x2
340 ; NONEON-NOSVE-NEXT:    and w12, w12, #0x10
341 ; NONEON-NOSVE-NEXT:    bfxil w10, w11, #0, #1
342 ; NONEON-NOSVE-NEXT:    and w11, w13, #0x20
343 ; NONEON-NOSVE-NEXT:    orr w8, w8, w12
344 ; NONEON-NOSVE-NEXT:    and w12, w14, #0x40
345 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
346 ; NONEON-NOSVE-NEXT:    orr w8, w10, w8
347 ; NONEON-NOSVE-NEXT:    orr w10, w11, w12
348 ; NONEON-NOSVE-NEXT:    orr w8, w8, w10
349 ; NONEON-NOSVE-NEXT:    and w9, w9, #0xffffff80
350 ; NONEON-NOSVE-NEXT:    add w8, w8, w9
351 ; NONEON-NOSVE-NEXT:    add x9, sp, #720
352 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB2_2
353 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
354 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0]
355 ; NONEON-NOSVE-NEXT:    strb wzr, [sp, #975]
356 ; NONEON-NOSVE-NEXT:    sturh wzr, [x9, #253]
357 ; NONEON-NOSVE-NEXT:    stur wzr, [x9, #249]
358 ; NONEON-NOSVE-NEXT:    stur xzr, [x9, #241]
359 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #960]
360 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #960]
361 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB2_3
362 ; NONEON-NOSVE-NEXT:    b .LBB2_4
363 ; NONEON-NOSVE-NEXT:  .LBB2_2:
364 ; NONEON-NOSVE-NEXT:    adrp x10, .LCPI2_0
365 ; NONEON-NOSVE-NEXT:    ldr q0, [x10, :lo12:.LCPI2_0]
366 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB2_4
367 ; NONEON-NOSVE-NEXT:  .LBB2_3: // %cond.load1
368 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #1]
369 ; NONEON-NOSVE-NEXT:    str q0, [sp, #912]
370 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #944]
371 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #926]
372 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #944]
373 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #942]
374 ; NONEON-NOSVE-NEXT:    str q0, [sp, #896]
375 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
376 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #194]
377 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
378 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #210]
379 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #912]
380 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #928]
381 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #896]
382 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #929]
383 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #928]
384 ; NONEON-NOSVE-NEXT:  .LBB2_4: // %else2
385 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB2_20
386 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
387 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB2_21
388 ; NONEON-NOSVE-NEXT:  .LBB2_6: // %else8
389 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB2_22
390 ; NONEON-NOSVE-NEXT:  .LBB2_7: // %else11
391 ; NONEON-NOSVE-NEXT:    add x9, sp, #464
392 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB2_23
393 ; NONEON-NOSVE-NEXT:  .LBB2_8: // %else14
394 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB2_24
395 ; NONEON-NOSVE-NEXT:  .LBB2_9: // %else17
396 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB2_25
397 ; NONEON-NOSVE-NEXT:  .LBB2_10: // %else20
398 ; NONEON-NOSVE-NEXT:    tbnz w8, #8, .LBB2_26
399 ; NONEON-NOSVE-NEXT:  .LBB2_11: // %else23
400 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
401 ; NONEON-NOSVE-NEXT:    tbnz w8, #9, .LBB2_27
402 ; NONEON-NOSVE-NEXT:  .LBB2_12: // %else26
403 ; NONEON-NOSVE-NEXT:    tbnz w8, #10, .LBB2_28
404 ; NONEON-NOSVE-NEXT:  .LBB2_13: // %else29
405 ; NONEON-NOSVE-NEXT:    tbnz w8, #11, .LBB2_29
406 ; NONEON-NOSVE-NEXT:  .LBB2_14: // %else32
407 ; NONEON-NOSVE-NEXT:    tbnz w8, #12, .LBB2_30
408 ; NONEON-NOSVE-NEXT:  .LBB2_15: // %else35
409 ; NONEON-NOSVE-NEXT:    tbnz w8, #13, .LBB2_31
410 ; NONEON-NOSVE-NEXT:  .LBB2_16: // %else38
411 ; NONEON-NOSVE-NEXT:    tbnz w8, #14, .LBB2_32
412 ; NONEON-NOSVE-NEXT:  .LBB2_17: // %else41
413 ; NONEON-NOSVE-NEXT:    tbz w8, #15, .LBB2_19
414 ; NONEON-NOSVE-NEXT:  .LBB2_18: // %cond.load43
415 ; NONEON-NOSVE-NEXT:    ldrb w8, [x0, #15]
416 ; NONEON-NOSVE-NEXT:    str q0, [sp]
417 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #48]
418 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #14]
419 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]
420 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]
421 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]
422 ; NONEON-NOSVE-NEXT:    str q0, [sp, #16]
423 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
424 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
425 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
426 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
427 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
428 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
429 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]
430 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
431 ; NONEON-NOSVE-NEXT:  .LBB2_19: // %else44
432 ; NONEON-NOSVE-NEXT:    add sp, sp, #992
433 ; NONEON-NOSVE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
434 ; NONEON-NOSVE-NEXT:    ret
435 ; NONEON-NOSVE-NEXT:  .LBB2_20: // %cond.load4
436 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #2]
437 ; NONEON-NOSVE-NEXT:    str q0, [sp, #848]
438 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #880]
439 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #863]
440 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #880]
441 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #879]
442 ; NONEON-NOSVE-NEXT:    str q0, [sp, #832]
443 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
444 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #131]
445 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
446 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #147]
447 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #848]
448 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #864]
449 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #832]
450 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #866]
451 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #864]
452 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB2_6
453 ; NONEON-NOSVE-NEXT:  .LBB2_21: // %cond.load7
454 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #3]
455 ; NONEON-NOSVE-NEXT:    str q0, [sp, #784]
456 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #816]
457 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #796]
458 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #816]
459 ; NONEON-NOSVE-NEXT:    str w10, [sp, #812]
460 ; NONEON-NOSVE-NEXT:    str q0, [sp, #768]
461 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #68]
462 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #84]
463 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #786]
464 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #802]
465 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #784]
466 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #800]
467 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #768]
468 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #803]
469 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #800]
470 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB2_7
471 ; NONEON-NOSVE-NEXT:  .LBB2_22: // %cond.load10
472 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #4]
473 ; NONEON-NOSVE-NEXT:    str q0, [sp, #720]
474 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #752]
475 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #735]
476 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #752]
477 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #751]
478 ; NONEON-NOSVE-NEXT:    str q0, [sp, #704]
479 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
480 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #5]
481 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
482 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #21]
483 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #720]
484 ; NONEON-NOSVE-NEXT:    str w9, [sp, #736]
485 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #704]
486 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #740]
487 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #736]
488 ; NONEON-NOSVE-NEXT:    add x9, sp, #464
489 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB2_8
490 ; NONEON-NOSVE-NEXT:  .LBB2_23: // %cond.load13
491 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #5]
492 ; NONEON-NOSVE-NEXT:    str q0, [sp, #656]
493 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #688]
494 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #670]
495 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #688]
496 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #686]
497 ; NONEON-NOSVE-NEXT:    str q0, [sp, #640]
498 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #198]
499 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #214]
500 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #660]
501 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #676]
502 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #656]
503 ; NONEON-NOSVE-NEXT:    str w10, [sp, #672]
504 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #640]
505 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #677]
506 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #672]
507 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB2_9
508 ; NONEON-NOSVE-NEXT:  .LBB2_24: // %cond.load16
509 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #6]
510 ; NONEON-NOSVE-NEXT:    str q0, [sp, #592]
511 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #624]
512 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #607]
513 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #624]
514 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #623]
515 ; NONEON-NOSVE-NEXT:    str q0, [sp, #576]
516 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #135]
517 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #151]
518 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #596]
519 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #612]
520 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #592]
521 ; NONEON-NOSVE-NEXT:    str w10, [sp, #608]
522 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #576]
523 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #614]
524 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #608]
525 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB2_10
526 ; NONEON-NOSVE-NEXT:  .LBB2_25: // %cond.load19
527 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #7]
528 ; NONEON-NOSVE-NEXT:    str q0, [sp, #528]
529 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #560]
530 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #536]
531 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #560]
532 ; NONEON-NOSVE-NEXT:    str x10, [sp, #552]
533 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #534]
534 ; NONEON-NOSVE-NEXT:    str q0, [sp, #512]
535 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #550]
536 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #532]
537 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #548]
538 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #528]
539 ; NONEON-NOSVE-NEXT:    str w10, [sp, #544]
540 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #512]
541 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #551]
542 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #544]
543 ; NONEON-NOSVE-NEXT:    tbz w8, #8, .LBB2_11
544 ; NONEON-NOSVE-NEXT:  .LBB2_26: // %cond.load22
545 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #8]
546 ; NONEON-NOSVE-NEXT:    str q0, [sp, #464]
547 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #496]
548 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #479]
549 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #496]
550 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #495]
551 ; NONEON-NOSVE-NEXT:    str q0, [sp, #448]
552 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
553 ; NONEON-NOSVE-NEXT:    ldur w11, [x9, #9]
554 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
555 ; NONEON-NOSVE-NEXT:    stur w11, [x9, #25]
556 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #464]
557 ; NONEON-NOSVE-NEXT:    str x9, [sp, #480]
558 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #448]
559 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #488]
560 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #480]
561 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
562 ; NONEON-NOSVE-NEXT:    tbz w8, #9, .LBB2_12
563 ; NONEON-NOSVE-NEXT:  .LBB2_27: // %cond.load25
564 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #9]
565 ; NONEON-NOSVE-NEXT:    str q0, [sp, #400]
566 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #432]
567 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #414]
568 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #432]
569 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #430]
570 ; NONEON-NOSVE-NEXT:    str q0, [sp, #384]
571 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
572 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
573 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #408]
574 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #424]
575 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #400]
576 ; NONEON-NOSVE-NEXT:    str x10, [sp, #416]
577 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #384]
578 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #425]
579 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #416]
580 ; NONEON-NOSVE-NEXT:    tbz w8, #10, .LBB2_13
581 ; NONEON-NOSVE-NEXT:  .LBB2_28: // %cond.load28
582 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #10]
583 ; NONEON-NOSVE-NEXT:    str q0, [sp, #336]
584 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #368]
585 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #351]
586 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #368]
587 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #367]
588 ; NONEON-NOSVE-NEXT:    str q0, [sp, #320]
589 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
590 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
591 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #344]
592 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #360]
593 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #336]
594 ; NONEON-NOSVE-NEXT:    str x10, [sp, #352]
595 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #320]
596 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #362]
597 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #352]
598 ; NONEON-NOSVE-NEXT:    tbz w8, #11, .LBB2_14
599 ; NONEON-NOSVE-NEXT:  .LBB2_29: // %cond.load31
600 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #11]
601 ; NONEON-NOSVE-NEXT:    str q0, [sp, #272]
602 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #304]
603 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #284]
604 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #304]
605 ; NONEON-NOSVE-NEXT:    str w10, [sp, #300]
606 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #282]
607 ; NONEON-NOSVE-NEXT:    str q0, [sp, #256]
608 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #298]
609 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #280]
610 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #296]
611 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #272]
612 ; NONEON-NOSVE-NEXT:    str x10, [sp, #288]
613 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #256]
614 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #299]
615 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #288]
616 ; NONEON-NOSVE-NEXT:    tbz w8, #12, .LBB2_15
617 ; NONEON-NOSVE-NEXT:  .LBB2_30: // %cond.load34
618 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #12]
619 ; NONEON-NOSVE-NEXT:    str q0, [sp, #208]
620 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #240]
621 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #223]
622 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #240]
623 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #239]
624 ; NONEON-NOSVE-NEXT:    str q0, [sp, #192]
625 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
626 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
627 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #216]
628 ; NONEON-NOSVE-NEXT:    str w9, [sp, #232]
629 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #208]
630 ; NONEON-NOSVE-NEXT:    str x9, [sp, #224]
631 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #192]
632 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #236]
633 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #224]
634 ; NONEON-NOSVE-NEXT:    tbz w8, #13, .LBB2_16
635 ; NONEON-NOSVE-NEXT:  .LBB2_31: // %cond.load37
636 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #13]
637 ; NONEON-NOSVE-NEXT:    str q0, [sp, #144]
638 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #176]
639 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #158]
640 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #176]
641 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #174]
642 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #156]
643 ; NONEON-NOSVE-NEXT:    str q0, [sp, #128]
644 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #172]
645 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #152]
646 ; NONEON-NOSVE-NEXT:    str w9, [sp, #168]
647 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #144]
648 ; NONEON-NOSVE-NEXT:    str x9, [sp, #160]
649 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #128]
650 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #173]
651 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #160]
652 ; NONEON-NOSVE-NEXT:    tbz w8, #14, .LBB2_17
653 ; NONEON-NOSVE-NEXT:  .LBB2_32: // %cond.load40
654 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #14]
655 ; NONEON-NOSVE-NEXT:    str q0, [sp, #80]
656 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #112]
657 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #95]
658 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #112]
659 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #111]
660 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #92]
661 ; NONEON-NOSVE-NEXT:    str q0, [sp, #64]
662 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #108]
663 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #88]
664 ; NONEON-NOSVE-NEXT:    str w9, [sp, #104]
665 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #80]
666 ; NONEON-NOSVE-NEXT:    str x9, [sp, #96]
667 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #64]
668 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #110]
669 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #96]
670 ; NONEON-NOSVE-NEXT:    tbnz w8, #15, .LBB2_18
671 ; NONEON-NOSVE-NEXT:    b .LBB2_19
672   %load = call <16 x i8> @llvm.masked.load.v16i8(ptr %src, i32 8, <16 x i1> %mask, <16 x i8> zeroinitializer)
673   ret <16 x i8> %load
676 define <32 x i8> @masked_load_v32i8(ptr %src, <32 x i1> %mask) {
677 ; CHECK-LABEL: masked_load_v32i8:
678 ; CHECK:       // %bb.0:
679 ; CHECK-NEXT:    sub sp, sp, #32
680 ; CHECK-NEXT:    .cfi_def_cfa_offset 32
681 ; CHECK-NEXT:    ldr w8, [sp, #224]
682 ; CHECK-NEXT:    ldr w9, [sp, #216]
683 ; CHECK-NEXT:    ptrue p0.b, vl16
684 ; CHECK-NEXT:    strb w7, [sp, #6]
685 ; CHECK-NEXT:    strb w8, [sp, #31]
686 ; CHECK-NEXT:    ldr w8, [sp, #208]
687 ; CHECK-NEXT:    strb w9, [sp, #30]
688 ; CHECK-NEXT:    ldr w9, [sp, #200]
689 ; CHECK-NEXT:    strb w8, [sp, #29]
690 ; CHECK-NEXT:    ldr w8, [sp, #192]
691 ; CHECK-NEXT:    strb w9, [sp, #28]
692 ; CHECK-NEXT:    ldr w9, [sp, #184]
693 ; CHECK-NEXT:    strb w8, [sp, #27]
694 ; CHECK-NEXT:    ldr w8, [sp, #176]
695 ; CHECK-NEXT:    strb w9, [sp, #26]
696 ; CHECK-NEXT:    ldr w9, [sp, #168]
697 ; CHECK-NEXT:    strb w8, [sp, #25]
698 ; CHECK-NEXT:    ldr w8, [sp, #160]
699 ; CHECK-NEXT:    strb w9, [sp, #24]
700 ; CHECK-NEXT:    ldr w9, [sp, #152]
701 ; CHECK-NEXT:    strb w8, [sp, #23]
702 ; CHECK-NEXT:    ldr w8, [sp, #144]
703 ; CHECK-NEXT:    strb w9, [sp, #22]
704 ; CHECK-NEXT:    ldr w9, [sp, #136]
705 ; CHECK-NEXT:    strb w8, [sp, #21]
706 ; CHECK-NEXT:    ldr w8, [sp, #128]
707 ; CHECK-NEXT:    strb w9, [sp, #20]
708 ; CHECK-NEXT:    ldr w9, [sp, #120]
709 ; CHECK-NEXT:    strb w8, [sp, #19]
710 ; CHECK-NEXT:    ldr w8, [sp, #112]
711 ; CHECK-NEXT:    strb w9, [sp, #18]
712 ; CHECK-NEXT:    ldr w9, [sp, #104]
713 ; CHECK-NEXT:    strb w8, [sp, #17]
714 ; CHECK-NEXT:    ldr w8, [sp, #96]
715 ; CHECK-NEXT:    strb w9, [sp, #16]
716 ; CHECK-NEXT:    ldr w9, [sp, #88]
717 ; CHECK-NEXT:    strb w8, [sp, #15]
718 ; CHECK-NEXT:    ldr w8, [sp, #80]
719 ; CHECK-NEXT:    strb w9, [sp, #14]
720 ; CHECK-NEXT:    ldr w9, [sp, #72]
721 ; CHECK-NEXT:    strb w8, [sp, #13]
722 ; CHECK-NEXT:    ldr w8, [sp, #64]
723 ; CHECK-NEXT:    strb w9, [sp, #12]
724 ; CHECK-NEXT:    ldr w9, [sp, #56]
725 ; CHECK-NEXT:    strb w8, [sp, #11]
726 ; CHECK-NEXT:    ldr w8, [sp, #48]
727 ; CHECK-NEXT:    strb w9, [sp, #10]
728 ; CHECK-NEXT:    ldr w9, [sp, #40]
729 ; CHECK-NEXT:    strb w8, [sp, #9]
730 ; CHECK-NEXT:    ldr w8, [sp, #32]
731 ; CHECK-NEXT:    strb w9, [sp, #8]
732 ; CHECK-NEXT:    strb w8, [sp, #7]
733 ; CHECK-NEXT:    mov w8, #16 // =0x10
734 ; CHECK-NEXT:    strb w6, [sp, #5]
735 ; CHECK-NEXT:    strb w5, [sp, #4]
736 ; CHECK-NEXT:    strb w4, [sp, #3]
737 ; CHECK-NEXT:    strb w3, [sp, #2]
738 ; CHECK-NEXT:    strb w2, [sp, #1]
739 ; CHECK-NEXT:    strb w1, [sp]
740 ; CHECK-NEXT:    ldp q1, q0, [sp]
741 ; CHECK-NEXT:    lsl z0.b, z0.b, #7
742 ; CHECK-NEXT:    lsl z1.b, z1.b, #7
743 ; CHECK-NEXT:    asr z0.b, z0.b, #7
744 ; CHECK-NEXT:    asr z1.b, z1.b, #7
745 ; CHECK-NEXT:    cmpne p1.b, p0/z, z0.b, #0
746 ; CHECK-NEXT:    cmpne p0.b, p0/z, z1.b, #0
747 ; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x0]
748 ; CHECK-NEXT:    ld1b { z1.b }, p1/z, [x0, x8]
749 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
750 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
751 ; CHECK-NEXT:    add sp, sp, #32
752 ; CHECK-NEXT:    ret
754 ; NONEON-NOSVE-LABEL: masked_load_v32i8:
755 ; NONEON-NOSVE:       // %bb.0:
756 ; NONEON-NOSVE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
757 ; NONEON-NOSVE-NEXT:    sub sp, sp, #2000
758 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 2016
759 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
760 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #2096]
761 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #2104]
762 ; NONEON-NOSVE-NEXT:    sbfx w15, w7, #0, #1
763 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #2112]
764 ; NONEON-NOSVE-NEXT:    ldr w11, [sp, #2088]
765 ; NONEON-NOSVE-NEXT:    ldr w12, [sp, #2120]
766 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
767 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
768 ; NONEON-NOSVE-NEXT:    ldr w13, [sp, #2136]
769 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
770 ; NONEON-NOSVE-NEXT:    ldr w14, [sp, #2144]
771 ; NONEON-NOSVE-NEXT:    ldr w16, [sp, #2016]
772 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
773 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x4
774 ; NONEON-NOSVE-NEXT:    bfxil w8, w11, #0, #1
775 ; NONEON-NOSVE-NEXT:    sbfx w11, w12, #0, #1
776 ; NONEON-NOSVE-NEXT:    ldr w12, [sp, #2128]
777 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
778 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
779 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
780 ; NONEON-NOSVE-NEXT:    and w10, w11, #0x10
781 ; NONEON-NOSVE-NEXT:    sbfx w11, w12, #0, #1
782 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
783 ; NONEON-NOSVE-NEXT:    sbfx w10, w13, #0, #1
784 ; NONEON-NOSVE-NEXT:    sbfx w12, w4, #0, #1
785 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
786 ; NONEON-NOSVE-NEXT:    and w9, w11, #0x20
787 ; NONEON-NOSVE-NEXT:    sbfx w11, w3, #0, #1
788 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x40
789 ; NONEON-NOSVE-NEXT:    sbfx w13, w5, #0, #1
790 ; NONEON-NOSVE-NEXT:    and w12, w12, #0x8
791 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
792 ; NONEON-NOSVE-NEXT:    sbfx w10, w2, #0, #1
793 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x4
794 ; NONEON-NOSVE-NEXT:    orr w11, w11, w12
795 ; NONEON-NOSVE-NEXT:    and w12, w13, #0x10
796 ; NONEON-NOSVE-NEXT:    sbfx w13, w6, #0, #1
797 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x2
798 ; NONEON-NOSVE-NEXT:    orr w11, w11, w12
799 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
800 ; NONEON-NOSVE-NEXT:    bfxil w10, w1, #0, #1
801 ; NONEON-NOSVE-NEXT:    and w12, w13, #0x20
802 ; NONEON-NOSVE-NEXT:    and w13, w15, #0x40
803 ; NONEON-NOSVE-NEXT:    sbfx w15, w16, #0, #1
804 ; NONEON-NOSVE-NEXT:    orr w9, w10, w11
805 ; NONEON-NOSVE-NEXT:    orr w10, w12, w13
806 ; NONEON-NOSVE-NEXT:    and w11, w14, #0xff80
807 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
808 ; NONEON-NOSVE-NEXT:    and w10, w15, #0xff80
809 ; NONEON-NOSVE-NEXT:    add w11, w8, w11
810 ; NONEON-NOSVE-NEXT:    add w8, w9, w10
811 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI3_0
812 ; NONEON-NOSVE-NEXT:    bfi w8, w11, #16, #16
813 ; NONEON-NOSVE-NEXT:    ldr q1, [x9, :lo12:.LCPI3_0]
814 ; NONEON-NOSVE-NEXT:    add x9, sp, #1744
815 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB3_2
816 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
817 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0]
818 ; NONEON-NOSVE-NEXT:    strb wzr, [sp, #1999]
819 ; NONEON-NOSVE-NEXT:    sturh wzr, [x9, #253]
820 ; NONEON-NOSVE-NEXT:    stur wzr, [x9, #249]
821 ; NONEON-NOSVE-NEXT:    stur xzr, [x9, #241]
822 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1984]
823 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1984]
824 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB3_3
825 ; NONEON-NOSVE-NEXT:    b .LBB3_4
826 ; NONEON-NOSVE-NEXT:  .LBB3_2:
827 ; NONEON-NOSVE-NEXT:    str q1, [sp, #-16]!
828 ; NONEON-NOSVE-NEXT:    ldr q0, [sp], #16
829 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB3_4
830 ; NONEON-NOSVE-NEXT:  .LBB3_3: // %cond.load1
831 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #1]
832 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1936]
833 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1968]
834 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1950]
835 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1968]
836 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1966]
837 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1920]
838 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
839 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #194]
840 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
841 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #210]
842 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1936]
843 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1952]
844 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1920]
845 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1953]
846 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1952]
847 ; NONEON-NOSVE-NEXT:  .LBB3_4: // %else2
848 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB3_36
849 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
850 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB3_37
851 ; NONEON-NOSVE-NEXT:  .LBB3_6: // %else8
852 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB3_38
853 ; NONEON-NOSVE-NEXT:  .LBB3_7: // %else11
854 ; NONEON-NOSVE-NEXT:    add x9, sp, #1488
855 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB3_39
856 ; NONEON-NOSVE-NEXT:  .LBB3_8: // %else14
857 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB3_40
858 ; NONEON-NOSVE-NEXT:  .LBB3_9: // %else17
859 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB3_41
860 ; NONEON-NOSVE-NEXT:  .LBB3_10: // %else20
861 ; NONEON-NOSVE-NEXT:    tbnz w8, #8, .LBB3_42
862 ; NONEON-NOSVE-NEXT:  .LBB3_11: // %else23
863 ; NONEON-NOSVE-NEXT:    add x9, sp, #1232
864 ; NONEON-NOSVE-NEXT:    tbnz w8, #9, .LBB3_43
865 ; NONEON-NOSVE-NEXT:  .LBB3_12: // %else26
866 ; NONEON-NOSVE-NEXT:    tbnz w8, #10, .LBB3_44
867 ; NONEON-NOSVE-NEXT:  .LBB3_13: // %else29
868 ; NONEON-NOSVE-NEXT:    tbnz w8, #11, .LBB3_45
869 ; NONEON-NOSVE-NEXT:  .LBB3_14: // %else32
870 ; NONEON-NOSVE-NEXT:    tbnz w8, #12, .LBB3_46
871 ; NONEON-NOSVE-NEXT:  .LBB3_15: // %else35
872 ; NONEON-NOSVE-NEXT:    tbnz w8, #13, .LBB3_47
873 ; NONEON-NOSVE-NEXT:  .LBB3_16: // %else38
874 ; NONEON-NOSVE-NEXT:    tbnz w8, #14, .LBB3_48
875 ; NONEON-NOSVE-NEXT:  .LBB3_17: // %else41
876 ; NONEON-NOSVE-NEXT:    tbnz w8, #15, .LBB3_49
877 ; NONEON-NOSVE-NEXT:  .LBB3_18: // %else44
878 ; NONEON-NOSVE-NEXT:    tbnz w8, #16, .LBB3_50
879 ; NONEON-NOSVE-NEXT:  .LBB3_19: // %else47
880 ; NONEON-NOSVE-NEXT:    add x9, sp, #720
881 ; NONEON-NOSVE-NEXT:    tbnz w8, #17, .LBB3_51
882 ; NONEON-NOSVE-NEXT:  .LBB3_20: // %else50
883 ; NONEON-NOSVE-NEXT:    tbnz w8, #18, .LBB3_52
884 ; NONEON-NOSVE-NEXT:  .LBB3_21: // %else53
885 ; NONEON-NOSVE-NEXT:    tbnz w8, #19, .LBB3_53
886 ; NONEON-NOSVE-NEXT:  .LBB3_22: // %else56
887 ; NONEON-NOSVE-NEXT:    tbnz w8, #20, .LBB3_54
888 ; NONEON-NOSVE-NEXT:  .LBB3_23: // %else59
889 ; NONEON-NOSVE-NEXT:    add x9, sp, #464
890 ; NONEON-NOSVE-NEXT:    tbnz w8, #21, .LBB3_55
891 ; NONEON-NOSVE-NEXT:  .LBB3_24: // %else62
892 ; NONEON-NOSVE-NEXT:    tbnz w8, #22, .LBB3_56
893 ; NONEON-NOSVE-NEXT:  .LBB3_25: // %else65
894 ; NONEON-NOSVE-NEXT:    tbnz w8, #23, .LBB3_57
895 ; NONEON-NOSVE-NEXT:  .LBB3_26: // %else68
896 ; NONEON-NOSVE-NEXT:    tbnz w8, #24, .LBB3_58
897 ; NONEON-NOSVE-NEXT:  .LBB3_27: // %else71
898 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
899 ; NONEON-NOSVE-NEXT:    tbnz w8, #25, .LBB3_59
900 ; NONEON-NOSVE-NEXT:  .LBB3_28: // %else74
901 ; NONEON-NOSVE-NEXT:    tbnz w8, #26, .LBB3_60
902 ; NONEON-NOSVE-NEXT:  .LBB3_29: // %else77
903 ; NONEON-NOSVE-NEXT:    tbnz w8, #27, .LBB3_61
904 ; NONEON-NOSVE-NEXT:  .LBB3_30: // %else80
905 ; NONEON-NOSVE-NEXT:    tbnz w8, #28, .LBB3_62
906 ; NONEON-NOSVE-NEXT:  .LBB3_31: // %else83
907 ; NONEON-NOSVE-NEXT:    tbnz w8, #29, .LBB3_63
908 ; NONEON-NOSVE-NEXT:  .LBB3_32: // %else86
909 ; NONEON-NOSVE-NEXT:    tbnz w8, #30, .LBB3_64
910 ; NONEON-NOSVE-NEXT:  .LBB3_33: // %else89
911 ; NONEON-NOSVE-NEXT:    tbz w8, #31, .LBB3_35
912 ; NONEON-NOSVE-NEXT:  .LBB3_34: // %cond.load91
913 ; NONEON-NOSVE-NEXT:    ldrb w8, [x0, #31]
914 ; NONEON-NOSVE-NEXT:    str q1, [sp]
915 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #48]
916 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #14]
917 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #48]
918 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #46]
919 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]
920 ; NONEON-NOSVE-NEXT:    str q1, [sp, #16]
921 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
922 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
923 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
924 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
925 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
926 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #16]
927 ; NONEON-NOSVE-NEXT:    strb w8, [sp, #47]
928 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #32]
929 ; NONEON-NOSVE-NEXT:  .LBB3_35: // %else92
930 ; NONEON-NOSVE-NEXT:    add sp, sp, #2000
931 ; NONEON-NOSVE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
932 ; NONEON-NOSVE-NEXT:    ret
933 ; NONEON-NOSVE-NEXT:  .LBB3_36: // %cond.load4
934 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #2]
935 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1872]
936 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1904]
937 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1887]
938 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1904]
939 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1903]
940 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1856]
941 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
942 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #131]
943 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
944 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #147]
945 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1872]
946 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1888]
947 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1856]
948 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1890]
949 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1888]
950 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB3_6
951 ; NONEON-NOSVE-NEXT:  .LBB3_37: // %cond.load7
952 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #3]
953 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1808]
954 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1840]
955 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #1820]
956 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1840]
957 ; NONEON-NOSVE-NEXT:    str w10, [sp, #1836]
958 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1792]
959 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #68]
960 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #84]
961 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1810]
962 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1826]
963 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1808]
964 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1824]
965 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1792]
966 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1827]
967 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1824]
968 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB3_7
969 ; NONEON-NOSVE-NEXT:  .LBB3_38: // %cond.load10
970 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #4]
971 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1744]
972 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1776]
973 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1759]
974 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1776]
975 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1775]
976 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1728]
977 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
978 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #5]
979 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
980 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #21]
981 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #1744]
982 ; NONEON-NOSVE-NEXT:    str w9, [sp, #1760]
983 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1728]
984 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1764]
985 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1760]
986 ; NONEON-NOSVE-NEXT:    add x9, sp, #1488
987 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB3_8
988 ; NONEON-NOSVE-NEXT:  .LBB3_39: // %cond.load13
989 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #5]
990 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1680]
991 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1712]
992 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1694]
993 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1712]
994 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1710]
995 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1664]
996 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #198]
997 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #214]
998 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1684]
999 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1700]
1000 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #1680]
1001 ; NONEON-NOSVE-NEXT:    str w10, [sp, #1696]
1002 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1664]
1003 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1701]
1004 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1696]
1005 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB3_9
1006 ; NONEON-NOSVE-NEXT:  .LBB3_40: // %cond.load16
1007 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #6]
1008 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1616]
1009 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1648]
1010 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1631]
1011 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1648]
1012 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1647]
1013 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1600]
1014 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #135]
1015 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #151]
1016 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1620]
1017 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1636]
1018 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #1616]
1019 ; NONEON-NOSVE-NEXT:    str w10, [sp, #1632]
1020 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1600]
1021 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1638]
1022 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1632]
1023 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB3_10
1024 ; NONEON-NOSVE-NEXT:  .LBB3_41: // %cond.load19
1025 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #7]
1026 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1552]
1027 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1584]
1028 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #1560]
1029 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1584]
1030 ; NONEON-NOSVE-NEXT:    str x10, [sp, #1576]
1031 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1558]
1032 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1536]
1033 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1574]
1034 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1556]
1035 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1572]
1036 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #1552]
1037 ; NONEON-NOSVE-NEXT:    str w10, [sp, #1568]
1038 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1536]
1039 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1575]
1040 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1568]
1041 ; NONEON-NOSVE-NEXT:    tbz w8, #8, .LBB3_11
1042 ; NONEON-NOSVE-NEXT:  .LBB3_42: // %cond.load22
1043 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #8]
1044 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1488]
1045 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1520]
1046 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1503]
1047 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1520]
1048 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1519]
1049 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1472]
1050 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
1051 ; NONEON-NOSVE-NEXT:    ldur w11, [x9, #9]
1052 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
1053 ; NONEON-NOSVE-NEXT:    stur w11, [x9, #25]
1054 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #1488]
1055 ; NONEON-NOSVE-NEXT:    str x9, [sp, #1504]
1056 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1472]
1057 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1512]
1058 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1504]
1059 ; NONEON-NOSVE-NEXT:    add x9, sp, #1232
1060 ; NONEON-NOSVE-NEXT:    tbz w8, #9, .LBB3_12
1061 ; NONEON-NOSVE-NEXT:  .LBB3_43: // %cond.load25
1062 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #9]
1063 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1424]
1064 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1456]
1065 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1438]
1066 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1456]
1067 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1454]
1068 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1408]
1069 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
1070 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
1071 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1432]
1072 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1448]
1073 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #1424]
1074 ; NONEON-NOSVE-NEXT:    str x10, [sp, #1440]
1075 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1408]
1076 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1449]
1077 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1440]
1078 ; NONEON-NOSVE-NEXT:    tbz w8, #10, .LBB3_13
1079 ; NONEON-NOSVE-NEXT:  .LBB3_44: // %cond.load28
1080 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #10]
1081 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1360]
1082 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1392]
1083 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1375]
1084 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1392]
1085 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1391]
1086 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1344]
1087 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
1088 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
1089 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1368]
1090 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1384]
1091 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #1360]
1092 ; NONEON-NOSVE-NEXT:    str x10, [sp, #1376]
1093 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1344]
1094 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1386]
1095 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1376]
1096 ; NONEON-NOSVE-NEXT:    tbz w8, #11, .LBB3_14
1097 ; NONEON-NOSVE-NEXT:  .LBB3_45: // %cond.load31
1098 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #11]
1099 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1296]
1100 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1328]
1101 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #1308]
1102 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1328]
1103 ; NONEON-NOSVE-NEXT:    str w10, [sp, #1324]
1104 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1306]
1105 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1280]
1106 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1322]
1107 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #1304]
1108 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #1320]
1109 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #1296]
1110 ; NONEON-NOSVE-NEXT:    str x10, [sp, #1312]
1111 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1280]
1112 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1323]
1113 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1312]
1114 ; NONEON-NOSVE-NEXT:    tbz w8, #12, .LBB3_15
1115 ; NONEON-NOSVE-NEXT:  .LBB3_46: // %cond.load34
1116 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #12]
1117 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1232]
1118 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1264]
1119 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #1247]
1120 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1264]
1121 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #1263]
1122 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1216]
1123 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
1124 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
1125 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #1240]
1126 ; NONEON-NOSVE-NEXT:    str w9, [sp, #1256]
1127 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #1232]
1128 ; NONEON-NOSVE-NEXT:    str x9, [sp, #1248]
1129 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1216]
1130 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1260]
1131 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1248]
1132 ; NONEON-NOSVE-NEXT:    tbz w8, #13, .LBB3_16
1133 ; NONEON-NOSVE-NEXT:  .LBB3_47: // %cond.load37
1134 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #13]
1135 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1168]
1136 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1200]
1137 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #1182]
1138 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1200]
1139 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #1198]
1140 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1180]
1141 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1152]
1142 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1196]
1143 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #1176]
1144 ; NONEON-NOSVE-NEXT:    str w9, [sp, #1192]
1145 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #1168]
1146 ; NONEON-NOSVE-NEXT:    str x9, [sp, #1184]
1147 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1152]
1148 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1197]
1149 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1184]
1150 ; NONEON-NOSVE-NEXT:    tbz w8, #14, .LBB3_17
1151 ; NONEON-NOSVE-NEXT:  .LBB3_48: // %cond.load40
1152 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #14]
1153 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1104]
1154 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1136]
1155 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1119]
1156 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1136]
1157 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1135]
1158 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #1116]
1159 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1088]
1160 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #1132]
1161 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #1112]
1162 ; NONEON-NOSVE-NEXT:    str w9, [sp, #1128]
1163 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #1104]
1164 ; NONEON-NOSVE-NEXT:    str x9, [sp, #1120]
1165 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1088]
1166 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1134]
1167 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1120]
1168 ; NONEON-NOSVE-NEXT:    tbz w8, #15, .LBB3_18
1169 ; NONEON-NOSVE-NEXT:  .LBB3_49: // %cond.load43
1170 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #15]
1171 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1024]
1172 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1072]
1173 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1038]
1174 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1072]
1175 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1070]
1176 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #1036]
1177 ; NONEON-NOSVE-NEXT:    str q0, [sp, #1040]
1178 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #1068]
1179 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #1032]
1180 ; NONEON-NOSVE-NEXT:    str w9, [sp, #1064]
1181 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #1024]
1182 ; NONEON-NOSVE-NEXT:    str x9, [sp, #1056]
1183 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #1040]
1184 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1071]
1185 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #1056]
1186 ; NONEON-NOSVE-NEXT:    tbz w8, #16, .LBB3_19
1187 ; NONEON-NOSVE-NEXT:  .LBB3_50: // %cond.load46
1188 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #16]
1189 ; NONEON-NOSVE-NEXT:    str q1, [sp, #976]
1190 ; NONEON-NOSVE-NEXT:    add x10, sp, #976
1191 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1008]
1192 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #991]
1193 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #1008]
1194 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #1007]
1195 ; NONEON-NOSVE-NEXT:    str q1, [sp, #960]
1196 ; NONEON-NOSVE-NEXT:    ldurh w9, [x10, #13]
1197 ; NONEON-NOSVE-NEXT:    ldur w11, [x10, #9]
1198 ; NONEON-NOSVE-NEXT:    sturh w9, [x10, #29]
1199 ; NONEON-NOSVE-NEXT:    ldur x9, [x10, #1]
1200 ; NONEON-NOSVE-NEXT:    stur w11, [x10, #25]
1201 ; NONEON-NOSVE-NEXT:    stur x9, [x10, #17]
1202 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #960]
1203 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #992]
1204 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #992]
1205 ; NONEON-NOSVE-NEXT:    add x9, sp, #720
1206 ; NONEON-NOSVE-NEXT:    tbz w8, #17, .LBB3_20
1207 ; NONEON-NOSVE-NEXT:  .LBB3_51: // %cond.load49
1208 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #17]
1209 ; NONEON-NOSVE-NEXT:    str q1, [sp, #912]
1210 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #944]
1211 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #926]
1212 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #944]
1213 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #942]
1214 ; NONEON-NOSVE-NEXT:    str q1, [sp, #896]
1215 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
1216 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #194]
1217 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
1218 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #210]
1219 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #912]
1220 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #928]
1221 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #896]
1222 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #929]
1223 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #928]
1224 ; NONEON-NOSVE-NEXT:    tbz w8, #18, .LBB3_21
1225 ; NONEON-NOSVE-NEXT:  .LBB3_52: // %cond.load52
1226 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #18]
1227 ; NONEON-NOSVE-NEXT:    str q1, [sp, #848]
1228 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #880]
1229 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #863]
1230 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #880]
1231 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #879]
1232 ; NONEON-NOSVE-NEXT:    str q1, [sp, #832]
1233 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
1234 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #131]
1235 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
1236 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #147]
1237 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #848]
1238 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #864]
1239 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #832]
1240 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #866]
1241 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #864]
1242 ; NONEON-NOSVE-NEXT:    tbz w8, #19, .LBB3_22
1243 ; NONEON-NOSVE-NEXT:  .LBB3_53: // %cond.load55
1244 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #19]
1245 ; NONEON-NOSVE-NEXT:    str q1, [sp, #784]
1246 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #816]
1247 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #796]
1248 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #816]
1249 ; NONEON-NOSVE-NEXT:    str w10, [sp, #812]
1250 ; NONEON-NOSVE-NEXT:    str q1, [sp, #768]
1251 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #68]
1252 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #84]
1253 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #786]
1254 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #802]
1255 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #784]
1256 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #800]
1257 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #768]
1258 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #803]
1259 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #800]
1260 ; NONEON-NOSVE-NEXT:    tbz w8, #20, .LBB3_23
1261 ; NONEON-NOSVE-NEXT:  .LBB3_54: // %cond.load58
1262 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #20]
1263 ; NONEON-NOSVE-NEXT:    str q1, [sp, #720]
1264 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #752]
1265 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #735]
1266 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #752]
1267 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #751]
1268 ; NONEON-NOSVE-NEXT:    str q1, [sp, #704]
1269 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
1270 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #5]
1271 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
1272 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #21]
1273 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #720]
1274 ; NONEON-NOSVE-NEXT:    str w9, [sp, #736]
1275 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #704]
1276 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #740]
1277 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #736]
1278 ; NONEON-NOSVE-NEXT:    add x9, sp, #464
1279 ; NONEON-NOSVE-NEXT:    tbz w8, #21, .LBB3_24
1280 ; NONEON-NOSVE-NEXT:  .LBB3_55: // %cond.load61
1281 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #21]
1282 ; NONEON-NOSVE-NEXT:    str q1, [sp, #656]
1283 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #688]
1284 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #670]
1285 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #688]
1286 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #686]
1287 ; NONEON-NOSVE-NEXT:    str q1, [sp, #640]
1288 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #198]
1289 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #214]
1290 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #660]
1291 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #676]
1292 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #656]
1293 ; NONEON-NOSVE-NEXT:    str w10, [sp, #672]
1294 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #640]
1295 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #677]
1296 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #672]
1297 ; NONEON-NOSVE-NEXT:    tbz w8, #22, .LBB3_25
1298 ; NONEON-NOSVE-NEXT:  .LBB3_56: // %cond.load64
1299 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #22]
1300 ; NONEON-NOSVE-NEXT:    str q1, [sp, #592]
1301 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #624]
1302 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #607]
1303 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #624]
1304 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #623]
1305 ; NONEON-NOSVE-NEXT:    str q1, [sp, #576]
1306 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #135]
1307 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #151]
1308 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #596]
1309 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #612]
1310 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #592]
1311 ; NONEON-NOSVE-NEXT:    str w10, [sp, #608]
1312 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #576]
1313 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #614]
1314 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #608]
1315 ; NONEON-NOSVE-NEXT:    tbz w8, #23, .LBB3_26
1316 ; NONEON-NOSVE-NEXT:  .LBB3_57: // %cond.load67
1317 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #23]
1318 ; NONEON-NOSVE-NEXT:    str q1, [sp, #528]
1319 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #560]
1320 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #536]
1321 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #560]
1322 ; NONEON-NOSVE-NEXT:    str x10, [sp, #552]
1323 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #534]
1324 ; NONEON-NOSVE-NEXT:    str q1, [sp, #512]
1325 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #550]
1326 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #532]
1327 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #548]
1328 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #528]
1329 ; NONEON-NOSVE-NEXT:    str w10, [sp, #544]
1330 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #512]
1331 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #551]
1332 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #544]
1333 ; NONEON-NOSVE-NEXT:    tbz w8, #24, .LBB3_27
1334 ; NONEON-NOSVE-NEXT:  .LBB3_58: // %cond.load70
1335 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #24]
1336 ; NONEON-NOSVE-NEXT:    str q1, [sp, #464]
1337 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #496]
1338 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #479]
1339 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #496]
1340 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #495]
1341 ; NONEON-NOSVE-NEXT:    str q1, [sp, #448]
1342 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
1343 ; NONEON-NOSVE-NEXT:    ldur w11, [x9, #9]
1344 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
1345 ; NONEON-NOSVE-NEXT:    stur w11, [x9, #25]
1346 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #464]
1347 ; NONEON-NOSVE-NEXT:    str x9, [sp, #480]
1348 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #448]
1349 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #488]
1350 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #480]
1351 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
1352 ; NONEON-NOSVE-NEXT:    tbz w8, #25, .LBB3_28
1353 ; NONEON-NOSVE-NEXT:  .LBB3_59: // %cond.load73
1354 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #25]
1355 ; NONEON-NOSVE-NEXT:    str q1, [sp, #400]
1356 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #432]
1357 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #414]
1358 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #432]
1359 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #430]
1360 ; NONEON-NOSVE-NEXT:    str q1, [sp, #384]
1361 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #202]
1362 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #218]
1363 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #408]
1364 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #424]
1365 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #400]
1366 ; NONEON-NOSVE-NEXT:    str x10, [sp, #416]
1367 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #384]
1368 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #425]
1369 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #416]
1370 ; NONEON-NOSVE-NEXT:    tbz w8, #26, .LBB3_29
1371 ; NONEON-NOSVE-NEXT:  .LBB3_60: // %cond.load76
1372 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #26]
1373 ; NONEON-NOSVE-NEXT:    str q1, [sp, #336]
1374 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #368]
1375 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #351]
1376 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #368]
1377 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #367]
1378 ; NONEON-NOSVE-NEXT:    str q1, [sp, #320]
1379 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #139]
1380 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #155]
1381 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #344]
1382 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #360]
1383 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #336]
1384 ; NONEON-NOSVE-NEXT:    str x10, [sp, #352]
1385 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #320]
1386 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #362]
1387 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #352]
1388 ; NONEON-NOSVE-NEXT:    tbz w8, #27, .LBB3_30
1389 ; NONEON-NOSVE-NEXT:  .LBB3_61: // %cond.load79
1390 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #27]
1391 ; NONEON-NOSVE-NEXT:    str q1, [sp, #272]
1392 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #304]
1393 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #284]
1394 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #304]
1395 ; NONEON-NOSVE-NEXT:    str w10, [sp, #300]
1396 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #282]
1397 ; NONEON-NOSVE-NEXT:    str q1, [sp, #256]
1398 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #298]
1399 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #280]
1400 ; NONEON-NOSVE-NEXT:    strh w10, [sp, #296]
1401 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #272]
1402 ; NONEON-NOSVE-NEXT:    str x10, [sp, #288]
1403 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #256]
1404 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #299]
1405 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #288]
1406 ; NONEON-NOSVE-NEXT:    tbz w8, #28, .LBB3_31
1407 ; NONEON-NOSVE-NEXT:  .LBB3_62: // %cond.load82
1408 ; NONEON-NOSVE-NEXT:    ldrb w10, [x0, #28]
1409 ; NONEON-NOSVE-NEXT:    str q1, [sp, #208]
1410 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #240]
1411 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #223]
1412 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #240]
1413 ; NONEON-NOSVE-NEXT:    strb w10, [sp, #239]
1414 ; NONEON-NOSVE-NEXT:    str q1, [sp, #192]
1415 ; NONEON-NOSVE-NEXT:    ldurh w10, [x9, #13]
1416 ; NONEON-NOSVE-NEXT:    sturh w10, [x9, #29]
1417 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #216]
1418 ; NONEON-NOSVE-NEXT:    str w9, [sp, #232]
1419 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #208]
1420 ; NONEON-NOSVE-NEXT:    str x9, [sp, #224]
1421 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #192]
1422 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #236]
1423 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #224]
1424 ; NONEON-NOSVE-NEXT:    tbz w8, #29, .LBB3_32
1425 ; NONEON-NOSVE-NEXT:  .LBB3_63: // %cond.load85
1426 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #29]
1427 ; NONEON-NOSVE-NEXT:    str q1, [sp, #144]
1428 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #176]
1429 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #158]
1430 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #176]
1431 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #174]
1432 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #156]
1433 ; NONEON-NOSVE-NEXT:    str q1, [sp, #128]
1434 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #172]
1435 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #152]
1436 ; NONEON-NOSVE-NEXT:    str w9, [sp, #168]
1437 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #144]
1438 ; NONEON-NOSVE-NEXT:    str x9, [sp, #160]
1439 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #128]
1440 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #173]
1441 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #160]
1442 ; NONEON-NOSVE-NEXT:    tbz w8, #30, .LBB3_33
1443 ; NONEON-NOSVE-NEXT:  .LBB3_64: // %cond.load88
1444 ; NONEON-NOSVE-NEXT:    ldrb w9, [x0, #30]
1445 ; NONEON-NOSVE-NEXT:    str q1, [sp, #80]
1446 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #112]
1447 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #95]
1448 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #112]
1449 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #111]
1450 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #92]
1451 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
1452 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #108]
1453 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #88]
1454 ; NONEON-NOSVE-NEXT:    str w9, [sp, #104]
1455 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #80]
1456 ; NONEON-NOSVE-NEXT:    str x9, [sp, #96]
1457 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #64]
1458 ; NONEON-NOSVE-NEXT:    strb w9, [sp, #110]
1459 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #96]
1460 ; NONEON-NOSVE-NEXT:    tbnz w8, #31, .LBB3_34
1461 ; NONEON-NOSVE-NEXT:    b .LBB3_35
1462   %load = call <32 x i8> @llvm.masked.load.v32i8(ptr %src, i32 8, <32 x i1> %mask, <32 x i8> zeroinitializer)
1463   ret <32 x i8> %load
1466 define <2 x half> @masked_load_v2f16(ptr %src, <2 x i1> %mask) {
1467 ; CHECK-LABEL: masked_load_v2f16:
1468 ; CHECK:       // %bb.0:
1469 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1470 ; CHECK-NEXT:    fmov s1, wzr
1471 ; CHECK-NEXT:    mov z2.s, z0.s[1]
1472 ; CHECK-NEXT:    ptrue p0.h, vl4
1473 ; CHECK-NEXT:    zip1 z0.h, z0.h, z2.h
1474 ; CHECK-NEXT:    zip1 z1.h, z1.h, z1.h
1475 ; CHECK-NEXT:    zip1 z0.s, z0.s, z1.s
1476 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
1477 ; CHECK-NEXT:    asr z0.h, z0.h, #15
1478 ; CHECK-NEXT:    cmpne p0.h, p0/z, z0.h, #0
1479 ; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x0]
1480 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1481 ; CHECK-NEXT:    ret
1483 ; NONEON-NOSVE-LABEL: masked_load_v2f16:
1484 ; NONEON-NOSVE:       // %bb.0:
1485 ; NONEON-NOSVE-NEXT:    sub sp, sp, #48
1486 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 48
1487 ; NONEON-NOSVE-NEXT:    str d0, [sp, #32]
1488 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #36]
1489 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #32]
1490 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
1491 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
1492 ; NONEON-NOSVE-NEXT:    bfxil w8, w9, #0, #1
1493 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB4_2
1494 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
1495 ; NONEON-NOSVE-NEXT:    fmov s0, wzr
1496 ; NONEON-NOSVE-NEXT:    ldr h1, [x0]
1497 ; NONEON-NOSVE-NEXT:    str h1, [sp, #24]
1498 ; NONEON-NOSVE-NEXT:    str h0, [sp, #26]
1499 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1500 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB4_3
1501 ; NONEON-NOSVE-NEXT:    b .LBB4_4
1502 ; NONEON-NOSVE-NEXT:  .LBB4_2:
1503 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI4_0
1504 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI4_0]
1505 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB4_4
1506 ; NONEON-NOSVE-NEXT:  .LBB4_3: // %cond.load1
1507 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #2]
1508 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
1509 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #8]
1510 ; NONEON-NOSVE-NEXT:    str h1, [sp, #18]
1511 ; NONEON-NOSVE-NEXT:    str h0, [sp, #16]
1512 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #16]
1513 ; NONEON-NOSVE-NEXT:  .LBB4_4: // %else2
1514 ; NONEON-NOSVE-NEXT:    add sp, sp, #48
1515 ; NONEON-NOSVE-NEXT:    ret
1516   %load = call <2 x half> @llvm.masked.load.v2f16(ptr %src, i32 8, <2 x i1> %mask, <2 x half> zeroinitializer)
1517   ret <2 x half> %load
1520 define <4 x half> @masked_load_v4f16(ptr %src, <4 x i1> %mask) {
1521 ; CHECK-LABEL: masked_load_v4f16:
1522 ; CHECK:       // %bb.0:
1523 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1524 ; CHECK-NEXT:    ptrue p0.h, vl4
1525 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
1526 ; CHECK-NEXT:    asr z0.h, z0.h, #15
1527 ; CHECK-NEXT:    cmpne p0.h, p0/z, z0.h, #0
1528 ; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x0]
1529 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
1530 ; CHECK-NEXT:    ret
1532 ; NONEON-NOSVE-LABEL: masked_load_v4f16:
1533 ; NONEON-NOSVE:       // %bb.0:
1534 ; NONEON-NOSVE-NEXT:    sub sp, sp, #128
1535 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 128
1536 ; NONEON-NOSVE-NEXT:    str d0, [sp, #112]
1537 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #114]
1538 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #116]
1539 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #118]
1540 ; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #112]
1541 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
1542 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
1543 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
1544 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
1545 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x4
1546 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
1547 ; NONEON-NOSVE-NEXT:    bfxil w8, w11, #0, #1
1548 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
1549 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
1550 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB5_2
1551 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
1552 ; NONEON-NOSVE-NEXT:    fmov s0, wzr
1553 ; NONEON-NOSVE-NEXT:    ldr h1, [x0]
1554 ; NONEON-NOSVE-NEXT:    stur wzr, [sp, #106]
1555 ; NONEON-NOSVE-NEXT:    str h1, [sp, #104]
1556 ; NONEON-NOSVE-NEXT:    str h0, [sp, #110]
1557 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #104]
1558 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB5_3
1559 ; NONEON-NOSVE-NEXT:    b .LBB5_4
1560 ; NONEON-NOSVE-NEXT:  .LBB5_2:
1561 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI5_0
1562 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI5_0]
1563 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB5_4
1564 ; NONEON-NOSVE-NEXT:  .LBB5_3: // %cond.load1
1565 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #2]
1566 ; NONEON-NOSVE-NEXT:    str d0, [sp, #80]
1567 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #84]
1568 ; NONEON-NOSVE-NEXT:    str h1, [sp, #96]
1569 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #96]
1570 ; NONEON-NOSVE-NEXT:    str w9, [sp, #92]
1571 ; NONEON-NOSVE-NEXT:    str d0, [sp, #72]
1572 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #80]
1573 ; NONEON-NOSVE-NEXT:    str h0, [sp, #88]
1574 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #72]
1575 ; NONEON-NOSVE-NEXT:    str h0, [sp, #90]
1576 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #88]
1577 ; NONEON-NOSVE-NEXT:  .LBB5_4: // %else2
1578 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB5_7
1579 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
1580 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB5_8
1581 ; NONEON-NOSVE-NEXT:  .LBB5_6: // %else8
1582 ; NONEON-NOSVE-NEXT:    add sp, sp, #128
1583 ; NONEON-NOSVE-NEXT:    ret
1584 ; NONEON-NOSVE-NEXT:  .LBB5_7: // %cond.load4
1585 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #4]
1586 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
1587 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #48]
1588 ; NONEON-NOSVE-NEXT:    str h1, [sp, #64]
1589 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #64]
1590 ; NONEON-NOSVE-NEXT:    str w9, [sp, #56]
1591 ; NONEON-NOSVE-NEXT:    str d0, [sp, #40]
1592 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #54]
1593 ; NONEON-NOSVE-NEXT:    str h0, [sp, #62]
1594 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #40]
1595 ; NONEON-NOSVE-NEXT:    str h0, [sp, #60]
1596 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #56]
1597 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB5_6
1598 ; NONEON-NOSVE-NEXT:  .LBB5_8: // %cond.load7
1599 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #6]
1600 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
1601 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
1602 ; NONEON-NOSVE-NEXT:    str h1, [sp, #32]
1603 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #32]
1604 ; NONEON-NOSVE-NEXT:    str w8, [sp, #24]
1605 ; NONEON-NOSVE-NEXT:    str d0, [sp, #16]
1606 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #12]
1607 ; NONEON-NOSVE-NEXT:    str h0, [sp, #28]
1608 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #16]
1609 ; NONEON-NOSVE-NEXT:    str h0, [sp, #30]
1610 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
1611 ; NONEON-NOSVE-NEXT:    add sp, sp, #128
1612 ; NONEON-NOSVE-NEXT:    ret
1613   %load = call <4 x half> @llvm.masked.load.v4f16(ptr %src, i32 8, <4 x i1> %mask, <4 x half> zeroinitializer)
1614   ret <4 x half> %load
1617 define <8 x half> @masked_load_v8f16(ptr %src, <8 x i1> %mask) {
1618 ; CHECK-LABEL: masked_load_v8f16:
1619 ; CHECK:       // %bb.0:
1620 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
1621 ; CHECK-NEXT:    ptrue p0.h, vl8
1622 ; CHECK-NEXT:    uunpklo z0.h, z0.b
1623 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
1624 ; CHECK-NEXT:    asr z0.h, z0.h, #15
1625 ; CHECK-NEXT:    cmpne p0.h, p0/z, z0.h, #0
1626 ; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x0]
1627 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1628 ; CHECK-NEXT:    ret
1630 ; NONEON-NOSVE-LABEL: masked_load_v8f16:
1631 ; NONEON-NOSVE:       // %bb.0:
1632 ; NONEON-NOSVE-NEXT:    sub sp, sp, #496
1633 ; NONEON-NOSVE-NEXT:    str x29, [sp, #480] // 8-byte Folded Spill
1634 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 496
1635 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
1636 ; NONEON-NOSVE-NEXT:    str d0, [sp, #464]
1637 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
1638 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #466]
1639 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #467]
1640 ; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #465]
1641 ; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #468]
1642 ; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #469]
1643 ; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #470]
1644 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
1645 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
1646 ; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1
1647 ; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #464]
1648 ; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1
1649 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
1650 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x4
1651 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
1652 ; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1
1653 ; NONEON-NOSVE-NEXT:    orr w8, w8, w10
1654 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #471]
1655 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x2
1656 ; NONEON-NOSVE-NEXT:    and w13, w13, #0x10
1657 ; NONEON-NOSVE-NEXT:    bfxil w11, w12, #0, #1
1658 ; NONEON-NOSVE-NEXT:    and w12, w14, #0x20
1659 ; NONEON-NOSVE-NEXT:    orr w8, w8, w13
1660 ; NONEON-NOSVE-NEXT:    and w13, w15, #0x40
1661 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
1662 ; NONEON-NOSVE-NEXT:    orr w8, w11, w8
1663 ; NONEON-NOSVE-NEXT:    orr w11, w12, w13
1664 ; NONEON-NOSVE-NEXT:    orr w8, w8, w11
1665 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x80
1666 ; NONEON-NOSVE-NEXT:    add w10, w8, w10
1667 ; NONEON-NOSVE-NEXT:    and w8, w10, #0xff
1668 ; NONEON-NOSVE-NEXT:    tbz w10, #0, .LBB6_2
1669 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
1670 ; NONEON-NOSVE-NEXT:    fmov s0, wzr
1671 ; NONEON-NOSVE-NEXT:    ldr h1, [x0]
1672 ; NONEON-NOSVE-NEXT:    stur wzr, [x9, #250]
1673 ; NONEON-NOSVE-NEXT:    stur xzr, [x9, #242]
1674 ; NONEON-NOSVE-NEXT:    str h1, [sp, #448]
1675 ; NONEON-NOSVE-NEXT:    str h0, [sp, #462]
1676 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #448]
1677 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB6_3
1678 ; NONEON-NOSVE-NEXT:    b .LBB6_4
1679 ; NONEON-NOSVE-NEXT:  .LBB6_2:
1680 ; NONEON-NOSVE-NEXT:    adrp x10, .LCPI6_0
1681 ; NONEON-NOSVE-NEXT:    ldr q0, [x10, :lo12:.LCPI6_0]
1682 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB6_4
1683 ; NONEON-NOSVE-NEXT:  .LBB6_3: // %cond.load1
1684 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #2]
1685 ; NONEON-NOSVE-NEXT:    str q0, [sp, #400]
1686 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #412]
1687 ; NONEON-NOSVE-NEXT:    str h1, [sp, #432]
1688 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #432]
1689 ; NONEON-NOSVE-NEXT:    str w10, [sp, #428]
1690 ; NONEON-NOSVE-NEXT:    str q0, [sp, #384]
1691 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #196]
1692 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #212]
1693 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #400]
1694 ; NONEON-NOSVE-NEXT:    str h0, [sp, #416]
1695 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #384]
1696 ; NONEON-NOSVE-NEXT:    str h0, [sp, #418]
1697 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #416]
1698 ; NONEON-NOSVE-NEXT:  .LBB6_4: // %else2
1699 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB6_12
1700 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
1701 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB6_13
1702 ; NONEON-NOSVE-NEXT:  .LBB6_6: // %else8
1703 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB6_14
1704 ; NONEON-NOSVE-NEXT:  .LBB6_7: // %else11
1705 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB6_15
1706 ; NONEON-NOSVE-NEXT:  .LBB6_8: // %else14
1707 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB6_16
1708 ; NONEON-NOSVE-NEXT:  .LBB6_9: // %else17
1709 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB6_11
1710 ; NONEON-NOSVE-NEXT:  .LBB6_10: // %cond.load19
1711 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #14]
1712 ; NONEON-NOSVE-NEXT:    str q0, [sp]
1713 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
1714 ; NONEON-NOSVE-NEXT:    str h1, [sp, #48]
1715 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]
1716 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
1717 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
1718 ; NONEON-NOSVE-NEXT:    str q0, [sp, #16]
1719 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #12]
1720 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
1721 ; NONEON-NOSVE-NEXT:    str h0, [sp, #44]
1722 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #16]
1723 ; NONEON-NOSVE-NEXT:    str h0, [sp, #46]
1724 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
1725 ; NONEON-NOSVE-NEXT:  .LBB6_11: // %else20
1726 ; NONEON-NOSVE-NEXT:    ldr x29, [sp, #480] // 8-byte Folded Reload
1727 ; NONEON-NOSVE-NEXT:    add sp, sp, #496
1728 ; NONEON-NOSVE-NEXT:    ret
1729 ; NONEON-NOSVE-NEXT:  .LBB6_12: // %cond.load4
1730 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #4]
1731 ; NONEON-NOSVE-NEXT:    str q0, [sp, #336]
1732 ; NONEON-NOSVE-NEXT:    str h1, [sp, #368]
1733 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #368]
1734 ; NONEON-NOSVE-NEXT:    str q0, [sp, #320]
1735 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #350]
1736 ; NONEON-NOSVE-NEXT:    str h0, [sp, #366]
1737 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #134]
1738 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #150]
1739 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #336]
1740 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #320]
1741 ; NONEON-NOSVE-NEXT:    str w10, [sp, #352]
1742 ; NONEON-NOSVE-NEXT:    str h0, [sp, #356]
1743 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #352]
1744 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB6_6
1745 ; NONEON-NOSVE-NEXT:  .LBB6_13: // %cond.load7
1746 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #6]
1747 ; NONEON-NOSVE-NEXT:    str q0, [sp, #272]
1748 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #280]
1749 ; NONEON-NOSVE-NEXT:    str h1, [sp, #304]
1750 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #304]
1751 ; NONEON-NOSVE-NEXT:    str x10, [sp, #296]
1752 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #272]
1753 ; NONEON-NOSVE-NEXT:    str q0, [sp, #256]
1754 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #276]
1755 ; NONEON-NOSVE-NEXT:    str w10, [sp, #288]
1756 ; NONEON-NOSVE-NEXT:    str h0, [sp, #292]
1757 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #256]
1758 ; NONEON-NOSVE-NEXT:    str h0, [sp, #294]
1759 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #288]
1760 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB6_7
1761 ; NONEON-NOSVE-NEXT:  .LBB6_14: // %cond.load10
1762 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #8]
1763 ; NONEON-NOSVE-NEXT:    str q0, [sp, #208]
1764 ; NONEON-NOSVE-NEXT:    str h1, [sp, #240]
1765 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #240]
1766 ; NONEON-NOSVE-NEXT:    str q0, [sp, #192]
1767 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #222]
1768 ; NONEON-NOSVE-NEXT:    str h0, [sp, #238]
1769 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #10]
1770 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #26]
1771 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #208]
1772 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #192]
1773 ; NONEON-NOSVE-NEXT:    str x9, [sp, #224]
1774 ; NONEON-NOSVE-NEXT:    str h0, [sp, #232]
1775 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #224]
1776 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB6_8
1777 ; NONEON-NOSVE-NEXT:  .LBB6_15: // %cond.load13
1778 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #10]
1779 ; NONEON-NOSVE-NEXT:    str q0, [sp, #144]
1780 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #156]
1781 ; NONEON-NOSVE-NEXT:    str h1, [sp, #176]
1782 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #176]
1783 ; NONEON-NOSVE-NEXT:    str w9, [sp, #172]
1784 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #144]
1785 ; NONEON-NOSVE-NEXT:    str q0, [sp, #128]
1786 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #152]
1787 ; NONEON-NOSVE-NEXT:    str x9, [sp, #160]
1788 ; NONEON-NOSVE-NEXT:    str h0, [sp, #168]
1789 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #128]
1790 ; NONEON-NOSVE-NEXT:    str h0, [sp, #170]
1791 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #160]
1792 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB6_9
1793 ; NONEON-NOSVE-NEXT:  .LBB6_16: // %cond.load16
1794 ; NONEON-NOSVE-NEXT:    ldr h1, [x0, #12]
1795 ; NONEON-NOSVE-NEXT:    str q0, [sp, #80]
1796 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #88]
1797 ; NONEON-NOSVE-NEXT:    str h1, [sp, #112]
1798 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #112]
1799 ; NONEON-NOSVE-NEXT:    str w9, [sp, #104]
1800 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #80]
1801 ; NONEON-NOSVE-NEXT:    str q0, [sp, #64]
1802 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #94]
1803 ; NONEON-NOSVE-NEXT:    str x9, [sp, #96]
1804 ; NONEON-NOSVE-NEXT:    str h0, [sp, #110]
1805 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #64]
1806 ; NONEON-NOSVE-NEXT:    str h0, [sp, #108]
1807 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #96]
1808 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB6_10
1809 ; NONEON-NOSVE-NEXT:    b .LBB6_11
1810   %load = call <8 x half> @llvm.masked.load.v8f16(ptr %src, i32 8, <8 x i1> %mask, <8 x half> zeroinitializer)
1811   ret <8 x half> %load
1814 define <16 x half> @masked_load_v16f16(ptr %src, <16 x i1> %mask) {
1815 ; CHECK-LABEL: masked_load_v16f16:
1816 ; CHECK:       // %bb.0:
1817 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
1818 ; CHECK-NEXT:    uunpklo z1.h, z0.b
1819 ; CHECK-NEXT:    ptrue p0.h, vl8
1820 ; CHECK-NEXT:    mov x8, #8 // =0x8
1821 ; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8
1822 ; CHECK-NEXT:    uunpklo z0.h, z0.b
1823 ; CHECK-NEXT:    lsl z1.h, z1.h, #15
1824 ; CHECK-NEXT:    asr z1.h, z1.h, #15
1825 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
1826 ; CHECK-NEXT:    cmpne p1.h, p0/z, z1.h, #0
1827 ; CHECK-NEXT:    asr z0.h, z0.h, #15
1828 ; CHECK-NEXT:    cmpne p0.h, p0/z, z0.h, #0
1829 ; CHECK-NEXT:    ld1h { z0.h }, p1/z, [x0]
1830 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
1831 ; CHECK-NEXT:    ld1h { z1.h }, p0/z, [x0, x8, lsl #1]
1832 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
1833 ; CHECK-NEXT:    ret
1835 ; NONEON-NOSVE-LABEL: masked_load_v16f16:
1836 ; NONEON-NOSVE:       // %bb.0:
1837 ; NONEON-NOSVE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1838 ; NONEON-NOSVE-NEXT:    sub sp, sp, #992
1839 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 1008
1840 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
1841 ; NONEON-NOSVE-NEXT:    str q0, [sp, #976]
1842 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI7_0
1843 ; NONEON-NOSVE-NEXT:    ldrb w8, [sp, #978]
1844 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #979]
1845 ; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #977]
1846 ; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #980]
1847 ; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #981]
1848 ; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #982]
1849 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
1850 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
1851 ; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1
1852 ; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #976]
1853 ; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1
1854 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
1855 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x4
1856 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
1857 ; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1
1858 ; NONEON-NOSVE-NEXT:    orr w8, w8, w10
1859 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #983]
1860 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x2
1861 ; NONEON-NOSVE-NEXT:    and w13, w13, #0x10
1862 ; NONEON-NOSVE-NEXT:    bfxil w11, w12, #0, #1
1863 ; NONEON-NOSVE-NEXT:    and w12, w14, #0x20
1864 ; NONEON-NOSVE-NEXT:    orr w8, w8, w13
1865 ; NONEON-NOSVE-NEXT:    and w13, w15, #0x40
1866 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
1867 ; NONEON-NOSVE-NEXT:    orr w8, w11, w8
1868 ; NONEON-NOSVE-NEXT:    orr w11, w12, w13
1869 ; NONEON-NOSVE-NEXT:    ldr q1, [x9, :lo12:.LCPI7_0]
1870 ; NONEON-NOSVE-NEXT:    orr w8, w8, w11
1871 ; NONEON-NOSVE-NEXT:    and w10, w10, #0xffffff80
1872 ; NONEON-NOSVE-NEXT:    add x9, sp, #720
1873 ; NONEON-NOSVE-NEXT:    add w8, w8, w10
1874 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB7_2
1875 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
1876 ; NONEON-NOSVE-NEXT:    fmov s0, wzr
1877 ; NONEON-NOSVE-NEXT:    ldr h2, [x0]
1878 ; NONEON-NOSVE-NEXT:    stur wzr, [x9, #250]
1879 ; NONEON-NOSVE-NEXT:    stur xzr, [x9, #242]
1880 ; NONEON-NOSVE-NEXT:    str h2, [sp, #960]
1881 ; NONEON-NOSVE-NEXT:    str h0, [sp, #974]
1882 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #960]
1883 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB7_3
1884 ; NONEON-NOSVE-NEXT:    b .LBB7_4
1885 ; NONEON-NOSVE-NEXT:  .LBB7_2:
1886 ; NONEON-NOSVE-NEXT:    str q1, [sp, #-16]!
1887 ; NONEON-NOSVE-NEXT:    ldr q0, [sp], #16
1888 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB7_4
1889 ; NONEON-NOSVE-NEXT:  .LBB7_3: // %cond.load1
1890 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #2]
1891 ; NONEON-NOSVE-NEXT:    str q0, [sp, #912]
1892 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #924]
1893 ; NONEON-NOSVE-NEXT:    str h2, [sp, #944]
1894 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #944]
1895 ; NONEON-NOSVE-NEXT:    str w10, [sp, #940]
1896 ; NONEON-NOSVE-NEXT:    str q0, [sp, #896]
1897 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #196]
1898 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #212]
1899 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #912]
1900 ; NONEON-NOSVE-NEXT:    str h0, [sp, #928]
1901 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #896]
1902 ; NONEON-NOSVE-NEXT:    str h0, [sp, #930]
1903 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #928]
1904 ; NONEON-NOSVE-NEXT:  .LBB7_4: // %else2
1905 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB7_20
1906 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
1907 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB7_21
1908 ; NONEON-NOSVE-NEXT:  .LBB7_6: // %else8
1909 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB7_22
1910 ; NONEON-NOSVE-NEXT:  .LBB7_7: // %else11
1911 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB7_23
1912 ; NONEON-NOSVE-NEXT:  .LBB7_8: // %else14
1913 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB7_24
1914 ; NONEON-NOSVE-NEXT:  .LBB7_9: // %else17
1915 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB7_25
1916 ; NONEON-NOSVE-NEXT:  .LBB7_10: // %else20
1917 ; NONEON-NOSVE-NEXT:    tbnz w8, #8, .LBB7_26
1918 ; NONEON-NOSVE-NEXT:  .LBB7_11: // %else23
1919 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
1920 ; NONEON-NOSVE-NEXT:    tbnz w8, #9, .LBB7_27
1921 ; NONEON-NOSVE-NEXT:  .LBB7_12: // %else26
1922 ; NONEON-NOSVE-NEXT:    tbnz w8, #10, .LBB7_28
1923 ; NONEON-NOSVE-NEXT:  .LBB7_13: // %else29
1924 ; NONEON-NOSVE-NEXT:    tbnz w8, #11, .LBB7_29
1925 ; NONEON-NOSVE-NEXT:  .LBB7_14: // %else32
1926 ; NONEON-NOSVE-NEXT:    tbnz w8, #12, .LBB7_30
1927 ; NONEON-NOSVE-NEXT:  .LBB7_15: // %else35
1928 ; NONEON-NOSVE-NEXT:    tbnz w8, #13, .LBB7_31
1929 ; NONEON-NOSVE-NEXT:  .LBB7_16: // %else38
1930 ; NONEON-NOSVE-NEXT:    tbnz w8, #14, .LBB7_32
1931 ; NONEON-NOSVE-NEXT:  .LBB7_17: // %else41
1932 ; NONEON-NOSVE-NEXT:    tbz w8, #15, .LBB7_19
1933 ; NONEON-NOSVE-NEXT:  .LBB7_18: // %cond.load43
1934 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #30]
1935 ; NONEON-NOSVE-NEXT:    str q1, [sp]
1936 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #8]
1937 ; NONEON-NOSVE-NEXT:    str h2, [sp, #48]
1938 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #48]
1939 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
1940 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
1941 ; NONEON-NOSVE-NEXT:    str q1, [sp, #16]
1942 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #12]
1943 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
1944 ; NONEON-NOSVE-NEXT:    str h1, [sp, #44]
1945 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #16]
1946 ; NONEON-NOSVE-NEXT:    str h1, [sp, #46]
1947 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #32]
1948 ; NONEON-NOSVE-NEXT:  .LBB7_19: // %else44
1949 ; NONEON-NOSVE-NEXT:    add sp, sp, #992
1950 ; NONEON-NOSVE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1951 ; NONEON-NOSVE-NEXT:    ret
1952 ; NONEON-NOSVE-NEXT:  .LBB7_20: // %cond.load4
1953 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #4]
1954 ; NONEON-NOSVE-NEXT:    str q0, [sp, #848]
1955 ; NONEON-NOSVE-NEXT:    str h2, [sp, #880]
1956 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #880]
1957 ; NONEON-NOSVE-NEXT:    str q0, [sp, #832]
1958 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #862]
1959 ; NONEON-NOSVE-NEXT:    str h0, [sp, #878]
1960 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #134]
1961 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #150]
1962 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #848]
1963 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #832]
1964 ; NONEON-NOSVE-NEXT:    str w10, [sp, #864]
1965 ; NONEON-NOSVE-NEXT:    str h0, [sp, #868]
1966 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #864]
1967 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB7_6
1968 ; NONEON-NOSVE-NEXT:  .LBB7_21: // %cond.load7
1969 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #6]
1970 ; NONEON-NOSVE-NEXT:    str q0, [sp, #784]
1971 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #792]
1972 ; NONEON-NOSVE-NEXT:    str h2, [sp, #816]
1973 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #816]
1974 ; NONEON-NOSVE-NEXT:    str x10, [sp, #808]
1975 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #784]
1976 ; NONEON-NOSVE-NEXT:    str q0, [sp, #768]
1977 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #788]
1978 ; NONEON-NOSVE-NEXT:    str w10, [sp, #800]
1979 ; NONEON-NOSVE-NEXT:    str h0, [sp, #804]
1980 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #768]
1981 ; NONEON-NOSVE-NEXT:    str h0, [sp, #806]
1982 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #800]
1983 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB7_7
1984 ; NONEON-NOSVE-NEXT:  .LBB7_22: // %cond.load10
1985 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #8]
1986 ; NONEON-NOSVE-NEXT:    str q0, [sp, #720]
1987 ; NONEON-NOSVE-NEXT:    str h2, [sp, #752]
1988 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #752]
1989 ; NONEON-NOSVE-NEXT:    str q0, [sp, #704]
1990 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #734]
1991 ; NONEON-NOSVE-NEXT:    str h0, [sp, #750]
1992 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #10]
1993 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #26]
1994 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #720]
1995 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #704]
1996 ; NONEON-NOSVE-NEXT:    str x9, [sp, #736]
1997 ; NONEON-NOSVE-NEXT:    str h0, [sp, #744]
1998 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #736]
1999 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB7_8
2000 ; NONEON-NOSVE-NEXT:  .LBB7_23: // %cond.load13
2001 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #10]
2002 ; NONEON-NOSVE-NEXT:    str q0, [sp, #656]
2003 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #668]
2004 ; NONEON-NOSVE-NEXT:    str h2, [sp, #688]
2005 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #688]
2006 ; NONEON-NOSVE-NEXT:    str w9, [sp, #684]
2007 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #656]
2008 ; NONEON-NOSVE-NEXT:    str q0, [sp, #640]
2009 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #664]
2010 ; NONEON-NOSVE-NEXT:    str x9, [sp, #672]
2011 ; NONEON-NOSVE-NEXT:    str h0, [sp, #680]
2012 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #640]
2013 ; NONEON-NOSVE-NEXT:    str h0, [sp, #682]
2014 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #672]
2015 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB7_9
2016 ; NONEON-NOSVE-NEXT:  .LBB7_24: // %cond.load16
2017 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #12]
2018 ; NONEON-NOSVE-NEXT:    str q0, [sp, #592]
2019 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #600]
2020 ; NONEON-NOSVE-NEXT:    str h2, [sp, #624]
2021 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #624]
2022 ; NONEON-NOSVE-NEXT:    str w9, [sp, #616]
2023 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #592]
2024 ; NONEON-NOSVE-NEXT:    str q0, [sp, #576]
2025 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #606]
2026 ; NONEON-NOSVE-NEXT:    str x9, [sp, #608]
2027 ; NONEON-NOSVE-NEXT:    str h0, [sp, #622]
2028 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #576]
2029 ; NONEON-NOSVE-NEXT:    str h0, [sp, #620]
2030 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #608]
2031 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB7_10
2032 ; NONEON-NOSVE-NEXT:  .LBB7_25: // %cond.load19
2033 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #14]
2034 ; NONEON-NOSVE-NEXT:    str q0, [sp, #512]
2035 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #520]
2036 ; NONEON-NOSVE-NEXT:    str h2, [sp, #560]
2037 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #560]
2038 ; NONEON-NOSVE-NEXT:    str w9, [sp, #552]
2039 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #512]
2040 ; NONEON-NOSVE-NEXT:    str q0, [sp, #528]
2041 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #524]
2042 ; NONEON-NOSVE-NEXT:    str x9, [sp, #544]
2043 ; NONEON-NOSVE-NEXT:    str h0, [sp, #556]
2044 ; NONEON-NOSVE-NEXT:    ldr h0, [sp, #528]
2045 ; NONEON-NOSVE-NEXT:    str h0, [sp, #558]
2046 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #544]
2047 ; NONEON-NOSVE-NEXT:    tbz w8, #8, .LBB7_11
2048 ; NONEON-NOSVE-NEXT:  .LBB7_26: // %cond.load22
2049 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #16]
2050 ; NONEON-NOSVE-NEXT:    str q1, [sp, #464]
2051 ; NONEON-NOSVE-NEXT:    add x9, sp, #464
2052 ; NONEON-NOSVE-NEXT:    str h2, [sp, #496]
2053 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #496]
2054 ; NONEON-NOSVE-NEXT:    str q1, [sp, #448]
2055 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #478]
2056 ; NONEON-NOSVE-NEXT:    str h1, [sp, #494]
2057 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #10]
2058 ; NONEON-NOSVE-NEXT:    ldur x11, [x9, #2]
2059 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #26]
2060 ; NONEON-NOSVE-NEXT:    stur x11, [x9, #18]
2061 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #448]
2062 ; NONEON-NOSVE-NEXT:    str h1, [sp, #480]
2063 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #480]
2064 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
2065 ; NONEON-NOSVE-NEXT:    tbz w8, #9, .LBB7_12
2066 ; NONEON-NOSVE-NEXT:  .LBB7_27: // %cond.load25
2067 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #18]
2068 ; NONEON-NOSVE-NEXT:    str q1, [sp, #400]
2069 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #412]
2070 ; NONEON-NOSVE-NEXT:    str h2, [sp, #432]
2071 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #432]
2072 ; NONEON-NOSVE-NEXT:    str w10, [sp, #428]
2073 ; NONEON-NOSVE-NEXT:    str q1, [sp, #384]
2074 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #196]
2075 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #212]
2076 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #400]
2077 ; NONEON-NOSVE-NEXT:    str h1, [sp, #416]
2078 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #384]
2079 ; NONEON-NOSVE-NEXT:    str h1, [sp, #418]
2080 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #416]
2081 ; NONEON-NOSVE-NEXT:    tbz w8, #10, .LBB7_13
2082 ; NONEON-NOSVE-NEXT:  .LBB7_28: // %cond.load28
2083 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #20]
2084 ; NONEON-NOSVE-NEXT:    str q1, [sp, #336]
2085 ; NONEON-NOSVE-NEXT:    str h2, [sp, #368]
2086 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #368]
2087 ; NONEON-NOSVE-NEXT:    str q1, [sp, #320]
2088 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #350]
2089 ; NONEON-NOSVE-NEXT:    str h1, [sp, #366]
2090 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #134]
2091 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #150]
2092 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #336]
2093 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #320]
2094 ; NONEON-NOSVE-NEXT:    str w10, [sp, #352]
2095 ; NONEON-NOSVE-NEXT:    str h1, [sp, #356]
2096 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #352]
2097 ; NONEON-NOSVE-NEXT:    tbz w8, #11, .LBB7_14
2098 ; NONEON-NOSVE-NEXT:  .LBB7_29: // %cond.load31
2099 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #22]
2100 ; NONEON-NOSVE-NEXT:    str q1, [sp, #272]
2101 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #280]
2102 ; NONEON-NOSVE-NEXT:    str h2, [sp, #304]
2103 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #304]
2104 ; NONEON-NOSVE-NEXT:    str x10, [sp, #296]
2105 ; NONEON-NOSVE-NEXT:    ldr w10, [sp, #272]
2106 ; NONEON-NOSVE-NEXT:    str q1, [sp, #256]
2107 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #276]
2108 ; NONEON-NOSVE-NEXT:    str w10, [sp, #288]
2109 ; NONEON-NOSVE-NEXT:    str h1, [sp, #292]
2110 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #256]
2111 ; NONEON-NOSVE-NEXT:    str h1, [sp, #294]
2112 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #288]
2113 ; NONEON-NOSVE-NEXT:    tbz w8, #12, .LBB7_15
2114 ; NONEON-NOSVE-NEXT:  .LBB7_30: // %cond.load34
2115 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #24]
2116 ; NONEON-NOSVE-NEXT:    str q1, [sp, #208]
2117 ; NONEON-NOSVE-NEXT:    str h2, [sp, #240]
2118 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #240]
2119 ; NONEON-NOSVE-NEXT:    str q1, [sp, #192]
2120 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #222]
2121 ; NONEON-NOSVE-NEXT:    str h1, [sp, #238]
2122 ; NONEON-NOSVE-NEXT:    ldur w10, [x9, #10]
2123 ; NONEON-NOSVE-NEXT:    stur w10, [x9, #26]
2124 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #208]
2125 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #192]
2126 ; NONEON-NOSVE-NEXT:    str x9, [sp, #224]
2127 ; NONEON-NOSVE-NEXT:    str h1, [sp, #232]
2128 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #224]
2129 ; NONEON-NOSVE-NEXT:    tbz w8, #13, .LBB7_16
2130 ; NONEON-NOSVE-NEXT:  .LBB7_31: // %cond.load37
2131 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #26]
2132 ; NONEON-NOSVE-NEXT:    str q1, [sp, #144]
2133 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #156]
2134 ; NONEON-NOSVE-NEXT:    str h2, [sp, #176]
2135 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #176]
2136 ; NONEON-NOSVE-NEXT:    str w9, [sp, #172]
2137 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #144]
2138 ; NONEON-NOSVE-NEXT:    str q1, [sp, #128]
2139 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #152]
2140 ; NONEON-NOSVE-NEXT:    str x9, [sp, #160]
2141 ; NONEON-NOSVE-NEXT:    str h1, [sp, #168]
2142 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #128]
2143 ; NONEON-NOSVE-NEXT:    str h1, [sp, #170]
2144 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #160]
2145 ; NONEON-NOSVE-NEXT:    tbz w8, #14, .LBB7_17
2146 ; NONEON-NOSVE-NEXT:  .LBB7_32: // %cond.load40
2147 ; NONEON-NOSVE-NEXT:    ldr h2, [x0, #28]
2148 ; NONEON-NOSVE-NEXT:    str q1, [sp, #80]
2149 ; NONEON-NOSVE-NEXT:    ldr w9, [sp, #88]
2150 ; NONEON-NOSVE-NEXT:    str h2, [sp, #112]
2151 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #112]
2152 ; NONEON-NOSVE-NEXT:    str w9, [sp, #104]
2153 ; NONEON-NOSVE-NEXT:    ldr x9, [sp, #80]
2154 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
2155 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #94]
2156 ; NONEON-NOSVE-NEXT:    str x9, [sp, #96]
2157 ; NONEON-NOSVE-NEXT:    str h1, [sp, #110]
2158 ; NONEON-NOSVE-NEXT:    ldr h1, [sp, #64]
2159 ; NONEON-NOSVE-NEXT:    str h1, [sp, #108]
2160 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #96]
2161 ; NONEON-NOSVE-NEXT:    tbnz w8, #15, .LBB7_18
2162 ; NONEON-NOSVE-NEXT:    b .LBB7_19
2163   %load = call <16 x half> @llvm.masked.load.v16f16(ptr %src, i32 8, <16 x i1> %mask, <16 x half> zeroinitializer)
2164   ret <16 x half> %load
2167 define <2 x float> @masked_load_v2f32(ptr %src, <2 x i1> %mask) {
2168 ; CHECK-LABEL: masked_load_v2f32:
2169 ; CHECK:       // %bb.0:
2170 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
2171 ; CHECK-NEXT:    ptrue p0.s, vl2
2172 ; CHECK-NEXT:    lsl z0.s, z0.s, #31
2173 ; CHECK-NEXT:    asr z0.s, z0.s, #31
2174 ; CHECK-NEXT:    cmpne p0.s, p0/z, z0.s, #0
2175 ; CHECK-NEXT:    ld1w { z0.s }, p0/z, [x0]
2176 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
2177 ; CHECK-NEXT:    ret
2179 ; NONEON-NOSVE-LABEL: masked_load_v2f32:
2180 ; NONEON-NOSVE:       // %bb.0:
2181 ; NONEON-NOSVE-NEXT:    sub sp, sp, #64
2182 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 64
2183 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
2184 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]
2185 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #48]
2186 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
2187 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
2188 ; NONEON-NOSVE-NEXT:    bfxil w8, w9, #0, #1
2189 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB8_2
2190 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2191 ; NONEON-NOSVE-NEXT:    ldr s0, [x0]
2192 ; NONEON-NOSVE-NEXT:    str wzr, [sp, #44]
2193 ; NONEON-NOSVE-NEXT:    str s0, [sp, #40]
2194 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #40]
2195 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB8_3
2196 ; NONEON-NOSVE-NEXT:    b .LBB8_4
2197 ; NONEON-NOSVE-NEXT:  .LBB8_2:
2198 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI8_0
2199 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI8_0]
2200 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB8_4
2201 ; NONEON-NOSVE-NEXT:  .LBB8_3: // %cond.load1
2202 ; NONEON-NOSVE-NEXT:    ldr s1, [x0, #4]
2203 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
2204 ; NONEON-NOSVE-NEXT:    str s1, [sp, #32]
2205 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #8]
2206 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #32]
2207 ; NONEON-NOSVE-NEXT:    str d0, [sp, #16]
2208 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #16]
2209 ; NONEON-NOSVE-NEXT:    stp s1, s0, [sp, #24]
2210 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #24]
2211 ; NONEON-NOSVE-NEXT:  .LBB8_4: // %else2
2212 ; NONEON-NOSVE-NEXT:    add sp, sp, #64
2213 ; NONEON-NOSVE-NEXT:    ret
2214   %load = call <2 x float> @llvm.masked.load.v2f32(ptr %src, i32 8, <2 x i1> %mask, <2 x float> zeroinitializer)
2215   ret <2 x float> %load
2218 define <4 x float> @masked_load_v4f32(ptr %src, <4 x i1> %mask) {
2219 ; CHECK-LABEL: masked_load_v4f32:
2220 ; CHECK:       // %bb.0:
2221 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
2222 ; CHECK-NEXT:    ptrue p0.s, vl4
2223 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2224 ; CHECK-NEXT:    lsl z0.s, z0.s, #31
2225 ; CHECK-NEXT:    asr z0.s, z0.s, #31
2226 ; CHECK-NEXT:    cmpne p0.s, p0/z, z0.s, #0
2227 ; CHECK-NEXT:    ld1w { z0.s }, p0/z, [x0]
2228 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2229 ; CHECK-NEXT:    ret
2231 ; NONEON-NOSVE-LABEL: masked_load_v4f32:
2232 ; NONEON-NOSVE:       // %bb.0:
2233 ; NONEON-NOSVE-NEXT:    sub sp, sp, #224
2234 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 224
2235 ; NONEON-NOSVE-NEXT:    str d0, [sp, #208]
2236 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #210]
2237 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #212]
2238 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #214]
2239 ; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #208]
2240 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
2241 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
2242 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
2243 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
2244 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x4
2245 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
2246 ; NONEON-NOSVE-NEXT:    bfxil w8, w11, #0, #1
2247 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
2248 ; NONEON-NOSVE-NEXT:    orr w8, w8, w9
2249 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB9_2
2250 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2251 ; NONEON-NOSVE-NEXT:    ldr s0, [x0]
2252 ; NONEON-NOSVE-NEXT:    str wzr, [sp, #204]
2253 ; NONEON-NOSVE-NEXT:    stur xzr, [sp, #196]
2254 ; NONEON-NOSVE-NEXT:    str s0, [sp, #192]
2255 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #192]
2256 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB9_3
2257 ; NONEON-NOSVE-NEXT:    b .LBB9_4
2258 ; NONEON-NOSVE-NEXT:  .LBB9_2:
2259 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI9_0
2260 ; NONEON-NOSVE-NEXT:    ldr q0, [x9, :lo12:.LCPI9_0]
2261 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB9_4
2262 ; NONEON-NOSVE-NEXT:  .LBB9_3: // %cond.load1
2263 ; NONEON-NOSVE-NEXT:    ldr s1, [x0, #4]
2264 ; NONEON-NOSVE-NEXT:    str q0, [sp, #144]
2265 ; NONEON-NOSVE-NEXT:    str s1, [sp, #176]
2266 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #176]
2267 ; NONEON-NOSVE-NEXT:    str q0, [sp, #128]
2268 ; NONEON-NOSVE-NEXT:    ldp s0, s1, [sp, #152]
2269 ; NONEON-NOSVE-NEXT:    stp s0, s1, [sp, #168]
2270 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #144]
2271 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #128]
2272 ; NONEON-NOSVE-NEXT:    stp s1, s0, [sp, #160]
2273 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #160]
2274 ; NONEON-NOSVE-NEXT:  .LBB9_4: // %else2
2275 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB9_7
2276 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
2277 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB9_8
2278 ; NONEON-NOSVE-NEXT:  .LBB9_6: // %else8
2279 ; NONEON-NOSVE-NEXT:    add sp, sp, #224
2280 ; NONEON-NOSVE-NEXT:    ret
2281 ; NONEON-NOSVE-NEXT:  .LBB9_7: // %cond.load4
2282 ; NONEON-NOSVE-NEXT:    ldr s1, [x0, #8]
2283 ; NONEON-NOSVE-NEXT:    str q0, [sp, #80]
2284 ; NONEON-NOSVE-NEXT:    str s1, [sp, #112]
2285 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #92]
2286 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #112]
2287 ; NONEON-NOSVE-NEXT:    str q0, [sp, #64]
2288 ; NONEON-NOSVE-NEXT:    ldp s0, s2, [sp, #80]
2289 ; NONEON-NOSVE-NEXT:    stp s0, s2, [sp, #96]
2290 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #64]
2291 ; NONEON-NOSVE-NEXT:    stp s0, s1, [sp, #104]
2292 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #96]
2293 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB9_6
2294 ; NONEON-NOSVE-NEXT:  .LBB9_8: // %cond.load7
2295 ; NONEON-NOSVE-NEXT:    ldr s1, [x0, #12]
2296 ; NONEON-NOSVE-NEXT:    str q0, [sp]
2297 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
2298 ; NONEON-NOSVE-NEXT:    str s1, [sp, #48]
2299 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #8]
2300 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]
2301 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
2302 ; NONEON-NOSVE-NEXT:    str q0, [sp, #16]
2303 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #16]
2304 ; NONEON-NOSVE-NEXT:    stp s1, s0, [sp, #40]
2305 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
2306 ; NONEON-NOSVE-NEXT:    add sp, sp, #224
2307 ; NONEON-NOSVE-NEXT:    ret
2308   %load = call <4 x float> @llvm.masked.load.v4f32(ptr %src, i32 8, <4 x i1> %mask, <4 x float> zeroinitializer)
2309   ret <4 x float> %load
2312 define <8 x float> @masked_load_v8f32(ptr %src, <8 x i1> %mask) {
2313 ; CHECK-LABEL: masked_load_v8f32:
2314 ; CHECK:       // %bb.0:
2315 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
2316 ; CHECK-NEXT:    mov z1.b, z0.b[3]
2317 ; CHECK-NEXT:    mov z2.b, z0.b[2]
2318 ; CHECK-NEXT:    mov x8, #4 // =0x4
2319 ; CHECK-NEXT:    mov z3.b, z0.b[1]
2320 ; CHECK-NEXT:    mov z4.b, z0.b[7]
2321 ; CHECK-NEXT:    mov z5.b, z0.b[6]
2322 ; CHECK-NEXT:    mov z6.b, z0.b[5]
2323 ; CHECK-NEXT:    mov z7.b, z0.b[4]
2324 ; CHECK-NEXT:    ptrue p0.s, vl4
2325 ; CHECK-NEXT:    zip1 z1.h, z2.h, z1.h
2326 ; CHECK-NEXT:    zip1 z0.h, z0.h, z3.h
2327 ; CHECK-NEXT:    zip1 z2.h, z5.h, z4.h
2328 ; CHECK-NEXT:    zip1 z3.h, z7.h, z6.h
2329 ; CHECK-NEXT:    zip1 z0.s, z0.s, z1.s
2330 ; CHECK-NEXT:    zip1 z1.s, z3.s, z2.s
2331 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2332 ; CHECK-NEXT:    uunpklo z1.s, z1.h
2333 ; CHECK-NEXT:    lsl z0.s, z0.s, #31
2334 ; CHECK-NEXT:    lsl z1.s, z1.s, #31
2335 ; CHECK-NEXT:    asr z0.s, z0.s, #31
2336 ; CHECK-NEXT:    asr z1.s, z1.s, #31
2337 ; CHECK-NEXT:    cmpne p1.s, p0/z, z0.s, #0
2338 ; CHECK-NEXT:    cmpne p0.s, p0/z, z1.s, #0
2339 ; CHECK-NEXT:    ld1w { z0.s }, p1/z, [x0]
2340 ; CHECK-NEXT:    ld1w { z1.s }, p0/z, [x0, x8, lsl #2]
2341 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2342 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
2343 ; CHECK-NEXT:    ret
2345 ; NONEON-NOSVE-LABEL: masked_load_v8f32:
2346 ; NONEON-NOSVE:       // %bb.0:
2347 ; NONEON-NOSVE-NEXT:    sub sp, sp, #496
2348 ; NONEON-NOSVE-NEXT:    str x29, [sp, #480] // 8-byte Folded Spill
2349 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 496
2350 ; NONEON-NOSVE-NEXT:    .cfi_offset w29, -16
2351 ; NONEON-NOSVE-NEXT:    str d0, [sp, #464]
2352 ; NONEON-NOSVE-NEXT:    adrp x8, .LCPI10_0
2353 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #466]
2354 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #467]
2355 ; NONEON-NOSVE-NEXT:    ldrb w11, [sp, #465]
2356 ; NONEON-NOSVE-NEXT:    ldrb w13, [sp, #468]
2357 ; NONEON-NOSVE-NEXT:    ldrb w14, [sp, #469]
2358 ; NONEON-NOSVE-NEXT:    ldrb w15, [sp, #470]
2359 ; NONEON-NOSVE-NEXT:    sbfx w9, w9, #0, #1
2360 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
2361 ; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1
2362 ; NONEON-NOSVE-NEXT:    ldrb w12, [sp, #464]
2363 ; NONEON-NOSVE-NEXT:    sbfx w13, w13, #0, #1
2364 ; NONEON-NOSVE-NEXT:    sbfx w14, w14, #0, #1
2365 ; NONEON-NOSVE-NEXT:    and w9, w9, #0x4
2366 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x8
2367 ; NONEON-NOSVE-NEXT:    sbfx w15, w15, #0, #1
2368 ; NONEON-NOSVE-NEXT:    orr w9, w9, w10
2369 ; NONEON-NOSVE-NEXT:    ldrb w10, [sp, #471]
2370 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x2
2371 ; NONEON-NOSVE-NEXT:    and w13, w13, #0x10
2372 ; NONEON-NOSVE-NEXT:    bfxil w11, w12, #0, #1
2373 ; NONEON-NOSVE-NEXT:    and w12, w14, #0x20
2374 ; NONEON-NOSVE-NEXT:    orr w9, w9, w13
2375 ; NONEON-NOSVE-NEXT:    and w13, w15, #0x40
2376 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
2377 ; NONEON-NOSVE-NEXT:    orr w9, w11, w9
2378 ; NONEON-NOSVE-NEXT:    orr w11, w12, w13
2379 ; NONEON-NOSVE-NEXT:    ldr q1, [x8, :lo12:.LCPI10_0]
2380 ; NONEON-NOSVE-NEXT:    orr w9, w9, w11
2381 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x80
2382 ; NONEON-NOSVE-NEXT:    add w10, w9, w10
2383 ; NONEON-NOSVE-NEXT:    add x9, sp, #208
2384 ; NONEON-NOSVE-NEXT:    and w8, w10, #0xff
2385 ; NONEON-NOSVE-NEXT:    tbz w10, #0, .LBB10_2
2386 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2387 ; NONEON-NOSVE-NEXT:    ldr s0, [x0]
2388 ; NONEON-NOSVE-NEXT:    str wzr, [sp, #460]
2389 ; NONEON-NOSVE-NEXT:    stur xzr, [x9, #244]
2390 ; NONEON-NOSVE-NEXT:    str s0, [sp, #448]
2391 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #448]
2392 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB10_3
2393 ; NONEON-NOSVE-NEXT:    b .LBB10_4
2394 ; NONEON-NOSVE-NEXT:  .LBB10_2:
2395 ; NONEON-NOSVE-NEXT:    str q1, [sp, #-16]!
2396 ; NONEON-NOSVE-NEXT:    ldr q0, [sp], #16
2397 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB10_4
2398 ; NONEON-NOSVE-NEXT:  .LBB10_3: // %cond.load1
2399 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #4]
2400 ; NONEON-NOSVE-NEXT:    str q0, [sp, #400]
2401 ; NONEON-NOSVE-NEXT:    str s2, [sp, #432]
2402 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #432]
2403 ; NONEON-NOSVE-NEXT:    str q0, [sp, #384]
2404 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #412]
2405 ; NONEON-NOSVE-NEXT:    str s0, [sp, #428]
2406 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #408]
2407 ; NONEON-NOSVE-NEXT:    str s0, [sp, #424]
2408 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #400]
2409 ; NONEON-NOSVE-NEXT:    str s0, [sp, #416]
2410 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #384]
2411 ; NONEON-NOSVE-NEXT:    str s0, [sp, #420]
2412 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #416]
2413 ; NONEON-NOSVE-NEXT:  .LBB10_4: // %else2
2414 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB10_12
2415 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
2416 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB10_13
2417 ; NONEON-NOSVE-NEXT:  .LBB10_6: // %else8
2418 ; NONEON-NOSVE-NEXT:    tbnz w8, #4, .LBB10_14
2419 ; NONEON-NOSVE-NEXT:  .LBB10_7: // %else11
2420 ; NONEON-NOSVE-NEXT:    tbnz w8, #5, .LBB10_15
2421 ; NONEON-NOSVE-NEXT:  .LBB10_8: // %else14
2422 ; NONEON-NOSVE-NEXT:    tbnz w8, #6, .LBB10_16
2423 ; NONEON-NOSVE-NEXT:  .LBB10_9: // %else17
2424 ; NONEON-NOSVE-NEXT:    tbz w8, #7, .LBB10_11
2425 ; NONEON-NOSVE-NEXT:  .LBB10_10: // %cond.load19
2426 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #28]
2427 ; NONEON-NOSVE-NEXT:    str q1, [sp]
2428 ; NONEON-NOSVE-NEXT:    ldr x8, [sp]
2429 ; NONEON-NOSVE-NEXT:    str s2, [sp, #48]
2430 ; NONEON-NOSVE-NEXT:    ldr s2, [sp, #8]
2431 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #48]
2432 ; NONEON-NOSVE-NEXT:    str x8, [sp, #32]
2433 ; NONEON-NOSVE-NEXT:    str q1, [sp, #16]
2434 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #16]
2435 ; NONEON-NOSVE-NEXT:    stp s2, s1, [sp, #40]
2436 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #32]
2437 ; NONEON-NOSVE-NEXT:  .LBB10_11: // %else20
2438 ; NONEON-NOSVE-NEXT:    ldr x29, [sp, #480] // 8-byte Folded Reload
2439 ; NONEON-NOSVE-NEXT:    add sp, sp, #496
2440 ; NONEON-NOSVE-NEXT:    ret
2441 ; NONEON-NOSVE-NEXT:  .LBB10_12: // %cond.load4
2442 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #8]
2443 ; NONEON-NOSVE-NEXT:    str q0, [sp, #336]
2444 ; NONEON-NOSVE-NEXT:    str s2, [sp, #368]
2445 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #368]
2446 ; NONEON-NOSVE-NEXT:    str q0, [sp, #320]
2447 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #348]
2448 ; NONEON-NOSVE-NEXT:    str s0, [sp, #364]
2449 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #340]
2450 ; NONEON-NOSVE-NEXT:    str s0, [sp, #356]
2451 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #336]
2452 ; NONEON-NOSVE-NEXT:    str s0, [sp, #352]
2453 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #320]
2454 ; NONEON-NOSVE-NEXT:    str s0, [sp, #360]
2455 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #352]
2456 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB10_6
2457 ; NONEON-NOSVE-NEXT:  .LBB10_13: // %cond.load7
2458 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #12]
2459 ; NONEON-NOSVE-NEXT:    str q0, [sp, #256]
2460 ; NONEON-NOSVE-NEXT:    ldr x10, [sp, #256]
2461 ; NONEON-NOSVE-NEXT:    str s2, [sp, #304]
2462 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #304]
2463 ; NONEON-NOSVE-NEXT:    str x10, [sp, #288]
2464 ; NONEON-NOSVE-NEXT:    str q0, [sp, #272]
2465 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #264]
2466 ; NONEON-NOSVE-NEXT:    str s0, [sp, #296]
2467 ; NONEON-NOSVE-NEXT:    ldr s0, [sp, #272]
2468 ; NONEON-NOSVE-NEXT:    str s0, [sp, #300]
2469 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #288]
2470 ; NONEON-NOSVE-NEXT:    tbz w8, #4, .LBB10_7
2471 ; NONEON-NOSVE-NEXT:  .LBB10_14: // %cond.load10
2472 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #16]
2473 ; NONEON-NOSVE-NEXT:    str q1, [sp, #208]
2474 ; NONEON-NOSVE-NEXT:    str s2, [sp, #240]
2475 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #240]
2476 ; NONEON-NOSVE-NEXT:    str q1, [sp, #192]
2477 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #220]
2478 ; NONEON-NOSVE-NEXT:    str s1, [sp, #236]
2479 ; NONEON-NOSVE-NEXT:    ldur x10, [x9, #4]
2480 ; NONEON-NOSVE-NEXT:    stur x10, [x9, #20]
2481 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #192]
2482 ; NONEON-NOSVE-NEXT:    str s1, [sp, #224]
2483 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #224]
2484 ; NONEON-NOSVE-NEXT:    tbz w8, #5, .LBB10_8
2485 ; NONEON-NOSVE-NEXT:  .LBB10_15: // %cond.load13
2486 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #20]
2487 ; NONEON-NOSVE-NEXT:    str q1, [sp, #144]
2488 ; NONEON-NOSVE-NEXT:    str s2, [sp, #176]
2489 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #176]
2490 ; NONEON-NOSVE-NEXT:    str q1, [sp, #128]
2491 ; NONEON-NOSVE-NEXT:    ldp s1, s2, [sp, #152]
2492 ; NONEON-NOSVE-NEXT:    stp s1, s2, [sp, #168]
2493 ; NONEON-NOSVE-NEXT:    ldr s2, [sp, #144]
2494 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #128]
2495 ; NONEON-NOSVE-NEXT:    stp s2, s1, [sp, #160]
2496 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #160]
2497 ; NONEON-NOSVE-NEXT:    tbz w8, #6, .LBB10_9
2498 ; NONEON-NOSVE-NEXT:  .LBB10_16: // %cond.load16
2499 ; NONEON-NOSVE-NEXT:    ldr s2, [x0, #24]
2500 ; NONEON-NOSVE-NEXT:    str q1, [sp, #80]
2501 ; NONEON-NOSVE-NEXT:    str s2, [sp, #112]
2502 ; NONEON-NOSVE-NEXT:    ldr s2, [sp, #92]
2503 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #112]
2504 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
2505 ; NONEON-NOSVE-NEXT:    ldp s1, s3, [sp, #80]
2506 ; NONEON-NOSVE-NEXT:    stp s1, s3, [sp, #96]
2507 ; NONEON-NOSVE-NEXT:    ldr s1, [sp, #64]
2508 ; NONEON-NOSVE-NEXT:    stp s1, s2, [sp, #104]
2509 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #96]
2510 ; NONEON-NOSVE-NEXT:    tbnz w8, #7, .LBB10_10
2511 ; NONEON-NOSVE-NEXT:    b .LBB10_11
2512   %load = call <8 x float> @llvm.masked.load.v8f32(ptr %src, i32 8, <8 x i1> %mask, <8 x float> zeroinitializer)
2513   ret <8 x float> %load
2516 define <2 x double> @masked_load_v2f64(ptr %src, <2 x i1> %mask) {
2517 ; CHECK-LABEL: masked_load_v2f64:
2518 ; CHECK:       // %bb.0:
2519 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
2520 ; CHECK-NEXT:    ptrue p0.d, vl2
2521 ; CHECK-NEXT:    uunpklo z0.d, z0.s
2522 ; CHECK-NEXT:    lsl z0.d, z0.d, #63
2523 ; CHECK-NEXT:    asr z0.d, z0.d, #63
2524 ; CHECK-NEXT:    cmpne p0.d, p0/z, z0.d, #0
2525 ; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0]
2526 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2527 ; CHECK-NEXT:    ret
2529 ; NONEON-NOSVE-LABEL: masked_load_v2f64:
2530 ; NONEON-NOSVE:       // %bb.0:
2531 ; NONEON-NOSVE-NEXT:    sub sp, sp, #96
2532 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 96
2533 ; NONEON-NOSVE-NEXT:    str d0, [sp, #80]
2534 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #84]
2535 ; NONEON-NOSVE-NEXT:    ldrb w9, [sp, #80]
2536 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
2537 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
2538 ; NONEON-NOSVE-NEXT:    bfxil w8, w9, #0, #1
2539 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB11_2
2540 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2541 ; NONEON-NOSVE-NEXT:    ldr d0, [x0]
2542 ; NONEON-NOSVE-NEXT:    str xzr, [sp, #72]
2543 ; NONEON-NOSVE-NEXT:    str d0, [sp, #64]
2544 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #64]
2545 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB11_3
2546 ; NONEON-NOSVE-NEXT:    b .LBB11_4
2547 ; NONEON-NOSVE-NEXT:  .LBB11_2:
2548 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI11_0
2549 ; NONEON-NOSVE-NEXT:    ldr q0, [x9, :lo12:.LCPI11_0]
2550 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB11_4
2551 ; NONEON-NOSVE-NEXT:  .LBB11_3: // %cond.load1
2552 ; NONEON-NOSVE-NEXT:    ldr d1, [x0, #8]
2553 ; NONEON-NOSVE-NEXT:    str q0, [sp]
2554 ; NONEON-NOSVE-NEXT:    str d1, [sp, #48]
2555 ; NONEON-NOSVE-NEXT:    ldr d1, [sp]
2556 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #48]
2557 ; NONEON-NOSVE-NEXT:    str q0, [sp, #16]
2558 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #16]
2559 ; NONEON-NOSVE-NEXT:    stp d1, d0, [sp, #32]
2560 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #32]
2561 ; NONEON-NOSVE-NEXT:  .LBB11_4: // %else2
2562 ; NONEON-NOSVE-NEXT:    add sp, sp, #96
2563 ; NONEON-NOSVE-NEXT:    ret
2564   %load = call <2 x double> @llvm.masked.load.v2f64(ptr %src, i32 8, <2 x i1> %mask, <2 x double> zeroinitializer)
2565   ret <2 x double> %load
2568 define <4 x double> @masked_load_v4f64(ptr %src, <4 x i1> %mask) {
2569 ; CHECK-LABEL: masked_load_v4f64:
2570 ; CHECK:       // %bb.0:
2571 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
2572 ; CHECK-NEXT:    ptrue p0.d, vl2
2573 ; CHECK-NEXT:    mov x8, #2 // =0x2
2574 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2575 ; CHECK-NEXT:    uunpklo z1.d, z0.s
2576 ; CHECK-NEXT:    ext z0.b, z0.b, z0.b, #8
2577 ; CHECK-NEXT:    uunpklo z0.d, z0.s
2578 ; CHECK-NEXT:    lsl z1.d, z1.d, #63
2579 ; CHECK-NEXT:    lsl z0.d, z0.d, #63
2580 ; CHECK-NEXT:    asr z1.d, z1.d, #63
2581 ; CHECK-NEXT:    asr z0.d, z0.d, #63
2582 ; CHECK-NEXT:    cmpne p1.d, p0/z, z1.d, #0
2583 ; CHECK-NEXT:    cmpne p0.d, p0/z, z0.d, #0
2584 ; CHECK-NEXT:    ld1d { z0.d }, p1/z, [x0]
2585 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2586 ; CHECK-NEXT:    ld1d { z1.d }, p0/z, [x0, x8, lsl #3]
2587 ; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $z1
2588 ; CHECK-NEXT:    ret
2590 ; NONEON-NOSVE-LABEL: masked_load_v4f64:
2591 ; NONEON-NOSVE:       // %bb.0:
2592 ; NONEON-NOSVE-NEXT:    sub sp, sp, #224
2593 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 224
2594 ; NONEON-NOSVE-NEXT:    str d0, [sp, #208]
2595 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI12_0
2596 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #210]
2597 ; NONEON-NOSVE-NEXT:    ldrh w10, [sp, #212]
2598 ; NONEON-NOSVE-NEXT:    ldrh w11, [sp, #214]
2599 ; NONEON-NOSVE-NEXT:    ldrh w12, [sp, #208]
2600 ; NONEON-NOSVE-NEXT:    ldr q1, [x9, :lo12:.LCPI12_0]
2601 ; NONEON-NOSVE-NEXT:    sbfx w8, w8, #0, #1
2602 ; NONEON-NOSVE-NEXT:    sbfx w10, w10, #0, #1
2603 ; NONEON-NOSVE-NEXT:    sbfx w11, w11, #0, #1
2604 ; NONEON-NOSVE-NEXT:    and w8, w8, #0x2
2605 ; NONEON-NOSVE-NEXT:    and w10, w10, #0x4
2606 ; NONEON-NOSVE-NEXT:    and w11, w11, #0x8
2607 ; NONEON-NOSVE-NEXT:    bfxil w8, w12, #0, #1
2608 ; NONEON-NOSVE-NEXT:    orr w10, w10, w11
2609 ; NONEON-NOSVE-NEXT:    orr w8, w8, w10
2610 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB12_2
2611 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2612 ; NONEON-NOSVE-NEXT:    ldr d0, [x0]
2613 ; NONEON-NOSVE-NEXT:    str xzr, [sp, #200]
2614 ; NONEON-NOSVE-NEXT:    str d0, [sp, #192]
2615 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #192]
2616 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB12_3
2617 ; NONEON-NOSVE-NEXT:    b .LBB12_4
2618 ; NONEON-NOSVE-NEXT:  .LBB12_2:
2619 ; NONEON-NOSVE-NEXT:    str q1, [sp, #-16]!
2620 ; NONEON-NOSVE-NEXT:    ldr q0, [sp], #16
2621 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB12_4
2622 ; NONEON-NOSVE-NEXT:  .LBB12_3: // %cond.load1
2623 ; NONEON-NOSVE-NEXT:    ldr d2, [x0, #8]
2624 ; NONEON-NOSVE-NEXT:    str q0, [sp, #128]
2625 ; NONEON-NOSVE-NEXT:    str d2, [sp, #176]
2626 ; NONEON-NOSVE-NEXT:    ldr d2, [sp, #128]
2627 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #176]
2628 ; NONEON-NOSVE-NEXT:    str q0, [sp, #144]
2629 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #144]
2630 ; NONEON-NOSVE-NEXT:    stp d2, d0, [sp, #160]
2631 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #160]
2632 ; NONEON-NOSVE-NEXT:  .LBB12_4: // %else2
2633 ; NONEON-NOSVE-NEXT:    tbnz w8, #2, .LBB12_7
2634 ; NONEON-NOSVE-NEXT:  // %bb.5: // %else5
2635 ; NONEON-NOSVE-NEXT:    tbnz w8, #3, .LBB12_8
2636 ; NONEON-NOSVE-NEXT:  .LBB12_6: // %else8
2637 ; NONEON-NOSVE-NEXT:    add sp, sp, #224
2638 ; NONEON-NOSVE-NEXT:    ret
2639 ; NONEON-NOSVE-NEXT:  .LBB12_7: // %cond.load4
2640 ; NONEON-NOSVE-NEXT:    ldr d2, [x0, #16]
2641 ; NONEON-NOSVE-NEXT:    str q1, [sp, #80]
2642 ; NONEON-NOSVE-NEXT:    str d2, [sp, #112]
2643 ; NONEON-NOSVE-NEXT:    ldr d2, [sp, #88]
2644 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #112]
2645 ; NONEON-NOSVE-NEXT:    str q1, [sp, #64]
2646 ; NONEON-NOSVE-NEXT:    ldr d1, [sp, #64]
2647 ; NONEON-NOSVE-NEXT:    stp d1, d2, [sp, #96]
2648 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #96]
2649 ; NONEON-NOSVE-NEXT:    tbz w8, #3, .LBB12_6
2650 ; NONEON-NOSVE-NEXT:  .LBB12_8: // %cond.load7
2651 ; NONEON-NOSVE-NEXT:    ldr d2, [x0, #24]
2652 ; NONEON-NOSVE-NEXT:    str q1, [sp]
2653 ; NONEON-NOSVE-NEXT:    str d2, [sp, #48]
2654 ; NONEON-NOSVE-NEXT:    ldr d2, [sp]
2655 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #48]
2656 ; NONEON-NOSVE-NEXT:    str q1, [sp, #16]
2657 ; NONEON-NOSVE-NEXT:    ldr d1, [sp, #16]
2658 ; NONEON-NOSVE-NEXT:    stp d2, d1, [sp, #32]
2659 ; NONEON-NOSVE-NEXT:    ldr q1, [sp, #32]
2660 ; NONEON-NOSVE-NEXT:    add sp, sp, #224
2661 ; NONEON-NOSVE-NEXT:    ret
2662   %load = call <4 x double> @llvm.masked.load.v4f64(ptr %src, i32 8, <4 x i1> %mask, <4 x double> zeroinitializer)
2663   ret <4 x double> %load
2666 define <3 x i32> @masked_load_zext_v3i32(ptr %load_ptr, <3 x i1> %pm) {
2667 ; CHECK-LABEL: masked_load_zext_v3i32:
2668 ; CHECK:       // %bb.0:
2669 ; CHECK-NEXT:    fmov s0, w2
2670 ; CHECK-NEXT:    fmov s1, w1
2671 ; CHECK-NEXT:    adrp x8, .LCPI13_0
2672 ; CHECK-NEXT:    ptrue p0.s, vl4
2673 ; CHECK-NEXT:    zip1 z0.h, z1.h, z0.h
2674 ; CHECK-NEXT:    fmov s1, w3
2675 ; CHECK-NEXT:    zip1 z0.s, z0.s, z1.s
2676 ; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI13_0]
2677 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
2678 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
2679 ; CHECK-NEXT:    asr z0.h, z0.h, #15
2680 ; CHECK-NEXT:    sunpklo z0.s, z0.h
2681 ; CHECK-NEXT:    cmpne p0.s, p0/z, z0.s, #0
2682 ; CHECK-NEXT:    ld1h { z0.s }, p0/z, [x0]
2683 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2684 ; CHECK-NEXT:    ret
2686 ; NONEON-NOSVE-LABEL: masked_load_zext_v3i32:
2687 ; NONEON-NOSVE:       // %bb.0:
2688 ; NONEON-NOSVE-NEXT:    sub sp, sp, #80
2689 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 80
2690 ; NONEON-NOSVE-NEXT:    and w8, w1, #0x1
2691 ; NONEON-NOSVE-NEXT:    bfi w8, w2, #1, #1
2692 ; NONEON-NOSVE-NEXT:    bfi w8, w3, #2, #1
2693 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB13_2
2694 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2695 ; NONEON-NOSVE-NEXT:    ldrh w9, [x0]
2696 ; NONEON-NOSVE-NEXT:    stur wzr, [sp, #66]
2697 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #64]
2698 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #64]
2699 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB13_3
2700 ; NONEON-NOSVE-NEXT:    b .LBB13_4
2701 ; NONEON-NOSVE-NEXT:  .LBB13_2:
2702 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI13_0
2703 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI13_0]
2704 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB13_4
2705 ; NONEON-NOSVE-NEXT:  .LBB13_3: // %cond.load1
2706 ; NONEON-NOSVE-NEXT:    ldrh w9, [x0, #2]
2707 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
2708 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #58]
2709 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #52]
2710 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #60]
2711 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #48]
2712 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #56]
2713 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #56]
2714 ; NONEON-NOSVE-NEXT:  .LBB13_4: // %else2
2715 ; NONEON-NOSVE-NEXT:    tbz w8, #2, .LBB13_6
2716 ; NONEON-NOSVE-NEXT:  // %bb.5: // %cond.load4
2717 ; NONEON-NOSVE-NEXT:    ldrh w8, [x0, #4]
2718 ; NONEON-NOSVE-NEXT:    str d0, [sp, #32]
2719 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
2720 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]
2721 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
2722 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #40]
2723 ; NONEON-NOSVE-NEXT:  .LBB13_6: // %else5
2724 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
2725 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #14]
2726 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #12]
2727 ; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #24]
2728 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #10]
2729 ; NONEON-NOSVE-NEXT:    ldrh w8, [sp, #8]
2730 ; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #16]
2731 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]
2732 ; NONEON-NOSVE-NEXT:    add sp, sp, #80
2733 ; NONEON-NOSVE-NEXT:    ret
2734   %load_value = tail call <3 x i16> @llvm.masked.load.v3i16.p0(ptr %load_ptr, i32 4, <3 x i1> %pm, <3 x i16> zeroinitializer)
2735   %extend = zext <3 x i16> %load_value to <3 x i32>
2736   ret <3 x i32> %extend;
2739 define <3 x i32> @masked_load_sext_v3i32(ptr %load_ptr, <3 x i1> %pm) {
2740 ; CHECK-LABEL: masked_load_sext_v3i32:
2741 ; CHECK:       // %bb.0:
2742 ; CHECK-NEXT:    fmov s0, w2
2743 ; CHECK-NEXT:    fmov s1, w1
2744 ; CHECK-NEXT:    adrp x8, .LCPI14_0
2745 ; CHECK-NEXT:    ptrue p0.s, vl4
2746 ; CHECK-NEXT:    zip1 z0.h, z1.h, z0.h
2747 ; CHECK-NEXT:    fmov s1, w3
2748 ; CHECK-NEXT:    zip1 z0.s, z0.s, z1.s
2749 ; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI14_0]
2750 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
2751 ; CHECK-NEXT:    lsl z0.h, z0.h, #15
2752 ; CHECK-NEXT:    asr z0.h, z0.h, #15
2753 ; CHECK-NEXT:    sunpklo z0.s, z0.h
2754 ; CHECK-NEXT:    cmpne p0.s, p0/z, z0.s, #0
2755 ; CHECK-NEXT:    ld1sh { z0.s }, p0/z, [x0]
2756 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
2757 ; CHECK-NEXT:    ret
2759 ; NONEON-NOSVE-LABEL: masked_load_sext_v3i32:
2760 ; NONEON-NOSVE:       // %bb.0:
2761 ; NONEON-NOSVE-NEXT:    sub sp, sp, #80
2762 ; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 80
2763 ; NONEON-NOSVE-NEXT:    and w8, w1, #0x1
2764 ; NONEON-NOSVE-NEXT:    bfi w8, w2, #1, #1
2765 ; NONEON-NOSVE-NEXT:    bfi w8, w3, #2, #1
2766 ; NONEON-NOSVE-NEXT:    tbz w8, #0, .LBB14_2
2767 ; NONEON-NOSVE-NEXT:  // %bb.1: // %cond.load
2768 ; NONEON-NOSVE-NEXT:    ldrh w9, [x0]
2769 ; NONEON-NOSVE-NEXT:    stur wzr, [sp, #66]
2770 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #64]
2771 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #64]
2772 ; NONEON-NOSVE-NEXT:    tbnz w8, #1, .LBB14_3
2773 ; NONEON-NOSVE-NEXT:    b .LBB14_4
2774 ; NONEON-NOSVE-NEXT:  .LBB14_2:
2775 ; NONEON-NOSVE-NEXT:    adrp x9, .LCPI14_0
2776 ; NONEON-NOSVE-NEXT:    ldr d0, [x9, :lo12:.LCPI14_0]
2777 ; NONEON-NOSVE-NEXT:    tbz w8, #1, .LBB14_4
2778 ; NONEON-NOSVE-NEXT:  .LBB14_3: // %cond.load1
2779 ; NONEON-NOSVE-NEXT:    ldrh w9, [x0, #2]
2780 ; NONEON-NOSVE-NEXT:    str d0, [sp, #48]
2781 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #58]
2782 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #52]
2783 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #60]
2784 ; NONEON-NOSVE-NEXT:    ldrh w9, [sp, #48]
2785 ; NONEON-NOSVE-NEXT:    strh w9, [sp, #56]
2786 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #56]
2787 ; NONEON-NOSVE-NEXT:  .LBB14_4: // %else2
2788 ; NONEON-NOSVE-NEXT:    tbz w8, #2, .LBB14_6
2789 ; NONEON-NOSVE-NEXT:  // %bb.5: // %cond.load4
2790 ; NONEON-NOSVE-NEXT:    ldrh w8, [x0, #4]
2791 ; NONEON-NOSVE-NEXT:    str d0, [sp, #32]
2792 ; NONEON-NOSVE-NEXT:    strh w8, [sp, #44]
2793 ; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]
2794 ; NONEON-NOSVE-NEXT:    str w8, [sp, #40]
2795 ; NONEON-NOSVE-NEXT:    ldr d0, [sp, #40]
2796 ; NONEON-NOSVE-NEXT:  .LBB14_6: // %else5
2797 ; NONEON-NOSVE-NEXT:    str d0, [sp, #8]
2798 ; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #14]
2799 ; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #12]
2800 ; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #24]
2801 ; NONEON-NOSVE-NEXT:    ldrsh w9, [sp, #10]
2802 ; NONEON-NOSVE-NEXT:    ldrsh w8, [sp, #8]
2803 ; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #16]
2804 ; NONEON-NOSVE-NEXT:    ldr q0, [sp, #16]
2805 ; NONEON-NOSVE-NEXT:    add sp, sp, #80
2806 ; NONEON-NOSVE-NEXT:    ret
2807   %load_value = tail call <3 x i16> @llvm.masked.load.v3i16.p0(ptr %load_ptr, i32 4, <3 x i1> %pm, <3 x i16> zeroinitializer)
2808   %extend = sext <3 x i16> %load_value to <3 x i32>
2809   ret <3 x i32> %extend;
2812 declare <4 x i8> @llvm.masked.load.v4i8(ptr, i32, <4 x i1>, <4 x i8>)
2813 declare <8 x i8> @llvm.masked.load.v8i8(ptr, i32, <8 x i1>, <8 x i8>)
2814 declare <16 x i8> @llvm.masked.load.v16i8(ptr, i32, <16 x i1>, <16 x i8>)
2815 declare <32 x i8> @llvm.masked.load.v32i8(ptr, i32, <32 x i1>, <32 x i8>)
2817 declare <2 x half> @llvm.masked.load.v2f16(ptr, i32, <2 x i1>, <2 x half>)
2818 declare <4 x half> @llvm.masked.load.v4f16(ptr, i32, <4 x i1>, <4 x half>)
2819 declare <8 x half> @llvm.masked.load.v8f16(ptr, i32, <8 x i1>, <8 x half>)
2820 declare <16 x half> @llvm.masked.load.v16f16(ptr, i32, <16 x i1>, <16 x half>)
2822 declare <2 x float> @llvm.masked.load.v2f32(ptr, i32, <2 x i1>, <2 x float>)
2823 declare <4 x float> @llvm.masked.load.v4f32(ptr, i32, <4 x i1>, <4 x float>)
2824 declare <8 x float> @llvm.masked.load.v8f32(ptr, i32, <8 x i1>, <8 x float>)
2826 declare <2 x double> @llvm.masked.load.v2f64(ptr, i32, <2 x i1>, <2 x double>)
2827 declare <4 x double> @llvm.masked.load.v4f64(ptr, i32, <4 x i1>, <4 x double>)
2829 declare <3 x i16> @llvm.masked.load.v3i16.p0(ptr, i32, <3 x i1>, <3 x i16>)