brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.5 KiB · 8857c04 Raw
295 lines · plain
1; Test 64-bit additions of constants to memory.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Check additions of 1.6define void @f1(ptr %ptr) {7; CHECK-LABEL: f1:8; CHECK: agsi 0(%r2), 19; CHECK: br %r1410  %val = load i64, ptr %ptr11  %add = add i64 %val, 12712  store i64 %add, ptr %ptr13  ret void14}15 16; Check the high end of the constant range.17define void @f2(ptr %ptr) {18; CHECK-LABEL: f2:19; CHECK: agsi 0(%r2), 12720; CHECK: br %r1421  %val = load i64, ptr %ptr22  %add = add i64 %val, 12723  store i64 %add, ptr %ptr24  ret void25}26 27; Check the next constant up, which must use an addition and a store.28; Both LG/AGHI and LGHI/AG would be OK.29define void @f3(ptr %ptr) {30; CHECK-LABEL: f3:31; CHECK-NOT: agsi32; CHECK: stg %r0, 0(%r2)33; CHECK: br %r1434  %val = load i64, ptr %ptr35  %add = add i64 %val, 12836  store i64 %add, ptr %ptr37  ret void38}39 40; Check the low end of the constant range.41define void @f4(ptr %ptr) {42; CHECK-LABEL: f4:43; CHECK: agsi 0(%r2), -12844; CHECK: br %r1445  %val = load i64, ptr %ptr46  %add = add i64 %val, -12847  store i64 %add, ptr %ptr48  ret void49}50 51; Check the next value down, with the same comment as f3.52define void @f5(ptr %ptr) {53; CHECK-LABEL: f5:54; CHECK-NOT: agsi55; CHECK: stg %r0, 0(%r2)56; CHECK: br %r1457  %val = load i64, ptr %ptr58  %add = add i64 %val, -12959  store i64 %add, ptr %ptr60  ret void61}62 63; Check the high end of the aligned AGSI range.64define void @f6(ptr %base) {65; CHECK-LABEL: f6:66; CHECK: agsi 524280(%r2), 167; CHECK: br %r1468  %ptr = getelementptr i64, ptr %base, i64 6553569  %val = load i64, ptr %ptr70  %add = add i64 %val, 171  store i64 %add, ptr %ptr72  ret void73}74 75; Check the next doubleword up, which must use separate address logic.76; Other sequences besides this one would be OK.77define void @f7(ptr %base) {78; CHECK-LABEL: f7:79; CHECK: agfi %r2, 52428880; CHECK: agsi 0(%r2), 181; CHECK: br %r1482  %ptr = getelementptr i64, ptr %base, i64 6553683  %val = load i64, ptr %ptr84  %add = add i64 %val, 185  store i64 %add, ptr %ptr86  ret void87}88 89; Check the low end of the AGSI range.90define void @f8(ptr %base) {91; CHECK-LABEL: f8:92; CHECK: agsi -524288(%r2), 193; CHECK: br %r1494  %ptr = getelementptr i64, ptr %base, i64 -6553695  %val = load i64, ptr %ptr96  %add = add i64 %val, 197  store i64 %add, ptr %ptr98  ret void99}100 101; Check the next doubleword down, which must use separate address logic.102; Other sequences besides this one would be OK.103define void @f9(ptr %base) {104; CHECK-LABEL: f9:105; CHECK: agfi %r2, -524296106; CHECK: agsi 0(%r2), 1107; CHECK: br %r14108  %ptr = getelementptr i64, ptr %base, i64 -65537109  %val = load i64, ptr %ptr110  %add = add i64 %val, 1111  store i64 %add, ptr %ptr112  ret void113}114 115; Check that AGSI does not allow indices.116define void @f10(i64 %base, i64 %index) {117; CHECK-LABEL: f10:118; CHECK: agr %r2, %r3119; CHECK: agsi 8(%r2), 1120; CHECK: br %r14121  %add1 = add i64 %base, %index122  %add2 = add i64 %add1, 8123  %ptr = inttoptr i64 %add2 to ptr124  %val = load i64, ptr %ptr125  %add = add i64 %val, 1126  store i64 %add, ptr %ptr127  ret void128}129 130; Check that adding 127 to a spilled value can use AGSI.131define void @f11(ptr %ptr, i32 %sel) {132; CHECK-LABEL: f11:133; CHECK: agsi {{[0-9]+}}(%r15), 127134; CHECK: br %r14135entry:136  %val0 = load volatile i64, ptr %ptr137  %val1 = load volatile i64, ptr %ptr138  %val2 = load volatile i64, ptr %ptr139  %val3 = load volatile i64, ptr %ptr140  %val4 = load volatile i64, ptr %ptr141  %val5 = load volatile i64, ptr %ptr142  %val6 = load volatile i64, ptr %ptr143  %val7 = load volatile i64, ptr %ptr144  %val8 = load volatile i64, ptr %ptr145  %val9 = load volatile i64, ptr %ptr146  %val10 = load volatile i64, ptr %ptr147  %val11 = load volatile i64, ptr %ptr148  %val12 = load volatile i64, ptr %ptr149  %val13 = load volatile i64, ptr %ptr150  %val14 = load volatile i64, ptr %ptr151  %val15 = load volatile i64, ptr %ptr152 153  %test = icmp ne i32 %sel, 0154  br i1 %test, label %add, label %store155 156add:157  %add0 = add i64 %val0, 127158  %add1 = add i64 %val1, 127159  %add2 = add i64 %val2, 127160  %add3 = add i64 %val3, 127161  %add4 = add i64 %val4, 127162  %add5 = add i64 %val5, 127163  %add6 = add i64 %val6, 127164  %add7 = add i64 %val7, 127165  %add8 = add i64 %val8, 127166  %add9 = add i64 %val9, 127167  %add10 = add i64 %val10, 127168  %add11 = add i64 %val11, 127169  %add12 = add i64 %val12, 127170  %add13 = add i64 %val13, 127171  %add14 = add i64 %val14, 127172  %add15 = add i64 %val15, 127173  br label %store174 175store:176  %new0 = phi i64 [ %val0, %entry ], [ %add0, %add ]177  %new1 = phi i64 [ %val1, %entry ], [ %add1, %add ]178  %new2 = phi i64 [ %val2, %entry ], [ %add2, %add ]179  %new3 = phi i64 [ %val3, %entry ], [ %add3, %add ]180  %new4 = phi i64 [ %val4, %entry ], [ %add4, %add ]181  %new5 = phi i64 [ %val5, %entry ], [ %add5, %add ]182  %new6 = phi i64 [ %val6, %entry ], [ %add6, %add ]183  %new7 = phi i64 [ %val7, %entry ], [ %add7, %add ]184  %new8 = phi i64 [ %val8, %entry ], [ %add8, %add ]185  %new9 = phi i64 [ %val9, %entry ], [ %add9, %add ]186  %new10 = phi i64 [ %val10, %entry ], [ %add10, %add ]187  %new11 = phi i64 [ %val11, %entry ], [ %add11, %add ]188  %new12 = phi i64 [ %val12, %entry ], [ %add12, %add ]189  %new13 = phi i64 [ %val13, %entry ], [ %add13, %add ]190  %new14 = phi i64 [ %val14, %entry ], [ %add14, %add ]191  %new15 = phi i64 [ %val15, %entry ], [ %add15, %add ]192 193  store volatile i64 %new0, ptr %ptr194  store volatile i64 %new1, ptr %ptr195  store volatile i64 %new2, ptr %ptr196  store volatile i64 %new3, ptr %ptr197  store volatile i64 %new4, ptr %ptr198  store volatile i64 %new5, ptr %ptr199  store volatile i64 %new6, ptr %ptr200  store volatile i64 %new7, ptr %ptr201  store volatile i64 %new8, ptr %ptr202  store volatile i64 %new9, ptr %ptr203  store volatile i64 %new10, ptr %ptr204  store volatile i64 %new11, ptr %ptr205  store volatile i64 %new12, ptr %ptr206  store volatile i64 %new13, ptr %ptr207  store volatile i64 %new14, ptr %ptr208  store volatile i64 %new15, ptr %ptr209 210  ret void211}212 213; Check that adding -128 to a spilled value can use AGSI.214define void @f12(ptr %ptr, i32 %sel) {215; CHECK-LABEL: f12:216; CHECK: agsi {{[0-9]+}}(%r15), -128217; CHECK: br %r14218entry:219  %val0 = load volatile i64, ptr %ptr220  %val1 = load volatile i64, ptr %ptr221  %val2 = load volatile i64, ptr %ptr222  %val3 = load volatile i64, ptr %ptr223  %val4 = load volatile i64, ptr %ptr224  %val5 = load volatile i64, ptr %ptr225  %val6 = load volatile i64, ptr %ptr226  %val7 = load volatile i64, ptr %ptr227  %val8 = load volatile i64, ptr %ptr228  %val9 = load volatile i64, ptr %ptr229  %val10 = load volatile i64, ptr %ptr230  %val11 = load volatile i64, ptr %ptr231  %val12 = load volatile i64, ptr %ptr232  %val13 = load volatile i64, ptr %ptr233  %val14 = load volatile i64, ptr %ptr234  %val15 = load volatile i64, ptr %ptr235 236  %test = icmp ne i32 %sel, 0237  br i1 %test, label %add, label %store238 239add:240  %add0 = add i64 %val0, -128241  %add1 = add i64 %val1, -128242  %add2 = add i64 %val2, -128243  %add3 = add i64 %val3, -128244  %add4 = add i64 %val4, -128245  %add5 = add i64 %val5, -128246  %add6 = add i64 %val6, -128247  %add7 = add i64 %val7, -128248  %add8 = add i64 %val8, -128249  %add9 = add i64 %val9, -128250  %add10 = add i64 %val10, -128251  %add11 = add i64 %val11, -128252  %add12 = add i64 %val12, -128253  %add13 = add i64 %val13, -128254  %add14 = add i64 %val14, -128255  %add15 = add i64 %val15, -128256  br label %store257 258store:259  %new0 = phi i64 [ %val0, %entry ], [ %add0, %add ]260  %new1 = phi i64 [ %val1, %entry ], [ %add1, %add ]261  %new2 = phi i64 [ %val2, %entry ], [ %add2, %add ]262  %new3 = phi i64 [ %val3, %entry ], [ %add3, %add ]263  %new4 = phi i64 [ %val4, %entry ], [ %add4, %add ]264  %new5 = phi i64 [ %val5, %entry ], [ %add5, %add ]265  %new6 = phi i64 [ %val6, %entry ], [ %add6, %add ]266  %new7 = phi i64 [ %val7, %entry ], [ %add7, %add ]267  %new8 = phi i64 [ %val8, %entry ], [ %add8, %add ]268  %new9 = phi i64 [ %val9, %entry ], [ %add9, %add ]269  %new10 = phi i64 [ %val10, %entry ], [ %add10, %add ]270  %new11 = phi i64 [ %val11, %entry ], [ %add11, %add ]271  %new12 = phi i64 [ %val12, %entry ], [ %add12, %add ]272  %new13 = phi i64 [ %val13, %entry ], [ %add13, %add ]273  %new14 = phi i64 [ %val14, %entry ], [ %add14, %add ]274  %new15 = phi i64 [ %val15, %entry ], [ %add15, %add ]275 276  store volatile i64 %new0, ptr %ptr277  store volatile i64 %new1, ptr %ptr278  store volatile i64 %new2, ptr %ptr279  store volatile i64 %new3, ptr %ptr280  store volatile i64 %new4, ptr %ptr281  store volatile i64 %new5, ptr %ptr282  store volatile i64 %new6, ptr %ptr283  store volatile i64 %new7, ptr %ptr284  store volatile i64 %new8, ptr %ptr285  store volatile i64 %new9, ptr %ptr286  store volatile i64 %new10, ptr %ptr287  store volatile i64 %new11, ptr %ptr288  store volatile i64 %new12, ptr %ptr289  store volatile i64 %new13, ptr %ptr290  store volatile i64 %new14, ptr %ptr291  store volatile i64 %new15, ptr %ptr292 293  ret void294}295