brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.6 KiB · 7fb0a5b Raw
446 lines · plain
1; Like frame-03.ll, but for z13.  In this case we have 16 more registers2; available.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s5 6; This function should require all FPRs, but no other spill slots.7; We need to save and restore 8 of the 16 FPRs, so the frame size8; should be exactly 8 * 8 = 64.  The CFA offset is 1609; (the caller-allocated part of the frame) + 64.10define void @f1(ptr %ptr) {11; CHECK-LABEL: f1:12; CHECK: aghi %r15, -6413; CHECK: .cfi_def_cfa_offset 22414; CHECK: std %f8, 56(%r15)15; CHECK: std %f9, 48(%r15)16; CHECK: std %f10, 40(%r15)17; CHECK: std %f11, 32(%r15)18; CHECK: std %f12, 24(%r15)19; CHECK: std %f13, 16(%r15)20; CHECK: std %f14, 8(%r15)21; CHECK: std %f15, 0(%r15)22; CHECK: .cfi_offset %f8, -16823; CHECK: .cfi_offset %f9, -17624; CHECK: .cfi_offset %f10, -18425; CHECK: .cfi_offset %f11, -19226; CHECK: .cfi_offset %f12, -20027; CHECK: .cfi_offset %f13, -20828; CHECK: .cfi_offset %f14, -21629; CHECK: .cfi_offset %f15, -22430; CHECK-DAG: ld %f0, 0(%r2)31; CHECK-DAG: ld %f7, 0(%r2)32; CHECK-DAG: ld %f8, 0(%r2)33; CHECK-DAG: ld %f15, 0(%r2)34; CHECK-DAG: vlrepg %v16, 0(%r2)35; CHECK-DAG: vlrepg %v23, 0(%r2)36; CHECK-DAG: vlrepg %v24, 0(%r2)37; CHECK-DAG: vlrepg %v31, 0(%r2)38; CHECK: ld %f8, 56(%r15)39; CHECK: ld %f9, 48(%r15)40; CHECK: ld %f10, 40(%r15)41; CHECK: ld %f11, 32(%r15)42; CHECK: ld %f12, 24(%r15)43; CHECK: ld %f13, 16(%r15)44; CHECK: ld %f14, 8(%r15)45; CHECK: ld %f15, 0(%r15)46; CHECK: aghi %r15, 6447; CHECK: br %r1448  %l0 = load volatile double, ptr %ptr49  %l1 = load volatile double, ptr %ptr50  %l2 = load volatile double, ptr %ptr51  %l3 = load volatile double, ptr %ptr52  %l4 = load volatile double, ptr %ptr53  %l5 = load volatile double, ptr %ptr54  %l6 = load volatile double, ptr %ptr55  %l7 = load volatile double, ptr %ptr56  %l8 = load volatile double, ptr %ptr57  %l9 = load volatile double, ptr %ptr58  %l10 = load volatile double, ptr %ptr59  %l11 = load volatile double, ptr %ptr60  %l12 = load volatile double, ptr %ptr61  %l13 = load volatile double, ptr %ptr62  %l14 = load volatile double, ptr %ptr63  %l15 = load volatile double, ptr %ptr64  %l16 = load volatile double, ptr %ptr65  %l17 = load volatile double, ptr %ptr66  %l18 = load volatile double, ptr %ptr67  %l19 = load volatile double, ptr %ptr68  %l20 = load volatile double, ptr %ptr69  %l21 = load volatile double, ptr %ptr70  %l22 = load volatile double, ptr %ptr71  %l23 = load volatile double, ptr %ptr72  %l24 = load volatile double, ptr %ptr73  %l25 = load volatile double, ptr %ptr74  %l26 = load volatile double, ptr %ptr75  %l27 = load volatile double, ptr %ptr76  %l28 = load volatile double, ptr %ptr77  %l29 = load volatile double, ptr %ptr78  %l30 = load volatile double, ptr %ptr79  %l31 = load volatile double, ptr %ptr80  %acc0 = fsub double %l0, %l081  %acc1 = fsub double %l1, %acc082  %acc2 = fsub double %l2, %acc183  %acc3 = fsub double %l3, %acc284  %acc4 = fsub double %l4, %acc385  %acc5 = fsub double %l5, %acc486  %acc6 = fsub double %l6, %acc587  %acc7 = fsub double %l7, %acc688  %acc8 = fsub double %l8, %acc789  %acc9 = fsub double %l9, %acc890  %acc10 = fsub double %l10, %acc991  %acc11 = fsub double %l11, %acc1092  %acc12 = fsub double %l12, %acc1193  %acc13 = fsub double %l13, %acc1294  %acc14 = fsub double %l14, %acc1395  %acc15 = fsub double %l15, %acc1496  %acc16 = fsub double %l16, %acc1597  %acc17 = fsub double %l17, %acc1698  %acc18 = fsub double %l18, %acc1799  %acc19 = fsub double %l19, %acc18100  %acc20 = fsub double %l20, %acc19101  %acc21 = fsub double %l21, %acc20102  %acc22 = fsub double %l22, %acc21103  %acc23 = fsub double %l23, %acc22104  %acc24 = fsub double %l24, %acc23105  %acc25 = fsub double %l25, %acc24106  %acc26 = fsub double %l26, %acc25107  %acc27 = fsub double %l27, %acc26108  %acc28 = fsub double %l28, %acc27109  %acc29 = fsub double %l29, %acc28110  %acc30 = fsub double %l30, %acc29111  %acc31 = fsub double %l31, %acc30112  store volatile double %acc0, ptr %ptr113  store volatile double %acc1, ptr %ptr114  store volatile double %acc2, ptr %ptr115  store volatile double %acc3, ptr %ptr116  store volatile double %acc4, ptr %ptr117  store volatile double %acc5, ptr %ptr118  store volatile double %acc6, ptr %ptr119  store volatile double %acc7, ptr %ptr120  store volatile double %acc8, ptr %ptr121  store volatile double %acc9, ptr %ptr122  store volatile double %acc10, ptr %ptr123  store volatile double %acc11, ptr %ptr124  store volatile double %acc12, ptr %ptr125  store volatile double %acc13, ptr %ptr126  store volatile double %acc14, ptr %ptr127  store volatile double %acc15, ptr %ptr128  store volatile double %acc16, ptr %ptr129  store volatile double %acc17, ptr %ptr130  store volatile double %acc18, ptr %ptr131  store volatile double %acc19, ptr %ptr132  store volatile double %acc20, ptr %ptr133  store volatile double %acc21, ptr %ptr134  store volatile double %acc22, ptr %ptr135  store volatile double %acc23, ptr %ptr136  store volatile double %acc24, ptr %ptr137  store volatile double %acc25, ptr %ptr138  store volatile double %acc26, ptr %ptr139  store volatile double %acc27, ptr %ptr140  store volatile double %acc28, ptr %ptr141  store volatile double %acc29, ptr %ptr142  store volatile double %acc30, ptr %ptr143  store volatile double %acc31, ptr %ptr144  ret void145}146 147; Like f1, but requires one fewer FPR.  We allocate in numerical order,148; so %f15 is the one that gets dropped.149define void @f2(ptr %ptr) {150; CHECK-LABEL: f2:151; CHECK: aghi %r15, -56152; CHECK: .cfi_def_cfa_offset 216153; CHECK: std %f8, 48(%r15)154; CHECK: std %f9, 40(%r15)155; CHECK: std %f10, 32(%r15)156; CHECK: std %f11, 24(%r15)157; CHECK: std %f12, 16(%r15)158; CHECK: std %f13, 8(%r15)159; CHECK: std %f14, 0(%r15)160; CHECK: .cfi_offset %f8, -168161; CHECK: .cfi_offset %f9, -176162; CHECK: .cfi_offset %f10, -184163; CHECK: .cfi_offset %f11, -192164; CHECK: .cfi_offset %f12, -200165; CHECK: .cfi_offset %f13, -208166; CHECK: .cfi_offset %f14, -216167; CHECK-NOT: %v15168; CHECK-NOT: %f15169; CHECK: ld %f8, 48(%r15)170; CHECK: ld %f9, 40(%r15)171; CHECK: ld %f10, 32(%r15)172; CHECK: ld %f11, 24(%r15)173; CHECK: ld %f12, 16(%r15)174; CHECK: ld %f13, 8(%r15)175; CHECK: ld %f14, 0(%r15)176; CHECK: aghi %r15, 56177; CHECK: br %r14178  %l0 = load volatile double, ptr %ptr179  %l1 = load volatile double, ptr %ptr180  %l2 = load volatile double, ptr %ptr181  %l3 = load volatile double, ptr %ptr182  %l4 = load volatile double, ptr %ptr183  %l5 = load volatile double, ptr %ptr184  %l6 = load volatile double, ptr %ptr185  %l7 = load volatile double, ptr %ptr186  %l8 = load volatile double, ptr %ptr187  %l9 = load volatile double, ptr %ptr188  %l10 = load volatile double, ptr %ptr189  %l11 = load volatile double, ptr %ptr190  %l12 = load volatile double, ptr %ptr191  %l13 = load volatile double, ptr %ptr192  %l14 = load volatile double, ptr %ptr193  %l16 = load volatile double, ptr %ptr194  %l17 = load volatile double, ptr %ptr195  %l18 = load volatile double, ptr %ptr196  %l19 = load volatile double, ptr %ptr197  %l20 = load volatile double, ptr %ptr198  %l21 = load volatile double, ptr %ptr199  %l22 = load volatile double, ptr %ptr200  %l23 = load volatile double, ptr %ptr201  %l24 = load volatile double, ptr %ptr202  %l25 = load volatile double, ptr %ptr203  %l26 = load volatile double, ptr %ptr204  %l27 = load volatile double, ptr %ptr205  %l28 = load volatile double, ptr %ptr206  %l29 = load volatile double, ptr %ptr207  %l30 = load volatile double, ptr %ptr208  %l31 = load volatile double, ptr %ptr209  %acc0 = fsub double %l0, %l0210  %acc1 = fsub double %l1, %acc0211  %acc2 = fsub double %l2, %acc1212  %acc3 = fsub double %l3, %acc2213  %acc4 = fsub double %l4, %acc3214  %acc5 = fsub double %l5, %acc4215  %acc6 = fsub double %l6, %acc5216  %acc7 = fsub double %l7, %acc6217  %acc8 = fsub double %l8, %acc7218  %acc9 = fsub double %l9, %acc8219  %acc10 = fsub double %l10, %acc9220  %acc11 = fsub double %l11, %acc10221  %acc12 = fsub double %l12, %acc11222  %acc13 = fsub double %l13, %acc12223  %acc14 = fsub double %l14, %acc13224  %acc16 = fsub double %l16, %acc14225  %acc17 = fsub double %l17, %acc16226  %acc18 = fsub double %l18, %acc17227  %acc19 = fsub double %l19, %acc18228  %acc20 = fsub double %l20, %acc19229  %acc21 = fsub double %l21, %acc20230  %acc22 = fsub double %l22, %acc21231  %acc23 = fsub double %l23, %acc22232  %acc24 = fsub double %l24, %acc23233  %acc25 = fsub double %l25, %acc24234  %acc26 = fsub double %l26, %acc25235  %acc27 = fsub double %l27, %acc26236  %acc28 = fsub double %l28, %acc27237  %acc29 = fsub double %l29, %acc28238  %acc30 = fsub double %l30, %acc29239  %acc31 = fsub double %l31, %acc30240  store volatile double %acc0, ptr %ptr241  store volatile double %acc1, ptr %ptr242  store volatile double %acc2, ptr %ptr243  store volatile double %acc3, ptr %ptr244  store volatile double %acc4, ptr %ptr245  store volatile double %acc5, ptr %ptr246  store volatile double %acc6, ptr %ptr247  store volatile double %acc7, ptr %ptr248  store volatile double %acc8, ptr %ptr249  store volatile double %acc9, ptr %ptr250  store volatile double %acc10, ptr %ptr251  store volatile double %acc11, ptr %ptr252  store volatile double %acc12, ptr %ptr253  store volatile double %acc13, ptr %ptr254  store volatile double %acc14, ptr %ptr255  store volatile double %acc16, ptr %ptr256  store volatile double %acc17, ptr %ptr257  store volatile double %acc18, ptr %ptr258  store volatile double %acc19, ptr %ptr259  store volatile double %acc20, ptr %ptr260  store volatile double %acc21, ptr %ptr261  store volatile double %acc22, ptr %ptr262  store volatile double %acc23, ptr %ptr263  store volatile double %acc24, ptr %ptr264  store volatile double %acc25, ptr %ptr265  store volatile double %acc26, ptr %ptr266  store volatile double %acc27, ptr %ptr267  store volatile double %acc28, ptr %ptr268  store volatile double %acc29, ptr %ptr269  store volatile double %acc30, ptr %ptr270  store volatile double %acc31, ptr %ptr271  ret void272}273 274; Like f1, but should require only one call-saved FPR.275define void @f3(ptr %ptr) {276; CHECK-LABEL: f3:277; CHECK: aghi %r15, -8278; CHECK: .cfi_def_cfa_offset 168279; CHECK: std %f8, 0(%r15)280; CHECK: .cfi_offset %f8, -168281; CHECK-NOT: {{%[fv]9}}282; CHECK-NOT: {{%[fv]1[0-5]}}283; CHECK: ld %f8, 0(%r15)284; CHECK: aghi %r15, 8285; CHECK: br %r14286  %l0 = load volatile double, ptr %ptr287  %l1 = load volatile double, ptr %ptr288  %l2 = load volatile double, ptr %ptr289  %l3 = load volatile double, ptr %ptr290  %l4 = load volatile double, ptr %ptr291  %l5 = load volatile double, ptr %ptr292  %l6 = load volatile double, ptr %ptr293  %l7 = load volatile double, ptr %ptr294  %l8 = load volatile double, ptr %ptr295  %l16 = load volatile double, ptr %ptr296  %l17 = load volatile double, ptr %ptr297  %l18 = load volatile double, ptr %ptr298  %l19 = load volatile double, ptr %ptr299  %l20 = load volatile double, ptr %ptr300  %l21 = load volatile double, ptr %ptr301  %l22 = load volatile double, ptr %ptr302  %l23 = load volatile double, ptr %ptr303  %l24 = load volatile double, ptr %ptr304  %l25 = load volatile double, ptr %ptr305  %l26 = load volatile double, ptr %ptr306  %l27 = load volatile double, ptr %ptr307  %l28 = load volatile double, ptr %ptr308  %l29 = load volatile double, ptr %ptr309  %l30 = load volatile double, ptr %ptr310  %l31 = load volatile double, ptr %ptr311  %acc0 = fsub double %l0, %l0312  %acc1 = fsub double %l1, %acc0313  %acc2 = fsub double %l2, %acc1314  %acc3 = fsub double %l3, %acc2315  %acc4 = fsub double %l4, %acc3316  %acc5 = fsub double %l5, %acc4317  %acc6 = fsub double %l6, %acc5318  %acc7 = fsub double %l7, %acc6319  %acc8 = fsub double %l8, %acc7320  %acc16 = fsub double %l16, %acc8321  %acc17 = fsub double %l17, %acc16322  %acc18 = fsub double %l18, %acc17323  %acc19 = fsub double %l19, %acc18324  %acc20 = fsub double %l20, %acc19325  %acc21 = fsub double %l21, %acc20326  %acc22 = fsub double %l22, %acc21327  %acc23 = fsub double %l23, %acc22328  %acc24 = fsub double %l24, %acc23329  %acc25 = fsub double %l25, %acc24330  %acc26 = fsub double %l26, %acc25331  %acc27 = fsub double %l27, %acc26332  %acc28 = fsub double %l28, %acc27333  %acc29 = fsub double %l29, %acc28334  %acc30 = fsub double %l30, %acc29335  %acc31 = fsub double %l31, %acc30336  store volatile double %acc0, ptr %ptr337  store volatile double %acc1, ptr %ptr338  store volatile double %acc2, ptr %ptr339  store volatile double %acc3, ptr %ptr340  store volatile double %acc4, ptr %ptr341  store volatile double %acc5, ptr %ptr342  store volatile double %acc6, ptr %ptr343  store volatile double %acc7, ptr %ptr344  store volatile double %acc8, ptr %ptr345  store volatile double %acc16, ptr %ptr346  store volatile double %acc17, ptr %ptr347  store volatile double %acc18, ptr %ptr348  store volatile double %acc19, ptr %ptr349  store volatile double %acc20, ptr %ptr350  store volatile double %acc21, ptr %ptr351  store volatile double %acc22, ptr %ptr352  store volatile double %acc23, ptr %ptr353  store volatile double %acc24, ptr %ptr354  store volatile double %acc25, ptr %ptr355  store volatile double %acc26, ptr %ptr356  store volatile double %acc27, ptr %ptr357  store volatile double %acc28, ptr %ptr358  store volatile double %acc29, ptr %ptr359  store volatile double %acc30, ptr %ptr360  store volatile double %acc31, ptr %ptr361  ret void362}363 364; This function should use all call-clobbered FPRs and vector registers365; but no call-saved ones.  It shouldn't need to create a frame.366define void @f4(ptr %ptr) {367; CHECK-LABEL: f4:368; CHECK-NOT: %r15369; CHECK-NOT: {{%[fv][89]}}370; CHECK-NOT: {{%[fv]1[0-5]}}371; CHECK: br %r14372  %l0 = load volatile double, ptr %ptr373  %l1 = load volatile double, ptr %ptr374  %l2 = load volatile double, ptr %ptr375  %l3 = load volatile double, ptr %ptr376  %l4 = load volatile double, ptr %ptr377  %l5 = load volatile double, ptr %ptr378  %l6 = load volatile double, ptr %ptr379  %l7 = load volatile double, ptr %ptr380  %l16 = load volatile double, ptr %ptr381  %l17 = load volatile double, ptr %ptr382  %l18 = load volatile double, ptr %ptr383  %l19 = load volatile double, ptr %ptr384  %l20 = load volatile double, ptr %ptr385  %l21 = load volatile double, ptr %ptr386  %l22 = load volatile double, ptr %ptr387  %l23 = load volatile double, ptr %ptr388  %l24 = load volatile double, ptr %ptr389  %l25 = load volatile double, ptr %ptr390  %l26 = load volatile double, ptr %ptr391  %l27 = load volatile double, ptr %ptr392  %l28 = load volatile double, ptr %ptr393  %l29 = load volatile double, ptr %ptr394  %l30 = load volatile double, ptr %ptr395  %l31 = load volatile double, ptr %ptr396  %acc0 = fsub double %l0, %l0397  %acc1 = fsub double %l1, %acc0398  %acc2 = fsub double %l2, %acc1399  %acc3 = fsub double %l3, %acc2400  %acc4 = fsub double %l4, %acc3401  %acc5 = fsub double %l5, %acc4402  %acc6 = fsub double %l6, %acc5403  %acc7 = fsub double %l7, %acc6404  %acc16 = fsub double %l16, %acc7405  %acc17 = fsub double %l17, %acc16406  %acc18 = fsub double %l18, %acc17407  %acc19 = fsub double %l19, %acc18408  %acc20 = fsub double %l20, %acc19409  %acc21 = fsub double %l21, %acc20410  %acc22 = fsub double %l22, %acc21411  %acc23 = fsub double %l23, %acc22412  %acc24 = fsub double %l24, %acc23413  %acc25 = fsub double %l25, %acc24414  %acc26 = fsub double %l26, %acc25415  %acc27 = fsub double %l27, %acc26416  %acc28 = fsub double %l28, %acc27417  %acc29 = fsub double %l29, %acc28418  %acc30 = fsub double %l30, %acc29419  %acc31 = fsub double %l31, %acc30420  store volatile double %acc0, ptr %ptr421  store volatile double %acc1, ptr %ptr422  store volatile double %acc2, ptr %ptr423  store volatile double %acc3, ptr %ptr424  store volatile double %acc4, ptr %ptr425  store volatile double %acc5, ptr %ptr426  store volatile double %acc6, ptr %ptr427  store volatile double %acc7, ptr %ptr428  store volatile double %acc16, ptr %ptr429  store volatile double %acc17, ptr %ptr430  store volatile double %acc18, ptr %ptr431  store volatile double %acc19, ptr %ptr432  store volatile double %acc20, ptr %ptr433  store volatile double %acc21, ptr %ptr434  store volatile double %acc22, ptr %ptr435  store volatile double %acc23, ptr %ptr436  store volatile double %acc24, ptr %ptr437  store volatile double %acc25, ptr %ptr438  store volatile double %acc26, ptr %ptr439  store volatile double %acc27, ptr %ptr440  store volatile double %acc28, ptr %ptr441  store volatile double %acc29, ptr %ptr442  store volatile double %acc30, ptr %ptr443  store volatile double %acc31, ptr %ptr444  ret void445}446