1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O0 -mtriple=powerpc64-unknown-linux-gnu -fast-isel=false < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; This verifies that single-precision floating point values that can't 4*9880d681SAndroid Build Coastguard Worker; be passed in registers are stored in the rightmost word of the parameter 5*9880d681SAndroid Build Coastguard Worker; save area slot. There are 13 architected floating-point registers, so 6*9880d681SAndroid Build Coastguard Worker; the 14th is passed in storage. The address of the 14th argument is 7*9880d681SAndroid Build Coastguard Worker; 48 (fixed size of the linkage area) + 13 * 8 (first 13 args) + 4 8*9880d681SAndroid Build Coastguard Worker; (offset to second word) = 156. 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine float @bar(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i, float %j, float %k, float %l, float %m, float %n) nounwind { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker %a.addr = alloca float, align 4 13*9880d681SAndroid Build Coastguard Worker %b.addr = alloca float, align 4 14*9880d681SAndroid Build Coastguard Worker %c.addr = alloca float, align 4 15*9880d681SAndroid Build Coastguard Worker %d.addr = alloca float, align 4 16*9880d681SAndroid Build Coastguard Worker %e.addr = alloca float, align 4 17*9880d681SAndroid Build Coastguard Worker %f.addr = alloca float, align 4 18*9880d681SAndroid Build Coastguard Worker %g.addr = alloca float, align 4 19*9880d681SAndroid Build Coastguard Worker %h.addr = alloca float, align 4 20*9880d681SAndroid Build Coastguard Worker %i.addr = alloca float, align 4 21*9880d681SAndroid Build Coastguard Worker %j.addr = alloca float, align 4 22*9880d681SAndroid Build Coastguard Worker %k.addr = alloca float, align 4 23*9880d681SAndroid Build Coastguard Worker %l.addr = alloca float, align 4 24*9880d681SAndroid Build Coastguard Worker %m.addr = alloca float, align 4 25*9880d681SAndroid Build Coastguard Worker %n.addr = alloca float, align 4 26*9880d681SAndroid Build Coastguard Worker store float %a, float* %a.addr, align 4 27*9880d681SAndroid Build Coastguard Worker store float %b, float* %b.addr, align 4 28*9880d681SAndroid Build Coastguard Worker store float %c, float* %c.addr, align 4 29*9880d681SAndroid Build Coastguard Worker store float %d, float* %d.addr, align 4 30*9880d681SAndroid Build Coastguard Worker store float %e, float* %e.addr, align 4 31*9880d681SAndroid Build Coastguard Worker store float %f, float* %f.addr, align 4 32*9880d681SAndroid Build Coastguard Worker store float %g, float* %g.addr, align 4 33*9880d681SAndroid Build Coastguard Worker store float %h, float* %h.addr, align 4 34*9880d681SAndroid Build Coastguard Worker store float %i, float* %i.addr, align 4 35*9880d681SAndroid Build Coastguard Worker store float %j, float* %j.addr, align 4 36*9880d681SAndroid Build Coastguard Worker store float %k, float* %k.addr, align 4 37*9880d681SAndroid Build Coastguard Worker store float %l, float* %l.addr, align 4 38*9880d681SAndroid Build Coastguard Worker store float %m, float* %m.addr, align 4 39*9880d681SAndroid Build Coastguard Worker store float %n, float* %n.addr, align 4 40*9880d681SAndroid Build Coastguard Worker %0 = load float, float* %n.addr, align 4 41*9880d681SAndroid Build Coastguard Worker ret float %0 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; CHECK: lfs {{[0-9]+}}, 156(1) 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine float @foo() nounwind { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker %a = alloca float, align 4 49*9880d681SAndroid Build Coastguard Worker %b = alloca float, align 4 50*9880d681SAndroid Build Coastguard Worker %c = alloca float, align 4 51*9880d681SAndroid Build Coastguard Worker %d = alloca float, align 4 52*9880d681SAndroid Build Coastguard Worker %e = alloca float, align 4 53*9880d681SAndroid Build Coastguard Worker %f = alloca float, align 4 54*9880d681SAndroid Build Coastguard Worker %g = alloca float, align 4 55*9880d681SAndroid Build Coastguard Worker %h = alloca float, align 4 56*9880d681SAndroid Build Coastguard Worker %i = alloca float, align 4 57*9880d681SAndroid Build Coastguard Worker %j = alloca float, align 4 58*9880d681SAndroid Build Coastguard Worker %k = alloca float, align 4 59*9880d681SAndroid Build Coastguard Worker %l = alloca float, align 4 60*9880d681SAndroid Build Coastguard Worker %m = alloca float, align 4 61*9880d681SAndroid Build Coastguard Worker %n = alloca float, align 4 62*9880d681SAndroid Build Coastguard Worker store float 1.000000e+00, float* %a, align 4 63*9880d681SAndroid Build Coastguard Worker store float 2.000000e+00, float* %b, align 4 64*9880d681SAndroid Build Coastguard Worker store float 3.000000e+00, float* %c, align 4 65*9880d681SAndroid Build Coastguard Worker store float 4.000000e+00, float* %d, align 4 66*9880d681SAndroid Build Coastguard Worker store float 5.000000e+00, float* %e, align 4 67*9880d681SAndroid Build Coastguard Worker store float 6.000000e+00, float* %f, align 4 68*9880d681SAndroid Build Coastguard Worker store float 7.000000e+00, float* %g, align 4 69*9880d681SAndroid Build Coastguard Worker store float 8.000000e+00, float* %h, align 4 70*9880d681SAndroid Build Coastguard Worker store float 9.000000e+00, float* %i, align 4 71*9880d681SAndroid Build Coastguard Worker store float 1.000000e+01, float* %j, align 4 72*9880d681SAndroid Build Coastguard Worker store float 1.100000e+01, float* %k, align 4 73*9880d681SAndroid Build Coastguard Worker store float 1.200000e+01, float* %l, align 4 74*9880d681SAndroid Build Coastguard Worker store float 1.300000e+01, float* %m, align 4 75*9880d681SAndroid Build Coastguard Worker store float 1.400000e+01, float* %n, align 4 76*9880d681SAndroid Build Coastguard Worker %0 = load float, float* %a, align 4 77*9880d681SAndroid Build Coastguard Worker %1 = load float, float* %b, align 4 78*9880d681SAndroid Build Coastguard Worker %2 = load float, float* %c, align 4 79*9880d681SAndroid Build Coastguard Worker %3 = load float, float* %d, align 4 80*9880d681SAndroid Build Coastguard Worker %4 = load float, float* %e, align 4 81*9880d681SAndroid Build Coastguard Worker %5 = load float, float* %f, align 4 82*9880d681SAndroid Build Coastguard Worker %6 = load float, float* %g, align 4 83*9880d681SAndroid Build Coastguard Worker %7 = load float, float* %h, align 4 84*9880d681SAndroid Build Coastguard Worker %8 = load float, float* %i, align 4 85*9880d681SAndroid Build Coastguard Worker %9 = load float, float* %j, align 4 86*9880d681SAndroid Build Coastguard Worker %10 = load float, float* %k, align 4 87*9880d681SAndroid Build Coastguard Worker %11 = load float, float* %l, align 4 88*9880d681SAndroid Build Coastguard Worker %12 = load float, float* %m, align 4 89*9880d681SAndroid Build Coastguard Worker %13 = load float, float* %n, align 4 90*9880d681SAndroid Build Coastguard Worker %call = call float @bar(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12, float %13) 91*9880d681SAndroid Build Coastguard Worker ret float %call 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker; Note that stw is used instead of stfs because the value is a simple 95*9880d681SAndroid Build Coastguard Worker; constant that can be created with a load-immediate in a GPR. 96*9880d681SAndroid Build Coastguard Worker; CHECK: stw {{[0-9]+}}, 156(1) 97*9880d681SAndroid Build Coastguard Worker 98