blob: 8860ffa2962d9e0dfa2a72cce6aa59ed7c5841ec [file] [log] [blame]
Akira Hatanakaf53b0402015-07-29 14:17:26 +00001; RUN: llc -mtriple=arm64-apple-ios -mattr=+strict-align < %s | FileCheck %s
Lang Hames90333852015-04-09 03:40:33 +00002
Evandro Menezesf8425342018-05-29 15:58:50 +00003; Small (16 bytes here) unaligned memcpy() should be a function call if
Lang Hames90333852015-04-09 03:40:33 +00004; strict-alignment is turned on.
5define void @t0(i8* %out, i8* %in) {
6; CHECK-LABEL: t0:
Eli Friedman92d0d132019-03-25 21:25:28 +00007; CHECK: mov w2, #16
Evandro Menezesf8425342018-05-29 15:58:50 +00008; CHECK-NEXT: bl _memcpy
Lang Hames90333852015-04-09 03:40:33 +00009entry:
Daniel Neilson1e687242018-01-19 17:13:12 +000010 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %out, i8* %in, i64 16, i1 false)
Lang Hames90333852015-04-09 03:40:33 +000011 ret void
12}
13
Evandro Menezesf8425342018-05-29 15:58:50 +000014; Small (16 bytes here) aligned memcpy() should be inlined even if
15; strict-alignment is turned on.
16define void @t1(i8* align 8 %out, i8* align 8 %in) {
17; CHECK-LABEL: t1:
18; CHECK: ldp x{{[0-9]+}}, x{{[0-9]+}}, [x1]
19; CHECK-NEXT: stp x{{[0-9]+}}, x{{[0-9]+}}, [x0]
20entry:
21 call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %out, i8* align 8 %in, i64 16, i1 false)
22 ret void
23}
24
25; Tiny (4 bytes here) unaligned memcpy() should be inlined with byte sized
26; loads and stores if strict-alignment is turned on.
27define void @t2(i8* %out, i8* %in) {
28; CHECK-LABEL: t2:
29; CHECK: ldrb w{{[0-9]+}}, [x1, #3]
30; CHECK-NEXT: ldrb w{{[0-9]+}}, [x1, #2]
31; CHECK-NEXT: ldrb w{{[0-9]+}}, [x1, #1]
32; CHECK-NEXT: ldrb w{{[0-9]+}}, [x1]
33; CHECK-NEXT: strb w{{[0-9]+}}, [x0, #3]
34; CHECK-NEXT: strb w{{[0-9]+}}, [x0, #2]
35; CHECK-NEXT: strb w{{[0-9]+}}, [x0, #1]
36; CHECK-NEXT: strb w{{[0-9]+}}, [x0]
37entry:
38 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %out, i8* %in, i64 4, i1 false)
39 ret void
40}
41
Daniel Neilson1e687242018-01-19 17:13:12 +000042declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1)