xref: /llvm-project/llvm/test/CodeGen/RISCV/ghccc-without-f-reg.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
178d91df4SeopXD; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
278d91df4SeopXD; RUN: llc -mtriple=riscv64 -mattr=+zfinx,+zdinx < %s | FileCheck %s
378d91df4SeopXD
478d91df4SeopXD; Check the GHC call convention works for zfinx, zdinx (rv64)
578d91df4SeopXD
678d91df4SeopXD@f1 = external global float
778d91df4SeopXD@f2 = external global float
878d91df4SeopXD@f3 = external global float
978d91df4SeopXD@f4 = external global float
1078d91df4SeopXD@f5 = external global float
1178d91df4SeopXD@f6 = external global float
1278d91df4SeopXD
1378d91df4SeopXDdefine ghccc void @caller_float() nounwind {
1478d91df4SeopXD; CHECK-LABEL: caller_float:
1578d91df4SeopXD; CHECK:       # %bb.0: # %entry
1678d91df4SeopXD; CHECK-NEXT:    lui a0, %hi(f6)
17*9122c523SPengcheng Wang; CHECK-NEXT:    lui a1, %hi(f5)
18*9122c523SPengcheng Wang; CHECK-NEXT:    lui a2, %hi(f4)
19*9122c523SPengcheng Wang; CHECK-NEXT:    lui a3, %hi(f3)
20*9122c523SPengcheng Wang; CHECK-NEXT:    lui a4, %hi(f2)
21*9122c523SPengcheng Wang; CHECK-NEXT:    lui a5, %hi(f1)
2278d91df4SeopXD; CHECK-NEXT:    lw s6, %lo(f6)(a0)
23*9122c523SPengcheng Wang; CHECK-NEXT:    lw s5, %lo(f5)(a1)
24*9122c523SPengcheng Wang; CHECK-NEXT:    lw s4, %lo(f4)(a2)
25*9122c523SPengcheng Wang; CHECK-NEXT:    lw s3, %lo(f3)(a3)
26*9122c523SPengcheng Wang; CHECK-NEXT:    lw s2, %lo(f2)(a4)
27*9122c523SPengcheng Wang; CHECK-NEXT:    lw s1, %lo(f1)(a5)
28eabaee0cSFangrui Song; CHECK-NEXT:    tail callee_float
2978d91df4SeopXDentry:
3078d91df4SeopXD  %0  = load float, ptr @f6
3178d91df4SeopXD  %1  = load float, ptr @f5
3278d91df4SeopXD  %2  = load float, ptr @f4
3378d91df4SeopXD  %3  = load float, ptr @f3
3478d91df4SeopXD  %4 = load float, ptr @f2
3578d91df4SeopXD  %5 = load float, ptr @f1
3678d91df4SeopXD  tail call ghccc void @callee_float(float %5, float %4, float %3, float %2, float %1, float %0) nounwind
3778d91df4SeopXD  ret void
3878d91df4SeopXD}
3978d91df4SeopXD
4078d91df4SeopXDdeclare ghccc void @callee_float(float, float, float, float, float, float)
4178d91df4SeopXD
4278d91df4SeopXD@d1 = external global double
4378d91df4SeopXD@d2 = external global double
4478d91df4SeopXD@d3 = external global double
4578d91df4SeopXD@d4 = external global double
4678d91df4SeopXD@d5 = external global double
4778d91df4SeopXD@d6 = external global double
4878d91df4SeopXD
4978d91df4SeopXDdefine ghccc void @caller_double() nounwind {
5078d91df4SeopXD; CHECK-LABEL: caller_double:
5178d91df4SeopXD; CHECK:       # %bb.0: # %entry
5278d91df4SeopXD; CHECK-NEXT:    lui a0, %hi(d6)
53*9122c523SPengcheng Wang; CHECK-NEXT:    lui a1, %hi(d5)
54*9122c523SPengcheng Wang; CHECK-NEXT:    lui a2, %hi(d4)
55*9122c523SPengcheng Wang; CHECK-NEXT:    lui a3, %hi(d3)
56*9122c523SPengcheng Wang; CHECK-NEXT:    lui a4, %hi(d2)
57*9122c523SPengcheng Wang; CHECK-NEXT:    lui a5, %hi(d1)
5878d91df4SeopXD; CHECK-NEXT:    ld s6, %lo(d6)(a0)
59*9122c523SPengcheng Wang; CHECK-NEXT:    ld s5, %lo(d5)(a1)
60*9122c523SPengcheng Wang; CHECK-NEXT:    ld s4, %lo(d4)(a2)
61*9122c523SPengcheng Wang; CHECK-NEXT:    ld s3, %lo(d3)(a3)
62*9122c523SPengcheng Wang; CHECK-NEXT:    ld s2, %lo(d2)(a4)
63*9122c523SPengcheng Wang; CHECK-NEXT:    ld s1, %lo(d1)(a5)
64eabaee0cSFangrui Song; CHECK-NEXT:    tail callee_double
6578d91df4SeopXDentry:
6678d91df4SeopXD  %0  = load double, ptr @d6
6778d91df4SeopXD  %1  = load double, ptr @d5
6878d91df4SeopXD  %2  = load double, ptr @d4
6978d91df4SeopXD  %3  = load double, ptr @d3
7078d91df4SeopXD  %4 = load double, ptr @d2
7178d91df4SeopXD  %5 = load double, ptr @d1
7278d91df4SeopXD  tail call ghccc void @callee_double(double %5, double %4, double %3, double %2, double %1, double %0) nounwind
7378d91df4SeopXD  ret void
7478d91df4SeopXD}
7578d91df4SeopXD
7678d91df4SeopXDdeclare ghccc void @callee_double(double, double, double, double, double, double)
77