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