brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 556fcde Raw
111 lines · plain
1; Test 32-bit floating-point stores.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Test the low end of the STE range.6define void @f1(ptr %ptr, float %val) {7; CHECK-LABEL: f1:8; CHECK: ste %f0, 0(%r2)9; CHECK: br %r1410  store float %val, ptr %ptr11  ret void12}13 14; Test the high end of the STE range.15define void @f2(ptr %src, float %val) {16; CHECK-LABEL: f2:17; CHECK: ste %f0, 4092(%r2)18; CHECK: br %r1419  %ptr = getelementptr float, ptr %src, i64 102320  store float %val, ptr %ptr21  ret void22}23 24; Check the next word up, which should use STEY instead of STE.25define void @f3(ptr %src, float %val) {26; CHECK-LABEL: f3:27; CHECK: stey %f0, 4096(%r2)28; CHECK: br %r1429  %ptr = getelementptr float, ptr %src, i64 102430  store float %val, ptr %ptr31  ret void32}33 34; Check the high end of the aligned STEY range.35define void @f4(ptr %src, float %val) {36; CHECK-LABEL: f4:37; CHECK: stey %f0, 524284(%r2)38; CHECK: br %r1439  %ptr = getelementptr float, ptr %src, i64 13107140  store float %val, ptr %ptr41  ret void42}43 44; Check the next word up, which needs separate address logic.45; Other sequences besides this one would be OK.46define void @f5(ptr %src, float %val) {47; CHECK-LABEL: f5:48; CHECK: agfi %r2, 52428849; CHECK: ste %f0, 0(%r2)50; CHECK: br %r1451  %ptr = getelementptr float, ptr %src, i64 13107252  store float %val, ptr %ptr53  ret void54}55 56; Check the high end of the negative aligned STEY range.57define void @f6(ptr %src, float %val) {58; CHECK-LABEL: f6:59; CHECK: stey %f0, -4(%r2)60; CHECK: br %r1461  %ptr = getelementptr float, ptr %src, i64 -162  store float %val, ptr %ptr63  ret void64}65 66; Check the low end of the STEY range.67define void @f7(ptr %src, float %val) {68; CHECK-LABEL: f7:69; CHECK: stey %f0, -524288(%r2)70; CHECK: br %r1471  %ptr = getelementptr float, ptr %src, i64 -13107272  store float %val, ptr %ptr73  ret void74}75 76; Check the next word down, which needs separate address logic.77; Other sequences besides this one would be OK.78define void @f8(ptr %src, float %val) {79; CHECK-LABEL: f8:80; CHECK: agfi %r2, -52429281; CHECK: ste %f0, 0(%r2)82; CHECK: br %r1483  %ptr = getelementptr float, ptr %src, i64 -13107384  store float %val, ptr %ptr85  ret void86}87 88; Check that STE allows an index.89define void @f9(i64 %src, i64 %index, float %val) {90; CHECK-LABEL: f9:91; CHECK: ste %f0, 4092({{%r3,%r2|%r2,%r3}})92; CHECK: br %r1493  %add1 = add i64 %src, %index94  %add2 = add i64 %add1, 409295  %ptr = inttoptr i64 %add2 to ptr96  store float %val, ptr %ptr97  ret void98}99 100; Check that STEY allows an index.101define void @f10(i64 %src, i64 %index, float %val) {102; CHECK-LABEL: f10:103; CHECK: stey %f0, 4096({{%r3,%r2|%r2,%r3}})104; CHECK: br %r14105  %add1 = add i64 %src, %index106  %add2 = add i64 %add1, 4096107  %ptr = inttoptr i64 %add2 to ptr108  store float %val, ptr %ptr109  ret void110}111