xref: /llvm-project/llvm/test/CodeGen/RISCV/ghccc-without-f-reg.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -mtriple=riscv64 -mattr=+zfinx,+zdinx < %s | FileCheck %s
3
4; Check the GHC call convention works for zfinx, zdinx (rv64)
5
6@f1 = external global float
7@f2 = external global float
8@f3 = external global float
9@f4 = external global float
10@f5 = external global float
11@f6 = external global float
12
13define ghccc void @caller_float() nounwind {
14; CHECK-LABEL: caller_float:
15; CHECK:       # %bb.0: # %entry
16; CHECK-NEXT:    lui a0, %hi(f6)
17; CHECK-NEXT:    lui a1, %hi(f5)
18; CHECK-NEXT:    lui a2, %hi(f4)
19; CHECK-NEXT:    lui a3, %hi(f3)
20; CHECK-NEXT:    lui a4, %hi(f2)
21; CHECK-NEXT:    lui a5, %hi(f1)
22; CHECK-NEXT:    lw s6, %lo(f6)(a0)
23; CHECK-NEXT:    lw s5, %lo(f5)(a1)
24; CHECK-NEXT:    lw s4, %lo(f4)(a2)
25; CHECK-NEXT:    lw s3, %lo(f3)(a3)
26; CHECK-NEXT:    lw s2, %lo(f2)(a4)
27; CHECK-NEXT:    lw s1, %lo(f1)(a5)
28; CHECK-NEXT:    tail callee_float
29entry:
30  %0  = load float, ptr @f6
31  %1  = load float, ptr @f5
32  %2  = load float, ptr @f4
33  %3  = load float, ptr @f3
34  %4 = load float, ptr @f2
35  %5 = load float, ptr @f1
36  tail call ghccc void @callee_float(float %5, float %4, float %3, float %2, float %1, float %0) nounwind
37  ret void
38}
39
40declare ghccc void @callee_float(float, float, float, float, float, float)
41
42@d1 = external global double
43@d2 = external global double
44@d3 = external global double
45@d4 = external global double
46@d5 = external global double
47@d6 = external global double
48
49define ghccc void @caller_double() nounwind {
50; CHECK-LABEL: caller_double:
51; CHECK:       # %bb.0: # %entry
52; CHECK-NEXT:    lui a0, %hi(d6)
53; CHECK-NEXT:    lui a1, %hi(d5)
54; CHECK-NEXT:    lui a2, %hi(d4)
55; CHECK-NEXT:    lui a3, %hi(d3)
56; CHECK-NEXT:    lui a4, %hi(d2)
57; CHECK-NEXT:    lui a5, %hi(d1)
58; CHECK-NEXT:    ld s6, %lo(d6)(a0)
59; CHECK-NEXT:    ld s5, %lo(d5)(a1)
60; CHECK-NEXT:    ld s4, %lo(d4)(a2)
61; CHECK-NEXT:    ld s3, %lo(d3)(a3)
62; CHECK-NEXT:    ld s2, %lo(d2)(a4)
63; CHECK-NEXT:    ld s1, %lo(d1)(a5)
64; CHECK-NEXT:    tail callee_double
65entry:
66  %0  = load double, ptr @d6
67  %1  = load double, ptr @d5
68  %2  = load double, ptr @d4
69  %3  = load double, ptr @d3
70  %4 = load double, ptr @d2
71  %5 = load double, ptr @d1
72  tail call ghccc void @callee_double(double %5, double %4, double %3, double %2, double %1, double %0) nounwind
73  ret void
74}
75
76declare ghccc void @callee_double(double, double, double, double, double, double)
77