104 lines · plain
1; Check that the GHC calling convention works (s390x)2;3; RUN: llc -mtriple=s390x-ibm-linux < %s | FileCheck %s4 5@base = external dso_local global i64 ; assigned to register: r76@sp = external dso_local global i64 ; assigned to register: r87@hp = external dso_local global i64 ; assigned to register: r108@r1 = external dso_local global i64 ; assigned to register: r119@r2 = external dso_local global i64 ; assigned to register: r1210@r3 = external dso_local global i64 ; assigned to register: r1311@r4 = external dso_local global i64 ; assigned to register: r612@r5 = external dso_local global i64 ; assigned to register: r213@r6 = external dso_local global i64 ; assigned to register: r314@r7 = external dso_local global i64 ; assigned to register: r415@r8 = external dso_local global i64 ; assigned to register: r516@splim = external dso_local global i64 ; assigned to register: r917 18@f1 = external dso_local global float ; assigned to register: s819@f2 = external dso_local global float ; assigned to register: s920@f3 = external dso_local global float ; assigned to register: s1021@f4 = external dso_local global float ; assigned to register: s1122@f5 = external dso_local global float ; assigned to register: s023@f6 = external dso_local global float ; assigned to register: s124 25@d1 = external dso_local global double ; assigned to register: d1226@d2 = external dso_local global double ; assigned to register: d1327@d3 = external dso_local global double ; assigned to register: d1428@d4 = external dso_local global double ; assigned to register: d1529@d5 = external dso_local global double ; assigned to register: d230@d6 = external dso_local global double ; assigned to register: d331 32define ghccc void @foo() nounwind {33entry:34 ; CHECK: larl {{%r[0-9]+}}, d635 ; CHECK-NEXT: ld %f3, 0({{%r[0-9]+}})36 ; CHECK-NEXT: larl {{%r[0-9]+}}, d537 ; CHECK-NEXT: ld %f2, 0({{%r[0-9]+}})38 ; CHECK-NEXT: larl {{%r[0-9]+}}, d439 ; CHECK-NEXT: ld %f15, 0({{%r[0-9]+}})40 ; CHECK-NEXT: larl {{%r[0-9]+}}, d341 ; CHECK-NEXT: ld %f14, 0({{%r[0-9]+}})42 ; CHECK-NEXT: larl {{%r[0-9]+}}, d243 ; CHECK-NEXT: ld %f13, 0({{%r[0-9]+}})44 ; CHECK-NEXT: larl {{%r[0-9]+}}, d145 ; CHECK-NEXT: ld %f12, 0({{%r[0-9]+}})46 ; CHECK-NEXT: larl {{%r[0-9]+}}, f647 ; CHECK-NEXT: le %f1, 0({{%r[0-9]+}})48 ; CHECK-NEXT: larl {{%r[0-9]+}}, f549 ; CHECK-NEXT: le %f0, 0({{%r[0-9]+}})50 ; CHECK-NEXT: larl {{%r[0-9]+}}, f451 ; CHECK-NEXT: le %f11, 0({{%r[0-9]+}})52 ; CHECK-NEXT: larl {{%r[0-9]+}}, f353 ; CHECK-NEXT: le %f10, 0({{%r[0-9]+}})54 ; CHECK-NEXT: larl {{%r[0-9]+}}, f255 ; CHECK-NEXT: le %f9, 0({{%r[0-9]+}})56 ; CHECK-NEXT: larl {{%r[0-9]+}}, f157 ; CHECK-NEXT: le %f8, 0({{%r[0-9]+}})58 ; CHECK-NEXT: lgrl %r9, splim59 ; CHECK-NEXT: lgrl %r5, r860 ; CHECK-NEXT: lgrl %r4, r761 ; CHECK-NEXT: lgrl %r3, r662 ; CHECK-NEXT: lgrl %r2, r563 ; CHECK-NEXT: lgrl %r6, r464 ; CHECK-NEXT: lgrl %r13, r365 ; CHECK-NEXT: lgrl %r12, r266 ; CHECK-NEXT: lgrl %r11, r167 ; CHECK-NEXT: lgrl %r10, hp68 ; CHECK-NEXT: lgrl %r8, sp69 ; CHECK-NEXT: lgrl %r7, base70 %0 = load double, ptr @d671 %1 = load double, ptr @d572 %2 = load double, ptr @d473 %3 = load double, ptr @d374 %4 = load double, ptr @d275 %5 = load double, ptr @d176 %6 = load float, ptr @f677 %7 = load float, ptr @f578 %8 = load float, ptr @f479 %9 = load float, ptr @f380 %10 = load float, ptr @f281 %11 = load float, ptr @f182 %12 = load i64, ptr @splim83 %13 = load i64, ptr @r884 %14 = load i64, ptr @r785 %15 = load i64, ptr @r686 %16 = load i64, ptr @r587 %17 = load i64, ptr @r488 %18 = load i64, ptr @r389 %19 = load i64, ptr @r290 %20 = load i64, ptr @r191 %21 = load i64, ptr @hp92 %22 = load i64, ptr @sp93 %23 = load i64, ptr @base94 ; CHECK: brasl %r14, bar95 tail call ghccc void @bar(i64 %23, i64 %22, i64 %21, i64 %20, i64 %19, i64 %18, i64 %17, i64 %16, i64 %15, i64 %14, i64 %13, i64 %12,96 float %11, float %10, float %9, float %8, float %7, float %6,97 double %5, double %4, double %3, double %2, double %1, double %0) nounwind98 ret void99}100 101declare ghccc void @bar(i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64,102 float, float, float, float, float, float,103 double, double, double, double, double, double)104