brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 37db5f8 Raw
260 lines · plain
1; Like frame-02.ll, but with doubles rather than floats.  Internally this2; uses a different register class, but the set of saved and restored3; registers should be the same.4;5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s6 7; This function should require all FPRs, but no other spill slots.8; We need to save and restore 8 of the 16 FPRs, so the frame size9; should be exactly 8 * 8 = 64.  The CFA offset is 16010; (the caller-allocated part of the frame) + 64.11define void @f1(ptr %ptr) {12; CHECK-LABEL: f1:13; CHECK: aghi %r15, -6414; CHECK: .cfi_def_cfa_offset 22415; CHECK: std %f8, 56(%r15)16; CHECK: std %f9, 48(%r15)17; CHECK: std %f10, 40(%r15)18; CHECK: std %f11, 32(%r15)19; CHECK: std %f12, 24(%r15)20; CHECK: std %f13, 16(%r15)21; CHECK: std %f14, 8(%r15)22; CHECK: std %f15, 0(%r15)23; CHECK: .cfi_offset %f8, -16824; CHECK: .cfi_offset %f9, -17625; CHECK: .cfi_offset %f10, -18426; CHECK: .cfi_offset %f11, -19227; CHECK: .cfi_offset %f12, -20028; CHECK: .cfi_offset %f13, -20829; CHECK: .cfi_offset %f14, -21630; CHECK: .cfi_offset %f15, -22431; ...main function body...32; CHECK: ld %f8, 56(%r15)33; CHECK: ld %f9, 48(%r15)34; CHECK: ld %f10, 40(%r15)35; CHECK: ld %f11, 32(%r15)36; CHECK: ld %f12, 24(%r15)37; CHECK: ld %f13, 16(%r15)38; CHECK: ld %f14, 8(%r15)39; CHECK: ld %f15, 0(%r15)40; CHECK: aghi %r15, 6441; CHECK: br %r1442  %l0 = load volatile double, ptr %ptr43  %l1 = load volatile double, ptr %ptr44  %l2 = load volatile double, ptr %ptr45  %l3 = load volatile double, ptr %ptr46  %l4 = load volatile double, ptr %ptr47  %l5 = load volatile double, ptr %ptr48  %l6 = load volatile double, ptr %ptr49  %l7 = load volatile double, ptr %ptr50  %l8 = load volatile double, ptr %ptr51  %l9 = load volatile double, ptr %ptr52  %l10 = load volatile double, ptr %ptr53  %l11 = load volatile double, ptr %ptr54  %l12 = load volatile double, ptr %ptr55  %l13 = load volatile double, ptr %ptr56  %l14 = load volatile double, ptr %ptr57  %l15 = load volatile double, ptr %ptr58  %add0 = fadd double %l0, %l059  %add1 = fadd double %l1, %add060  %add2 = fadd double %l2, %add161  %add3 = fadd double %l3, %add262  %add4 = fadd double %l4, %add363  %add5 = fadd double %l5, %add464  %add6 = fadd double %l6, %add565  %add7 = fadd double %l7, %add666  %add8 = fadd double %l8, %add767  %add9 = fadd double %l9, %add868  %add10 = fadd double %l10, %add969  %add11 = fadd double %l11, %add1070  %add12 = fadd double %l12, %add1171  %add13 = fadd double %l13, %add1272  %add14 = fadd double %l14, %add1373  %add15 = fadd double %l15, %add1474  store volatile double %add0, ptr %ptr75  store volatile double %add1, ptr %ptr76  store volatile double %add2, ptr %ptr77  store volatile double %add3, ptr %ptr78  store volatile double %add4, ptr %ptr79  store volatile double %add5, ptr %ptr80  store volatile double %add6, ptr %ptr81  store volatile double %add7, ptr %ptr82  store volatile double %add8, ptr %ptr83  store volatile double %add9, ptr %ptr84  store volatile double %add10, ptr %ptr85  store volatile double %add11, ptr %ptr86  store volatile double %add12, ptr %ptr87  store volatile double %add13, ptr %ptr88  store volatile double %add14, ptr %ptr89  store volatile double %add15, ptr %ptr90  ret void91}92 93; Like f1, but requires one fewer FPR.  We allocate in numerical order,94; so %f15 is the one that gets dropped.95define void @f2(ptr %ptr) {96; CHECK-LABEL: f2:97; CHECK: aghi %r15, -5698; CHECK: .cfi_def_cfa_offset 21699; CHECK: std %f8, 48(%r15)100; CHECK: std %f9, 40(%r15)101; CHECK: std %f10, 32(%r15)102; CHECK: std %f11, 24(%r15)103; CHECK: std %f12, 16(%r15)104; CHECK: std %f13, 8(%r15)105; CHECK: std %f14, 0(%r15)106; CHECK: .cfi_offset %f8, -168107; CHECK: .cfi_offset %f9, -176108; CHECK: .cfi_offset %f10, -184109; CHECK: .cfi_offset %f11, -192110; CHECK: .cfi_offset %f12, -200111; CHECK: .cfi_offset %f13, -208112; CHECK: .cfi_offset %f14, -216113; CHECK-NOT: %f15114; ...main function body...115; CHECK: ld %f8, 48(%r15)116; CHECK: ld %f9, 40(%r15)117; CHECK: ld %f10, 32(%r15)118; CHECK: ld %f11, 24(%r15)119; CHECK: ld %f12, 16(%r15)120; CHECK: ld %f13, 8(%r15)121; CHECK: ld %f14, 0(%r15)122; CHECK: aghi %r15, 56123; CHECK: br %r14124  %l0 = load volatile double, ptr %ptr125  %l1 = load volatile double, ptr %ptr126  %l2 = load volatile double, ptr %ptr127  %l3 = load volatile double, ptr %ptr128  %l4 = load volatile double, ptr %ptr129  %l5 = load volatile double, ptr %ptr130  %l6 = load volatile double, ptr %ptr131  %l7 = load volatile double, ptr %ptr132  %l8 = load volatile double, ptr %ptr133  %l9 = load volatile double, ptr %ptr134  %l10 = load volatile double, ptr %ptr135  %l11 = load volatile double, ptr %ptr136  %l12 = load volatile double, ptr %ptr137  %l13 = load volatile double, ptr %ptr138  %l14 = load volatile double, ptr %ptr139  %add0 = fadd double %l0, %l0140  %add1 = fadd double %l1, %add0141  %add2 = fadd double %l2, %add1142  %add3 = fadd double %l3, %add2143  %add4 = fadd double %l4, %add3144  %add5 = fadd double %l5, %add4145  %add6 = fadd double %l6, %add5146  %add7 = fadd double %l7, %add6147  %add8 = fadd double %l8, %add7148  %add9 = fadd double %l9, %add8149  %add10 = fadd double %l10, %add9150  %add11 = fadd double %l11, %add10151  %add12 = fadd double %l12, %add11152  %add13 = fadd double %l13, %add12153  %add14 = fadd double %l14, %add13154  store volatile double %add0, ptr %ptr155  store volatile double %add1, ptr %ptr156  store volatile double %add2, ptr %ptr157  store volatile double %add3, ptr %ptr158  store volatile double %add4, ptr %ptr159  store volatile double %add5, ptr %ptr160  store volatile double %add6, ptr %ptr161  store volatile double %add7, ptr %ptr162  store volatile double %add8, ptr %ptr163  store volatile double %add9, ptr %ptr164  store volatile double %add10, ptr %ptr165  store volatile double %add11, ptr %ptr166  store volatile double %add12, ptr %ptr167  store volatile double %add13, ptr %ptr168  store volatile double %add14, ptr %ptr169  ret void170}171 172; Like f1, but should require only one call-saved FPR.173define void @f3(ptr %ptr) {174; CHECK-LABEL: f3:175; CHECK: aghi %r15, -8176; CHECK: .cfi_def_cfa_offset 168177; CHECK: std %f8, 0(%r15)178; CHECK: .cfi_offset %f8, -168179; CHECK-NOT: %f9180; CHECK-NOT: %f10181; CHECK-NOT: %f11182; CHECK-NOT: %f12183; CHECK-NOT: %f13184; CHECK-NOT: %f14185; CHECK-NOT: %f15186; ...main function body...187; CHECK: ld %f8, 0(%r15)188; CHECK: aghi %r15, 8189; CHECK: br %r14190  %l0 = load volatile double, ptr %ptr191  %l1 = load volatile double, ptr %ptr192  %l2 = load volatile double, ptr %ptr193  %l3 = load volatile double, ptr %ptr194  %l4 = load volatile double, ptr %ptr195  %l5 = load volatile double, ptr %ptr196  %l6 = load volatile double, ptr %ptr197  %l7 = load volatile double, ptr %ptr198  %l8 = load volatile double, ptr %ptr199  %add0 = fadd double %l0, %l0200  %add1 = fadd double %l1, %add0201  %add2 = fadd double %l2, %add1202  %add3 = fadd double %l3, %add2203  %add4 = fadd double %l4, %add3204  %add5 = fadd double %l5, %add4205  %add6 = fadd double %l6, %add5206  %add7 = fadd double %l7, %add6207  %add8 = fadd double %l8, %add7208  store volatile double %add0, ptr %ptr209  store volatile double %add1, ptr %ptr210  store volatile double %add2, ptr %ptr211  store volatile double %add3, ptr %ptr212  store volatile double %add4, ptr %ptr213  store volatile double %add5, ptr %ptr214  store volatile double %add6, ptr %ptr215  store volatile double %add7, ptr %ptr216  store volatile double %add8, ptr %ptr217  ret void218}219 220; This function should use all call-clobbered FPRs but no call-saved ones.221; It shouldn't need to create a frame.222define void @f4(ptr %ptr) {223; CHECK-LABEL: f4:224; CHECK-NOT: %r15225; CHECK-NOT: %f8226; CHECK-NOT: %f9227; CHECK-NOT: %f10228; CHECK-NOT: %f11229; CHECK-NOT: %f12230; CHECK-NOT: %f13231; CHECK-NOT: %f14232; CHECK-NOT: %f15233; CHECK: br %r14234  %l0 = load volatile double, ptr %ptr235  %l1 = load volatile double, ptr %ptr236  %l2 = load volatile double, ptr %ptr237  %l3 = load volatile double, ptr %ptr238  %l4 = load volatile double, ptr %ptr239  %l5 = load volatile double, ptr %ptr240  %l6 = load volatile double, ptr %ptr241  %l7 = load volatile double, ptr %ptr242  %add0 = fadd double %l0, %l0243  %add1 = fadd double %l1, %add0244  %add2 = fadd double %l2, %add1245  %add3 = fadd double %l3, %add2246  %add4 = fadd double %l4, %add3247  %add5 = fadd double %l5, %add4248  %add6 = fadd double %l6, %add5249  %add7 = fadd double %l7, %add6250  store volatile double %add0, ptr %ptr251  store volatile double %add1, ptr %ptr252  store volatile double %add2, ptr %ptr253  store volatile double %add3, ptr %ptr254  store volatile double %add4, ptr %ptr255  store volatile double %add5, ptr %ptr256  store volatile double %add6, ptr %ptr257  store volatile double %add7, ptr %ptr258  ret void259}260