xref: /llvm-project/llvm/test/CodeGen/AArch64/aarch64-mops.ll (revision db158c7c830807caeeb0691739c41f1d522029e9)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
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
9
10declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)
11
12declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
13
14declare void @llvm.memcpy.inline.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
15
16declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg)
17
18define 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
22;
23; GISel-MOPS-LABEL: memset_0_zeroval:
24; GISel-MOPS:       // %bb.0: // %entry
25; GISel-MOPS-NEXT:    ret
26;
27; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_zeroval:
28; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
29; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
30;
31; SDAG-MOPS-O2-LABEL: memset_0_zeroval:
32; SDAG-MOPS-O2:       // %bb.0: // %entry
33; SDAG-MOPS-O2-NEXT:    ret
34entry:
35  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 false)
36  ret void
37}
38
39define 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
43;
44; GISel-MOPS-LABEL: memset_0_zeroval_volatile:
45; GISel-MOPS:       // %bb.0: // %entry
46; GISel-MOPS-NEXT:    ret
47;
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
51;
52; SDAG-MOPS-O2-LABEL: memset_0_zeroval_volatile:
53; SDAG-MOPS-O2:       // %bb.0: // %entry
54; SDAG-MOPS-O2-NEXT:    ret
55entry:
56  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 0, i1 true)
57  ret void
58}
59
60define 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
66;
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
72;
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
78;
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
84entry:
85  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 false)
86  ret void
87}
88
89define 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
101;
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
112;
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
122;
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
130;
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
136;
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
142entry:
143  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10, i1 true)
144  ret void
145}
146
147define 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
159;
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
170;
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
180;
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
188;
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
199;
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
207entry:
208  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 false)
209  ret void
210}
211
212define 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
224;
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
235;
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
245;
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
253;
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
264;
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
272entry:
273  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 10000, i1 true)
274  ret void
275}
276
277define 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
288;
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
296;
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
303;
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
314;
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
321entry:
322  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 false)
323  ret void
324}
325
326define 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
337;
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
345;
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
352;
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
363;
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
370entry:
371  call void @llvm.memset.p0.i64(ptr align 1 %dst, i8 0, i64 %size, i1 true)
372  ret void
373}
374
375
376define 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
380;
381; GISel-MOPS-LABEL: memset_0:
382; GISel-MOPS:       // %bb.0: // %entry
383; GISel-MOPS-NEXT:    ret
384;
385; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0:
386; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
387; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
388;
389; SDAG-MOPS-O2-LABEL: memset_0:
390; SDAG-MOPS-O2:       // %bb.0: // %entry
391; SDAG-MOPS-O2-NEXT:    ret
392entry:
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)
395  ret void
396}
397
398define 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
402;
403; GISel-MOPS-LABEL: memset_0_volatile:
404; GISel-MOPS:       // %bb.0: // %entry
405; GISel-MOPS-NEXT:    ret
406;
407; SDAG-WITHOUT-MOPS-O2-LABEL: memset_0_volatile:
408; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
409; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
410;
411; SDAG-MOPS-O2-LABEL: memset_0_volatile:
412; SDAG-MOPS-O2:       // %bb.0: // %entry
413; SDAG-MOPS-O2-NEXT:    ret
414entry:
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)
417  ret void
418}
419
420define 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
432;
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
442;
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
454;
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
464;
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
474;
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
484entry:
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)
487  ret void
488}
489
490define 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
501;
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
511;
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
522;
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
531;
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
541;
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
551entry:
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)
554  ret void
555}
556
557define 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
568;
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
578;
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
589;
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
598;
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
608;
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
617entry:
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)
620  ret void
621}
622
623define 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
634;
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
644;
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
655;
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
664;
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
674;
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
683entry:
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)
686  ret void
687}
688
689define 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
703;
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
715;
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
724;
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
732;
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
744;
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
752entry:
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)
755  ret void
756}
757
758define 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
772;
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
784;
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
793;
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
801;
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
813;
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
821entry:
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)
824  ret void
825}
826
827
828define 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
832;
833; GISel-MOPS-LABEL: memcpy_0:
834; GISel-MOPS:       // %bb.0: // %entry
835; GISel-MOPS-NEXT:    ret
836;
837; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0:
838; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
839; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
840;
841; SDAG-MOPS-O2-LABEL: memcpy_0:
842; SDAG-MOPS-O2:       // %bb.0: // %entry
843; SDAG-MOPS-O2-NEXT:    ret
844entry:
845  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
846  ret void
847}
848
849define 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
853;
854; GISel-MOPS-LABEL: memcpy_0_volatile:
855; GISel-MOPS:       // %bb.0: // %entry
856; GISel-MOPS-NEXT:    ret
857;
858; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_0_volatile:
859; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
860; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
861;
862; SDAG-MOPS-O2-LABEL: memcpy_0_volatile:
863; SDAG-MOPS-O2:       // %bb.0: // %entry
864; SDAG-MOPS-O2-NEXT:    ret
865entry:
866  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
867  ret void
868}
869
870define 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
878;
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
886;
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
894;
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
902entry:
903  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
904  ret void
905}
906
907define 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
918;
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
928;
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
937;
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
945;
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
953;
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
961entry:
962  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
963  ret void
964}
965
966define 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
977;
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
987;
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
996;
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
1004;
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
1014;
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
1022entry:
1023  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false)
1024  ret void
1025}
1026
1027define 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
1038;
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
1048;
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
1057;
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
1065;
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
1075;
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
1083entry:
1084  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true)
1085  ret void
1086}
1087
1088define 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
1097;
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
1104;
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
1113;
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
1120entry:
1121  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false)
1122  ret void
1123}
1124
1125define 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
1134;
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
1141;
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
1150;
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
1157entry:
1158  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true)
1159  ret void
1160}
1161
1162
1163define 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
1167;
1168; GISel-MOPS-LABEL: memcpy_inline_0:
1169; GISel-MOPS:       // %bb.0: // %entry
1170; GISel-MOPS-NEXT:    ret
1171;
1172; SDAG-WITHOUT-MOPS-O2-LABEL: memcpy_inline_0:
1173; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
1174; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
1175;
1176; SDAG-MOPS-O2-LABEL: memcpy_inline_0:
1177; SDAG-MOPS-O2:       // %bb.0: // %entry
1178; SDAG-MOPS-O2-NEXT:    ret
1179entry:
1180  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
1181  ret void
1182}
1183
1184define 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
1188;
1189; GISel-MOPS-LABEL: memcpy_inline_0_volatile:
1190; GISel-MOPS:       // %bb.0: // %entry
1191; GISel-MOPS-NEXT:    ret
1192;
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
1196;
1197; SDAG-MOPS-O2-LABEL: memcpy_inline_0_volatile:
1198; SDAG-MOPS-O2:       // %bb.0: // %entry
1199; SDAG-MOPS-O2-NEXT:    ret
1200entry:
1201  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
1202  ret void
1203}
1204
1205define 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
1213;
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
1221;
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
1229;
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
1237entry:
1238  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
1239  ret void
1240}
1241
1242define 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
1250;
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
1258;
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
1266;
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
1274entry:
1275  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
1276  ret void
1277}
1278
1279define 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
1323;
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
1367;
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
1411;
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
1455;
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
1483;
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
1491entry:
1492  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 false)
1493  ret void
1494}
1495
1496define 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
1540;
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
1584;
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
1628;
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
1636entry:
1637  call void @llvm.memcpy.inline.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 300, i1 true)
1638  ret void
1639}
1640
1641define 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
1645;
1646; GISel-MOPS-LABEL: memmove_0:
1647; GISel-MOPS:       // %bb.0: // %entry
1648; GISel-MOPS-NEXT:    ret
1649;
1650; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0:
1651; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
1652; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
1653;
1654; SDAG-MOPS-O2-LABEL: memmove_0:
1655; SDAG-MOPS-O2:       // %bb.0: // %entry
1656; SDAG-MOPS-O2-NEXT:    ret
1657entry:
1658  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 false)
1659  ret void
1660}
1661
1662define 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
1666;
1667; GISel-MOPS-LABEL: memmove_0_volatile:
1668; GISel-MOPS:       // %bb.0: // %entry
1669; GISel-MOPS-NEXT:    ret
1670;
1671; SDAG-WITHOUT-MOPS-O2-LABEL: memmove_0_volatile:
1672; SDAG-WITHOUT-MOPS-O2:       // %bb.0: // %entry
1673; SDAG-WITHOUT-MOPS-O2-NEXT:    ret
1674;
1675; SDAG-MOPS-O2-LABEL: memmove_0_volatile:
1676; SDAG-MOPS-O2:       // %bb.0: // %entry
1677; SDAG-MOPS-O2-NEXT:    ret
1678entry:
1679  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 0, i1 true)
1680  ret void
1681}
1682
1683define 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
1691;
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
1699;
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
1707;
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
1715;
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
1723;
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
1731entry:
1732  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 false)
1733  ret void
1734}
1735
1736define 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
1747;
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
1757;
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
1766;
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
1774;
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
1782;
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
1790entry:
1791  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 10, i1 true)
1792  ret void
1793}
1794
1795define 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
1806;
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
1816;
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
1825;
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
1833;
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
1843;
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
1851entry:
1852  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 false)
1853  ret void
1854}
1855
1856define 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
1867;
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
1877;
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
1886;
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
1894;
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
1904;
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
1912entry:
1913  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 1000, i1 true)
1914  ret void
1915}
1916
1917define 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
1926;
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
1933;
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
1942;
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
1949entry:
1950  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 false)
1951  ret void
1952}
1953
1954define 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
1963;
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
1970;
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
1979;
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
1986entry:
1987  call void @llvm.memmove.p0.p0.i64(ptr align 1 %dst, ptr align 1 %src, i64 %size, i1 true)
1988  ret void
1989}
1990