114 lines · plain
1; Test loading of 32-bit constants.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5declare void @foo(i32, i32, i32, i32)6 7; Check 0.8define i32 @f1() {9; CHECK-LABEL: f1:10; CHECK: lhi %r2, 011; CHECK: br %r1412 ret i32 013}14 15; Check the high end of the LHI range.16define i32 @f2() {17; CHECK-LABEL: f2:18; CHECK: lhi %r2, 3276719; CHECK: br %r1420 ret i32 3276721}22 23; Check the next value up, which must use LLILL instead.24define i32 @f3() {25; CHECK-LABEL: f3:26; CHECK: llill %r2, 3276827; CHECK: br %r1428 ret i32 3276829}30 31; Check the high end of the LLILL range.32define i32 @f4() {33; CHECK-LABEL: f4:34; CHECK: llill %r2, 6553535; CHECK: br %r1436 ret i32 6553537}38 39; Check the first useful LLILH value, which is the next one up.40define i32 @f5() {41; CHECK-LABEL: f5:42; CHECK: llilh %r2, 143; CHECK: br %r1444 ret i32 6553645}46 47; Check the first useful IILF value, which is the next one up again.48define i32 @f6() {49; CHECK-LABEL: f6:50; CHECK: iilf %r2, 6553751; CHECK: br %r1452 ret i32 6553753}54 55; Check the high end of the LLILH range.56define i32 @f7() {57; CHECK-LABEL: f7:58; CHECK: llilh %r2, 6553559; CHECK: br %r1460 ret i32 -6553661}62 63; Check the next value up, which must use IILF.64define i32 @f8() {65; CHECK-LABEL: f8:66; CHECK: iilf %r2, 429490176167; CHECK: br %r1468 ret i32 -6553569}70 71; Check the highest useful IILF value, 0xffff7fff72define i32 @f9() {73; CHECK-LABEL: f9:74; CHECK: iilf %r2, 429493452775; CHECK: br %r1476 ret i32 -3276977}78 79; Check the next value up, which should use LHI.80define i32 @f10() {81; CHECK-LABEL: f10:82; CHECK: lhi %r2, -3276883; CHECK: br %r1484 ret i32 -3276885}86 87; Check -1.88define i32 @f11() {89; CHECK-LABEL: f11:90; CHECK: lhi %r2, -191; CHECK: br %r1492 ret i32 -193}94 95; Check that constant loads are rematerialized.96define i32 @f12() {97; CHECK-LABEL: f12:98; CHECK-DAG: lhi %r2, 4299; CHECK-DAG: llill %r3, 32768100; CHECK-DAG: llilh %r4, 1101; CHECK-DAG: iilf %r5, 65537102; CHECK: brasl %r14, foo@PLT103; CHECK-DAG: lhi %r2, 42104; CHECK-DAG: llill %r3, 32768105; CHECK-DAG: llilh %r4, 1106; CHECK-DAG: iilf %r5, 65537107; CHECK: brasl %r14, foo@PLT108; CHECK: lhi %r2, 42109; CHECK: br %r14110 call void @foo(i32 42, i32 32768, i32 65536, i32 65537)111 call void @foo(i32 42, i32 32768, i32 65536, i32 65537)112 ret i32 42113}114