[SystemZ] Handle extensions in RxSBG optimizations
[oota-llvm.git] / test / CodeGen / SystemZ / int-const-01.ll
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 }