xref: /llvm-project/llvm/test/CodeGen/SystemZ/int-cmp-11.ll (revision 2eb027d21f882e03f0658cddbdfee31efbf08663)
19e3577ffSUlrich Weigand; Test 64-bit signed comparisons in which the second operand is a constant.
29e3577ffSUlrich Weigand;
39e3577ffSUlrich Weigand; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
49e3577ffSUlrich Weigand
59e3577ffSUlrich Weigand; Check comparisons with 0.
69e3577ffSUlrich Weiganddefine double @f1(double %a, double %b, i64 %i1) {
7d24ab20eSStephen Lin; CHECK-LABEL: f1:
8e1d9f00fSRichard Sandiford; CHECK: cgijl %r2, 0
99e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
109e3577ffSUlrich Weigand; CHECK: br %r14
119e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 0
12*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
13*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
149e3577ffSUlrich Weigand  ret double %res
159e3577ffSUlrich Weigand}
169e3577ffSUlrich Weigand
179e3577ffSUlrich Weigand; Check comparisons with 1.
189e3577ffSUlrich Weiganddefine double @f2(double %a, double %b, i64 %i1) {
19d24ab20eSStephen Lin; CHECK-LABEL: f2:
20a075708aSRichard Sandiford; CHECK: cgijle %r2, 0
219e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
229e3577ffSUlrich Weigand; CHECK: br %r14
239e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 1
24*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
25*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
269e3577ffSUlrich Weigand  ret double %res
279e3577ffSUlrich Weigand}
289e3577ffSUlrich Weigand
29e1d9f00fSRichard Sandiford; Check the high end of the CGIJ range.
309e3577ffSUlrich Weiganddefine double @f3(double %a, double %b, i64 %i1) {
31d24ab20eSStephen Lin; CHECK-LABEL: f3:
32e1d9f00fSRichard Sandiford; CHECK: cgijl %r2, 127
33e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
34e1d9f00fSRichard Sandiford; CHECK: br %r14
35e1d9f00fSRichard Sandiford  %cond = icmp slt i64 %i1, 127
36*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
37*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
38e1d9f00fSRichard Sandiford  ret double %res
39e1d9f00fSRichard Sandiford}
40e1d9f00fSRichard Sandiford
41e1d9f00fSRichard Sandiford; Check the next value up, which must use CGHI instead.
42e1d9f00fSRichard Sandiforddefine double @f4(double %a, double %b, i64 %i1) {
43d24ab20eSStephen Lin; CHECK-LABEL: f4:
44e1d9f00fSRichard Sandiford; CHECK: cghi %r2, 128
45e1d9f00fSRichard Sandiford; CHECK-NEXT: jl
46e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
47e1d9f00fSRichard Sandiford; CHECK: br %r14
48e1d9f00fSRichard Sandiford  %cond = icmp slt i64 %i1, 128
49*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
50*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
51e1d9f00fSRichard Sandiford  ret double %res
52e1d9f00fSRichard Sandiford}
53e1d9f00fSRichard Sandiford
54e1d9f00fSRichard Sandiford; Check the high end of the CGHI range.
55e1d9f00fSRichard Sandiforddefine double @f5(double %a, double %b, i64 %i1) {
56d24ab20eSStephen Lin; CHECK-LABEL: f5:
579e3577ffSUlrich Weigand; CHECK: cghi %r2, 32767
58586f4177SRichard Sandiford; CHECK-NEXT: jl
599e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
609e3577ffSUlrich Weigand; CHECK: br %r14
619e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 32767
62*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
63*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
649e3577ffSUlrich Weigand  ret double %res
659e3577ffSUlrich Weigand}
669e3577ffSUlrich Weigand
679e3577ffSUlrich Weigand; Check the next value up, which must use CGFI.
68e1d9f00fSRichard Sandiforddefine double @f6(double %a, double %b, i64 %i1) {
69d24ab20eSStephen Lin; CHECK-LABEL: f6:
709e3577ffSUlrich Weigand; CHECK: cgfi %r2, 32768
71586f4177SRichard Sandiford; CHECK-NEXT: jl
729e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
739e3577ffSUlrich Weigand; CHECK: br %r14
749e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 32768
75*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
76*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
779e3577ffSUlrich Weigand  ret double %res
789e3577ffSUlrich Weigand}
799e3577ffSUlrich Weigand
809e3577ffSUlrich Weigand; Check the high end of the CGFI range.
81e1d9f00fSRichard Sandiforddefine double @f7(double %a, double %b, i64 %i1) {
82d24ab20eSStephen Lin; CHECK-LABEL: f7:
839e3577ffSUlrich Weigand; CHECK: cgfi %r2, 2147483647
84586f4177SRichard Sandiford; CHECK-NEXT: jl
859e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
869e3577ffSUlrich Weigand; CHECK: br %r14
879e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 2147483647
88*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
89*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
909e3577ffSUlrich Weigand  ret double %res
919e3577ffSUlrich Weigand}
929e3577ffSUlrich Weigand
939e3577ffSUlrich Weigand; Check the next value up, which must use register comparison.
94e1d9f00fSRichard Sandiforddefine double @f8(double %a, double %b, i64 %i1) {
95d24ab20eSStephen Lin; CHECK-LABEL: f8:
960fb90ab0SRichard Sandiford; CHECK: cgrjl
979e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
989e3577ffSUlrich Weigand; CHECK: br %r14
999e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, 2147483648
100*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
101*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1029e3577ffSUlrich Weigand  ret double %res
1039e3577ffSUlrich Weigand}
1049e3577ffSUlrich Weigand
105e1d9f00fSRichard Sandiford; Check the high end of the negative CGIJ range.
106e1d9f00fSRichard Sandiforddefine double @f9(double %a, double %b, i64 %i1) {
107d24ab20eSStephen Lin; CHECK-LABEL: f9:
108e1d9f00fSRichard Sandiford; CHECK: cgijl %r2, -1
1099e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1109e3577ffSUlrich Weigand; CHECK: br %r14
1119e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, -1
112*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
113*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1149e3577ffSUlrich Weigand  ret double %res
1159e3577ffSUlrich Weigand}
1169e3577ffSUlrich Weigand
117e1d9f00fSRichard Sandiford; Check the low end of the CGIJ range.
118e1d9f00fSRichard Sandiforddefine double @f10(double %a, double %b, i64 %i1) {
119d24ab20eSStephen Lin; CHECK-LABEL: f10:
120e1d9f00fSRichard Sandiford; CHECK: cgijl %r2, -128
121e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
122e1d9f00fSRichard Sandiford; CHECK: br %r14
123e1d9f00fSRichard Sandiford  %cond = icmp slt i64 %i1, -128
124*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
125*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
126e1d9f00fSRichard Sandiford  ret double %res
127e1d9f00fSRichard Sandiford}
128e1d9f00fSRichard Sandiford
129e1d9f00fSRichard Sandiford; Check the next value down, which must use CGHI instead.
130e1d9f00fSRichard Sandiforddefine double @f11(double %a, double %b, i64 %i1) {
131d24ab20eSStephen Lin; CHECK-LABEL: f11:
132e1d9f00fSRichard Sandiford; CHECK: cghi %r2, -129
133e1d9f00fSRichard Sandiford; CHECK-NEXT: jl
134e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
135e1d9f00fSRichard Sandiford; CHECK: br %r14
136e1d9f00fSRichard Sandiford  %cond = icmp slt i64 %i1, -129
137*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
138*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
139e1d9f00fSRichard Sandiford  ret double %res
140e1d9f00fSRichard Sandiford}
141e1d9f00fSRichard Sandiford
1429e3577ffSUlrich Weigand; Check the low end of the CGHI range.
143e1d9f00fSRichard Sandiforddefine double @f12(double %a, double %b, i64 %i1) {
144d24ab20eSStephen Lin; CHECK-LABEL: f12:
1459e3577ffSUlrich Weigand; CHECK: cghi %r2, -32768
146586f4177SRichard Sandiford; CHECK-NEXT: jl
1479e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1489e3577ffSUlrich Weigand; CHECK: br %r14
1499e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, -32768
150*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
151*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1529e3577ffSUlrich Weigand  ret double %res
1539e3577ffSUlrich Weigand}
1549e3577ffSUlrich Weigand
1559e3577ffSUlrich Weigand; Check the next value down, which must use CGFI instead.
156e1d9f00fSRichard Sandiforddefine double @f13(double %a, double %b, i64 %i1) {
157d24ab20eSStephen Lin; CHECK-LABEL: f13:
1589e3577ffSUlrich Weigand; CHECK: cgfi %r2, -32769
159586f4177SRichard Sandiford; CHECK-NEXT: jl
1609e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1619e3577ffSUlrich Weigand; CHECK: br %r14
1629e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, -32769
163*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
164*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1659e3577ffSUlrich Weigand  ret double %res
1669e3577ffSUlrich Weigand}
1679e3577ffSUlrich Weigand
1689e3577ffSUlrich Weigand; Check the low end of the CGFI range.
169e1d9f00fSRichard Sandiforddefine double @f14(double %a, double %b, i64 %i1) {
170d24ab20eSStephen Lin; CHECK-LABEL: f14:
1719e3577ffSUlrich Weigand; CHECK: cgfi %r2, -2147483648
172586f4177SRichard Sandiford; CHECK-NEXT: jl
1739e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1749e3577ffSUlrich Weigand; CHECK: br %r14
1759e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, -2147483648
176*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
177*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1789e3577ffSUlrich Weigand  ret double %res
1799e3577ffSUlrich Weigand}
1809e3577ffSUlrich Weigand
1819e3577ffSUlrich Weigand; Check the next value down, which must use register comparison.
182e1d9f00fSRichard Sandiforddefine double @f15(double %a, double %b, i64 %i1) {
183d24ab20eSStephen Lin; CHECK-LABEL: f15:
1840fb90ab0SRichard Sandiford; CHECK: cgrjl
1859e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1869e3577ffSUlrich Weigand; CHECK: br %r14
1879e3577ffSUlrich Weigand  %cond = icmp slt i64 %i1, -2147483649
188*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
189*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1909e3577ffSUlrich Weigand  ret double %res
1919e3577ffSUlrich Weigand}
192