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