xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-tail-call-fallback.ll (revision 292f34b0d3cb2a04be5ebb85aaeb838b29f71323)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2; RUN: llc -mtriple=aarch64-unknown-linux-gnu -global-isel < %s | FileCheck %s
3
4declare void @func(i64, i64, i64, i64, i64, i128, i128)
5
6; Make sure the check for whether a tail call is allowed does not affect the
7; calling convention if it fails.
8; The first i128 argument should be passed in registers, not on the stack.
9define void @pr70207(i128 %arg1, i128 %arg2) nounwind {
10; CHECK-LABEL: pr70207:
11; CHECK:       // %bb.0:
12; CHECK-NEXT:    mov x8, x2
13; CHECK-NEXT:    mov x6, x0
14; CHECK-NEXT:    mov x7, x1
15; CHECK-NEXT:    mov x9, x3
16; CHECK-NEXT:    mov x0, xzr
17; CHECK-NEXT:    mov x1, xzr
18; CHECK-NEXT:    mov x2, xzr
19; CHECK-NEXT:    mov x3, xzr
20; CHECK-NEXT:    mov x4, xzr
21; CHECK-NEXT:    str x8, [sp, #-32]!
22; CHECK-NEXT:    stp x9, x30, [sp, #8] // 8-byte Folded Spill
23; CHECK-NEXT:    bl func
24; CHECK-NEXT:    ldr x30, [sp, #16] // 8-byte Folded Reload
25; CHECK-NEXT:    add sp, sp, #32
26; CHECK-NEXT:    ret
27  tail call void @func(i64 0, i64 0, i64 0, i64 0, i64 0, i128 %arg1, i128 %arg2)
28  ret void
29}
30