brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 284849b Raw
98 lines · plain
1; RUN: llc -verify-machineinstrs -O2 -mtriple=powerpc64-unknown-linux-gnu -fast-isel=false < %s | FileCheck %s2 3; This verifies that single-precision floating point values that can't4; be passed in registers are stored in the rightmost word of the parameter5; save area slot.  There are 13 architected floating-point registers, so6; the 14th is passed in storage.  The address of the 14th argument is7; 48 (fixed size of the linkage area) + 13 * 8 (first 13 args) + 48; (offset to second word) = 156.9 10define 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 {11entry:12  %a.addr = alloca float, align 413  %b.addr = alloca float, align 414  %c.addr = alloca float, align 415  %d.addr = alloca float, align 416  %e.addr = alloca float, align 417  %f.addr = alloca float, align 418  %g.addr = alloca float, align 419  %h.addr = alloca float, align 420  %i.addr = alloca float, align 421  %j.addr = alloca float, align 422  %k.addr = alloca float, align 423  %l.addr = alloca float, align 424  %m.addr = alloca float, align 425  %n.addr = alloca float, align 426  store float %a, ptr %a.addr, align 427  store float %b, ptr %b.addr, align 428  store float %c, ptr %c.addr, align 429  store float %d, ptr %d.addr, align 430  store float %e, ptr %e.addr, align 431  store float %f, ptr %f.addr, align 432  store float %g, ptr %g.addr, align 433  store float %h, ptr %h.addr, align 434  store float %i, ptr %i.addr, align 435  store float %j, ptr %j.addr, align 436  store float %k, ptr %k.addr, align 437  store float %l, ptr %l.addr, align 438  store float %m, ptr %m.addr, align 439  store float %n, ptr %n.addr, align 440  %0 = load float, ptr %n.addr, align 441  ret float %042}43 44; CHECK: lfs {{[0-9]+}}, 156(1)45 46define float @foo() nounwind {47entry:48  %a = alloca float, align 449  %b = alloca float, align 450  %c = alloca float, align 451  %d = alloca float, align 452  %e = alloca float, align 453  %f = alloca float, align 454  %g = alloca float, align 455  %h = alloca float, align 456  %i = alloca float, align 457  %j = alloca float, align 458  %k = alloca float, align 459  %l = alloca float, align 460  %m = alloca float, align 461  %n = alloca float, align 462  store float 1.000000e+00, ptr %a, align 463  store float 2.000000e+00, ptr %b, align 464  store float 3.000000e+00, ptr %c, align 465  store float 4.000000e+00, ptr %d, align 466  store float 5.000000e+00, ptr %e, align 467  store float 6.000000e+00, ptr %f, align 468  store float 7.000000e+00, ptr %g, align 469  store float 8.000000e+00, ptr %h, align 470  store float 9.000000e+00, ptr %i, align 471  store float 1.000000e+01, ptr %j, align 472  store float 1.100000e+01, ptr %k, align 473  store float 1.200000e+01, ptr %l, align 474  store float 1.300000e+01, ptr %m, align 475  store float 1.400000e+01, ptr %n, align 476  %0 = load float, ptr %a, align 477  %1 = load float, ptr %b, align 478  %2 = load float, ptr %c, align 479  %3 = load float, ptr %d, align 480  %4 = load float, ptr %e, align 481  %5 = load float, ptr %f, align 482  %6 = load float, ptr %g, align 483  %7 = load float, ptr %h, align 484  %8 = load float, ptr %i, align 485  %9 = load float, ptr %j, align 486  %10 = load float, ptr %k, align 487  %11 = load float, ptr %l, align 488  %12 = load float, ptr %m, align 489  %13 = load float, ptr %n, align 490  %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  ret float %call92}93 94; Note that stw is used instead of stfs because the value is a simple95; constant that can be created with a load-immediate in a GPR.96; CHECK: stw {{[0-9]+}}, 156(1)97 98