brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 9d79bf3 Raw
105 lines · plain
1; Test sign extensions from an i32 to an i64.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; Test register extension, starting with an i32.6define i64 @f1(i32 %a) {7; CHECK-LABEL: f1:8; CHECK: lgfr %r2, %r29; CHECK: br %r1410  %ext = sext i32 %a to i6411  ret i64 %ext12}13 14; ...and again with an i64.15define i64 @f2(i64 %a) {16; CHECK-LABEL: f2:17; CHECK: lgfr %r2, %r218; CHECK: br %r1419  %word = trunc i64 %a to i3220  %ext = sext i32 %word to i6421  ret i64 %ext22}23 24; Check LGF with no displacement.25define i64 @f3(ptr %src) {26; CHECK-LABEL: f3:27; CHECK: lgf %r2, 0(%r2)28; CHECK: br %r1429  %word = load i32, ptr %src30  %ext = sext i32 %word to i6431  ret i64 %ext32}33 34; Check the high end of the LGF range.35define i64 @f4(ptr %src) {36; CHECK-LABEL: f4:37; CHECK: lgf %r2, 524284(%r2)38; CHECK: br %r1439  %ptr = getelementptr i32, ptr %src, i64 13107140  %word = load i32, ptr %ptr41  %ext = sext i32 %word to i6442  ret i64 %ext43}44 45; Check the next word up, which needs separate address logic.46; Other sequences besides this one would be OK.47define i64 @f5(ptr %src) {48; CHECK-LABEL: f5:49; CHECK: agfi %r2, 52428850; CHECK: lgf %r2, 0(%r2)51; CHECK: br %r1452  %ptr = getelementptr i32, ptr %src, i64 13107253  %word = load i32, ptr %ptr54  %ext = sext i32 %word to i6455  ret i64 %ext56}57 58; Check the high end of the negative LGF range.59define i64 @f6(ptr %src) {60; CHECK-LABEL: f6:61; CHECK: lgf %r2, -4(%r2)62; CHECK: br %r1463  %ptr = getelementptr i32, ptr %src, i64 -164  %word = load i32, ptr %ptr65  %ext = sext i32 %word to i6466  ret i64 %ext67}68 69; Check the low end of the LGF range.70define i64 @f7(ptr %src) {71; CHECK-LABEL: f7:72; CHECK: lgf %r2, -524288(%r2)73; CHECK: br %r1474  %ptr = getelementptr i32, ptr %src, i64 -13107275  %word = load i32, ptr %ptr76  %ext = sext i32 %word to i6477  ret i64 %ext78}79 80; Check the next word down, which needs separate address logic.81; Other sequences besides this one would be OK.82define i64 @f8(ptr %src) {83; CHECK-LABEL: f8:84; CHECK: agfi %r2, -52429285; CHECK: lgf %r2, 0(%r2)86; CHECK: br %r1487  %ptr = getelementptr i32, ptr %src, i64 -13107388  %word = load i32, ptr %ptr89  %ext = sext i32 %word to i6490  ret i64 %ext91}92 93; Check that LGF allows an index.94define i64 @f9(i64 %src, i64 %index) {95; CHECK-LABEL: f9:96; CHECK: lgf %r2, 524287(%r3,%r2)97; CHECK: br %r1498  %add1 = add i64 %src, %index99  %add2 = add i64 %add1, 524287100  %ptr = inttoptr i64 %add2 to ptr101  %word = load i32, ptr %ptr102  %ext = sext i32 %word to i64103  ret i64 %ext104}105