| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 |
| ; RUN: llc -mtriple=aarch64-unknown-linux-gnu -global-isel < %s | FileCheck %s |
| |
| declare void @func(i64, i64, i64, i64, i64, i128, i128) |
| |
| ; Make sure the check for whether a tail call is allowed does not affect the |
| ; calling convention if it fails. |
| ; The first i128 argument should be passed in registers, not on the stack. |
| define void @pr70207(i128 %arg1, i128 %arg2) nounwind { |
| ; CHECK-LABEL: pr70207: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov x8, x2 |
| ; CHECK-NEXT: mov x6, x0 |
| ; CHECK-NEXT: mov x7, x1 |
| ; CHECK-NEXT: mov x9, x3 |
| ; CHECK-NEXT: mov x0, xzr |
| ; CHECK-NEXT: mov x1, xzr |
| ; CHECK-NEXT: mov x2, xzr |
| ; CHECK-NEXT: mov x3, xzr |
| ; CHECK-NEXT: mov x4, xzr |
| ; CHECK-NEXT: str x8, [sp, #-32]! |
| ; CHECK-NEXT: stp x9, x30, [sp, #8] // 8-byte Folded Spill |
| ; CHECK-NEXT: bl func |
| ; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload |
| ; CHECK-NEXT: add sp, sp, #32 |
| ; CHECK-NEXT: ret |
| tail call void @func(i64 0, i64 0, i64 0, i64 0, i64 0, i128 %arg1, i128 %arg2) |
| ret void |
| } |