1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
3 ; RUN: llc %s -o - -mtriple=aarch64 -O0 -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISel-WITHOUT-MOPS,GISel-WITHOUT-MOPS-O0
4 ; RUN: llc %s -o - -mtriple=aarch64 -global-isel=1 -global-isel-abort=1 | FileCheck %s --check-prefixes=GISel-WITHOUT-MOPS,GISel-WITHOUT-MOPS-O3
5 ; RUN: llc %s -o - -mtriple=aarch64 -O0 -global-isel=1 -global-isel-abort=1 -mattr=+mops | FileCheck %s --check-prefixes=GISel-MOPS,GISel-MOPS-O0
6 ; RUN: llc %s -o - -mtriple=aarch64 -global-isel=1 -global-isel-abort=1 -mattr=+mops | FileCheck %s --check-prefixes=GISel-MOPS,GISel-MOPS-O3
7 ; RUN: llc %s -o - -mtriple=aarch64 -O2 | FileCheck %s --check-prefix=SDAG-WITHOUT-MOPS-O2
8 ; RUN: llc %s -o - -mtriple=aarch64 -O2 -mattr=+mops | FileCheck %s --check-prefix=SDAG-MOPS-O2
10 declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)
12 declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
14 declare void @llvm.memcpy.inline.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
16 declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
18 define void @memset_0_zeroval(ptr %dst) {
19 ; GISel-WITHOUT-MOPS-LABEL: memset_0_zeroval:
20 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
21 ; GISel-WITHOUT-MOPS-NEXT: ret
23 ; GISel-MOPS-LABEL: memset_0_zeroval:
24 ; GISel-MOPS: // %bb.0: // %entry
25 ; GISel-MOPS-NEXT: ret
27 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_zeroval:
28 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
29 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
31 ; SDAG-MOPS-O2-LABEL: memset_0_zeroval:
32 ; SDAG-MOPS-O2: // %bb.0: // %entry
33 ; SDAG-MOPS-O2-NEXT: ret
35 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 false)
39 define void @memset_0_zeroval_volatile(ptr %dst) {
40 ; GISel-WITHOUT-MOPS-LABEL: memset_0_zeroval_volatile:
41 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
42 ; GISel-WITHOUT-MOPS-NEXT: ret
44 ; GISel-MOPS-LABEL: memset_0_zeroval_volatile:
45 ; GISel-MOPS: // %bb.0: // %entry
46 ; GISel-MOPS-NEXT: ret
48 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_zeroval_volatile:
49 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
50 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
52 ; SDAG-MOPS-O2-LABEL: memset_0_zeroval_volatile:
53 ; SDAG-MOPS-O2: // %bb.0: // %entry
54 ; SDAG-MOPS-O2-NEXT: ret
56 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 true)
60 define void @memset_10_zeroval(ptr %dst) {
61 ; GISel-WITHOUT-MOPS-LABEL: memset_10_zeroval:
62 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
63 ; GISel-WITHOUT-MOPS-NEXT: str xzr, [x0]
64 ; GISel-WITHOUT-MOPS-NEXT: strh wzr, [x0, #8]
65 ; GISel-WITHOUT-MOPS-NEXT: ret
67 ; GISel-MOPS-LABEL: memset_10_zeroval:
68 ; GISel-MOPS: // %bb.0: // %entry
69 ; GISel-MOPS-NEXT: str xzr, [x0]
70 ; GISel-MOPS-NEXT: strh wzr, [x0, #8]
71 ; GISel-MOPS-NEXT: ret
73 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_zeroval:
74 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
75 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh wzr, [x0, #8]
76 ; SDAG-WITHOUT-MOPS-O2-NEXT: str xzr, [x0]
77 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
79 ; SDAG-MOPS-O2-LABEL: memset_10_zeroval:
80 ; SDAG-MOPS-O2: // %bb.0: // %entry
81 ; SDAG-MOPS-O2-NEXT: strh wzr, [x0, #8]
82 ; SDAG-MOPS-O2-NEXT: str xzr, [x0]
83 ; SDAG-MOPS-O2-NEXT: ret
85 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 false)
89 define void @memset_10_zeroval_volatile(ptr %dst) {
90 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10_zeroval_volatile:
91 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
92 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
93 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
94 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
95 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa
96 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
97 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr
98 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
99 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
100 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
102 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10_zeroval_volatile:
103 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
104 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
105 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
106 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
107 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr
108 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa
109 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
110 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
111 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
113 ; GISel-MOPS-O0-LABEL: memset_10_zeroval_volatile:
114 ; GISel-MOPS-O0: // %bb.0: // %entry
115 ; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa
116 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
117 ; GISel-MOPS-O0-NEXT: mov x9, xzr
118 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
119 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
120 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
121 ; GISel-MOPS-O0-NEXT: ret
123 ; GISel-MOPS-O3-LABEL: memset_10_zeroval_volatile:
124 ; GISel-MOPS-O3: // %bb.0: // %entry
125 ; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa
126 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr
127 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr
128 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr
129 ; GISel-MOPS-O3-NEXT: ret
131 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_zeroval_volatile:
132 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
133 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh wzr, [x0, #8]
134 ; SDAG-WITHOUT-MOPS-O2-NEXT: str xzr, [x0]
135 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
137 ; SDAG-MOPS-O2-LABEL: memset_10_zeroval_volatile:
138 ; SDAG-MOPS-O2: // %bb.0: // %entry
139 ; SDAG-MOPS-O2-NEXT: strh wzr, [x0, #8]
140 ; SDAG-MOPS-O2-NEXT: str xzr, [x0]
141 ; SDAG-MOPS-O2-NEXT: ret
143 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 true)
147 define void @memset_10000_zeroval(ptr %dst) {
148 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_zeroval:
149 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
150 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
151 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
152 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
153 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
154 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
155 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr
156 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
157 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
158 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
160 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_zeroval:
161 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
162 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
163 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
164 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
165 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr
166 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710
167 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
168 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
169 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
171 ; GISel-MOPS-O0-LABEL: memset_10000_zeroval:
172 ; GISel-MOPS-O0: // %bb.0: // %entry
173 ; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
174 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
175 ; GISel-MOPS-O0-NEXT: mov x9, xzr
176 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
177 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
178 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
179 ; GISel-MOPS-O0-NEXT: ret
181 ; GISel-MOPS-O3-LABEL: memset_10000_zeroval:
182 ; GISel-MOPS-O3: // %bb.0: // %entry
183 ; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710
184 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr
185 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr
186 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr
187 ; GISel-MOPS-O3-NEXT: ret
189 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_zeroval:
190 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
191 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
192 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
193 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
194 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr
195 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710
196 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
197 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
198 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
200 ; SDAG-MOPS-O2-LABEL: memset_10000_zeroval:
201 ; SDAG-MOPS-O2: // %bb.0: // %entry
202 ; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710
203 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, xzr
204 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, xzr
205 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, xzr
206 ; SDAG-MOPS-O2-NEXT: ret
208 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 false)
212 define void @memset_10000_zeroval_volatile(ptr %dst) {
213 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_zeroval_volatile:
214 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
215 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
216 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
217 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
218 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
219 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
220 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, wzr
221 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
222 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
223 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
225 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_zeroval_volatile:
226 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
227 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
228 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
229 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
230 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, wzr
231 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710
232 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
233 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
234 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
236 ; GISel-MOPS-O0-LABEL: memset_10000_zeroval_volatile:
237 ; GISel-MOPS-O0: // %bb.0: // %entry
238 ; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
239 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
240 ; GISel-MOPS-O0-NEXT: mov x9, xzr
241 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
242 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
243 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
244 ; GISel-MOPS-O0-NEXT: ret
246 ; GISel-MOPS-O3-LABEL: memset_10000_zeroval_volatile:
247 ; GISel-MOPS-O3: // %bb.0: // %entry
248 ; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710
249 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, xzr
250 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, xzr
251 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, xzr
252 ; GISel-MOPS-O3-NEXT: ret
254 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_zeroval_volatile:
255 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
256 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
257 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
258 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
259 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr
260 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710
261 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
262 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
263 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
265 ; SDAG-MOPS-O2-LABEL: memset_10000_zeroval_volatile:
266 ; SDAG-MOPS-O2: // %bb.0: // %entry
267 ; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710
268 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, xzr
269 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, xzr
270 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, xzr
271 ; SDAG-MOPS-O2-NEXT: ret
273 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 true)
277 define void @memset_size_zeroval(ptr %dst, i64 %size) {
278 ; GISel-WITHOUT-MOPS-LABEL: memset_size_zeroval:
279 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
280 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
281 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
282 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
283 ; GISel-WITHOUT-MOPS-NEXT: mov x2, x1
284 ; GISel-WITHOUT-MOPS-NEXT: mov w1, wzr
285 ; GISel-WITHOUT-MOPS-NEXT: bl memset
286 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
287 ; GISel-WITHOUT-MOPS-NEXT: ret
289 ; GISel-MOPS-O0-LABEL: memset_size_zeroval:
290 ; GISel-MOPS-O0: // %bb.0: // %entry
291 ; GISel-MOPS-O0-NEXT: mov x8, xzr
292 ; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8
293 ; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8
294 ; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8
295 ; GISel-MOPS-O0-NEXT: ret
297 ; GISel-MOPS-O3-LABEL: memset_size_zeroval:
298 ; GISel-MOPS-O3: // %bb.0: // %entry
299 ; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, xzr
300 ; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, xzr
301 ; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, xzr
302 ; GISel-MOPS-O3-NEXT: ret
304 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_zeroval:
305 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
306 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
307 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
308 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
309 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x1
310 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr
311 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
312 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
313 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
315 ; SDAG-MOPS-O2-LABEL: memset_size_zeroval:
316 ; SDAG-MOPS-O2: // %bb.0: // %entry
317 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, xzr
318 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, xzr
319 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, xzr
320 ; SDAG-MOPS-O2-NEXT: ret
322 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 false)
326 define void @memset_size_zeroval_volatile(ptr %dst, i64 %size) {
327 ; GISel-WITHOUT-MOPS-LABEL: memset_size_zeroval_volatile:
328 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
329 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
330 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
331 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
332 ; GISel-WITHOUT-MOPS-NEXT: mov x2, x1
333 ; GISel-WITHOUT-MOPS-NEXT: mov w1, wzr
334 ; GISel-WITHOUT-MOPS-NEXT: bl memset
335 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
336 ; GISel-WITHOUT-MOPS-NEXT: ret
338 ; GISel-MOPS-O0-LABEL: memset_size_zeroval_volatile:
339 ; GISel-MOPS-O0: // %bb.0: // %entry
340 ; GISel-MOPS-O0-NEXT: mov x8, xzr
341 ; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8
342 ; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8
343 ; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8
344 ; GISel-MOPS-O0-NEXT: ret
346 ; GISel-MOPS-O3-LABEL: memset_size_zeroval_volatile:
347 ; GISel-MOPS-O3: // %bb.0: // %entry
348 ; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, xzr
349 ; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, xzr
350 ; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, xzr
351 ; GISel-MOPS-O3-NEXT: ret
353 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_zeroval_volatile:
354 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
355 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
356 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
357 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
358 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x1
359 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, wzr
360 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
361 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
362 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
364 ; SDAG-MOPS-O2-LABEL: memset_size_zeroval_volatile:
365 ; SDAG-MOPS-O2: // %bb.0: // %entry
366 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, xzr
367 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, xzr
368 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, xzr
369 ; SDAG-MOPS-O2-NEXT: ret
371 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 true)
376 define void @memset_0(ptr %dst, i32 %value) {
377 ; GISel-WITHOUT-MOPS-LABEL: memset_0:
378 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
379 ; GISel-WITHOUT-MOPS-NEXT: ret
381 ; GISel-MOPS-LABEL: memset_0:
382 ; GISel-MOPS: // %bb.0: // %entry
383 ; GISel-MOPS-NEXT: ret
385 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0:
386 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
387 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
389 ; SDAG-MOPS-O2-LABEL: memset_0:
390 ; SDAG-MOPS-O2: // %bb.0: // %entry
391 ; SDAG-MOPS-O2-NEXT: ret
393 %value_trunc = trunc i32 %value to i8
394 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 false)
398 define void @memset_0_volatile(ptr %dst, i32 %value) {
399 ; GISel-WITHOUT-MOPS-LABEL: memset_0_volatile:
400 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
401 ; GISel-WITHOUT-MOPS-NEXT: ret
403 ; GISel-MOPS-LABEL: memset_0_volatile:
404 ; GISel-MOPS: // %bb.0: // %entry
405 ; GISel-MOPS-NEXT: ret
407 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_volatile:
408 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
409 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
411 ; SDAG-MOPS-O2-LABEL: memset_0_volatile:
412 ; SDAG-MOPS-O2: // %bb.0: // %entry
413 ; SDAG-MOPS-O2-NEXT: ret
415 %value_trunc = trunc i32 %value to i8
416 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 true)
420 define void @memset_10(ptr %dst, i32 %value) {
421 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10:
422 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
423 ; GISel-WITHOUT-MOPS-O0-NEXT: // implicit-def: $x8
424 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, w1
425 ; GISel-WITHOUT-MOPS-O0-NEXT: and x8, x8, #0xff
426 ; GISel-WITHOUT-MOPS-O0-NEXT: mov x9, #72340172838076673 // =0x101010101010101
427 ; GISel-WITHOUT-MOPS-O0-NEXT: mul x8, x8, x9
428 ; GISel-WITHOUT-MOPS-O0-NEXT: str x8, [x0]
429 ; GISel-WITHOUT-MOPS-O0-NEXT: // kill: def $w8 killed $w8 killed $x8
430 ; GISel-WITHOUT-MOPS-O0-NEXT: strh w8, [x0, #8]
431 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
433 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10:
434 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
435 ; GISel-WITHOUT-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1
436 ; GISel-WITHOUT-MOPS-O3-NEXT: mov x8, #72340172838076673 // =0x101010101010101
437 ; GISel-WITHOUT-MOPS-O3-NEXT: and x9, x1, #0xff
438 ; GISel-WITHOUT-MOPS-O3-NEXT: mul x8, x9, x8
439 ; GISel-WITHOUT-MOPS-O3-NEXT: str x8, [x0]
440 ; GISel-WITHOUT-MOPS-O3-NEXT: strh w8, [x0, #8]
441 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
443 ; GISel-MOPS-O0-LABEL: memset_10:
444 ; GISel-MOPS-O0: // %bb.0: // %entry
445 ; GISel-MOPS-O0-NEXT: // implicit-def: $x8
446 ; GISel-MOPS-O0-NEXT: mov w8, w1
447 ; GISel-MOPS-O0-NEXT: and x8, x8, #0xff
448 ; GISel-MOPS-O0-NEXT: mov x9, #72340172838076673 // =0x101010101010101
449 ; GISel-MOPS-O0-NEXT: mul x8, x8, x9
450 ; GISel-MOPS-O0-NEXT: str x8, [x0]
451 ; GISel-MOPS-O0-NEXT: // kill: def $w8 killed $w8 killed $x8
452 ; GISel-MOPS-O0-NEXT: strh w8, [x0, #8]
453 ; GISel-MOPS-O0-NEXT: ret
455 ; GISel-MOPS-O3-LABEL: memset_10:
456 ; GISel-MOPS-O3: // %bb.0: // %entry
457 ; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1
458 ; GISel-MOPS-O3-NEXT: mov x8, #72340172838076673 // =0x101010101010101
459 ; GISel-MOPS-O3-NEXT: and x9, x1, #0xff
460 ; GISel-MOPS-O3-NEXT: mul x8, x9, x8
461 ; GISel-MOPS-O3-NEXT: str x8, [x0]
462 ; GISel-MOPS-O3-NEXT: strh w8, [x0, #8]
463 ; GISel-MOPS-O3-NEXT: ret
465 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10:
466 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
467 ; SDAG-WITHOUT-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
468 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101
469 ; SDAG-WITHOUT-MOPS-O2-NEXT: and x9, x1, #0xff
470 ; SDAG-WITHOUT-MOPS-O2-NEXT: mul x8, x9, x8
471 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0]
472 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8]
473 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
475 ; SDAG-MOPS-O2-LABEL: memset_10:
476 ; SDAG-MOPS-O2: // %bb.0: // %entry
477 ; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
478 ; SDAG-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101
479 ; SDAG-MOPS-O2-NEXT: and x9, x1, #0xff
480 ; SDAG-MOPS-O2-NEXT: mul x8, x9, x8
481 ; SDAG-MOPS-O2-NEXT: str x8, [x0]
482 ; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8]
483 ; SDAG-MOPS-O2-NEXT: ret
485 %value_trunc = trunc i32 %value to i8
486 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10, i1 false)
490 define void @memset_10_volatile(ptr %dst, i32 %value) {
491 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10_volatile:
492 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
493 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
494 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
495 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
496 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa
497 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
498 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
499 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
500 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
502 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10_volatile:
503 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
504 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
505 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
506 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
507 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa
508 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
509 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
510 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
512 ; GISel-MOPS-O0-LABEL: memset_10_volatile:
513 ; GISel-MOPS-O0: // %bb.0: // %entry
514 ; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa
515 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
516 ; GISel-MOPS-O0-NEXT: // implicit-def: $x9
517 ; GISel-MOPS-O0-NEXT: mov w9, w1
518 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
519 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
520 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
521 ; GISel-MOPS-O0-NEXT: ret
523 ; GISel-MOPS-O3-LABEL: memset_10_volatile:
524 ; GISel-MOPS-O3: // %bb.0: // %entry
525 ; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa
526 ; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1
527 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1
528 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1
529 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1
530 ; GISel-MOPS-O3-NEXT: ret
532 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10_volatile:
533 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
534 ; SDAG-WITHOUT-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
535 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101
536 ; SDAG-WITHOUT-MOPS-O2-NEXT: and x9, x1, #0xff
537 ; SDAG-WITHOUT-MOPS-O2-NEXT: mul x8, x9, x8
538 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0]
539 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8]
540 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
542 ; SDAG-MOPS-O2-LABEL: memset_10_volatile:
543 ; SDAG-MOPS-O2: // %bb.0: // %entry
544 ; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
545 ; SDAG-MOPS-O2-NEXT: mov x8, #72340172838076673 // =0x101010101010101
546 ; SDAG-MOPS-O2-NEXT: and x9, x1, #0xff
547 ; SDAG-MOPS-O2-NEXT: mul x8, x9, x8
548 ; SDAG-MOPS-O2-NEXT: str x8, [x0]
549 ; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8]
550 ; SDAG-MOPS-O2-NEXT: ret
552 %value_trunc = trunc i32 %value to i8
553 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10, i1 true)
557 define void @memset_10000(ptr %dst, i32 %value) {
558 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000:
559 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
560 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
561 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
562 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
563 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
564 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
565 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
566 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
567 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
569 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000:
570 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
571 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
572 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
573 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
574 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710
575 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
576 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
577 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
579 ; GISel-MOPS-O0-LABEL: memset_10000:
580 ; GISel-MOPS-O0: // %bb.0: // %entry
581 ; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
582 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
583 ; GISel-MOPS-O0-NEXT: // implicit-def: $x9
584 ; GISel-MOPS-O0-NEXT: mov w9, w1
585 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
586 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
587 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
588 ; GISel-MOPS-O0-NEXT: ret
590 ; GISel-MOPS-O3-LABEL: memset_10000:
591 ; GISel-MOPS-O3: // %bb.0: // %entry
592 ; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710
593 ; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1
594 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1
595 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1
596 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1
597 ; GISel-MOPS-O3-NEXT: ret
599 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000:
600 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
601 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
602 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
603 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
604 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710
605 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
606 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
607 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
609 ; SDAG-MOPS-O2-LABEL: memset_10000:
610 ; SDAG-MOPS-O2: // %bb.0: // %entry
611 ; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710
612 ; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
613 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, x1
614 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, x1
615 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, x1
616 ; SDAG-MOPS-O2-NEXT: ret
618 %value_trunc = trunc i32 %value to i8
619 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10000, i1 false)
623 define void @memset_10000_volatile(ptr %dst, i32 %value) {
624 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_10000_volatile:
625 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
626 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
627 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
628 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
629 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
630 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
631 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
632 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
633 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
635 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_10000_volatile:
636 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
637 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
638 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
639 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
640 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10000 // =0x2710
641 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
642 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
643 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
645 ; GISel-MOPS-O0-LABEL: memset_10000_volatile:
646 ; GISel-MOPS-O0: // %bb.0: // %entry
647 ; GISel-MOPS-O0-NEXT: mov w8, #10000 // =0x2710
648 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
649 ; GISel-MOPS-O0-NEXT: // implicit-def: $x9
650 ; GISel-MOPS-O0-NEXT: mov w9, w1
651 ; GISel-MOPS-O0-NEXT: setp [x0]!, x8!, x9
652 ; GISel-MOPS-O0-NEXT: setm [x0]!, x8!, x9
653 ; GISel-MOPS-O0-NEXT: sete [x0]!, x8!, x9
654 ; GISel-MOPS-O0-NEXT: ret
656 ; GISel-MOPS-O3-LABEL: memset_10000_volatile:
657 ; GISel-MOPS-O3: // %bb.0: // %entry
658 ; GISel-MOPS-O3-NEXT: mov w8, #10000 // =0x2710
659 ; GISel-MOPS-O3-NEXT: // kill: def $w1 killed $w1 def $x1
660 ; GISel-MOPS-O3-NEXT: setp [x0]!, x8!, x1
661 ; GISel-MOPS-O3-NEXT: setm [x0]!, x8!, x1
662 ; GISel-MOPS-O3-NEXT: sete [x0]!, x8!, x1
663 ; GISel-MOPS-O3-NEXT: ret
665 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_10000_volatile:
666 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
667 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
668 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
669 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
670 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #10000 // =0x2710
671 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
672 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
673 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
675 ; SDAG-MOPS-O2-LABEL: memset_10000_volatile:
676 ; SDAG-MOPS-O2: // %bb.0: // %entry
677 ; SDAG-MOPS-O2-NEXT: mov w8, #10000 // =0x2710
678 ; SDAG-MOPS-O2-NEXT: // kill: def $w1 killed $w1 def $x1
679 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x8!, x1
680 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x8!, x1
681 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x8!, x1
682 ; SDAG-MOPS-O2-NEXT: ret
684 %value_trunc = trunc i32 %value to i8
685 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 10000, i1 true)
689 define void @memset_size(ptr %dst, i64 %size, i32 %value) {
690 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_size:
691 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
692 ; GISel-WITHOUT-MOPS-O0-NEXT: sub sp, sp, #32
693 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
694 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 32
695 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
696 ; GISel-WITHOUT-MOPS-O0-NEXT: str x1, [sp, #8] // 8-byte Folded Spill
697 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, w2
698 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x2, [sp, #8] // 8-byte Folded Reload
699 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
700 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
701 ; GISel-WITHOUT-MOPS-O0-NEXT: add sp, sp, #32
702 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
704 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_size:
705 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
706 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
707 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
708 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
709 ; GISel-WITHOUT-MOPS-O3-NEXT: mov x3, x1
710 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, w2
711 ; GISel-WITHOUT-MOPS-O3-NEXT: mov x2, x3
712 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
713 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
714 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
716 ; GISel-MOPS-O0-LABEL: memset_size:
717 ; GISel-MOPS-O0: // %bb.0: // %entry
718 ; GISel-MOPS-O0-NEXT: // implicit-def: $x8
719 ; GISel-MOPS-O0-NEXT: mov w8, w2
720 ; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8
721 ; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8
722 ; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8
723 ; GISel-MOPS-O0-NEXT: ret
725 ; GISel-MOPS-O3-LABEL: memset_size:
726 ; GISel-MOPS-O3: // %bb.0: // %entry
727 ; GISel-MOPS-O3-NEXT: // kill: def $w2 killed $w2 def $x2
728 ; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, x2
729 ; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, x2
730 ; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, x2
731 ; GISel-MOPS-O3-NEXT: ret
733 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size:
734 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
735 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
736 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
737 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
738 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, x1
739 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, w2
740 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x8
741 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
742 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
743 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
745 ; SDAG-MOPS-O2-LABEL: memset_size:
746 ; SDAG-MOPS-O2: // %bb.0: // %entry
747 ; SDAG-MOPS-O2-NEXT: // kill: def $w2 killed $w2 def $x2
748 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, x2
749 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, x2
750 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, x2
751 ; SDAG-MOPS-O2-NEXT: ret
753 %value_trunc = trunc i32 %value to i8
754 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 %size, i1 false)
758 define void @memset_size_volatile(ptr %dst, i64 %size, i32 %value) {
759 ; GISel-WITHOUT-MOPS-O0-LABEL: memset_size_volatile:
760 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
761 ; GISel-WITHOUT-MOPS-O0-NEXT: sub sp, sp, #32
762 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
763 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 32
764 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
765 ; GISel-WITHOUT-MOPS-O0-NEXT: str x1, [sp, #8] // 8-byte Folded Spill
766 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w1, w2
767 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x2, [sp, #8] // 8-byte Folded Reload
768 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memset
769 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
770 ; GISel-WITHOUT-MOPS-O0-NEXT: add sp, sp, #32
771 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
773 ; GISel-WITHOUT-MOPS-O3-LABEL: memset_size_volatile:
774 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
775 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
776 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
777 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
778 ; GISel-WITHOUT-MOPS-O3-NEXT: mov x3, x1
779 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w1, w2
780 ; GISel-WITHOUT-MOPS-O3-NEXT: mov x2, x3
781 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memset
782 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
783 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
785 ; GISel-MOPS-O0-LABEL: memset_size_volatile:
786 ; GISel-MOPS-O0: // %bb.0: // %entry
787 ; GISel-MOPS-O0-NEXT: // implicit-def: $x8
788 ; GISel-MOPS-O0-NEXT: mov w8, w2
789 ; GISel-MOPS-O0-NEXT: setp [x0]!, x1!, x8
790 ; GISel-MOPS-O0-NEXT: setm [x0]!, x1!, x8
791 ; GISel-MOPS-O0-NEXT: sete [x0]!, x1!, x8
792 ; GISel-MOPS-O0-NEXT: ret
794 ; GISel-MOPS-O3-LABEL: memset_size_volatile:
795 ; GISel-MOPS-O3: // %bb.0: // %entry
796 ; GISel-MOPS-O3-NEXT: // kill: def $w2 killed $w2 def $x2
797 ; GISel-MOPS-O3-NEXT: setp [x0]!, x1!, x2
798 ; GISel-MOPS-O3-NEXT: setm [x0]!, x1!, x2
799 ; GISel-MOPS-O3-NEXT: sete [x0]!, x1!, x2
800 ; GISel-MOPS-O3-NEXT: ret
802 ; SDAG-WITHOUT-MOPS-O2-LABEL: memset_size_volatile:
803 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
804 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
805 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
806 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
807 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x8, x1
808 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w1, w2
809 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov x2, x8
810 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memset
811 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
812 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
814 ; SDAG-MOPS-O2-LABEL: memset_size_volatile:
815 ; SDAG-MOPS-O2: // %bb.0: // %entry
816 ; SDAG-MOPS-O2-NEXT: // kill: def $w2 killed $w2 def $x2
817 ; SDAG-MOPS-O2-NEXT: setp [x0]!, x1!, x2
818 ; SDAG-MOPS-O2-NEXT: setm [x0]!, x1!, x2
819 ; SDAG-MOPS-O2-NEXT: sete [x0]!, x1!, x2
820 ; SDAG-MOPS-O2-NEXT: ret
822 %value_trunc = trunc i32 %value to i8
823 call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 %value_trunc, i64 %size, i1 true)
828 define void @memcpy_0(ptr %dst, ptr %src, i32 %value) {
829 ; GISel-WITHOUT-MOPS-LABEL: memcpy_0:
830 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
831 ; GISel-WITHOUT-MOPS-NEXT: ret
833 ; GISel-MOPS-LABEL: memcpy_0:
834 ; GISel-MOPS: // %bb.0: // %entry
835 ; GISel-MOPS-NEXT: ret
837 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0:
838 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
839 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
841 ; SDAG-MOPS-O2-LABEL: memcpy_0:
842 ; SDAG-MOPS-O2: // %bb.0: // %entry
843 ; SDAG-MOPS-O2-NEXT: ret
845 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
849 define void @memcpy_0_volatile(ptr %dst, ptr %src, i32 %value) {
850 ; GISel-WITHOUT-MOPS-LABEL: memcpy_0_volatile:
851 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
852 ; GISel-WITHOUT-MOPS-NEXT: ret
854 ; GISel-MOPS-LABEL: memcpy_0_volatile:
855 ; GISel-MOPS: // %bb.0: // %entry
856 ; GISel-MOPS-NEXT: ret
858 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0_volatile:
859 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
860 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
862 ; SDAG-MOPS-O2-LABEL: memcpy_0_volatile:
863 ; SDAG-MOPS-O2: // %bb.0: // %entry
864 ; SDAG-MOPS-O2-NEXT: ret
866 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
870 define void @memcpy_10(ptr %dst, ptr %src, i32 %value) {
871 ; GISel-WITHOUT-MOPS-LABEL: memcpy_10:
872 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
873 ; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1]
874 ; GISel-WITHOUT-MOPS-NEXT: str x8, [x0]
875 ; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8]
876 ; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8]
877 ; GISel-WITHOUT-MOPS-NEXT: ret
879 ; GISel-MOPS-LABEL: memcpy_10:
880 ; GISel-MOPS: // %bb.0: // %entry
881 ; GISel-MOPS-NEXT: ldr x8, [x1]
882 ; GISel-MOPS-NEXT: str x8, [x0]
883 ; GISel-MOPS-NEXT: ldrh w8, [x1, #8]
884 ; GISel-MOPS-NEXT: strh w8, [x0, #8]
885 ; GISel-MOPS-NEXT: ret
887 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_10:
888 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
889 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8]
890 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1]
891 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8]
892 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0]
893 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
895 ; SDAG-MOPS-O2-LABEL: memcpy_10:
896 ; SDAG-MOPS-O2: // %bb.0: // %entry
897 ; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8]
898 ; SDAG-MOPS-O2-NEXT: ldr x9, [x1]
899 ; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8]
900 ; SDAG-MOPS-O2-NEXT: str x9, [x0]
901 ; SDAG-MOPS-O2-NEXT: ret
903 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
907 define void @memcpy_10_volatile(ptr %dst, ptr %src, i32 %value) {
908 ; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_10_volatile:
909 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
910 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
911 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
912 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
913 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa
914 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
915 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy
916 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
917 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
919 ; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_10_volatile:
920 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
921 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
922 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
923 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
924 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa
925 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy
926 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
927 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
929 ; GISel-MOPS-O0-LABEL: memcpy_10_volatile:
930 ; GISel-MOPS-O0: // %bb.0: // %entry
931 ; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa
932 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
933 ; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8!
934 ; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8!
935 ; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8!
936 ; GISel-MOPS-O0-NEXT: ret
938 ; GISel-MOPS-O3-LABEL: memcpy_10_volatile:
939 ; GISel-MOPS-O3: // %bb.0: // %entry
940 ; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa
941 ; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8!
942 ; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8!
943 ; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8!
944 ; GISel-MOPS-O3-NEXT: ret
946 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_10_volatile:
947 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
948 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1]
949 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8]
950 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8]
951 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0]
952 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
954 ; SDAG-MOPS-O2-LABEL: memcpy_10_volatile:
955 ; SDAG-MOPS-O2: // %bb.0: // %entry
956 ; SDAG-MOPS-O2-NEXT: ldr x8, [x1]
957 ; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8]
958 ; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8]
959 ; SDAG-MOPS-O2-NEXT: str x8, [x0]
960 ; SDAG-MOPS-O2-NEXT: ret
962 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
966 define void @memcpy_1000(ptr %dst, ptr %src, i32 %value) {
967 ; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_1000:
968 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
969 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
970 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
971 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
972 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
973 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
974 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy
975 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
976 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
978 ; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_1000:
979 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
980 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
981 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
982 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
983 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8
984 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy
985 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
986 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
988 ; GISel-MOPS-O0-LABEL: memcpy_1000:
989 ; GISel-MOPS-O0: // %bb.0: // %entry
990 ; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
991 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
992 ; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8!
993 ; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8!
994 ; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8!
995 ; GISel-MOPS-O0-NEXT: ret
997 ; GISel-MOPS-O3-LABEL: memcpy_1000:
998 ; GISel-MOPS-O3: // %bb.0: // %entry
999 ; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8
1000 ; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8!
1001 ; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8!
1002 ; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8!
1003 ; GISel-MOPS-O3-NEXT: ret
1005 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_1000:
1006 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1007 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1008 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1009 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1010 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8
1011 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy
1012 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1013 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1015 ; SDAG-MOPS-O2-LABEL: memcpy_1000:
1016 ; SDAG-MOPS-O2: // %bb.0: // %entry
1017 ; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8
1018 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8!
1019 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8!
1020 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8!
1021 ; SDAG-MOPS-O2-NEXT: ret
1023 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false)
1027 define void @memcpy_1000_volatile(ptr %dst, ptr %src, i32 %value) {
1028 ; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_1000_volatile:
1029 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1030 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1031 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
1032 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
1033 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1034 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
1035 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memcpy
1036 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1037 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1039 ; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_1000_volatile:
1040 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1041 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1042 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
1043 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
1044 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8
1045 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memcpy
1046 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1047 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1049 ; GISel-MOPS-O0-LABEL: memcpy_1000_volatile:
1050 ; GISel-MOPS-O0: // %bb.0: // %entry
1051 ; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1052 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
1053 ; GISel-MOPS-O0-NEXT: cpyfp [x0]!, [x1]!, x8!
1054 ; GISel-MOPS-O0-NEXT: cpyfm [x0]!, [x1]!, x8!
1055 ; GISel-MOPS-O0-NEXT: cpyfe [x0]!, [x1]!, x8!
1056 ; GISel-MOPS-O0-NEXT: ret
1058 ; GISel-MOPS-O3-LABEL: memcpy_1000_volatile:
1059 ; GISel-MOPS-O3: // %bb.0: // %entry
1060 ; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8
1061 ; GISel-MOPS-O3-NEXT: cpyfp [x0]!, [x1]!, x8!
1062 ; GISel-MOPS-O3-NEXT: cpyfm [x0]!, [x1]!, x8!
1063 ; GISel-MOPS-O3-NEXT: cpyfe [x0]!, [x1]!, x8!
1064 ; GISel-MOPS-O3-NEXT: ret
1066 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_1000_volatile:
1067 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1068 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1069 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1070 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1071 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8
1072 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy
1073 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1074 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1076 ; SDAG-MOPS-O2-LABEL: memcpy_1000_volatile:
1077 ; SDAG-MOPS-O2: // %bb.0: // %entry
1078 ; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8
1079 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8!
1080 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8!
1081 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8!
1082 ; SDAG-MOPS-O2-NEXT: ret
1084 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true)
1088 define void @memcpy_n(ptr %dst, ptr %src, i64 %size, i32 %value) {
1089 ; GISel-WITHOUT-MOPS-LABEL: memcpy_n:
1090 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1091 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1092 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
1093 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
1094 ; GISel-WITHOUT-MOPS-NEXT: bl memcpy
1095 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1096 ; GISel-WITHOUT-MOPS-NEXT: ret
1098 ; GISel-MOPS-LABEL: memcpy_n:
1099 ; GISel-MOPS: // %bb.0: // %entry
1100 ; GISel-MOPS-NEXT: cpyfp [x0]!, [x1]!, x2!
1101 ; GISel-MOPS-NEXT: cpyfm [x0]!, [x1]!, x2!
1102 ; GISel-MOPS-NEXT: cpyfe [x0]!, [x1]!, x2!
1103 ; GISel-MOPS-NEXT: ret
1105 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_n:
1106 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1107 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1108 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1109 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1110 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy
1111 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1112 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1114 ; SDAG-MOPS-O2-LABEL: memcpy_n:
1115 ; SDAG-MOPS-O2: // %bb.0: // %entry
1116 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x2!
1117 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x2!
1118 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x2!
1119 ; SDAG-MOPS-O2-NEXT: ret
1121 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false)
1125 define void @memcpy_n_volatile(ptr %dst, ptr %src, i64 %size, i32 %value) {
1126 ; GISel-WITHOUT-MOPS-LABEL: memcpy_n_volatile:
1127 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1128 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1129 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
1130 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
1131 ; GISel-WITHOUT-MOPS-NEXT: bl memcpy
1132 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1133 ; GISel-WITHOUT-MOPS-NEXT: ret
1135 ; GISel-MOPS-LABEL: memcpy_n_volatile:
1136 ; GISel-MOPS: // %bb.0: // %entry
1137 ; GISel-MOPS-NEXT: cpyfp [x0]!, [x1]!, x2!
1138 ; GISel-MOPS-NEXT: cpyfm [x0]!, [x1]!, x2!
1139 ; GISel-MOPS-NEXT: cpyfe [x0]!, [x1]!, x2!
1140 ; GISel-MOPS-NEXT: ret
1142 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_n_volatile:
1143 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1144 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1145 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1146 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1147 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memcpy
1148 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1149 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1151 ; SDAG-MOPS-O2-LABEL: memcpy_n_volatile:
1152 ; SDAG-MOPS-O2: // %bb.0: // %entry
1153 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x2!
1154 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x2!
1155 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x2!
1156 ; SDAG-MOPS-O2-NEXT: ret
1158 call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true)
1163 define void @memcpy_inline_0(ptr %dst, ptr %src, i32 %value) {
1164 ; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_0:
1165 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1166 ; GISel-WITHOUT-MOPS-NEXT: ret
1168 ; GISel-MOPS-LABEL: memcpy_inline_0:
1169 ; GISel-MOPS: // %bb.0: // %entry
1170 ; GISel-MOPS-NEXT: ret
1172 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_0:
1173 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1174 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1176 ; SDAG-MOPS-O2-LABEL: memcpy_inline_0:
1177 ; SDAG-MOPS-O2: // %bb.0: // %entry
1178 ; SDAG-MOPS-O2-NEXT: ret
1180 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
1184 define void @memcpy_inline_0_volatile(ptr %dst, ptr %src, i32 %value) {
1185 ; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_0_volatile:
1186 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1187 ; GISel-WITHOUT-MOPS-NEXT: ret
1189 ; GISel-MOPS-LABEL: memcpy_inline_0_volatile:
1190 ; GISel-MOPS: // %bb.0: // %entry
1191 ; GISel-MOPS-NEXT: ret
1193 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_0_volatile:
1194 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1195 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1197 ; SDAG-MOPS-O2-LABEL: memcpy_inline_0_volatile:
1198 ; SDAG-MOPS-O2: // %bb.0: // %entry
1199 ; SDAG-MOPS-O2-NEXT: ret
1201 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
1205 define void @memcpy_inline_10(ptr %dst, ptr %src, i32 %value) {
1206 ; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_10:
1207 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1208 ; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1]
1209 ; GISel-WITHOUT-MOPS-NEXT: str x8, [x0]
1210 ; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8]
1211 ; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8]
1212 ; GISel-WITHOUT-MOPS-NEXT: ret
1214 ; GISel-MOPS-LABEL: memcpy_inline_10:
1215 ; GISel-MOPS: // %bb.0: // %entry
1216 ; GISel-MOPS-NEXT: ldr x8, [x1]
1217 ; GISel-MOPS-NEXT: str x8, [x0]
1218 ; GISel-MOPS-NEXT: ldrh w8, [x1, #8]
1219 ; GISel-MOPS-NEXT: strh w8, [x0, #8]
1220 ; GISel-MOPS-NEXT: ret
1222 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_10:
1223 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1224 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8]
1225 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1]
1226 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8]
1227 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0]
1228 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1230 ; SDAG-MOPS-O2-LABEL: memcpy_inline_10:
1231 ; SDAG-MOPS-O2: // %bb.0: // %entry
1232 ; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8]
1233 ; SDAG-MOPS-O2-NEXT: ldr x9, [x1]
1234 ; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8]
1235 ; SDAG-MOPS-O2-NEXT: str x9, [x0]
1236 ; SDAG-MOPS-O2-NEXT: ret
1238 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
1242 define void @memcpy_inline_10_volatile(ptr %dst, ptr %src, i32 %value) {
1243 ; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_10_volatile:
1244 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1245 ; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1]
1246 ; GISel-WITHOUT-MOPS-NEXT: str x8, [x0]
1247 ; GISel-WITHOUT-MOPS-NEXT: ldrh w8, [x1, #8]
1248 ; GISel-WITHOUT-MOPS-NEXT: strh w8, [x0, #8]
1249 ; GISel-WITHOUT-MOPS-NEXT: ret
1251 ; GISel-MOPS-LABEL: memcpy_inline_10_volatile:
1252 ; GISel-MOPS: // %bb.0: // %entry
1253 ; GISel-MOPS-NEXT: ldr x8, [x1]
1254 ; GISel-MOPS-NEXT: str x8, [x0]
1255 ; GISel-MOPS-NEXT: ldrh w8, [x1, #8]
1256 ; GISel-MOPS-NEXT: strh w8, [x0, #8]
1257 ; GISel-MOPS-NEXT: ret
1259 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_10_volatile:
1260 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1261 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1]
1262 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8]
1263 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8]
1264 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0]
1265 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1267 ; SDAG-MOPS-O2-LABEL: memcpy_inline_10_volatile:
1268 ; SDAG-MOPS-O2: // %bb.0: // %entry
1269 ; SDAG-MOPS-O2-NEXT: ldr x8, [x1]
1270 ; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8]
1271 ; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8]
1272 ; SDAG-MOPS-O2-NEXT: str x8, [x0]
1273 ; SDAG-MOPS-O2-NEXT: ret
1275 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
1279 define void @memcpy_inline_300(ptr %dst, ptr %src, i32 %value) {
1280 ; GISel-WITHOUT-MOPS-O0-LABEL: memcpy_inline_300:
1281 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1282 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1]
1283 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0]
1284 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #16]
1285 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #16]
1286 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #32]
1287 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #32]
1288 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #48]
1289 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #48]
1290 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #64]
1291 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #64]
1292 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #80]
1293 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #80]
1294 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #96]
1295 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #96]
1296 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #112]
1297 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #112]
1298 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #128]
1299 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #128]
1300 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #144]
1301 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #144]
1302 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #160]
1303 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #160]
1304 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #176]
1305 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #176]
1306 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #192]
1307 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #192]
1308 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #208]
1309 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #208]
1310 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #224]
1311 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #224]
1312 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #240]
1313 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #240]
1314 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #256]
1315 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #256]
1316 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x1, #272]
1317 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x0, #272]
1318 ; GISel-WITHOUT-MOPS-O0-NEXT: add x8, x1, #284
1319 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr q0, [x8]
1320 ; GISel-WITHOUT-MOPS-O0-NEXT: add x8, x0, #284
1321 ; GISel-WITHOUT-MOPS-O0-NEXT: str q0, [x8]
1322 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1324 ; GISel-WITHOUT-MOPS-O3-LABEL: memcpy_inline_300:
1325 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1326 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1]
1327 ; GISel-WITHOUT-MOPS-O3-NEXT: add x8, x1, #284
1328 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0]
1329 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #16]
1330 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #16]
1331 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #32]
1332 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #32]
1333 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #48]
1334 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #48]
1335 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #64]
1336 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #64]
1337 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #80]
1338 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #80]
1339 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #96]
1340 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #96]
1341 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #112]
1342 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #112]
1343 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #128]
1344 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #128]
1345 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #144]
1346 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #144]
1347 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #160]
1348 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #160]
1349 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #176]
1350 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #176]
1351 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #192]
1352 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #192]
1353 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #208]
1354 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #208]
1355 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #224]
1356 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #224]
1357 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #240]
1358 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #240]
1359 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #256]
1360 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #256]
1361 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x1, #272]
1362 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x0, #272]
1363 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr q0, [x8]
1364 ; GISel-WITHOUT-MOPS-O3-NEXT: add x8, x0, #284
1365 ; GISel-WITHOUT-MOPS-O3-NEXT: str q0, [x8]
1366 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1368 ; GISel-MOPS-O0-LABEL: memcpy_inline_300:
1369 ; GISel-MOPS-O0: // %bb.0: // %entry
1370 ; GISel-MOPS-O0-NEXT: ldr q0, [x1]
1371 ; GISel-MOPS-O0-NEXT: str q0, [x0]
1372 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #16]
1373 ; GISel-MOPS-O0-NEXT: str q0, [x0, #16]
1374 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #32]
1375 ; GISel-MOPS-O0-NEXT: str q0, [x0, #32]
1376 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #48]
1377 ; GISel-MOPS-O0-NEXT: str q0, [x0, #48]
1378 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #64]
1379 ; GISel-MOPS-O0-NEXT: str q0, [x0, #64]
1380 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #80]
1381 ; GISel-MOPS-O0-NEXT: str q0, [x0, #80]
1382 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #96]
1383 ; GISel-MOPS-O0-NEXT: str q0, [x0, #96]
1384 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #112]
1385 ; GISel-MOPS-O0-NEXT: str q0, [x0, #112]
1386 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #128]
1387 ; GISel-MOPS-O0-NEXT: str q0, [x0, #128]
1388 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #144]
1389 ; GISel-MOPS-O0-NEXT: str q0, [x0, #144]
1390 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #160]
1391 ; GISel-MOPS-O0-NEXT: str q0, [x0, #160]
1392 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #176]
1393 ; GISel-MOPS-O0-NEXT: str q0, [x0, #176]
1394 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #192]
1395 ; GISel-MOPS-O0-NEXT: str q0, [x0, #192]
1396 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #208]
1397 ; GISel-MOPS-O0-NEXT: str q0, [x0, #208]
1398 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #224]
1399 ; GISel-MOPS-O0-NEXT: str q0, [x0, #224]
1400 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #240]
1401 ; GISel-MOPS-O0-NEXT: str q0, [x0, #240]
1402 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #256]
1403 ; GISel-MOPS-O0-NEXT: str q0, [x0, #256]
1404 ; GISel-MOPS-O0-NEXT: ldr q0, [x1, #272]
1405 ; GISel-MOPS-O0-NEXT: str q0, [x0, #272]
1406 ; GISel-MOPS-O0-NEXT: add x8, x1, #284
1407 ; GISel-MOPS-O0-NEXT: ldr q0, [x8]
1408 ; GISel-MOPS-O0-NEXT: add x8, x0, #284
1409 ; GISel-MOPS-O0-NEXT: str q0, [x8]
1410 ; GISel-MOPS-O0-NEXT: ret
1412 ; GISel-MOPS-O3-LABEL: memcpy_inline_300:
1413 ; GISel-MOPS-O3: // %bb.0: // %entry
1414 ; GISel-MOPS-O3-NEXT: ldr q0, [x1]
1415 ; GISel-MOPS-O3-NEXT: add x8, x1, #284
1416 ; GISel-MOPS-O3-NEXT: str q0, [x0]
1417 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #16]
1418 ; GISel-MOPS-O3-NEXT: str q0, [x0, #16]
1419 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #32]
1420 ; GISel-MOPS-O3-NEXT: str q0, [x0, #32]
1421 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #48]
1422 ; GISel-MOPS-O3-NEXT: str q0, [x0, #48]
1423 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #64]
1424 ; GISel-MOPS-O3-NEXT: str q0, [x0, #64]
1425 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #80]
1426 ; GISel-MOPS-O3-NEXT: str q0, [x0, #80]
1427 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #96]
1428 ; GISel-MOPS-O3-NEXT: str q0, [x0, #96]
1429 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #112]
1430 ; GISel-MOPS-O3-NEXT: str q0, [x0, #112]
1431 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #128]
1432 ; GISel-MOPS-O3-NEXT: str q0, [x0, #128]
1433 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #144]
1434 ; GISel-MOPS-O3-NEXT: str q0, [x0, #144]
1435 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #160]
1436 ; GISel-MOPS-O3-NEXT: str q0, [x0, #160]
1437 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #176]
1438 ; GISel-MOPS-O3-NEXT: str q0, [x0, #176]
1439 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #192]
1440 ; GISel-MOPS-O3-NEXT: str q0, [x0, #192]
1441 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #208]
1442 ; GISel-MOPS-O3-NEXT: str q0, [x0, #208]
1443 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #224]
1444 ; GISel-MOPS-O3-NEXT: str q0, [x0, #224]
1445 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #240]
1446 ; GISel-MOPS-O3-NEXT: str q0, [x0, #240]
1447 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #256]
1448 ; GISel-MOPS-O3-NEXT: str q0, [x0, #256]
1449 ; GISel-MOPS-O3-NEXT: ldr q0, [x1, #272]
1450 ; GISel-MOPS-O3-NEXT: str q0, [x0, #272]
1451 ; GISel-MOPS-O3-NEXT: ldr q0, [x8]
1452 ; GISel-MOPS-O3-NEXT: add x8, x0, #284
1453 ; GISel-MOPS-O3-NEXT: str q0, [x8]
1454 ; GISel-MOPS-O3-NEXT: ret
1456 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_300:
1457 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1458 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #16]
1459 ; SDAG-WITHOUT-MOPS-O2-NEXT: add x8, x1, #284
1460 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1]
1461 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #16]
1462 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0]
1463 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #80]
1464 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #48]
1465 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #80]
1466 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #48]
1467 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #144]
1468 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #112]
1469 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #144]
1470 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #112]
1471 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q1, q0, [x1, #208]
1472 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q2, q3, [x1, #176]
1473 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q1, q0, [x0, #208]
1474 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q2, q3, [x0, #176]
1475 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldp q3, q1, [x1, #256]
1476 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x8]
1477 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #240]
1478 ; SDAG-WITHOUT-MOPS-O2-NEXT: add x8, x0, #284
1479 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x8]
1480 ; SDAG-WITHOUT-MOPS-O2-NEXT: stp q3, q1, [x0, #256]
1481 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #240]
1482 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1484 ; SDAG-MOPS-O2-LABEL: memcpy_inline_300:
1485 ; SDAG-MOPS-O2: // %bb.0: // %entry
1486 ; SDAG-MOPS-O2-NEXT: mov w8, #300 // =0x12c
1487 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8!
1488 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8!
1489 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8!
1490 ; SDAG-MOPS-O2-NEXT: ret
1492 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 false)
1496 define void @memcpy_inline_300_volatile(ptr %dst, ptr %src, i32 %value) {
1497 ; GISel-WITHOUT-MOPS-LABEL: memcpy_inline_300_volatile:
1498 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1499 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1]
1500 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0]
1501 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #16]
1502 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #16]
1503 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #32]
1504 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #32]
1505 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #48]
1506 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #48]
1507 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #64]
1508 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #64]
1509 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #80]
1510 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #80]
1511 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #96]
1512 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #96]
1513 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #112]
1514 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #112]
1515 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #128]
1516 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #128]
1517 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #144]
1518 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #144]
1519 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #160]
1520 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #160]
1521 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #176]
1522 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #176]
1523 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #192]
1524 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #192]
1525 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #208]
1526 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #208]
1527 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #224]
1528 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #224]
1529 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #240]
1530 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #240]
1531 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #256]
1532 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #256]
1533 ; GISel-WITHOUT-MOPS-NEXT: ldr q0, [x1, #272]
1534 ; GISel-WITHOUT-MOPS-NEXT: str q0, [x0, #272]
1535 ; GISel-WITHOUT-MOPS-NEXT: ldr x8, [x1, #288]
1536 ; GISel-WITHOUT-MOPS-NEXT: str x8, [x0, #288]
1537 ; GISel-WITHOUT-MOPS-NEXT: ldr w8, [x1, #296]
1538 ; GISel-WITHOUT-MOPS-NEXT: str w8, [x0, #296]
1539 ; GISel-WITHOUT-MOPS-NEXT: ret
1541 ; GISel-MOPS-LABEL: memcpy_inline_300_volatile:
1542 ; GISel-MOPS: // %bb.0: // %entry
1543 ; GISel-MOPS-NEXT: ldr q0, [x1]
1544 ; GISel-MOPS-NEXT: str q0, [x0]
1545 ; GISel-MOPS-NEXT: ldr q0, [x1, #16]
1546 ; GISel-MOPS-NEXT: str q0, [x0, #16]
1547 ; GISel-MOPS-NEXT: ldr q0, [x1, #32]
1548 ; GISel-MOPS-NEXT: str q0, [x0, #32]
1549 ; GISel-MOPS-NEXT: ldr q0, [x1, #48]
1550 ; GISel-MOPS-NEXT: str q0, [x0, #48]
1551 ; GISel-MOPS-NEXT: ldr q0, [x1, #64]
1552 ; GISel-MOPS-NEXT: str q0, [x0, #64]
1553 ; GISel-MOPS-NEXT: ldr q0, [x1, #80]
1554 ; GISel-MOPS-NEXT: str q0, [x0, #80]
1555 ; GISel-MOPS-NEXT: ldr q0, [x1, #96]
1556 ; GISel-MOPS-NEXT: str q0, [x0, #96]
1557 ; GISel-MOPS-NEXT: ldr q0, [x1, #112]
1558 ; GISel-MOPS-NEXT: str q0, [x0, #112]
1559 ; GISel-MOPS-NEXT: ldr q0, [x1, #128]
1560 ; GISel-MOPS-NEXT: str q0, [x0, #128]
1561 ; GISel-MOPS-NEXT: ldr q0, [x1, #144]
1562 ; GISel-MOPS-NEXT: str q0, [x0, #144]
1563 ; GISel-MOPS-NEXT: ldr q0, [x1, #160]
1564 ; GISel-MOPS-NEXT: str q0, [x0, #160]
1565 ; GISel-MOPS-NEXT: ldr q0, [x1, #176]
1566 ; GISel-MOPS-NEXT: str q0, [x0, #176]
1567 ; GISel-MOPS-NEXT: ldr q0, [x1, #192]
1568 ; GISel-MOPS-NEXT: str q0, [x0, #192]
1569 ; GISel-MOPS-NEXT: ldr q0, [x1, #208]
1570 ; GISel-MOPS-NEXT: str q0, [x0, #208]
1571 ; GISel-MOPS-NEXT: ldr q0, [x1, #224]
1572 ; GISel-MOPS-NEXT: str q0, [x0, #224]
1573 ; GISel-MOPS-NEXT: ldr q0, [x1, #240]
1574 ; GISel-MOPS-NEXT: str q0, [x0, #240]
1575 ; GISel-MOPS-NEXT: ldr q0, [x1, #256]
1576 ; GISel-MOPS-NEXT: str q0, [x0, #256]
1577 ; GISel-MOPS-NEXT: ldr q0, [x1, #272]
1578 ; GISel-MOPS-NEXT: str q0, [x0, #272]
1579 ; GISel-MOPS-NEXT: ldr x8, [x1, #288]
1580 ; GISel-MOPS-NEXT: str x8, [x0, #288]
1581 ; GISel-MOPS-NEXT: ldr w8, [x1, #296]
1582 ; GISel-MOPS-NEXT: str w8, [x0, #296]
1583 ; GISel-MOPS-NEXT: ret
1585 ; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_300_volatile:
1586 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1587 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1]
1588 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #16]
1589 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #32]
1590 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #48]
1591 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #48]
1592 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #32]
1593 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #16]
1594 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0]
1595 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #64]
1596 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #80]
1597 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #96]
1598 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #112]
1599 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #112]
1600 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #96]
1601 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #80]
1602 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #64]
1603 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #128]
1604 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #144]
1605 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #160]
1606 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #176]
1607 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #176]
1608 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #160]
1609 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #144]
1610 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #128]
1611 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #192]
1612 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #208]
1613 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q2, [x1, #224]
1614 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q3, [x1, #240]
1615 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q3, [x0, #240]
1616 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q2, [x0, #224]
1617 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #208]
1618 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #192]
1619 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q0, [x1, #256]
1620 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr q1, [x1, #272]
1621 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1, #288]
1622 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr w9, [x1, #296]
1623 ; SDAG-WITHOUT-MOPS-O2-NEXT: str w9, [x0, #296]
1624 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0, #288]
1625 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q1, [x0, #272]
1626 ; SDAG-WITHOUT-MOPS-O2-NEXT: str q0, [x0, #256]
1627 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1629 ; SDAG-MOPS-O2-LABEL: memcpy_inline_300_volatile:
1630 ; SDAG-MOPS-O2: // %bb.0: // %entry
1631 ; SDAG-MOPS-O2-NEXT: mov w8, #300 // =0x12c
1632 ; SDAG-MOPS-O2-NEXT: cpyfp [x0]!, [x1]!, x8!
1633 ; SDAG-MOPS-O2-NEXT: cpyfm [x0]!, [x1]!, x8!
1634 ; SDAG-MOPS-O2-NEXT: cpyfe [x0]!, [x1]!, x8!
1635 ; SDAG-MOPS-O2-NEXT: ret
1637 call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 true)
1641 define void @memmove_0(ptr %dst, ptr %src, i32 %value) {
1642 ; GISel-WITHOUT-MOPS-LABEL: memmove_0:
1643 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1644 ; GISel-WITHOUT-MOPS-NEXT: ret
1646 ; GISel-MOPS-LABEL: memmove_0:
1647 ; GISel-MOPS: // %bb.0: // %entry
1648 ; GISel-MOPS-NEXT: ret
1650 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0:
1651 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1652 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1654 ; SDAG-MOPS-O2-LABEL: memmove_0:
1655 ; SDAG-MOPS-O2: // %bb.0: // %entry
1656 ; SDAG-MOPS-O2-NEXT: ret
1658 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
1662 define void @memmove_0_volatile(ptr %dst, ptr %src, i32 %value) {
1663 ; GISel-WITHOUT-MOPS-LABEL: memmove_0_volatile:
1664 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1665 ; GISel-WITHOUT-MOPS-NEXT: ret
1667 ; GISel-MOPS-LABEL: memmove_0_volatile:
1668 ; GISel-MOPS: // %bb.0: // %entry
1669 ; GISel-MOPS-NEXT: ret
1671 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0_volatile:
1672 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1673 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1675 ; SDAG-MOPS-O2-LABEL: memmove_0_volatile:
1676 ; SDAG-MOPS-O2: // %bb.0: // %entry
1677 ; SDAG-MOPS-O2-NEXT: ret
1679 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
1683 define void @memmove_10(ptr %dst, ptr %src, i32 %value) {
1684 ; GISel-WITHOUT-MOPS-O0-LABEL: memmove_10:
1685 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1686 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x9, [x1]
1687 ; GISel-WITHOUT-MOPS-O0-NEXT: ldrh w8, [x1, #8]
1688 ; GISel-WITHOUT-MOPS-O0-NEXT: str x9, [x0]
1689 ; GISel-WITHOUT-MOPS-O0-NEXT: strh w8, [x0, #8]
1690 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1692 ; GISel-WITHOUT-MOPS-O3-LABEL: memmove_10:
1693 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1694 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x8, [x1]
1695 ; GISel-WITHOUT-MOPS-O3-NEXT: ldrh w9, [x1, #8]
1696 ; GISel-WITHOUT-MOPS-O3-NEXT: str x8, [x0]
1697 ; GISel-WITHOUT-MOPS-O3-NEXT: strh w9, [x0, #8]
1698 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1700 ; GISel-MOPS-O0-LABEL: memmove_10:
1701 ; GISel-MOPS-O0: // %bb.0: // %entry
1702 ; GISel-MOPS-O0-NEXT: ldr x9, [x1]
1703 ; GISel-MOPS-O0-NEXT: ldrh w8, [x1, #8]
1704 ; GISel-MOPS-O0-NEXT: str x9, [x0]
1705 ; GISel-MOPS-O0-NEXT: strh w8, [x0, #8]
1706 ; GISel-MOPS-O0-NEXT: ret
1708 ; GISel-MOPS-O3-LABEL: memmove_10:
1709 ; GISel-MOPS-O3: // %bb.0: // %entry
1710 ; GISel-MOPS-O3-NEXT: ldr x8, [x1]
1711 ; GISel-MOPS-O3-NEXT: ldrh w9, [x1, #8]
1712 ; GISel-MOPS-O3-NEXT: str x8, [x0]
1713 ; GISel-MOPS-O3-NEXT: strh w9, [x0, #8]
1714 ; GISel-MOPS-O3-NEXT: ret
1716 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_10:
1717 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1718 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w8, [x1, #8]
1719 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x9, [x1]
1720 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w8, [x0, #8]
1721 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x9, [x0]
1722 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1724 ; SDAG-MOPS-O2-LABEL: memmove_10:
1725 ; SDAG-MOPS-O2: // %bb.0: // %entry
1726 ; SDAG-MOPS-O2-NEXT: ldrh w8, [x1, #8]
1727 ; SDAG-MOPS-O2-NEXT: ldr x9, [x1]
1728 ; SDAG-MOPS-O2-NEXT: strh w8, [x0, #8]
1729 ; SDAG-MOPS-O2-NEXT: str x9, [x0]
1730 ; SDAG-MOPS-O2-NEXT: ret
1732 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
1736 define void @memmove_10_volatile(ptr %dst, ptr %src, i32 %value) {
1737 ; GISel-WITHOUT-MOPS-O0-LABEL: memmove_10_volatile:
1738 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1739 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1740 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
1741 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
1742 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #10 // =0xa
1743 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
1744 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove
1745 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1746 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1748 ; GISel-WITHOUT-MOPS-O3-LABEL: memmove_10_volatile:
1749 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1750 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1751 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
1752 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
1753 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #10 // =0xa
1754 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove
1755 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1756 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1758 ; GISel-MOPS-O0-LABEL: memmove_10_volatile:
1759 ; GISel-MOPS-O0: // %bb.0: // %entry
1760 ; GISel-MOPS-O0-NEXT: mov w8, #10 // =0xa
1761 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
1762 ; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8!
1763 ; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8!
1764 ; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8!
1765 ; GISel-MOPS-O0-NEXT: ret
1767 ; GISel-MOPS-O3-LABEL: memmove_10_volatile:
1768 ; GISel-MOPS-O3: // %bb.0: // %entry
1769 ; GISel-MOPS-O3-NEXT: mov w8, #10 // =0xa
1770 ; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8!
1771 ; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8!
1772 ; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8!
1773 ; GISel-MOPS-O3-NEXT: ret
1775 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_10_volatile:
1776 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1777 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x8, [x1]
1778 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldrh w9, [x1, #8]
1779 ; SDAG-WITHOUT-MOPS-O2-NEXT: strh w9, [x0, #8]
1780 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x8, [x0]
1781 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1783 ; SDAG-MOPS-O2-LABEL: memmove_10_volatile:
1784 ; SDAG-MOPS-O2: // %bb.0: // %entry
1785 ; SDAG-MOPS-O2-NEXT: ldr x8, [x1]
1786 ; SDAG-MOPS-O2-NEXT: ldrh w9, [x1, #8]
1787 ; SDAG-MOPS-O2-NEXT: strh w9, [x0, #8]
1788 ; SDAG-MOPS-O2-NEXT: str x8, [x0]
1789 ; SDAG-MOPS-O2-NEXT: ret
1791 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
1795 define void @memmove_1000(ptr %dst, ptr %src, i32 %value) {
1796 ; GISel-WITHOUT-MOPS-O0-LABEL: memmove_1000:
1797 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1798 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1799 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
1800 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
1801 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1802 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
1803 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove
1804 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1805 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1807 ; GISel-WITHOUT-MOPS-O3-LABEL: memmove_1000:
1808 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1809 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1810 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
1811 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
1812 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8
1813 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove
1814 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1815 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1817 ; GISel-MOPS-O0-LABEL: memmove_1000:
1818 ; GISel-MOPS-O0: // %bb.0: // %entry
1819 ; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1820 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
1821 ; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8!
1822 ; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8!
1823 ; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8!
1824 ; GISel-MOPS-O0-NEXT: ret
1826 ; GISel-MOPS-O3-LABEL: memmove_1000:
1827 ; GISel-MOPS-O3: // %bb.0: // %entry
1828 ; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8
1829 ; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8!
1830 ; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8!
1831 ; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8!
1832 ; GISel-MOPS-O3-NEXT: ret
1834 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_1000:
1835 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1836 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1837 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1838 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1839 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8
1840 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove
1841 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1842 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1844 ; SDAG-MOPS-O2-LABEL: memmove_1000:
1845 ; SDAG-MOPS-O2: // %bb.0: // %entry
1846 ; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8
1847 ; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x8!
1848 ; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x8!
1849 ; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x8!
1850 ; SDAG-MOPS-O2-NEXT: ret
1852 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false)
1856 define void @memmove_1000_volatile(ptr %dst, ptr %src, i32 %value) {
1857 ; GISel-WITHOUT-MOPS-O0-LABEL: memmove_1000_volatile:
1858 ; GISel-WITHOUT-MOPS-O0: // %bb.0: // %entry
1859 ; GISel-WITHOUT-MOPS-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1860 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_def_cfa_offset 16
1861 ; GISel-WITHOUT-MOPS-O0-NEXT: .cfi_offset w30, -16
1862 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1863 ; GISel-WITHOUT-MOPS-O0-NEXT: mov w2, w8
1864 ; GISel-WITHOUT-MOPS-O0-NEXT: bl memmove
1865 ; GISel-WITHOUT-MOPS-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1866 ; GISel-WITHOUT-MOPS-O0-NEXT: ret
1868 ; GISel-WITHOUT-MOPS-O3-LABEL: memmove_1000_volatile:
1869 ; GISel-WITHOUT-MOPS-O3: // %bb.0: // %entry
1870 ; GISel-WITHOUT-MOPS-O3-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1871 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_def_cfa_offset 16
1872 ; GISel-WITHOUT-MOPS-O3-NEXT: .cfi_offset w30, -16
1873 ; GISel-WITHOUT-MOPS-O3-NEXT: mov w2, #1000 // =0x3e8
1874 ; GISel-WITHOUT-MOPS-O3-NEXT: bl memmove
1875 ; GISel-WITHOUT-MOPS-O3-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1876 ; GISel-WITHOUT-MOPS-O3-NEXT: ret
1878 ; GISel-MOPS-O0-LABEL: memmove_1000_volatile:
1879 ; GISel-MOPS-O0: // %bb.0: // %entry
1880 ; GISel-MOPS-O0-NEXT: mov w8, #1000 // =0x3e8
1881 ; GISel-MOPS-O0-NEXT: // kill: def $x8 killed $w8
1882 ; GISel-MOPS-O0-NEXT: cpyp [x0]!, [x1]!, x8!
1883 ; GISel-MOPS-O0-NEXT: cpym [x0]!, [x1]!, x8!
1884 ; GISel-MOPS-O0-NEXT: cpye [x0]!, [x1]!, x8!
1885 ; GISel-MOPS-O0-NEXT: ret
1887 ; GISel-MOPS-O3-LABEL: memmove_1000_volatile:
1888 ; GISel-MOPS-O3: // %bb.0: // %entry
1889 ; GISel-MOPS-O3-NEXT: mov w8, #1000 // =0x3e8
1890 ; GISel-MOPS-O3-NEXT: cpyp [x0]!, [x1]!, x8!
1891 ; GISel-MOPS-O3-NEXT: cpym [x0]!, [x1]!, x8!
1892 ; GISel-MOPS-O3-NEXT: cpye [x0]!, [x1]!, x8!
1893 ; GISel-MOPS-O3-NEXT: ret
1895 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_1000_volatile:
1896 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1897 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1898 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1899 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1900 ; SDAG-WITHOUT-MOPS-O2-NEXT: mov w2, #1000 // =0x3e8
1901 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove
1902 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1903 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1905 ; SDAG-MOPS-O2-LABEL: memmove_1000_volatile:
1906 ; SDAG-MOPS-O2: // %bb.0: // %entry
1907 ; SDAG-MOPS-O2-NEXT: mov w8, #1000 // =0x3e8
1908 ; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x8!
1909 ; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x8!
1910 ; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x8!
1911 ; SDAG-MOPS-O2-NEXT: ret
1913 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true)
1917 define void @memmove_n(ptr %dst, ptr %src, i64 %size, i32 %value) {
1918 ; GISel-WITHOUT-MOPS-LABEL: memmove_n:
1919 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1920 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1921 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
1922 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
1923 ; GISel-WITHOUT-MOPS-NEXT: bl memmove
1924 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1925 ; GISel-WITHOUT-MOPS-NEXT: ret
1927 ; GISel-MOPS-LABEL: memmove_n:
1928 ; GISel-MOPS: // %bb.0: // %entry
1929 ; GISel-MOPS-NEXT: cpyp [x0]!, [x1]!, x2!
1930 ; GISel-MOPS-NEXT: cpym [x0]!, [x1]!, x2!
1931 ; GISel-MOPS-NEXT: cpye [x0]!, [x1]!, x2!
1932 ; GISel-MOPS-NEXT: ret
1934 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_n:
1935 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1936 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1937 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1938 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1939 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove
1940 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1941 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1943 ; SDAG-MOPS-O2-LABEL: memmove_n:
1944 ; SDAG-MOPS-O2: // %bb.0: // %entry
1945 ; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x2!
1946 ; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x2!
1947 ; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x2!
1948 ; SDAG-MOPS-O2-NEXT: ret
1950 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false)
1954 define void @memmove_n_volatile(ptr %dst, ptr %src, i64 %size, i32 %value) {
1955 ; GISel-WITHOUT-MOPS-LABEL: memmove_n_volatile:
1956 ; GISel-WITHOUT-MOPS: // %bb.0: // %entry
1957 ; GISel-WITHOUT-MOPS-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1958 ; GISel-WITHOUT-MOPS-NEXT: .cfi_def_cfa_offset 16
1959 ; GISel-WITHOUT-MOPS-NEXT: .cfi_offset w30, -16
1960 ; GISel-WITHOUT-MOPS-NEXT: bl memmove
1961 ; GISel-WITHOUT-MOPS-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1962 ; GISel-WITHOUT-MOPS-NEXT: ret
1964 ; GISel-MOPS-LABEL: memmove_n_volatile:
1965 ; GISel-MOPS: // %bb.0: // %entry
1966 ; GISel-MOPS-NEXT: cpyp [x0]!, [x1]!, x2!
1967 ; GISel-MOPS-NEXT: cpym [x0]!, [x1]!, x2!
1968 ; GISel-MOPS-NEXT: cpye [x0]!, [x1]!, x2!
1969 ; GISel-MOPS-NEXT: ret
1971 ; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_n_volatile:
1972 ; SDAG-WITHOUT-MOPS-O2: // %bb.0: // %entry
1973 ; SDAG-WITHOUT-MOPS-O2-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1974 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_def_cfa_offset 16
1975 ; SDAG-WITHOUT-MOPS-O2-NEXT: .cfi_offset w30, -16
1976 ; SDAG-WITHOUT-MOPS-O2-NEXT: bl memmove
1977 ; SDAG-WITHOUT-MOPS-O2-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
1978 ; SDAG-WITHOUT-MOPS-O2-NEXT: ret
1980 ; SDAG-MOPS-O2-LABEL: memmove_n_volatile:
1981 ; SDAG-MOPS-O2: // %bb.0: // %entry
1982 ; SDAG-MOPS-O2-NEXT: cpyp [x0]!, [x1]!, x2!
1983 ; SDAG-MOPS-O2-NEXT: cpym [x0]!, [x1]!, x2!
1984 ; SDAG-MOPS-O2-NEXT: cpye [x0]!, [x1]!, x2!
1985 ; SDAG-MOPS-O2-NEXT: ret
1987 call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true)