Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sme2-intrinsics-ld1.ll
blob013d8a0512b157ae5c85b43e08ca47e2e6dd9415
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -force-streaming -verify-machineinstrs < %s | FileCheck %s --check-prefixes=STRIDED
3 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CONTIGUOUS
5 define <vscale x 32 x i8> @ld1_x2_i8_z0_z8(<vscale x 16 x i8> %unused, <vscale x 16 x i8> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
6 ; CHECK-LABEL: ld1_x2_i8_z0_z8:
7 ; CHECK:       // %bb.0:
8 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
9 ; CHECK-NEXT:    addvl sp, sp, #-17
10 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
11 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
12 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
13 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
14 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
15 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
16 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
17 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
18 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
19 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
20 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
21 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
22 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
23 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
24 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
25 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
26 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
27 ; CHECK-NEXT:    mov p8.b, p0.b
28 ; CHECK-NEXT:    ld1b { z0.b, z8.b }, pn8/z, [x0]
29 ; CHECK-NEXT:    //APP
30 ; CHECK-NEXT:    nop
31 ; CHECK-NEXT:    //NO_APP
32 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
33 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
34 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
35 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
36 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
37 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
38 ; CHECK-NEXT:    mov z1.d, z8.d
39 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
40 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
41 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
42 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
43 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
44 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
45 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
46 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
47 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
48 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
49 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
50 ; CHECK-NEXT:    addvl sp, sp, #17
51 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
52 ; CHECK-NEXT:    ret
53 ; STRIDED-LABEL: ld1_x2_i8_z0_z8:
54 ; STRIDED:       // %bb.0:
55 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
56 ; STRIDED-NEXT:    addvl sp, sp, #-17
57 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
58 ; STRIDED-NEXT:    mov p8.b, p0.b
59 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
60 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
61 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
62 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
63 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
64 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
65 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
66 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
67 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
68 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
69 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
70 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
71 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
72 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
73 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
74 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
75 ; STRIDED-NEXT:    ld1b { z0.b, z8.b }, pn8/z, [x0]
76 ; STRIDED-NEXT:    //APP
77 ; STRIDED-NEXT:    nop
78 ; STRIDED-NEXT:    //NO_APP
79 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
80 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
81 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
82 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
83 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
84 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
85 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
86 ; STRIDED-NEXT:    mov z1.d, z8.d
87 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
88 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
89 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
90 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
91 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
92 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
93 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
94 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
95 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
96 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
97 ; STRIDED-NEXT:    addvl sp, sp, #17
98 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
99 ; STRIDED-NEXT:    ret
101 ; CONTIGUOUS-LABEL: ld1_x2_i8_z0_z8:
102 ; CONTIGUOUS:       // %bb.0:
103 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
104 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
105 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
106 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
107 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
108 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
109 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
110 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
111 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
112 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
113 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
114 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
115 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
116 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
117 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
118 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
119 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
120 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
121 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
122 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
123 ; CONTIGUOUS-NEXT:    ld1b { z0.b, z1.b }, pn8/z, [x0]
124 ; CONTIGUOUS-NEXT:    str z0, [sp]
125 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
126 ; CONTIGUOUS-NEXT:    //APP
127 ; CONTIGUOUS-NEXT:    nop
128 ; CONTIGUOUS-NEXT:    //NO_APP
129 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
130 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
131 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
132 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
133 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
134 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
135 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
136 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
137 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
138 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
139 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
140 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
141 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
142 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
143 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
144 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
145 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
146 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
147 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
148 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
149 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
150 ; CONTIGUOUS-NEXT:    ret
151   %res = call { <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x2.nxv16i8(target("aarch64.svcount") %pn, ptr %ptr)
152   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
153   %res.v0 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 0
154   %v0 = call <vscale x 32 x i8> @llvm.vector.insert.nxv32i8.nxv16i8(<vscale x 32 x i8> poison, <vscale x 16 x i8> %res.v0, i64 0)
155   %res.v1 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 1
156   %v1 = call <vscale x 32 x i8> @llvm.vector.insert.nxv32i8.nxv16i8(<vscale x 32 x i8> %v0, <vscale x 16 x i8> %res.v1, i64 16)
157   ret <vscale x 32 x i8> %v1
160 define <vscale x 32 x i8> @ld1_x2_i8_z0_z8_scalar(<vscale x 16 x i8> %unused, <vscale x 16 x i8> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
161 ; CHECK-LABEL: ld1_x2_i8_z0_z8_scalar:
162 ; CHECK:       // %bb.0:
163 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
164 ; CHECK-NEXT:    addvl sp, sp, #-17
165 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
166 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
167 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
168 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
169 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
170 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
171 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
172 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
173 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
174 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
175 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
176 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
177 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
178 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
179 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
180 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
181 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
182 ; CHECK-NEXT:    mov p8.b, p0.b
183 ; CHECK-NEXT:    ld1b { z0.b, z8.b }, pn8/z, [x0, x1]
184 ; CHECK-NEXT:    //APP
185 ; CHECK-NEXT:    nop
186 ; CHECK-NEXT:    //NO_APP
187 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
188 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
189 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
190 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
191 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
192 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
193 ; CHECK-NEXT:    mov z1.d, z8.d
194 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
195 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
196 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
197 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
198 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
199 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
200 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
201 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
202 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
203 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
204 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
205 ; CHECK-NEXT:    addvl sp, sp, #17
206 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
207 ; CHECK-NEXT:    ret
208 ; STRIDED-LABEL: ld1_x2_i8_z0_z8_scalar:
209 ; STRIDED:       // %bb.0:
210 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
211 ; STRIDED-NEXT:    addvl sp, sp, #-17
212 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
213 ; STRIDED-NEXT:    mov p8.b, p0.b
214 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
215 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
216 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
217 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
218 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
219 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
220 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
221 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
222 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
223 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
224 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
225 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
226 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
227 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
228 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
229 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
230 ; STRIDED-NEXT:    ld1b { z0.b, z8.b }, pn8/z, [x0, x1]
231 ; STRIDED-NEXT:    //APP
232 ; STRIDED-NEXT:    nop
233 ; STRIDED-NEXT:    //NO_APP
234 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
235 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
236 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
237 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
238 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
239 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
240 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
241 ; STRIDED-NEXT:    mov z1.d, z8.d
242 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
243 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
244 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
245 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
246 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
247 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
248 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
249 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
250 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
251 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
252 ; STRIDED-NEXT:    addvl sp, sp, #17
253 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
254 ; STRIDED-NEXT:    ret
256 ; CONTIGUOUS-LABEL: ld1_x2_i8_z0_z8_scalar:
257 ; CONTIGUOUS:       // %bb.0:
258 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
259 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
260 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
261 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
262 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
263 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
264 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
265 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
266 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
267 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
268 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
269 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
270 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
271 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
272 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
273 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
274 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
275 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
276 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
277 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
278 ; CONTIGUOUS-NEXT:    ld1b { z0.b, z1.b }, pn8/z, [x0, x1]
279 ; CONTIGUOUS-NEXT:    str z0, [sp]
280 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
281 ; CONTIGUOUS-NEXT:    //APP
282 ; CONTIGUOUS-NEXT:    nop
283 ; CONTIGUOUS-NEXT:    //NO_APP
284 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
285 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
286 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
287 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
288 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
289 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
290 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
291 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
292 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
293 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
294 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
295 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
296 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
297 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
298 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
299 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
300 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
301 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
302 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
303 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
304 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
305 ; CONTIGUOUS-NEXT:    ret
306   %base = getelementptr i8, ptr %ptr, i64 %index
307   %res = call { <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x2.nxv16i8(target("aarch64.svcount") %pn, ptr %base)
308   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
309   %res.v0 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 0
310   %v0 = call <vscale x 32 x i8> @llvm.vector.insert.nxv32i8.nxv16i8(<vscale x 32 x i8> poison, <vscale x 16 x i8> %res.v0, i64 0)
311   %res.v1 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 1
312   %v1 = call <vscale x 32 x i8> @llvm.vector.insert.nxv32i8.nxv16i8(<vscale x 32 x i8> %v0, <vscale x 16 x i8> %res.v1, i64 16)
313   ret <vscale x 32 x i8> %v1
316 define <vscale x 16 x i16> @ld1_x2_i16_z0_z8(<vscale x 8 x i16> %unused, <vscale x 8 x i16> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
317 ; CHECK-LABEL: ld1_x2_i16_z0_z8:
318 ; CHECK:       // %bb.0:
319 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
320 ; CHECK-NEXT:    addvl sp, sp, #-17
321 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
322 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
323 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
324 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
325 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
326 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
327 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
328 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
329 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
330 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
331 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
332 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
333 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
334 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
335 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
336 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
337 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
338 ; CHECK-NEXT:    mov p8.b, p0.b
339 ; CHECK-NEXT:    ld1h { z0.h, z8.h }, pn8/z, [x0]
340 ; CHECK-NEXT:    //APP
341 ; CHECK-NEXT:    nop
342 ; CHECK-NEXT:    //NO_APP
343 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
344 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
345 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
346 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
347 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
348 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
349 ; CHECK-NEXT:    mov z1.d, z8.d
350 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
351 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
352 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
353 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
354 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
355 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
356 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
357 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
358 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
359 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
360 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
361 ; CHECK-NEXT:    addvl sp, sp, #17
362 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
363 ; CHECK-NEXT:    ret
364 ; STRIDED-LABEL: ld1_x2_i16_z0_z8:
365 ; STRIDED:       // %bb.0:
366 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
367 ; STRIDED-NEXT:    addvl sp, sp, #-17
368 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
369 ; STRIDED-NEXT:    mov p8.b, p0.b
370 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
371 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
372 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
373 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
374 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
375 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
376 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
377 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
378 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
379 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
380 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
381 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
382 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
383 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
384 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
385 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
386 ; STRIDED-NEXT:    ld1h { z0.h, z8.h }, pn8/z, [x0]
387 ; STRIDED-NEXT:    //APP
388 ; STRIDED-NEXT:    nop
389 ; STRIDED-NEXT:    //NO_APP
390 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
391 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
392 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
393 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
394 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
395 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
396 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
397 ; STRIDED-NEXT:    mov z1.d, z8.d
398 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
399 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
400 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
401 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
402 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
403 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
404 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
405 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
406 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
407 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
408 ; STRIDED-NEXT:    addvl sp, sp, #17
409 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
410 ; STRIDED-NEXT:    ret
412 ; CONTIGUOUS-LABEL: ld1_x2_i16_z0_z8:
413 ; CONTIGUOUS:       // %bb.0:
414 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
415 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
416 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
417 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
418 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
419 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
420 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
421 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
422 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
423 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
424 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
425 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
426 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
427 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
428 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
429 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
430 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
431 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
432 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
433 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
434 ; CONTIGUOUS-NEXT:    ld1h { z0.h, z1.h }, pn8/z, [x0]
435 ; CONTIGUOUS-NEXT:    str z0, [sp]
436 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
437 ; CONTIGUOUS-NEXT:    //APP
438 ; CONTIGUOUS-NEXT:    nop
439 ; CONTIGUOUS-NEXT:    //NO_APP
440 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
441 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
442 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
443 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
444 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
445 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
446 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
447 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
448 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
449 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
450 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
451 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
452 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
453 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
454 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
455 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
456 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
457 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
458 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
459 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
460 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
461 ; CONTIGUOUS-NEXT:    ret
462   %res = call { <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x2.nxv8i16(target("aarch64.svcount") %pn, ptr %ptr)
463   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
464   %res.v0 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 0
465   %v0 = call <vscale x 16 x i16> @llvm.vector.insert.nxv16i16.nxv8i16(<vscale x 16 x i16> poison, <vscale x 8 x i16> %res.v0, i64 0)
466   %res.v1 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 1
467   %v1 = call <vscale x 16 x i16> @llvm.vector.insert.nxv16i16.nxv8i16(<vscale x 16 x i16> %v0, <vscale x 8 x i16> %res.v1, i64 8)
468   ret <vscale x 16 x i16> %v1
471 define <vscale x 16 x i16> @ld1_x2_i16_z0_z8_scalar(<vscale x 8 x i16> %unused, <vscale x 8 x i16> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
472 ; CHECK-LABEL: ld1_x2_i16_z0_z8_scalar:
473 ; CHECK:       // %bb.0:
474 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
475 ; CHECK-NEXT:    addvl sp, sp, #-17
476 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
477 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
478 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
479 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
480 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
481 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
482 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
483 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
484 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
485 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
486 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
487 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
488 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
489 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
490 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
491 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
492 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
493 ; CHECK-NEXT:    mov p8.b, p0.b
494 ; CHECK-NEXT:    ld1h { z0.h, z8.h }, pn8/z, [x0, x1, lsl #1]
495 ; CHECK-NEXT:    //APP
496 ; CHECK-NEXT:    nop
497 ; CHECK-NEXT:    //NO_APP
498 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
499 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
500 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
501 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
502 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
503 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
504 ; CHECK-NEXT:    mov z1.d, z8.d
505 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
506 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
507 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
508 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
509 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
510 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
511 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
512 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
513 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
514 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
515 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
516 ; CHECK-NEXT:    addvl sp, sp, #17
517 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
518 ; CHECK-NEXT:    ret
519 ; STRIDED-LABEL: ld1_x2_i16_z0_z8_scalar:
520 ; STRIDED:       // %bb.0:
521 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
522 ; STRIDED-NEXT:    addvl sp, sp, #-17
523 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
524 ; STRIDED-NEXT:    mov p8.b, p0.b
525 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
526 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
527 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
528 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
529 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
530 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
531 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
532 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
533 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
534 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
535 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
536 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
537 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
538 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
539 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
540 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
541 ; STRIDED-NEXT:    ld1h { z0.h, z8.h }, pn8/z, [x0, x1, lsl #1]
542 ; STRIDED-NEXT:    //APP
543 ; STRIDED-NEXT:    nop
544 ; STRIDED-NEXT:    //NO_APP
545 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
546 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
547 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
548 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
549 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
550 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
551 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
552 ; STRIDED-NEXT:    mov z1.d, z8.d
553 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
554 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
555 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
556 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
557 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
558 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
559 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
560 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
561 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
562 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
563 ; STRIDED-NEXT:    addvl sp, sp, #17
564 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
565 ; STRIDED-NEXT:    ret
567 ; CONTIGUOUS-LABEL: ld1_x2_i16_z0_z8_scalar:
568 ; CONTIGUOUS:       // %bb.0:
569 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
570 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
571 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
572 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
573 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
574 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
575 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
576 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
577 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
578 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
579 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
580 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
581 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
582 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
583 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
584 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
585 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
586 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
587 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
588 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
589 ; CONTIGUOUS-NEXT:    ld1h { z0.h, z1.h }, pn8/z, [x0, x1, lsl #1]
590 ; CONTIGUOUS-NEXT:    str z0, [sp]
591 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
592 ; CONTIGUOUS-NEXT:    //APP
593 ; CONTIGUOUS-NEXT:    nop
594 ; CONTIGUOUS-NEXT:    //NO_APP
595 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
596 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
597 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
598 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
599 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
600 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
601 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
602 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
603 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
604 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
605 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
606 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
607 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
608 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
609 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
610 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
611 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
612 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
613 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
614 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
615 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
616 ; CONTIGUOUS-NEXT:    ret
617   %base = getelementptr i16, ptr %ptr, i64 %index
618   %res = call { <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x2.nxv8i16(target("aarch64.svcount") %pn, ptr %base)
619   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
620   %res.v0 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 0
621   %v0 = call <vscale x 16 x i16> @llvm.vector.insert.nxv16i16.nxv8i16(<vscale x 16 x i16> poison, <vscale x 8 x i16> %res.v0, i64 0)
622   %res.v1 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 1
623   %v1 = call <vscale x 16 x i16> @llvm.vector.insert.nxv16i16.nxv8i16(<vscale x 16 x i16> %v0, <vscale x 8 x i16> %res.v1, i64 8)
624   ret <vscale x 16 x i16> %v1
627 define <vscale x 8 x i32> @ld1_x2_i32_z0_z8(<vscale x 4 x i32> %unused, <vscale x 4 x i32> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
628 ; CHECK-LABEL: ld1_x2_i32_z0_z8:
629 ; CHECK:       // %bb.0:
630 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
631 ; CHECK-NEXT:    addvl sp, sp, #-17
632 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
633 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
634 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
635 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
636 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
637 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
638 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
639 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
640 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
641 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
642 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
643 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
644 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
645 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
646 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
647 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
648 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
649 ; CHECK-NEXT:    mov p8.b, p0.b
650 ; CHECK-NEXT:    ld1w { z0.s, z8.s }, pn8/z, [x0]
651 ; CHECK-NEXT:    //APP
652 ; CHECK-NEXT:    nop
653 ; CHECK-NEXT:    //NO_APP
654 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
655 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
656 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
657 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
658 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
659 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
660 ; CHECK-NEXT:    mov z1.d, z8.d
661 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
662 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
663 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
664 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
665 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
666 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
667 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
668 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
669 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
670 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
671 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
672 ; CHECK-NEXT:    addvl sp, sp, #17
673 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
674 ; CHECK-NEXT:    ret
675 ; STRIDED-LABEL: ld1_x2_i32_z0_z8:
676 ; STRIDED:       // %bb.0:
677 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
678 ; STRIDED-NEXT:    addvl sp, sp, #-17
679 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
680 ; STRIDED-NEXT:    mov p8.b, p0.b
681 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
682 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
683 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
684 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
685 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
686 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
687 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
688 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
689 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
690 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
691 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
692 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
693 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
694 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
695 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
696 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
697 ; STRIDED-NEXT:    ld1w { z0.s, z8.s }, pn8/z, [x0]
698 ; STRIDED-NEXT:    //APP
699 ; STRIDED-NEXT:    nop
700 ; STRIDED-NEXT:    //NO_APP
701 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
702 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
703 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
704 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
705 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
706 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
707 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
708 ; STRIDED-NEXT:    mov z1.d, z8.d
709 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
710 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
711 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
712 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
713 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
714 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
715 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
716 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
717 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
718 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
719 ; STRIDED-NEXT:    addvl sp, sp, #17
720 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
721 ; STRIDED-NEXT:    ret
723 ; CONTIGUOUS-LABEL: ld1_x2_i32_z0_z8:
724 ; CONTIGUOUS:       // %bb.0:
725 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
726 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
727 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
728 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
729 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
730 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
731 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
732 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
733 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
734 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
735 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
736 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
737 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
738 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
739 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
740 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
741 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
742 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
743 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
744 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
745 ; CONTIGUOUS-NEXT:    ld1w { z0.s, z1.s }, pn8/z, [x0]
746 ; CONTIGUOUS-NEXT:    str z0, [sp]
747 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
748 ; CONTIGUOUS-NEXT:    //APP
749 ; CONTIGUOUS-NEXT:    nop
750 ; CONTIGUOUS-NEXT:    //NO_APP
751 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
752 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
753 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
754 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
755 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
756 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
757 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
758 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
759 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
760 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
761 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
762 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
763 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
764 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
765 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
766 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
767 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
768 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
769 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
770 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
771 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
772 ; CONTIGUOUS-NEXT:    ret
773   %res = call { <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x2.nxv4i32(target("aarch64.svcount") %pn, ptr %ptr)
774   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
775   %res.v0 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 0
776   %v0 = call <vscale x 8 x i32> @llvm.vector.insert.nxv8i32.nxv4i32(<vscale x 8 x i32> poison, <vscale x 4 x i32> %res.v0, i64 0)
777   %res.v1 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 1
778   %v1 = call <vscale x 8 x i32> @llvm.vector.insert.nxv8i32.nxv4i32(<vscale x 8 x i32> %v0, <vscale x 4 x i32> %res.v1, i64 4)
779   ret <vscale x 8 x i32> %v1
782 define <vscale x 8 x i32> @ld1_x2_i32_z0_z8_scalar(<vscale x 4 x i32> %unused, <vscale x 4 x i32> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
783 ; CHECK-LABEL: ld1_x2_i32_z0_z8_scalar:
784 ; CHECK:       // %bb.0:
785 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
786 ; CHECK-NEXT:    addvl sp, sp, #-17
787 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
788 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
789 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
790 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
791 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
792 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
793 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
794 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
795 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
796 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
797 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
798 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
799 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
800 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
801 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
802 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
803 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
804 ; CHECK-NEXT:    mov p8.b, p0.b
805 ; CHECK-NEXT:    ld1w { z0.s, z8.s }, pn8/z, [x0, x1, lsl #2]
806 ; CHECK-NEXT:    //APP
807 ; CHECK-NEXT:    nop
808 ; CHECK-NEXT:    //NO_APP
809 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
810 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
811 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
812 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
813 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
814 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
815 ; CHECK-NEXT:    mov z1.d, z8.d
816 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
817 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
818 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
819 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
820 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
821 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
822 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
823 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
824 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
825 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
826 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
827 ; CHECK-NEXT:    addvl sp, sp, #17
828 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
829 ; CHECK-NEXT:    ret
830 ; STRIDED-LABEL: ld1_x2_i32_z0_z8_scalar:
831 ; STRIDED:       // %bb.0:
832 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
833 ; STRIDED-NEXT:    addvl sp, sp, #-17
834 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
835 ; STRIDED-NEXT:    mov p8.b, p0.b
836 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
837 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
838 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
839 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
840 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
841 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
842 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
843 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
844 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
845 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
846 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
847 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
848 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
849 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
850 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
851 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
852 ; STRIDED-NEXT:    ld1w { z0.s, z8.s }, pn8/z, [x0, x1, lsl #2]
853 ; STRIDED-NEXT:    //APP
854 ; STRIDED-NEXT:    nop
855 ; STRIDED-NEXT:    //NO_APP
856 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
857 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
858 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
859 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
860 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
861 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
862 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
863 ; STRIDED-NEXT:    mov z1.d, z8.d
864 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
865 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
866 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
867 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
868 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
869 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
870 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
871 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
872 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
873 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
874 ; STRIDED-NEXT:    addvl sp, sp, #17
875 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
876 ; STRIDED-NEXT:    ret
878 ; CONTIGUOUS-LABEL: ld1_x2_i32_z0_z8_scalar:
879 ; CONTIGUOUS:       // %bb.0:
880 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
881 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
882 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
883 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
884 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
885 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
886 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
887 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
888 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
889 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
890 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
891 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
892 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
893 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
894 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
895 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
896 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
897 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
898 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
899 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
900 ; CONTIGUOUS-NEXT:    ld1w { z0.s, z1.s }, pn8/z, [x0, x1, lsl #2]
901 ; CONTIGUOUS-NEXT:    str z0, [sp]
902 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
903 ; CONTIGUOUS-NEXT:    //APP
904 ; CONTIGUOUS-NEXT:    nop
905 ; CONTIGUOUS-NEXT:    //NO_APP
906 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
907 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
908 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
909 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
910 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
911 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
912 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
913 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
914 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
915 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
916 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
917 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
918 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
919 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
920 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
921 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
922 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
923 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
924 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
925 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
926 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
927 ; CONTIGUOUS-NEXT:    ret
928   %base = getelementptr i32, ptr %ptr, i64 %index
929   %res = call { <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x2.nxv4i32(target("aarch64.svcount") %pn, ptr %base)
930   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
931   %res.v0 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 0
932   %v0 = call <vscale x 8 x i32> @llvm.vector.insert.nxv8i32.nxv4i32(<vscale x 8 x i32> poison, <vscale x 4 x i32> %res.v0, i64 0)
933   %res.v1 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 1
934   %v1 = call <vscale x 8 x i32> @llvm.vector.insert.nxv8i32.nxv4i32(<vscale x 8 x i32> %v0, <vscale x 4 x i32> %res.v1, i64 4)
935   ret <vscale x 8 x i32> %v1
938 define <vscale x 4 x i64> @ld1_x2_i64_z0_z8(<vscale x 2 x i64> %unused, <vscale x 2 x i64> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
939 ; CHECK-LABEL: ld1_x2_i64_z0_z8:
940 ; CHECK:       // %bb.0:
941 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
942 ; CHECK-NEXT:    addvl sp, sp, #-17
943 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
944 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
945 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
946 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
947 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
948 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
949 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
950 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
951 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
952 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
953 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
954 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
955 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
956 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
957 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
958 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
959 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
960 ; CHECK-NEXT:    mov p8.b, p0.b
961 ; CHECK-NEXT:    ld1d { z0.d, z8.d }, pn8/z, [x0]
962 ; CHECK-NEXT:    //APP
963 ; CHECK-NEXT:    nop
964 ; CHECK-NEXT:    //NO_APP
965 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
966 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
967 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
968 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
969 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
970 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
971 ; CHECK-NEXT:    mov z1.d, z8.d
972 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
973 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
974 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
975 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
976 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
977 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
978 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
979 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
980 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
981 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
982 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
983 ; CHECK-NEXT:    addvl sp, sp, #17
984 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
985 ; CHECK-NEXT:    ret
986 ; STRIDED-LABEL: ld1_x2_i64_z0_z8:
987 ; STRIDED:       // %bb.0:
988 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
989 ; STRIDED-NEXT:    addvl sp, sp, #-17
990 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
991 ; STRIDED-NEXT:    mov p8.b, p0.b
992 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
993 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
994 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
995 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
996 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
997 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
998 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
999 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1000 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1001 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1002 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1003 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1004 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1005 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1006 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1007 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1008 ; STRIDED-NEXT:    ld1d { z0.d, z8.d }, pn8/z, [x0]
1009 ; STRIDED-NEXT:    //APP
1010 ; STRIDED-NEXT:    nop
1011 ; STRIDED-NEXT:    //NO_APP
1012 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1013 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1014 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1015 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1016 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1017 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1018 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1019 ; STRIDED-NEXT:    mov z1.d, z8.d
1020 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1021 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1022 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1023 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1024 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1025 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1026 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1027 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1028 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1029 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1030 ; STRIDED-NEXT:    addvl sp, sp, #17
1031 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1032 ; STRIDED-NEXT:    ret
1034 ; CONTIGUOUS-LABEL: ld1_x2_i64_z0_z8:
1035 ; CONTIGUOUS:       // %bb.0:
1036 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1037 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
1038 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1039 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1040 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1041 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1042 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1043 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1044 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1045 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1046 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1047 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1048 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1049 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1050 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1051 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1052 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1053 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1054 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
1055 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1056 ; CONTIGUOUS-NEXT:    ld1d { z0.d, z1.d }, pn8/z, [x0]
1057 ; CONTIGUOUS-NEXT:    str z0, [sp]
1058 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1059 ; CONTIGUOUS-NEXT:    //APP
1060 ; CONTIGUOUS-NEXT:    nop
1061 ; CONTIGUOUS-NEXT:    //NO_APP
1062 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1063 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1064 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
1065 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1066 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1067 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1068 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1069 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1070 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1071 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1072 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1073 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1074 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1075 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1076 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1077 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1078 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1079 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1080 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1081 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
1082 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1083 ; CONTIGUOUS-NEXT:    ret
1084   %res = call { <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x2.nxv2i64(target("aarch64.svcount") %pn, ptr %ptr)
1085   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1086   %res.v0 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 0
1087   %v0 = call <vscale x 4 x i64> @llvm.vector.insert.nxv4i64.nxv2i64(<vscale x 4 x i64> poison, <vscale x 2 x i64> %res.v0, i64 0)
1088   %res.v1 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 1
1089   %v1 = call <vscale x 4 x i64> @llvm.vector.insert.nxv4i64.nxv2i64(<vscale x 4 x i64> %v0, <vscale x 2 x i64> %res.v1, i64 2)
1090   ret <vscale x 4 x i64> %v1
1093 define <vscale x 4 x i64> @ld1_x2_i64_z0_z8_scalar(<vscale x 2 x i64> %unused, <vscale x 2 x i64> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
1094 ; CHECK-LABEL: ld1_x2_i64_z0_z8_scalar:
1095 ; CHECK:       // %bb.0:
1096 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1097 ; CHECK-NEXT:    addvl sp, sp, #-17
1098 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1099 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1100 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1101 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1102 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1103 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1104 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1105 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1106 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1107 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1108 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1109 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1110 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1111 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1112 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1113 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1114 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1115 ; CHECK-NEXT:    mov p8.b, p0.b
1116 ; CHECK-NEXT:    ld1d { z0.d, z8.d }, pn8/z, [x0, x1, lsl #3]
1117 ; CHECK-NEXT:    //APP
1118 ; CHECK-NEXT:    nop
1119 ; CHECK-NEXT:    //NO_APP
1120 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1121 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1122 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1123 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1124 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1125 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1126 ; CHECK-NEXT:    mov z1.d, z8.d
1127 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1128 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1129 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1130 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1131 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1132 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1133 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1134 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1135 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1136 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1137 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1138 ; CHECK-NEXT:    addvl sp, sp, #17
1139 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1140 ; CHECK-NEXT:    ret
1141 ; STRIDED-LABEL: ld1_x2_i64_z0_z8_scalar:
1142 ; STRIDED:       // %bb.0:
1143 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1144 ; STRIDED-NEXT:    addvl sp, sp, #-17
1145 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1146 ; STRIDED-NEXT:    mov p8.b, p0.b
1147 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1148 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1149 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1150 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1151 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1152 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1153 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1154 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1155 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1156 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1157 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1158 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1159 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1160 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1161 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1162 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1163 ; STRIDED-NEXT:    ld1d { z0.d, z8.d }, pn8/z, [x0, x1, lsl #3]
1164 ; STRIDED-NEXT:    //APP
1165 ; STRIDED-NEXT:    nop
1166 ; STRIDED-NEXT:    //NO_APP
1167 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1168 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1169 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1170 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1171 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1172 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1173 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1174 ; STRIDED-NEXT:    mov z1.d, z8.d
1175 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1176 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1177 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1178 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1179 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1180 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1181 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1182 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1183 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1184 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1185 ; STRIDED-NEXT:    addvl sp, sp, #17
1186 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1187 ; STRIDED-NEXT:    ret
1189 ; CONTIGUOUS-LABEL: ld1_x2_i64_z0_z8_scalar:
1190 ; CONTIGUOUS:       // %bb.0:
1191 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1192 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-16
1193 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1194 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1195 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1196 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1197 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1198 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1199 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1200 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1201 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1202 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1203 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1204 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1205 ; CONTIGUOUS-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1206 ; CONTIGUOUS-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1207 ; CONTIGUOUS-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1208 ; CONTIGUOUS-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1209 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-2
1210 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1211 ; CONTIGUOUS-NEXT:    ld1d { z0.d, z1.d }, pn8/z, [x0, x1, lsl #3]
1212 ; CONTIGUOUS-NEXT:    str z0, [sp]
1213 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1214 ; CONTIGUOUS-NEXT:    //APP
1215 ; CONTIGUOUS-NEXT:    nop
1216 ; CONTIGUOUS-NEXT:    //NO_APP
1217 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1218 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1219 ; CONTIGUOUS-NEXT:    addvl sp, sp, #2
1220 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1221 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1222 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1223 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1224 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1225 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1226 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1227 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1228 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1229 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1230 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1231 ; CONTIGUOUS-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1232 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1233 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1234 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1235 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1236 ; CONTIGUOUS-NEXT:    addvl sp, sp, #16
1237 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1238 ; CONTIGUOUS-NEXT:    ret
1239   %base = getelementptr i64, ptr %ptr, i64 %index
1240   %res = call { <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x2.nxv2i64(target("aarch64.svcount") %pn, ptr %base)
1241   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1242   %res.v0 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 0
1243   %v0 = call <vscale x 4 x i64> @llvm.vector.insert.nxv4i64.nxv2i64(<vscale x 4 x i64> poison, <vscale x 2 x i64> %res.v0, i64 0)
1244   %res.v1 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 1
1245   %v1 = call <vscale x 4 x i64> @llvm.vector.insert.nxv4i64.nxv2i64(<vscale x 4 x i64> %v0, <vscale x 2 x i64> %res.v1, i64 2)
1246   ret <vscale x 4 x i64> %v1
1249 define <vscale x 64 x i8> @ld1_x4_i8_z0_z4_z8_z12(<vscale x 16 x i8> %unused, <vscale x 16 x i8> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
1250 ; CHECK-LABEL: ld1_x4_i8_z0_z4_z8_z12:
1251 ; CHECK:       // %bb.0:
1252 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1253 ; CHECK-NEXT:    addvl sp, sp, #-17
1254 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1255 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1256 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1257 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1258 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1259 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1260 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1261 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1262 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1263 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1264 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1265 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1266 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1267 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1268 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1269 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1270 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1271 ; CHECK-NEXT:    mov p8.b, p0.b
1272 ; CHECK-NEXT:    ld1b { z0.b, z4.b, z8.b, z12.b }, pn8/z, [x0]
1273 ; CHECK-NEXT:    //APP
1274 ; CHECK-NEXT:    nop
1275 ; CHECK-NEXT:    //NO_APP
1276 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1277 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1278 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1279 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1280 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1281 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1282 ; CHECK-NEXT:    mov z2.d, z8.d
1283 ; CHECK-NEXT:    mov z3.d, z12.d
1284 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1285 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1286 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1287 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1288 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1289 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1290 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1291 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1292 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1293 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1294 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1295 ; CHECK-NEXT:    mov z1.d, z4.d
1296 ; CHECK-NEXT:    addvl sp, sp, #17
1297 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1298 ; CHECK-NEXT:    ret
1299 ; STRIDED-LABEL: ld1_x4_i8_z0_z4_z8_z12:
1300 ; STRIDED:       // %bb.0:
1301 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1302 ; STRIDED-NEXT:    addvl sp, sp, #-17
1303 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1304 ; STRIDED-NEXT:    mov p8.b, p0.b
1305 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1306 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1307 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1308 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1309 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1310 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1311 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1312 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1313 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1314 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1315 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1316 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1317 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1318 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1319 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1320 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1321 ; STRIDED-NEXT:    ld1b { z0.b, z4.b, z8.b, z12.b }, pn8/z, [x0]
1322 ; STRIDED-NEXT:    //APP
1323 ; STRIDED-NEXT:    nop
1324 ; STRIDED-NEXT:    //NO_APP
1325 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1326 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1327 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1328 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1329 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1330 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1331 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1332 ; STRIDED-NEXT:    mov z2.d, z8.d
1333 ; STRIDED-NEXT:    mov z3.d, z12.d
1334 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1335 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1336 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1337 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1338 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1339 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1340 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1341 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1342 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1343 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1344 ; STRIDED-NEXT:    mov z1.d, z4.d
1345 ; STRIDED-NEXT:    addvl sp, sp, #17
1346 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1347 ; STRIDED-NEXT:    ret
1349 ; CONTIGUOUS-LABEL: ld1_x4_i8_z0_z4_z8_z12:
1350 ; CONTIGUOUS:       // %bb.0:
1351 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1352 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
1353 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1354 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1355 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1356 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1357 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1358 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1359 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1360 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1361 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1362 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1363 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1364 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1365 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
1366 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
1367 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
1368 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
1369 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1370 ; CONTIGUOUS-NEXT:    ld1b { z0.b - z3.b }, pn8/z, [x0]
1371 ; CONTIGUOUS-NEXT:    str z0, [sp]
1372 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1373 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
1374 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
1375 ; CONTIGUOUS-NEXT:    //APP
1376 ; CONTIGUOUS-NEXT:    nop
1377 ; CONTIGUOUS-NEXT:    //NO_APP
1378 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1379 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1380 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
1381 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
1382 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
1383 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1384 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1385 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1386 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1387 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1388 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1389 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1390 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1391 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1392 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1393 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1394 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
1395 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
1396 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
1397 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1398 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
1399 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1400 ; CONTIGUOUS-NEXT:    ret
1401   %res = call { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x4.nxv16i8(target("aarch64.svcount") %pn, ptr %ptr)
1402   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1403   %res.v0 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 0
1404   %v0 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> poison, <vscale x 16 x i8> %res.v0, i64 0)
1405   %res.v1 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 1
1406   %v1 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v0, <vscale x 16 x i8> %res.v1, i64 16)
1407   %res.v2 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 2
1408   %v2 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v1, <vscale x 16 x i8> %res.v2, i64 32)
1409   %res.v3 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 3
1410   %v3 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v2, <vscale x 16 x i8> %res.v3, i64 48)
1411   ret <vscale x 64 x i8> %v3
1414 define <vscale x 64 x i8> @ld1_x4_i8_z0_z4_z8_z12_scalar(<vscale x 16 x i8> %unused, <vscale x 16 x i8> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
1415 ; CHECK-LABEL: ld1_x4_i8_z0_z4_z8_z12_scalar:
1416 ; CHECK:       // %bb.0:
1417 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1418 ; CHECK-NEXT:    addvl sp, sp, #-17
1419 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1420 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1421 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1422 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1423 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1424 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1425 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1426 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1427 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1428 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1429 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1430 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1431 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1432 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1433 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1434 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1435 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1436 ; CHECK-NEXT:    mov p8.b, p0.b
1437 ; CHECK-NEXT:    ld1b { z0.b, z4.b, z8.b, z12.b }, pn8/z, [x0, x1]
1438 ; CHECK-NEXT:    //APP
1439 ; CHECK-NEXT:    nop
1440 ; CHECK-NEXT:    //NO_APP
1441 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1442 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1443 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1444 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1445 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1446 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1447 ; CHECK-NEXT:    mov z2.d, z8.d
1448 ; CHECK-NEXT:    mov z3.d, z12.d
1449 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1450 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1451 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1452 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1453 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1454 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1455 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1456 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1457 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1458 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1459 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1460 ; CHECK-NEXT:    mov z1.d, z4.d
1461 ; CHECK-NEXT:    addvl sp, sp, #17
1462 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1463 ; CHECK-NEXT:    ret
1464 ; STRIDED-LABEL: ld1_x4_i8_z0_z4_z8_z12_scalar:
1465 ; STRIDED:       // %bb.0:
1466 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1467 ; STRIDED-NEXT:    addvl sp, sp, #-17
1468 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1469 ; STRIDED-NEXT:    mov p8.b, p0.b
1470 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1471 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1472 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1473 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1474 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1475 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1476 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1477 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1478 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1479 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1480 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1481 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1482 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1483 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1484 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1485 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1486 ; STRIDED-NEXT:    ld1b { z0.b, z4.b, z8.b, z12.b }, pn8/z, [x0, x1]
1487 ; STRIDED-NEXT:    //APP
1488 ; STRIDED-NEXT:    nop
1489 ; STRIDED-NEXT:    //NO_APP
1490 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1491 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1492 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1493 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1494 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1495 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1496 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1497 ; STRIDED-NEXT:    mov z2.d, z8.d
1498 ; STRIDED-NEXT:    mov z3.d, z12.d
1499 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1500 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1501 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1502 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1503 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1504 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1505 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1506 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1507 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1508 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1509 ; STRIDED-NEXT:    mov z1.d, z4.d
1510 ; STRIDED-NEXT:    addvl sp, sp, #17
1511 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1512 ; STRIDED-NEXT:    ret
1514 ; CONTIGUOUS-LABEL: ld1_x4_i8_z0_z4_z8_z12_scalar:
1515 ; CONTIGUOUS:       // %bb.0:
1516 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1517 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
1518 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1519 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1520 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1521 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1522 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1523 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1524 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1525 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1526 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1527 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1528 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1529 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1530 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
1531 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
1532 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
1533 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
1534 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1535 ; CONTIGUOUS-NEXT:    ld1b { z0.b - z3.b }, pn8/z, [x0, x1]
1536 ; CONTIGUOUS-NEXT:    str z0, [sp]
1537 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1538 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
1539 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
1540 ; CONTIGUOUS-NEXT:    //APP
1541 ; CONTIGUOUS-NEXT:    nop
1542 ; CONTIGUOUS-NEXT:    //NO_APP
1543 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1544 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1545 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
1546 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
1547 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
1548 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1549 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1550 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1551 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1552 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1553 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1554 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1555 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1556 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1557 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1558 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1559 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
1560 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
1561 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
1562 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1563 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
1564 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1565 ; CONTIGUOUS-NEXT:    ret
1566   %base = getelementptr i8, ptr %ptr, i64 %index
1567   %res = call { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x4.nxv16i8(target("aarch64.svcount") %pn, ptr %base)
1568   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1569   %res.v0 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 0
1570   %v0 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> poison, <vscale x 16 x i8> %res.v0, i64 0)
1571   %res.v1 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 1
1572   %v1 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v0, <vscale x 16 x i8> %res.v1, i64 16)
1573   %res.v2 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 2
1574   %v2 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v1, <vscale x 16 x i8> %res.v2, i64 32)
1575   %res.v3 = extractvalue { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } %res, 3
1576   %v3 = call <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8> %v2, <vscale x 16 x i8> %res.v3, i64 48)
1577   ret <vscale x 64 x i8> %v3
1580 define <vscale x 32 x i16> @ld1_x4_i16_z0_z4_z8_z12(<vscale x 8 x i16> %unused, <vscale x 8 x i16> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
1581 ; CHECK-LABEL: ld1_x4_i16_z0_z4_z8_z12:
1582 ; CHECK:       // %bb.0:
1583 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1584 ; CHECK-NEXT:    addvl sp, sp, #-17
1585 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1586 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1587 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1588 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1589 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1590 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1591 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1592 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1593 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1594 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1595 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1596 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1597 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1598 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1599 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1600 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1601 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1602 ; CHECK-NEXT:    mov p8.b, p0.b
1603 ; CHECK-NEXT:    ld1h { z0.h, z4.h, z8.h, z12.h }, pn8/z, [x0]
1604 ; CHECK-NEXT:    //APP
1605 ; CHECK-NEXT:    nop
1606 ; CHECK-NEXT:    //NO_APP
1607 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1608 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1609 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1610 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1611 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1612 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1613 ; CHECK-NEXT:    mov z2.d, z8.d
1614 ; CHECK-NEXT:    mov z3.d, z12.d
1615 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1616 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1617 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1618 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1619 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1620 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1621 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1622 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1623 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1624 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1625 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1626 ; CHECK-NEXT:    mov z1.d, z4.d
1627 ; CHECK-NEXT:    addvl sp, sp, #17
1628 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1629 ; CHECK-NEXT:    ret
1630 ; STRIDED-LABEL: ld1_x4_i16_z0_z4_z8_z12:
1631 ; STRIDED:       // %bb.0:
1632 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1633 ; STRIDED-NEXT:    addvl sp, sp, #-17
1634 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1635 ; STRIDED-NEXT:    mov p8.b, p0.b
1636 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1637 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1638 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1639 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1640 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1641 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1642 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1643 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1644 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1645 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1646 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1647 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1648 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1649 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1650 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1651 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1652 ; STRIDED-NEXT:    ld1h { z0.h, z4.h, z8.h, z12.h }, pn8/z, [x0]
1653 ; STRIDED-NEXT:    //APP
1654 ; STRIDED-NEXT:    nop
1655 ; STRIDED-NEXT:    //NO_APP
1656 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1657 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1658 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1659 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1660 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1661 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1662 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1663 ; STRIDED-NEXT:    mov z2.d, z8.d
1664 ; STRIDED-NEXT:    mov z3.d, z12.d
1665 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1666 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1667 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1668 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1669 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1670 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1671 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1672 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1673 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1674 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1675 ; STRIDED-NEXT:    mov z1.d, z4.d
1676 ; STRIDED-NEXT:    addvl sp, sp, #17
1677 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1678 ; STRIDED-NEXT:    ret
1680 ; CONTIGUOUS-LABEL: ld1_x4_i16_z0_z4_z8_z12:
1681 ; CONTIGUOUS:       // %bb.0:
1682 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1683 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
1684 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1685 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1686 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1687 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1688 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1689 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1690 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1691 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1692 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1693 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1694 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1695 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1696 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
1697 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
1698 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
1699 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
1700 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1701 ; CONTIGUOUS-NEXT:    ld1h { z0.h - z3.h }, pn8/z, [x0]
1702 ; CONTIGUOUS-NEXT:    str z0, [sp]
1703 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1704 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
1705 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
1706 ; CONTIGUOUS-NEXT:    //APP
1707 ; CONTIGUOUS-NEXT:    nop
1708 ; CONTIGUOUS-NEXT:    //NO_APP
1709 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1710 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1711 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
1712 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
1713 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
1714 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1715 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1716 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1717 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1718 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1719 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1720 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1721 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1722 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1723 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1724 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1725 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
1726 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
1727 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
1728 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1729 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
1730 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1731 ; CONTIGUOUS-NEXT:    ret
1732   %res = call { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x4.nxv8i16(target("aarch64.svcount") %pn, ptr %ptr)
1733   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1734   %res.v0 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 0
1735   %v0 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> poison, <vscale x 8 x i16> %res.v0, i64 0)
1736   %res.v1 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 1
1737   %v1 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v0, <vscale x 8 x i16> %res.v1, i64 8)
1738   %res.v2 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 2
1739   %v2 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v1, <vscale x 8 x i16> %res.v2, i64 16)
1740   %res.v3 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 3
1741   %v3 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v2, <vscale x 8 x i16> %res.v3, i64 24)
1742   ret <vscale x 32 x i16> %v3
1745 define <vscale x 32 x i16> @ld1_x4_i16_z0_z4_z8_z12_scalar(<vscale x 8 x i16> %unused, <vscale x 8 x i16> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
1746 ; CHECK-LABEL: ld1_x4_i16_z0_z4_z8_z12_scalar:
1747 ; CHECK:       // %bb.0:
1748 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1749 ; CHECK-NEXT:    addvl sp, sp, #-17
1750 ; CHECK-NEXT:    lsl x8, x1, #1
1751 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1752 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1753 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1754 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1755 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1756 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1757 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1758 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1759 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1760 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1761 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1762 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1763 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1764 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1765 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1766 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1767 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1768 ; CHECK-NEXT:    mov p8.b, p0.b
1769 ; CHECK-NEXT:    ld1h { z0.h, z4.h, z8.h, z12.h }, pn8/z, [x0, x8, lsl #1]
1770 ; CHECK-NEXT:    //APP
1771 ; CHECK-NEXT:    nop
1772 ; CHECK-NEXT:    //NO_APP
1773 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1774 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1775 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1776 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1777 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1778 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1779 ; CHECK-NEXT:    mov z2.d, z8.d
1780 ; CHECK-NEXT:    mov z3.d, z12.d
1781 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1782 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1783 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1784 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1785 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1786 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1787 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1788 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1789 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1790 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1791 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1792 ; CHECK-NEXT:    mov z1.d, z4.d
1793 ; CHECK-NEXT:    addvl sp, sp, #17
1794 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1795 ; CHECK-NEXT:    ret
1796 ; STRIDED-LABEL: ld1_x4_i16_z0_z4_z8_z12_scalar:
1797 ; STRIDED:       // %bb.0:
1798 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1799 ; STRIDED-NEXT:    addvl sp, sp, #-17
1800 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1801 ; STRIDED-NEXT:    mov p8.b, p0.b
1802 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1803 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1804 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1805 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1806 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1807 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1808 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1809 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1810 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1811 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1812 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1813 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1814 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1815 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1816 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1817 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1818 ; STRIDED-NEXT:    ld1h { z0.h, z4.h, z8.h, z12.h }, pn8/z, [x0, x1, lsl #1]
1819 ; STRIDED-NEXT:    //APP
1820 ; STRIDED-NEXT:    nop
1821 ; STRIDED-NEXT:    //NO_APP
1822 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1823 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1824 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1825 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1826 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1827 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1828 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1829 ; STRIDED-NEXT:    mov z2.d, z8.d
1830 ; STRIDED-NEXT:    mov z3.d, z12.d
1831 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1832 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1833 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1834 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1835 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1836 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1837 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1838 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1839 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1840 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1841 ; STRIDED-NEXT:    mov z1.d, z4.d
1842 ; STRIDED-NEXT:    addvl sp, sp, #17
1843 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1844 ; STRIDED-NEXT:    ret
1846 ; CONTIGUOUS-LABEL: ld1_x4_i16_z0_z4_z8_z12_scalar:
1847 ; CONTIGUOUS:       // %bb.0:
1848 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1849 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
1850 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1851 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1852 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1853 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1854 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1855 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1856 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1857 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1858 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1859 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1860 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1861 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1862 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
1863 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
1864 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
1865 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
1866 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
1867 ; CONTIGUOUS-NEXT:    ld1h { z0.h - z3.h }, pn8/z, [x0, x1, lsl #1]
1868 ; CONTIGUOUS-NEXT:    str z0, [sp]
1869 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
1870 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
1871 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
1872 ; CONTIGUOUS-NEXT:    //APP
1873 ; CONTIGUOUS-NEXT:    nop
1874 ; CONTIGUOUS-NEXT:    //NO_APP
1875 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
1876 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
1877 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
1878 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
1879 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
1880 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1881 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1882 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1883 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1884 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1885 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1886 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1887 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1888 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1889 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1890 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1891 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
1892 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
1893 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
1894 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1895 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
1896 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1897 ; CONTIGUOUS-NEXT:    ret
1898   %base = getelementptr i16, ptr %ptr, i64 %index
1899   %res = call { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x4.nxv8i16(target("aarch64.svcount") %pn, ptr %base)
1900   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
1901   %res.v0 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 0
1902   %v0 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> poison, <vscale x 8 x i16> %res.v0, i64 0)
1903   %res.v1 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 1
1904   %v1 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v0, <vscale x 8 x i16> %res.v1, i64 8)
1905   %res.v2 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 2
1906   %v2 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v1, <vscale x 8 x i16> %res.v2, i64 16)
1907   %res.v3 = extractvalue { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } %res, 3
1908   %v3 = call <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16> %v2, <vscale x 8 x i16> %res.v3, i64 24)
1909   ret <vscale x 32 x i16> %v3
1912 define <vscale x 16 x i32> @ld1_x4_i32_z0_z4_z8_z12(<vscale x 4 x i32> %unused, <vscale x 4 x i32> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
1913 ; CHECK-LABEL: ld1_x4_i32_z0_z4_z8_z12:
1914 ; CHECK:       // %bb.0:
1915 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1916 ; CHECK-NEXT:    addvl sp, sp, #-17
1917 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1918 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1919 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1920 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1921 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1922 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1923 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1924 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1925 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1926 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1927 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1928 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1929 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1930 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1931 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1932 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1933 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1934 ; CHECK-NEXT:    mov p8.b, p0.b
1935 ; CHECK-NEXT:    ld1w { z0.s, z4.s, z8.s, z12.s }, pn8/z, [x0]
1936 ; CHECK-NEXT:    //APP
1937 ; CHECK-NEXT:    nop
1938 ; CHECK-NEXT:    //NO_APP
1939 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1940 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1941 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1942 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1943 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1944 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1945 ; CHECK-NEXT:    mov z2.d, z8.d
1946 ; CHECK-NEXT:    mov z3.d, z12.d
1947 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1948 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1949 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1950 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
1951 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
1952 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
1953 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
1954 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
1955 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
1956 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
1957 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
1958 ; CHECK-NEXT:    mov z1.d, z4.d
1959 ; CHECK-NEXT:    addvl sp, sp, #17
1960 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1961 ; CHECK-NEXT:    ret
1962 ; STRIDED-LABEL: ld1_x4_i32_z0_z4_z8_z12:
1963 ; STRIDED:       // %bb.0:
1964 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1965 ; STRIDED-NEXT:    addvl sp, sp, #-17
1966 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
1967 ; STRIDED-NEXT:    mov p8.b, p0.b
1968 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
1969 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
1970 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
1971 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
1972 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
1973 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
1974 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
1975 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
1976 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
1977 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
1978 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
1979 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
1980 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
1981 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
1982 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
1983 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
1984 ; STRIDED-NEXT:    ld1w { z0.s, z4.s, z8.s, z12.s }, pn8/z, [x0]
1985 ; STRIDED-NEXT:    //APP
1986 ; STRIDED-NEXT:    nop
1987 ; STRIDED-NEXT:    //NO_APP
1988 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
1989 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
1990 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
1991 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
1992 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
1993 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
1994 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
1995 ; STRIDED-NEXT:    mov z2.d, z8.d
1996 ; STRIDED-NEXT:    mov z3.d, z12.d
1997 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
1998 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
1999 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2000 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2001 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2002 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2003 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2004 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2005 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2006 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2007 ; STRIDED-NEXT:    mov z1.d, z4.d
2008 ; STRIDED-NEXT:    addvl sp, sp, #17
2009 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2010 ; STRIDED-NEXT:    ret
2012 ; CONTIGUOUS-LABEL: ld1_x4_i32_z0_z4_z8_z12:
2013 ; CONTIGUOUS:       // %bb.0:
2014 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2015 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
2016 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2017 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2018 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2019 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2020 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2021 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2022 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2023 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2024 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2025 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2026 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2027 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2028 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
2029 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
2030 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
2031 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
2032 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
2033 ; CONTIGUOUS-NEXT:    ld1w { z0.s - z3.s }, pn8/z, [x0]
2034 ; CONTIGUOUS-NEXT:    str z0, [sp]
2035 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
2036 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
2037 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
2038 ; CONTIGUOUS-NEXT:    //APP
2039 ; CONTIGUOUS-NEXT:    nop
2040 ; CONTIGUOUS-NEXT:    //NO_APP
2041 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
2042 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
2043 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
2044 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
2045 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
2046 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2047 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2048 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2049 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2050 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2051 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2052 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2053 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2054 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2055 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2056 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2057 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
2058 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
2059 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
2060 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2061 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
2062 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2063 ; CONTIGUOUS-NEXT:    ret
2064   %res = call { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x4.nxv4i32(target("aarch64.svcount") %pn, ptr %ptr)
2065   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
2066   %res.v0 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 0
2067   %v0 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> poison, <vscale x 4 x i32> %res.v0, i64 0)
2068   %res.v1 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 1
2069   %v1 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v0, <vscale x 4 x i32> %res.v1, i64 4)
2070   %res.v2 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 2
2071   %v2 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v1, <vscale x 4 x i32> %res.v2, i64 8)
2072   %res.v3 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 3
2073   %v3 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v2, <vscale x 4 x i32> %res.v3, i64 12)
2074   ret <vscale x 16 x i32> %v3
2077 define <vscale x 16 x i32> @ld1_x4_i32_z0_z4_z8_z12_scalar(<vscale x 4 x i32> %unused, <vscale x 4 x i32> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
2078 ; CHECK-LABEL: ld1_x4_i32_z0_z4_z8_z12_scalar:
2079 ; CHECK:       // %bb.0:
2080 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2081 ; CHECK-NEXT:    addvl sp, sp, #-17
2082 ; CHECK-NEXT:    lsl x8, x1, #2
2083 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2084 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2085 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2086 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2087 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2088 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2089 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2090 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2091 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2092 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2093 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2094 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2095 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2096 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2097 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2098 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2099 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2100 ; CHECK-NEXT:    mov p8.b, p0.b
2101 ; CHECK-NEXT:    ld1w { z0.s, z4.s, z8.s, z12.s }, pn8/z, [x0, x8, lsl #2]
2102 ; CHECK-NEXT:    //APP
2103 ; CHECK-NEXT:    nop
2104 ; CHECK-NEXT:    //NO_APP
2105 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2106 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2107 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2108 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2109 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2110 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2111 ; CHECK-NEXT:    mov z2.d, z8.d
2112 ; CHECK-NEXT:    mov z3.d, z12.d
2113 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2114 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2115 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2116 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2117 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2118 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2119 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2120 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2121 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2122 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2123 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2124 ; CHECK-NEXT:    mov z1.d, z4.d
2125 ; CHECK-NEXT:    addvl sp, sp, #17
2126 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2127 ; CHECK-NEXT:    ret
2128 ; STRIDED-LABEL: ld1_x4_i32_z0_z4_z8_z12_scalar:
2129 ; STRIDED:       // %bb.0:
2130 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2131 ; STRIDED-NEXT:    addvl sp, sp, #-17
2132 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2133 ; STRIDED-NEXT:    mov p8.b, p0.b
2134 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2135 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2136 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2137 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2138 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2139 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2140 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2141 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2142 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2143 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2144 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2145 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2146 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2147 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2148 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2149 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2150 ; STRIDED-NEXT:    ld1w { z0.s, z4.s, z8.s, z12.s }, pn8/z, [x0, x1, lsl #2]
2151 ; STRIDED-NEXT:    //APP
2152 ; STRIDED-NEXT:    nop
2153 ; STRIDED-NEXT:    //NO_APP
2154 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2155 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2156 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2157 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2158 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2159 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2160 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2161 ; STRIDED-NEXT:    mov z2.d, z8.d
2162 ; STRIDED-NEXT:    mov z3.d, z12.d
2163 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2164 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2165 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2166 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2167 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2168 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2169 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2170 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2171 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2172 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2173 ; STRIDED-NEXT:    mov z1.d, z4.d
2174 ; STRIDED-NEXT:    addvl sp, sp, #17
2175 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2176 ; STRIDED-NEXT:    ret
2178 ; CONTIGUOUS-LABEL: ld1_x4_i32_z0_z4_z8_z12_scalar:
2179 ; CONTIGUOUS:       // %bb.0:
2180 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2181 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
2182 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2183 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2184 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2185 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2186 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2187 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2188 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2189 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2190 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2191 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2192 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2193 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2194 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
2195 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
2196 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
2197 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
2198 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
2199 ; CONTIGUOUS-NEXT:    ld1w { z0.s - z3.s }, pn8/z, [x0, x1, lsl #2]
2200 ; CONTIGUOUS-NEXT:    str z0, [sp]
2201 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
2202 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
2203 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
2204 ; CONTIGUOUS-NEXT:    //APP
2205 ; CONTIGUOUS-NEXT:    nop
2206 ; CONTIGUOUS-NEXT:    //NO_APP
2207 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
2208 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
2209 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
2210 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
2211 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
2212 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2213 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2214 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2215 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2216 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2217 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2218 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2219 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2220 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2221 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2222 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2223 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
2224 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
2225 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
2226 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2227 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
2228 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2229 ; CONTIGUOUS-NEXT:    ret
2230   %base = getelementptr i32, ptr %ptr, i64 %index
2231   %res = call { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x4.nxv4i32(target("aarch64.svcount") %pn, ptr %base)
2232   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
2233   %res.v0 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 0
2234   %v0 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> poison, <vscale x 4 x i32> %res.v0, i64 0)
2235   %res.v1 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 1
2236   %v1 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v0, <vscale x 4 x i32> %res.v1, i64 4)
2237   %res.v2 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 2
2238   %v2 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v1, <vscale x 4 x i32> %res.v2, i64 8)
2239   %res.v3 = extractvalue { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } %res, 3
2240   %v3 = call <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32> %v2, <vscale x 4 x i32> %res.v3, i64 12)
2241   ret <vscale x 16 x i32> %v3
2244 define <vscale x 8 x i64> @ld1_x4_i64_z0_z4_z8_z12(<vscale x 2 x i64> %unused, <vscale x 2 x i64> %z1, target("aarch64.svcount") %pn, ptr %ptr) nounwind {
2245 ; CHECK-LABEL: ld1_x4_i64_z0_z4_z8_z12:
2246 ; CHECK:       // %bb.0:
2247 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2248 ; CHECK-NEXT:    addvl sp, sp, #-17
2249 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2250 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2251 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2252 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2253 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2254 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2255 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2256 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2257 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2258 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2259 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2260 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2261 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2262 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2263 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2264 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2265 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2266 ; CHECK-NEXT:    mov p8.b, p0.b
2267 ; CHECK-NEXT:    ld1d { z0.d, z4.d, z8.d, z12.d }, pn8/z, [x0]
2268 ; CHECK-NEXT:    //APP
2269 ; CHECK-NEXT:    nop
2270 ; CHECK-NEXT:    //NO_APP
2271 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2272 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2273 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2274 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2275 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2276 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2277 ; CHECK-NEXT:    mov z2.d, z8.d
2278 ; CHECK-NEXT:    mov z3.d, z12.d
2279 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2280 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2281 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2282 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2283 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2284 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2285 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2286 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2287 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2288 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2289 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2290 ; CHECK-NEXT:    mov z1.d, z4.d
2291 ; CHECK-NEXT:    addvl sp, sp, #17
2292 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2293 ; CHECK-NEXT:    ret
2294 ; STRIDED-LABEL: ld1_x4_i64_z0_z4_z8_z12:
2295 ; STRIDED:       // %bb.0:
2296 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2297 ; STRIDED-NEXT:    addvl sp, sp, #-17
2298 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2299 ; STRIDED-NEXT:    mov p8.b, p0.b
2300 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2301 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2302 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2303 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2304 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2305 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2306 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2307 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2308 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2309 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2310 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2311 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2312 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2313 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2314 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2315 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2316 ; STRIDED-NEXT:    ld1d { z0.d, z4.d, z8.d, z12.d }, pn8/z, [x0]
2317 ; STRIDED-NEXT:    //APP
2318 ; STRIDED-NEXT:    nop
2319 ; STRIDED-NEXT:    //NO_APP
2320 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2321 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2322 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2323 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2324 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2325 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2326 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2327 ; STRIDED-NEXT:    mov z2.d, z8.d
2328 ; STRIDED-NEXT:    mov z3.d, z12.d
2329 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2330 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2331 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2332 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2333 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2334 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2335 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2336 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2337 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2338 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2339 ; STRIDED-NEXT:    mov z1.d, z4.d
2340 ; STRIDED-NEXT:    addvl sp, sp, #17
2341 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2342 ; STRIDED-NEXT:    ret
2344 ; CONTIGUOUS-LABEL: ld1_x4_i64_z0_z4_z8_z12:
2345 ; CONTIGUOUS:       // %bb.0:
2346 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2347 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
2348 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2349 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2350 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2351 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2352 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2353 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2354 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2355 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2356 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2357 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2358 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2359 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2360 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
2361 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
2362 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
2363 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
2364 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
2365 ; CONTIGUOUS-NEXT:    ld1d { z0.d - z3.d }, pn8/z, [x0]
2366 ; CONTIGUOUS-NEXT:    str z0, [sp]
2367 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
2368 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
2369 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
2370 ; CONTIGUOUS-NEXT:    //APP
2371 ; CONTIGUOUS-NEXT:    nop
2372 ; CONTIGUOUS-NEXT:    //NO_APP
2373 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
2374 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
2375 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
2376 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
2377 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
2378 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2379 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2380 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2381 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2382 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2383 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2384 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2385 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2386 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2387 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2388 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2389 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
2390 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
2391 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
2392 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2393 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
2394 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2395 ; CONTIGUOUS-NEXT:    ret
2396   %res = call { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x4.nxv2i64(target("aarch64.svcount") %pn, ptr %ptr)
2397   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
2398   %res.v0 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 0
2399   %v0 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> poison, <vscale x 2 x i64> %res.v0, i64 0)
2400   %res.v1 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 1
2401   %v1 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v0, <vscale x 2 x i64> %res.v1, i64 2)
2402   %res.v2 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 2
2403   %v2 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v1, <vscale x 2 x i64> %res.v2, i64 4)
2404   %res.v3 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 3
2405   %v3 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v2, <vscale x 2 x i64> %res.v3, i64 6)
2406   ret <vscale x 8 x i64> %v3
2409 define <vscale x 8 x i64> @ld1_x4_i64_z0_z4_z8_z12_scalar(<vscale x 2 x i64> %unused, <vscale x 2 x i64> %z1, target("aarch64.svcount") %pn, ptr %ptr, i64 %index) nounwind {
2410 ; CHECK-LABEL: ld1_x4_i64_z0_z4_z8_z12_scalar:
2411 ; CHECK:       // %bb.0:
2412 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2413 ; CHECK-NEXT:    addvl sp, sp, #-17
2414 ; CHECK-NEXT:    lsl x8, x1, #3
2415 ; CHECK-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2416 ; CHECK-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2417 ; CHECK-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2418 ; CHECK-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2419 ; CHECK-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2420 ; CHECK-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2421 ; CHECK-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2422 ; CHECK-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2423 ; CHECK-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2424 ; CHECK-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2425 ; CHECK-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2426 ; CHECK-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2427 ; CHECK-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2428 ; CHECK-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2429 ; CHECK-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2430 ; CHECK-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2431 ; CHECK-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2432 ; CHECK-NEXT:    mov p8.b, p0.b
2433 ; CHECK-NEXT:    ld1d { z0.d, z4.d, z8.d, z12.d }, pn8/z, [x0, x8, lsl #3]
2434 ; CHECK-NEXT:    //APP
2435 ; CHECK-NEXT:    nop
2436 ; CHECK-NEXT:    //NO_APP
2437 ; CHECK-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2438 ; CHECK-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2439 ; CHECK-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2440 ; CHECK-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2441 ; CHECK-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2442 ; CHECK-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2443 ; CHECK-NEXT:    mov z2.d, z8.d
2444 ; CHECK-NEXT:    mov z3.d, z12.d
2445 ; CHECK-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2446 ; CHECK-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2447 ; CHECK-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2448 ; CHECK-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2449 ; CHECK-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2450 ; CHECK-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2451 ; CHECK-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2452 ; CHECK-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2453 ; CHECK-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2454 ; CHECK-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2455 ; CHECK-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2456 ; CHECK-NEXT:    mov z1.d, z4.d
2457 ; CHECK-NEXT:    addvl sp, sp, #17
2458 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2459 ; CHECK-NEXT:    ret
2460 ; STRIDED-LABEL: ld1_x4_i64_z0_z4_z8_z12_scalar:
2461 ; STRIDED:       // %bb.0:
2462 ; STRIDED-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2463 ; STRIDED-NEXT:    addvl sp, sp, #-17
2464 ; STRIDED-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2465 ; STRIDED-NEXT:    mov p8.b, p0.b
2466 ; STRIDED-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2467 ; STRIDED-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2468 ; STRIDED-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2469 ; STRIDED-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2470 ; STRIDED-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2471 ; STRIDED-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2472 ; STRIDED-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2473 ; STRIDED-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2474 ; STRIDED-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2475 ; STRIDED-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2476 ; STRIDED-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2477 ; STRIDED-NEXT:    str z12, [sp, #12, mul vl] // 16-byte Folded Spill
2478 ; STRIDED-NEXT:    str z11, [sp, #13, mul vl] // 16-byte Folded Spill
2479 ; STRIDED-NEXT:    str z10, [sp, #14, mul vl] // 16-byte Folded Spill
2480 ; STRIDED-NEXT:    str z9, [sp, #15, mul vl] // 16-byte Folded Spill
2481 ; STRIDED-NEXT:    str z8, [sp, #16, mul vl] // 16-byte Folded Spill
2482 ; STRIDED-NEXT:    ld1d { z0.d, z4.d, z8.d, z12.d }, pn8/z, [x0, x1, lsl #3]
2483 ; STRIDED-NEXT:    //APP
2484 ; STRIDED-NEXT:    nop
2485 ; STRIDED-NEXT:    //NO_APP
2486 ; STRIDED-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2487 ; STRIDED-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2488 ; STRIDED-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2489 ; STRIDED-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2490 ; STRIDED-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2491 ; STRIDED-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2492 ; STRIDED-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2493 ; STRIDED-NEXT:    mov z2.d, z8.d
2494 ; STRIDED-NEXT:    mov z3.d, z12.d
2495 ; STRIDED-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2496 ; STRIDED-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2497 ; STRIDED-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2498 ; STRIDED-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2499 ; STRIDED-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2500 ; STRIDED-NEXT:    ldr z12, [sp, #12, mul vl] // 16-byte Folded Reload
2501 ; STRIDED-NEXT:    ldr z11, [sp, #13, mul vl] // 16-byte Folded Reload
2502 ; STRIDED-NEXT:    ldr z10, [sp, #14, mul vl] // 16-byte Folded Reload
2503 ; STRIDED-NEXT:    ldr z9, [sp, #15, mul vl] // 16-byte Folded Reload
2504 ; STRIDED-NEXT:    ldr z8, [sp, #16, mul vl] // 16-byte Folded Reload
2505 ; STRIDED-NEXT:    mov z1.d, z4.d
2506 ; STRIDED-NEXT:    addvl sp, sp, #17
2507 ; STRIDED-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2508 ; STRIDED-NEXT:    ret
2510 ; CONTIGUOUS-LABEL: ld1_x4_i64_z0_z4_z8_z12_scalar:
2511 ; CONTIGUOUS:       // %bb.0:
2512 ; CONTIGUOUS-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2513 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-15
2514 ; CONTIGUOUS-NEXT:    str p8, [sp, #7, mul vl] // 2-byte Folded Spill
2515 ; CONTIGUOUS-NEXT:    str z23, [sp, #1, mul vl] // 16-byte Folded Spill
2516 ; CONTIGUOUS-NEXT:    str z22, [sp, #2, mul vl] // 16-byte Folded Spill
2517 ; CONTIGUOUS-NEXT:    str z21, [sp, #3, mul vl] // 16-byte Folded Spill
2518 ; CONTIGUOUS-NEXT:    str z20, [sp, #4, mul vl] // 16-byte Folded Spill
2519 ; CONTIGUOUS-NEXT:    str z19, [sp, #5, mul vl] // 16-byte Folded Spill
2520 ; CONTIGUOUS-NEXT:    str z18, [sp, #6, mul vl] // 16-byte Folded Spill
2521 ; CONTIGUOUS-NEXT:    str z17, [sp, #7, mul vl] // 16-byte Folded Spill
2522 ; CONTIGUOUS-NEXT:    str z16, [sp, #8, mul vl] // 16-byte Folded Spill
2523 ; CONTIGUOUS-NEXT:    str z15, [sp, #9, mul vl] // 16-byte Folded Spill
2524 ; CONTIGUOUS-NEXT:    str z14, [sp, #10, mul vl] // 16-byte Folded Spill
2525 ; CONTIGUOUS-NEXT:    str z13, [sp, #11, mul vl] // 16-byte Folded Spill
2526 ; CONTIGUOUS-NEXT:    str z11, [sp, #12, mul vl] // 16-byte Folded Spill
2527 ; CONTIGUOUS-NEXT:    str z10, [sp, #13, mul vl] // 16-byte Folded Spill
2528 ; CONTIGUOUS-NEXT:    str z9, [sp, #14, mul vl] // 16-byte Folded Spill
2529 ; CONTIGUOUS-NEXT:    addvl sp, sp, #-4
2530 ; CONTIGUOUS-NEXT:    mov p8.b, p0.b
2531 ; CONTIGUOUS-NEXT:    ld1d { z0.d - z3.d }, pn8/z, [x0, x1, lsl #3]
2532 ; CONTIGUOUS-NEXT:    str z0, [sp]
2533 ; CONTIGUOUS-NEXT:    str z1, [sp, #1, mul vl]
2534 ; CONTIGUOUS-NEXT:    str z2, [sp, #2, mul vl]
2535 ; CONTIGUOUS-NEXT:    str z3, [sp, #3, mul vl]
2536 ; CONTIGUOUS-NEXT:    //APP
2537 ; CONTIGUOUS-NEXT:    nop
2538 ; CONTIGUOUS-NEXT:    //NO_APP
2539 ; CONTIGUOUS-NEXT:    ldr z0, [sp]
2540 ; CONTIGUOUS-NEXT:    ldr z1, [sp, #1, mul vl]
2541 ; CONTIGUOUS-NEXT:    ldr z2, [sp, #2, mul vl]
2542 ; CONTIGUOUS-NEXT:    ldr z3, [sp, #3, mul vl]
2543 ; CONTIGUOUS-NEXT:    addvl sp, sp, #4
2544 ; CONTIGUOUS-NEXT:    ldr z23, [sp, #1, mul vl] // 16-byte Folded Reload
2545 ; CONTIGUOUS-NEXT:    ldr z22, [sp, #2, mul vl] // 16-byte Folded Reload
2546 ; CONTIGUOUS-NEXT:    ldr z21, [sp, #3, mul vl] // 16-byte Folded Reload
2547 ; CONTIGUOUS-NEXT:    ldr z20, [sp, #4, mul vl] // 16-byte Folded Reload
2548 ; CONTIGUOUS-NEXT:    ldr z19, [sp, #5, mul vl] // 16-byte Folded Reload
2549 ; CONTIGUOUS-NEXT:    ldr z18, [sp, #6, mul vl] // 16-byte Folded Reload
2550 ; CONTIGUOUS-NEXT:    ldr z17, [sp, #7, mul vl] // 16-byte Folded Reload
2551 ; CONTIGUOUS-NEXT:    ldr z16, [sp, #8, mul vl] // 16-byte Folded Reload
2552 ; CONTIGUOUS-NEXT:    ldr z15, [sp, #9, mul vl] // 16-byte Folded Reload
2553 ; CONTIGUOUS-NEXT:    ldr z14, [sp, #10, mul vl] // 16-byte Folded Reload
2554 ; CONTIGUOUS-NEXT:    ldr z13, [sp, #11, mul vl] // 16-byte Folded Reload
2555 ; CONTIGUOUS-NEXT:    ldr z11, [sp, #12, mul vl] // 16-byte Folded Reload
2556 ; CONTIGUOUS-NEXT:    ldr z10, [sp, #13, mul vl] // 16-byte Folded Reload
2557 ; CONTIGUOUS-NEXT:    ldr z9, [sp, #14, mul vl] // 16-byte Folded Reload
2558 ; CONTIGUOUS-NEXT:    ldr p8, [sp, #7, mul vl] // 2-byte Folded Reload
2559 ; CONTIGUOUS-NEXT:    addvl sp, sp, #15
2560 ; CONTIGUOUS-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2561 ; CONTIGUOUS-NEXT:    ret
2562   %base = getelementptr i64, ptr %ptr, i64 %index
2563   %res = call { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x4.nxv2i64(target("aarch64.svcount") %pn, ptr %base)
2564   call void asm sideeffect "nop", "~{z1},~{z2},~{z3},~{z5},~{z6},~{z7},~{z9},~{z10},~{z11},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() nounwind
2565   %res.v0 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 0
2566   %v0 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> poison, <vscale x 2 x i64> %res.v0, i64 0)
2567   %res.v1 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 1
2568   %v1 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v0, <vscale x 2 x i64> %res.v1, i64 2)
2569   %res.v2 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 2
2570   %v2 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v1, <vscale x 2 x i64> %res.v2, i64 4)
2571   %res.v3 = extractvalue { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } %res, 3
2572   %v3 = call <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64> %v2, <vscale x 2 x i64> %res.v3, i64 6)
2573   ret <vscale x 8 x i64> %v3
2576 declare <vscale x 32 x i8> @llvm.vector.insert.nxv32i8.nxv16i8(<vscale x 32 x i8>, <vscale x 16 x i8>, i64)
2577 declare <vscale x 16 x i16> @llvm.vector.insert.nxv16i16.nxv8i16(<vscale x 16 x i16>, <vscale x 8 x i16>, i64)
2578 declare <vscale x 8 x i32> @llvm.vector.insert.nxv8i32.nxv4i32(<vscale x 8 x i32>, <vscale x 4 x i32>, i64)
2579 declare <vscale x 4 x i64> @llvm.vector.insert.nxv4i64.nxv2i64(<vscale x 4 x i64>, <vscale x 2 x i64>, i64)
2580 declare <vscale x 64 x i8> @llvm.vector.insert.nxv64i8.nxv16i8(<vscale x 64 x i8>, <vscale x 16 x i8>, i64)
2581 declare <vscale x 32 x i16> @llvm.vector.insert.nxv32i16.nxv8i16(<vscale x 32 x i16>, <vscale x 8 x i16>, i64)
2582 declare <vscale x 16 x i32> @llvm.vector.insert.nxv16i32.nxv4i32(<vscale x 16 x i32>, <vscale x 4 x i32>, i64)
2583 declare <vscale x 8 x i64> @llvm.vector.insert.nxv8i64.nxv2i64(<vscale x 8 x i64>, <vscale x 2 x i64>, i64)
2584 declare { <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x2.nxv16i8(target("aarch64.svcount"), ptr)
2585 declare { <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x2.nxv8i16(target("aarch64.svcount"), ptr)
2586 declare { <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x2.nxv4i32(target("aarch64.svcount"), ptr)
2587 declare { <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x2.nxv2i64(target("aarch64.svcount"), ptr)
2588 declare { <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8> } @llvm.aarch64.sve.ld1.pn.x4.nxv16i8(target("aarch64.svcount"), ptr)
2589 declare { <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16> } @llvm.aarch64.sve.ld1.pn.x4.nxv8i16(target("aarch64.svcount"), ptr)
2590 declare { <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32> } @llvm.aarch64.sve.ld1.pn.x4.nxv4i32(target("aarch64.svcount"), ptr)
2591 declare { <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64> } @llvm.aarch64.sve.ld1.pn.x4.nxv2i64(target("aarch64.svcount"), ptr)