| ; 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 | |
| } |