Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / ARM / unaligned_load_store.ll
blobf9890386a76fd4f1447e2d2d84d67b0a2d902a34
1 ; RUN: llc -mtriple=arm-eabi -pre-RA-sched=source -mattr=+strict-align %s -o - \
2 ; RUN:  | FileCheck %s -check-prefix=EXPANDED
4 ; RUN: llc -mtriple=armv6-apple-darwin -mcpu=cortex-a8 -mattr=-neon,+strict-align -pre-RA-sched=source %s -o - \
5 ; RUN:  | FileCheck %s -check-prefix=EXPANDED
7 ; RUN: llc -mtriple=armv6-apple-darwin -mcpu=cortex-a8 %s -o - \
8 ; RUN:  | FileCheck %s -check-prefix=UNALIGNED
10 ; rdar://7113725
11 ; rdar://12091029
13 define void @t(ptr nocapture %a, ptr nocapture %b) nounwind {
14 entry:
15 ; EXPANDED-LABEL: t:
16 ; EXPANDED-DAG: ldrb [[R2:r[0-9]+]]
17 ; EXPANDED-DAG: ldrb [[R3:r[0-9]+]]
18 ; EXPANDED-DAG: ldrb [[R12:r[0-9]+]]
19 ; EXPANDED-DAG: ldrb [[R1:r[0-9]+]]
20 ; EXPANDED-DAG: strb [[R1]]
21 ; EXPANDED-DAG: strb [[R12]]
22 ; EXPANDED-DAG: strb [[R3]]
23 ; EXPANDED-DAG: strb [[R2]]
25 ; UNALIGNED-LABEL: t:
26 ; UNALIGNED: ldr r1
27 ; UNALIGNED: str r1
29   %tmp.i = load i32, ptr %b, align 1           ; <i32> [#uses=1]
30   store i32 %tmp.i, ptr %a, align 1
31   ret void
34 define void @hword(ptr %a, ptr %b) nounwind {
35 entry:
36 ; EXPANDED-LABEL: hword:
37 ; EXPANDED-NOT: vld1
38 ; EXPANDED: ldrh
39 ; EXPANDED-NOT: str1
40 ; EXPANDED: strh
42 ; UNALIGNED-LABEL: hword:
43 ; UNALIGNED: vld1.16
44 ; UNALIGNED: vst1.16
45   %tmp = load double, ptr %a, align 2
46   store double %tmp, ptr %b, align 2
47   ret void
50 define void @byte(ptr %a, ptr %b) nounwind {
51 entry:
52 ; EXPANDED-LABEL: byte:
53 ; EXPANDED-NOT: vld1
54 ; EXPANDED: ldrb
55 ; EXPANDED-NOT: str1
56 ; EXPANDED: strb
58 ; UNALIGNED-LABEL: byte:
59 ; UNALIGNED: vld1.8
60 ; UNALIGNED: vst1.8
61   %tmp = load double, ptr %a, align 1
62   store double %tmp, ptr %b, align 1
63   ret void
66 define void @byte_word_ops(ptr %a, ptr %b) nounwind {
67 entry:
68 ; EXPANDED-LABEL: byte_word_ops:
69 ; EXPANDED: ldrb
70 ; EXPANDED: strb
72 ; UNALIGNED-LABEL: byte_word_ops:
73 ; UNALIGNED-NOT: ldrb
74 ; UNALIGNED: ldr
75 ; UNALIGNED-NOT: strb
76 ; UNALIGNED: str
77   %tmp = load i32, ptr %a, align 1
78   store i32 %tmp, ptr %b, align 1
79   ret void