diff options
Diffstat (limited to 'test/CodeGen/AArch64/arm64-ldur.ll')
-rw-r--r-- | test/CodeGen/AArch64/arm64-ldur.ll | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/test/CodeGen/AArch64/arm64-ldur.ll b/test/CodeGen/AArch64/arm64-ldur.ll new file mode 100644 index 0000000..2848c06 --- /dev/null +++ b/test/CodeGen/AArch64/arm64-ldur.ll @@ -0,0 +1,67 @@ +; RUN: llc < %s -march=arm64 | FileCheck %s + +define i64 @_f0(i64* %p) { +; CHECK: f0: +; CHECK: ldur x0, [x0, #-8] +; CHECK-NEXT: ret + %tmp = getelementptr inbounds i64* %p, i64 -1 + %ret = load i64* %tmp, align 2 + ret i64 %ret +} +define i32 @_f1(i32* %p) { +; CHECK: f1: +; CHECK: ldur w0, [x0, #-4] +; CHECK-NEXT: ret + %tmp = getelementptr inbounds i32* %p, i64 -1 + %ret = load i32* %tmp, align 2 + ret i32 %ret +} +define i16 @_f2(i16* %p) { +; CHECK: f2: +; CHECK: ldurh w0, [x0, #-2] +; CHECK-NEXT: ret + %tmp = getelementptr inbounds i16* %p, i64 -1 + %ret = load i16* %tmp, align 2 + ret i16 %ret +} +define i8 @_f3(i8* %p) { +; CHECK: f3: +; CHECK: ldurb w0, [x0, #-1] +; CHECK-NEXT: ret + %tmp = getelementptr inbounds i8* %p, i64 -1 + %ret = load i8* %tmp, align 2 + ret i8 %ret +} + +define i64 @zext32(i8* %a) nounwind ssp { +; CHECK-LABEL: zext32: +; CHECK: ldur w0, [x0, #-12] +; CHECK-NEXT: ret + %p = getelementptr inbounds i8* %a, i64 -12 + %tmp1 = bitcast i8* %p to i32* + %tmp2 = load i32* %tmp1, align 4 + %ret = zext i32 %tmp2 to i64 + + ret i64 %ret +} +define i64 @zext16(i8* %a) nounwind ssp { +; CHECK-LABEL: zext16: +; CHECK: ldurh w0, [x0, #-12] +; CHECK-NEXT: ret + %p = getelementptr inbounds i8* %a, i64 -12 + %tmp1 = bitcast i8* %p to i16* + %tmp2 = load i16* %tmp1, align 2 + %ret = zext i16 %tmp2 to i64 + + ret i64 %ret +} +define i64 @zext8(i8* %a) nounwind ssp { +; CHECK-LABEL: zext8: +; CHECK: ldurb w0, [x0, #-12] +; CHECK-NEXT: ret + %p = getelementptr inbounds i8* %a, i64 -12 + %tmp2 = load i8* %p, align 1 + %ret = zext i8 %tmp2 to i64 + + ret i64 %ret +} |