xref: /llvm-project/llvm/test/CodeGen/AArch64/arm64-ldur.ll (revision 5ddce70ef0e5a641d7fea95e31fc5e2439cb98cb)
1; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s
2
3define i64 @_f0(ptr %p) {
4; CHECK: f0:
5; CHECK: ldur x0, [x0, #-8]
6; CHECK-NEXT: ret
7  %tmp = getelementptr inbounds i64, ptr %p, i64 -1
8  %ret = load i64, ptr %tmp, align 2
9  ret i64 %ret
10}
11define i32 @_f1(ptr %p) {
12; CHECK: f1:
13; CHECK: ldur w0, [x0, #-4]
14; CHECK-NEXT: ret
15  %tmp = getelementptr inbounds i32, ptr %p, i64 -1
16  %ret = load i32, ptr %tmp, align 2
17  ret i32 %ret
18}
19define i16 @_f2(ptr %p) {
20; CHECK: f2:
21; CHECK: ldurh w0, [x0, #-2]
22; CHECK-NEXT: ret
23  %tmp = getelementptr inbounds i16, ptr %p, i64 -1
24  %ret = load i16, ptr %tmp, align 2
25  ret i16 %ret
26}
27define i8 @_f3(ptr %p) {
28; CHECK: f3:
29; CHECK: ldurb w0, [x0, #-1]
30; CHECK-NEXT: ret
31  %tmp = getelementptr inbounds i8, ptr %p, i64 -1
32  %ret = load i8, ptr %tmp, align 2
33  ret i8 %ret
34}
35
36define i64 @zext32(ptr %a) nounwind ssp {
37; CHECK-LABEL: zext32:
38; CHECK: ldur w0, [x0, #-12]
39; CHECK-NEXT: ret
40  %p = getelementptr inbounds i8, ptr %a, i64 -12
41  %tmp2 = load i32, ptr %p, align 4
42  %ret = zext i32 %tmp2 to i64
43
44  ret i64 %ret
45}
46define i64 @zext16(ptr %a) nounwind ssp {
47; CHECK-LABEL: zext16:
48; CHECK: ldurh w0, [x0, #-12]
49; CHECK-NEXT: ret
50  %p = getelementptr inbounds i8, ptr %a, i64 -12
51  %tmp2 = load i16, ptr %p, align 2
52  %ret = zext i16 %tmp2 to i64
53
54  ret i64 %ret
55}
56define i64 @zext8(ptr %a) nounwind ssp {
57; CHECK-LABEL: zext8:
58; CHECK: ldurb w0, [x0, #-12]
59; CHECK-NEXT: ret
60  %p = getelementptr inbounds i8, ptr %a, i64 -12
61  %tmp2 = load i8, ptr %p, align 1
62  %ret = zext i8 %tmp2 to i64
63
64  ret i64 %ret
65}
66