blob: 1d90243a04ff134afdaaa14da03a823ba665315d [file]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -march=bpfel -mcpu=v4 < %s | FileCheck %s
define void @ret_s16(ptr sret([16 x i8]) %result) {
; CHECK-LABEL: ret_s16:
; CHECK: # %bb.0:
; CHECK-NEXT: *(u64 *)(r1 + 8) = 2
; CHECK-NEXT: *(u64 *)(r1 + 0) = 1
; CHECK-NEXT: exit
store i64 1, ptr %result
%p2 = getelementptr i8, ptr %result, i64 8
store i64 2, ptr %p2
ret void
}
define void @ret_s24(ptr sret([24 x i8]) %result) {
; CHECK-LABEL: ret_s24:
; CHECK: # %bb.0:
; CHECK-NEXT: *(u64 *)(r1 + 16) = 3
; CHECK-NEXT: *(u64 *)(r1 + 8) = 2
; CHECK-NEXT: *(u64 *)(r1 + 0) = 1
; CHECK-NEXT: exit
store i64 1, ptr %result
%p2 = getelementptr i8, ptr %result, i64 8
store i64 2, ptr %p2
%p3 = getelementptr i8, ptr %result, i64 16
store i64 3, ptr %p3
ret void
}
define i64 @caller() {
; CHECK-LABEL: caller:
; CHECK: # %bb.0:
; CHECK-NEXT: r1 = r10
; CHECK-NEXT: r1 += -16
; CHECK-NEXT: call ret_s16
; CHECK-NEXT: r0 = *(u64 *)(r10 - 16)
; CHECK-NEXT: exit
%s = alloca [16 x i8], align 8
call void @ret_s16(ptr sret([16 x i8]) %s)
%v = load i64, ptr %s
ret i64 %v
}