brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · 64f3862 Raw
296 lines · plain
1; Test 32-bit additions of constants to memory.  The tests here2; assume z10 register pressure, without the high words being available.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s5 6; Check additions of 1.7define void @f1(ptr %ptr) {8; CHECK-LABEL: f1:9; CHECK: asi 0(%r2), 110; CHECK: br %r1411  %val = load i32, ptr %ptr12  %add = add i32 %val, 12713  store i32 %add, ptr %ptr14  ret void15}16 17; Check the high end of the constant range.18define void @f2(ptr %ptr) {19; CHECK-LABEL: f2:20; CHECK: asi 0(%r2), 12721; CHECK: br %r1422  %val = load i32, ptr %ptr23  %add = add i32 %val, 12724  store i32 %add, ptr %ptr25  ret void26}27 28; Check the next constant up, which must use an addition and a store.29; Both L/AHI and LHI/A would be OK.30define void @f3(ptr %ptr) {31; CHECK-LABEL: f3:32; CHECK-NOT: asi33; CHECK: st %r0, 0(%r2)34; CHECK: br %r1435  %val = load i32, ptr %ptr36  %add = add i32 %val, 12837  store i32 %add, ptr %ptr38  ret void39}40 41; Check the low end of the constant range.42define void @f4(ptr %ptr) {43; CHECK-LABEL: f4:44; CHECK: asi 0(%r2), -12845; CHECK: br %r1446  %val = load i32, ptr %ptr47  %add = add i32 %val, -12848  store i32 %add, ptr %ptr49  ret void50}51 52; Check the next value down, with the same comment as f3.53define void @f5(ptr %ptr) {54; CHECK-LABEL: f5:55; CHECK-NOT: asi56; CHECK: st %r0, 0(%r2)57; CHECK: br %r1458  %val = load i32, ptr %ptr59  %add = add i32 %val, -12960  store i32 %add, ptr %ptr61  ret void62}63 64; Check the high end of the aligned ASI range.65define void @f6(ptr %base) {66; CHECK-LABEL: f6:67; CHECK: asi 524284(%r2), 168; CHECK: br %r1469  %ptr = getelementptr i32, ptr %base, i64 13107170  %val = load i32, ptr %ptr71  %add = add i32 %val, 172  store i32 %add, ptr %ptr73  ret void74}75 76; Check the next word up, which must use separate address logic.77; Other sequences besides this one would be OK.78define void @f7(ptr %base) {79; CHECK-LABEL: f7:80; CHECK: agfi %r2, 52428881; CHECK: asi 0(%r2), 182; CHECK: br %r1483  %ptr = getelementptr i32, ptr %base, i64 13107284  %val = load i32, ptr %ptr85  %add = add i32 %val, 186  store i32 %add, ptr %ptr87  ret void88}89 90; Check the low end of the ASI range.91define void @f8(ptr %base) {92; CHECK-LABEL: f8:93; CHECK: asi -524288(%r2), 194; CHECK: br %r1495  %ptr = getelementptr i32, ptr %base, i64 -13107296  %val = load i32, ptr %ptr97  %add = add i32 %val, 198  store i32 %add, ptr %ptr99  ret void100}101 102; Check the next word down, which must use separate address logic.103; Other sequences besides this one would be OK.104define void @f9(ptr %base) {105; CHECK-LABEL: f9:106; CHECK: agfi %r2, -524292107; CHECK: asi 0(%r2), 1108; CHECK: br %r14109  %ptr = getelementptr i32, ptr %base, i64 -131073110  %val = load i32, ptr %ptr111  %add = add i32 %val, 1112  store i32 %add, ptr %ptr113  ret void114}115 116; Check that ASI does not allow indices.117define void @f10(i64 %base, i64 %index) {118; CHECK-LABEL: f10:119; CHECK: agr %r2, %r3120; CHECK: asi 4(%r2), 1121; CHECK: br %r14122  %add1 = add i64 %base, %index123  %add2 = add i64 %add1, 4124  %ptr = inttoptr i64 %add2 to ptr125  %val = load i32, ptr %ptr126  %add = add i32 %val, 1127  store i32 %add, ptr %ptr128  ret void129}130 131; Check that adding 127 to a spilled value can use ASI.132define void @f11(ptr %ptr, i32 %sel) {133; CHECK-LABEL: f11:134; CHECK: asi {{[0-9]+}}(%r15), 127135; CHECK: br %r14136entry:137  %val0 = load volatile i32, ptr %ptr138  %val1 = load volatile i32, ptr %ptr139  %val2 = load volatile i32, ptr %ptr140  %val3 = load volatile i32, ptr %ptr141  %val4 = load volatile i32, ptr %ptr142  %val5 = load volatile i32, ptr %ptr143  %val6 = load volatile i32, ptr %ptr144  %val7 = load volatile i32, ptr %ptr145  %val8 = load volatile i32, ptr %ptr146  %val9 = load volatile i32, ptr %ptr147  %val10 = load volatile i32, ptr %ptr148  %val11 = load volatile i32, ptr %ptr149  %val12 = load volatile i32, ptr %ptr150  %val13 = load volatile i32, ptr %ptr151  %val14 = load volatile i32, ptr %ptr152  %val15 = load volatile i32, ptr %ptr153 154  %test = icmp ne i32 %sel, 0155  br i1 %test, label %add, label %store156 157add:158  %add0 = add i32 %val0, 127159  %add1 = add i32 %val1, 127160  %add2 = add i32 %val2, 127161  %add3 = add i32 %val3, 127162  %add4 = add i32 %val4, 127163  %add5 = add i32 %val5, 127164  %add6 = add i32 %val6, 127165  %add7 = add i32 %val7, 127166  %add8 = add i32 %val8, 127167  %add9 = add i32 %val9, 127168  %add10 = add i32 %val10, 127169  %add11 = add i32 %val11, 127170  %add12 = add i32 %val12, 127171  %add13 = add i32 %val13, 127172  %add14 = add i32 %val14, 127173  %add15 = add i32 %val15, 127174  br label %store175 176store:177  %new0 = phi i32 [ %val0, %entry ], [ %add0, %add ]178  %new1 = phi i32 [ %val1, %entry ], [ %add1, %add ]179  %new2 = phi i32 [ %val2, %entry ], [ %add2, %add ]180  %new3 = phi i32 [ %val3, %entry ], [ %add3, %add ]181  %new4 = phi i32 [ %val4, %entry ], [ %add4, %add ]182  %new5 = phi i32 [ %val5, %entry ], [ %add5, %add ]183  %new6 = phi i32 [ %val6, %entry ], [ %add6, %add ]184  %new7 = phi i32 [ %val7, %entry ], [ %add7, %add ]185  %new8 = phi i32 [ %val8, %entry ], [ %add8, %add ]186  %new9 = phi i32 [ %val9, %entry ], [ %add9, %add ]187  %new10 = phi i32 [ %val10, %entry ], [ %add10, %add ]188  %new11 = phi i32 [ %val11, %entry ], [ %add11, %add ]189  %new12 = phi i32 [ %val12, %entry ], [ %add12, %add ]190  %new13 = phi i32 [ %val13, %entry ], [ %add13, %add ]191  %new14 = phi i32 [ %val14, %entry ], [ %add14, %add ]192  %new15 = phi i32 [ %val15, %entry ], [ %add15, %add ]193 194  store volatile i32 %new0, ptr %ptr195  store volatile i32 %new1, ptr %ptr196  store volatile i32 %new2, ptr %ptr197  store volatile i32 %new3, ptr %ptr198  store volatile i32 %new4, ptr %ptr199  store volatile i32 %new5, ptr %ptr200  store volatile i32 %new6, ptr %ptr201  store volatile i32 %new7, ptr %ptr202  store volatile i32 %new8, ptr %ptr203  store volatile i32 %new9, ptr %ptr204  store volatile i32 %new10, ptr %ptr205  store volatile i32 %new11, ptr %ptr206  store volatile i32 %new12, ptr %ptr207  store volatile i32 %new13, ptr %ptr208  store volatile i32 %new14, ptr %ptr209  store volatile i32 %new15, ptr %ptr210 211  ret void212}213 214; Check that adding -128 to a spilled value can use ASI.215define void @f12(ptr %ptr, i32 %sel) {216; CHECK-LABEL: f12:217; CHECK: asi {{[0-9]+}}(%r15), -128218; CHECK: br %r14219entry:220  %val0 = load volatile i32, ptr %ptr221  %val1 = load volatile i32, ptr %ptr222  %val2 = load volatile i32, ptr %ptr223  %val3 = load volatile i32, ptr %ptr224  %val4 = load volatile i32, ptr %ptr225  %val5 = load volatile i32, ptr %ptr226  %val6 = load volatile i32, ptr %ptr227  %val7 = load volatile i32, ptr %ptr228  %val8 = load volatile i32, ptr %ptr229  %val9 = load volatile i32, ptr %ptr230  %val10 = load volatile i32, ptr %ptr231  %val11 = load volatile i32, ptr %ptr232  %val12 = load volatile i32, ptr %ptr233  %val13 = load volatile i32, ptr %ptr234  %val14 = load volatile i32, ptr %ptr235  %val15 = load volatile i32, ptr %ptr236 237  %test = icmp ne i32 %sel, 0238  br i1 %test, label %add, label %store239 240add:241  %add0 = add i32 %val0, -128242  %add1 = add i32 %val1, -128243  %add2 = add i32 %val2, -128244  %add3 = add i32 %val3, -128245  %add4 = add i32 %val4, -128246  %add5 = add i32 %val5, -128247  %add6 = add i32 %val6, -128248  %add7 = add i32 %val7, -128249  %add8 = add i32 %val8, -128250  %add9 = add i32 %val9, -128251  %add10 = add i32 %val10, -128252  %add11 = add i32 %val11, -128253  %add12 = add i32 %val12, -128254  %add13 = add i32 %val13, -128255  %add14 = add i32 %val14, -128256  %add15 = add i32 %val15, -128257  br label %store258 259store:260  %new0 = phi i32 [ %val0, %entry ], [ %add0, %add ]261  %new1 = phi i32 [ %val1, %entry ], [ %add1, %add ]262  %new2 = phi i32 [ %val2, %entry ], [ %add2, %add ]263  %new3 = phi i32 [ %val3, %entry ], [ %add3, %add ]264  %new4 = phi i32 [ %val4, %entry ], [ %add4, %add ]265  %new5 = phi i32 [ %val5, %entry ], [ %add5, %add ]266  %new6 = phi i32 [ %val6, %entry ], [ %add6, %add ]267  %new7 = phi i32 [ %val7, %entry ], [ %add7, %add ]268  %new8 = phi i32 [ %val8, %entry ], [ %add8, %add ]269  %new9 = phi i32 [ %val9, %entry ], [ %add9, %add ]270  %new10 = phi i32 [ %val10, %entry ], [ %add10, %add ]271  %new11 = phi i32 [ %val11, %entry ], [ %add11, %add ]272  %new12 = phi i32 [ %val12, %entry ], [ %add12, %add ]273  %new13 = phi i32 [ %val13, %entry ], [ %add13, %add ]274  %new14 = phi i32 [ %val14, %entry ], [ %add14, %add ]275  %new15 = phi i32 [ %val15, %entry ], [ %add15, %add ]276 277  store volatile i32 %new0, ptr %ptr278  store volatile i32 %new1, ptr %ptr279  store volatile i32 %new2, ptr %ptr280  store volatile i32 %new3, ptr %ptr281  store volatile i32 %new4, ptr %ptr282  store volatile i32 %new5, ptr %ptr283  store volatile i32 %new6, ptr %ptr284  store volatile i32 %new7, ptr %ptr285  store volatile i32 %new8, ptr %ptr286  store volatile i32 %new9, ptr %ptr287  store volatile i32 %new10, ptr %ptr288  store volatile i32 %new11, ptr %ptr289  store volatile i32 %new12, ptr %ptr290  store volatile i32 %new13, ptr %ptr291  store volatile i32 %new14, ptr %ptr292  store volatile i32 %new15, ptr %ptr293 294  ret void295}296