1 ; Test loading of 32-bit constants. 2 ; 3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5 declare void @foo(i32, i32, i32, i32) 6 7 ; Check 0. 8 define i32 @f1() { 9 ; CHECK-LABEL: f1: 10 ; CHECK: lhi %r2, 0 11 ; CHECK: br %r14 12 ret i32 0 13 } 14 15 ; Check the high end of the LHI range. 16 define i32 @f2() { 17 ; CHECK-LABEL: f2: 18 ; CHECK: lhi %r2, 32767 19 ; CHECK: br %r14 20 ret i32 32767 21 } 22 23 ; Check the next value up, which must use LLILL instead. 24 define i32 @f3() { 25 ; CHECK-LABEL: f3: 26 ; CHECK: llill %r2, 32768 27 ; CHECK: br %r14 28 ret i32 32768 29 } 30 31 ; Check the high end of the LLILL range. 32 define i32 @f4() { 33 ; CHECK-LABEL: f4: 34 ; CHECK: llill %r2, 65535 35 ; CHECK: br %r14 36 ret i32 65535 37 } 38 39 ; Check the first useful LLILH value, which is the next one up. 40 define i32 @f5() { 41 ; CHECK-LABEL: f5: 42 ; CHECK: llilh %r2, 1 43 ; CHECK: br %r14 44 ret i32 65536 45 } 46 47 ; Check the first useful IILF value, which is the next one up again. 48 define i32 @f6() { 49 ; CHECK-LABEL: f6: 50 ; CHECK: iilf %r2, 65537 51 ; CHECK: br %r14 52 ret i32 65537 53 } 54 55 ; Check the high end of the LLILH range. 56 define i32 @f7() { 57 ; CHECK-LABEL: f7: 58 ; CHECK: llilh %r2, 65535 59 ; CHECK: br %r14 60 ret i32 -65536 61 } 62 63 ; Check the next value up, which must use IILF. 64 define i32 @f8() { 65 ; CHECK-LABEL: f8: 66 ; CHECK: iilf %r2, 4294901761 67 ; CHECK: br %r14 68 ret i32 -65535 69 } 70 71 ; Check the highest useful IILF value, 0xffff7fff 72 define i32 @f9() { 73 ; CHECK-LABEL: f9: 74 ; CHECK: iilf %r2, 4294934527 75 ; CHECK: br %r14 76 ret i32 -32769 77 } 78 79 ; Check the next value up, which should use LHI. 80 define i32 @f10() { 81 ; CHECK-LABEL: f10: 82 ; CHECK: lhi %r2, -32768 83 ; CHECK: br %r14 84 ret i32 -32768 85 } 86 87 ; Check -1. 88 define i32 @f11() { 89 ; CHECK-LABEL: f11: 90 ; CHECK: lhi %r2, -1 91 ; CHECK: br %r14 92 ret i32 -1 93 } 94 95 ; Check that constant loads are rematerialized. 96 define i32 @f12() { 97 ; CHECK-LABEL: f12: 98 ; CHECK-DAG: lhi %r2, 42 99 ; CHECK-DAG: llill %r3, 32768 100 ; CHECK-DAG: llilh %r4, 1 101 ; CHECK-DAG: iilf %r5, 65537 102 ; CHECK: brasl %r14, foo@PLT 103 ; CHECK-DAG: lhi %r2, 42 104 ; CHECK-DAG: llill %r3, 32768 105 ; CHECK-DAG: llilh %r4, 1 106 ; CHECK-DAG: iilf %r5, 65537 107 ; CHECK: brasl %r14, foo@PLT 108 ; CHECK: lhi %r2, 42 109 ; CHECK: br %r14 110 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 42 113 } 114