brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 46ad2c2 Raw
118 lines · plain
1; Test 32-bit GPR stores.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Test an i32 store.6define void @f1(ptr %dst, i32 %val) {7; CHECK-LABEL: f1:8; CHECK: st %r3, 0(%r2)9; CHECK: br %r1410  store i32 %val, ptr %dst11  ret void12}13 14; Test a truncating i64 store.15define void @f2(ptr %dst, i64 %val) {16  %word = trunc i64 %val to i3217  store i32 %word, ptr %dst18  ret void19}20 21; Check the high end of the aligned ST range.22define void @f3(ptr %dst, i32 %val) {23; CHECK-LABEL: f3:24; CHECK: st %r3, 4092(%r2)25; CHECK: br %r1426  %ptr = getelementptr i32, ptr %dst, i64 102327  store i32 %val, ptr %ptr28  ret void29}30 31; Check the next word up, which should use STY instead of ST.32define void @f4(ptr %dst, i32 %val) {33; CHECK-LABEL: f4:34; CHECK: sty %r3, 4096(%r2)35; CHECK: br %r1436  %ptr = getelementptr i32, ptr %dst, i64 102437  store i32 %val, ptr %ptr38  ret void39}40 41; Check the high end of the aligned STY range.42define void @f5(ptr %dst, i32 %val) {43; CHECK-LABEL: f5:44; CHECK: sty %r3, 524284(%r2)45; CHECK: br %r1446  %ptr = getelementptr i32, ptr %dst, i64 13107147  store i32 %val, ptr %ptr48  ret void49}50 51; Check the next word up, which needs separate address logic.52; Other sequences besides this one would be OK.53define void @f6(ptr %dst, i32 %val) {54; CHECK-LABEL: f6:55; CHECK: agfi %r2, 52428856; CHECK: st %r3, 0(%r2)57; CHECK: br %r1458  %ptr = getelementptr i32, ptr %dst, i64 13107259  store i32 %val, ptr %ptr60  ret void61}62 63; Check the high end of the negative aligned STY range.64define void @f7(ptr %dst, i32 %val) {65; CHECK-LABEL: f7:66; CHECK: sty %r3, -4(%r2)67; CHECK: br %r1468  %ptr = getelementptr i32, ptr %dst, i64 -169  store i32 %val, ptr %ptr70  ret void71}72 73; Check the low end of the STY range.74define void @f8(ptr %dst, i32 %val) {75; CHECK-LABEL: f8:76; CHECK: sty %r3, -524288(%r2)77; CHECK: br %r1478  %ptr = getelementptr i32, ptr %dst, i64 -13107279  store i32 %val, ptr %ptr80  ret void81}82 83; Check the next word down, which needs separate address logic.84; Other sequences besides this one would be OK.85define void @f9(ptr %dst, i32 %val) {86; CHECK-LABEL: f9:87; CHECK: agfi %r2, -52429288; CHECK: st %r3, 0(%r2)89; CHECK: br %r1490  %ptr = getelementptr i32, ptr %dst, i64 -13107391  store i32 %val, ptr %ptr92  ret void93}94 95; Check that ST allows an index.96define void @f10(i64 %dst, i64 %index, i32 %val) {97; CHECK-LABEL: f10:98; CHECK: st %r4, 4095(%r3,%r2)99; CHECK: br %r14100  %add1 = add i64 %dst, %index101  %add2 = add i64 %add1, 4095102  %ptr = inttoptr i64 %add2 to ptr103  store i32 %val, ptr %ptr104  ret void105}106 107; Check that STY allows an index.108define void @f11(i64 %dst, i64 %index, i32 %val) {109; CHECK-LABEL: f11:110; CHECK: sty %r4, 4096(%r3,%r2)111; CHECK: br %r14112  %add1 = add i64 %dst, %index113  %add2 = add i64 %add1, 4096114  %ptr = inttoptr i64 %add2 to ptr115  store i32 %val, ptr %ptr116  ret void117}118