xref: /llvm-project/llvm/test/CodeGen/SystemZ/int-cmp-09.ll (revision 2eb027d21f882e03f0658cddbdfee31efbf08663)
19e3577ffSUlrich Weigand; Test 32-bit signed comparison in which the second operand is 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, i32 %i1) {
7d24ab20eSStephen Lin; CHECK-LABEL: f1:
8e1d9f00fSRichard Sandiford; CHECK: cijl %r2, 0
99e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
109e3577ffSUlrich Weigand; CHECK: br %r14
119e3577ffSUlrich Weigand  %cond = icmp slt i32 %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
17a075708aSRichard Sandiford; Check comparisons with 2.
189e3577ffSUlrich Weiganddefine double @f2(double %a, double %b, i32 %i1) {
19d24ab20eSStephen Lin; CHECK-LABEL: f2:
20a075708aSRichard Sandiford; CHECK: cijl %r2, 2
219e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
229e3577ffSUlrich Weigand; CHECK: br %r14
23a075708aSRichard Sandiford  %cond = icmp slt i32 %i1, 2
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 CIJ range.
309e3577ffSUlrich Weiganddefine double @f3(double %a, double %b, i32 %i1) {
31d24ab20eSStephen Lin; CHECK-LABEL: f3:
32e1d9f00fSRichard Sandiford; CHECK: cijl %r2, 127
33e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
34e1d9f00fSRichard Sandiford; CHECK: br %r14
35e1d9f00fSRichard Sandiford  %cond = icmp slt i32 %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 CHI instead.
42e1d9f00fSRichard Sandiforddefine double @f4(double %a, double %b, i32 %i1) {
43d24ab20eSStephen Lin; CHECK-LABEL: f4:
44e1d9f00fSRichard Sandiford; CHECK: chi %r2, 128
45e1d9f00fSRichard Sandiford; CHECK-NEXT: jl
46e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
47e1d9f00fSRichard Sandiford; CHECK: br %r14
48e1d9f00fSRichard Sandiford  %cond = icmp slt i32 %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 CHI range.
55e1d9f00fSRichard Sandiforddefine double @f5(double %a, double %b, i32 %i1) {
56d24ab20eSStephen Lin; CHECK-LABEL: f5:
579e3577ffSUlrich Weigand; CHECK: chi %r2, 32767
58586f4177SRichard Sandiford; CHECK-NEXT: jl
599e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
609e3577ffSUlrich Weigand; CHECK: br %r14
619e3577ffSUlrich Weigand  %cond = icmp slt i32 %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 CFI.
68e1d9f00fSRichard Sandiforddefine double @f6(double %a, double %b, i32 %i1) {
69d24ab20eSStephen Lin; CHECK-LABEL: f6:
709e3577ffSUlrich Weigand; CHECK: cfi %r2, 32768
71586f4177SRichard Sandiford; CHECK-NEXT: jl
729e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
739e3577ffSUlrich Weigand; CHECK: br %r14
749e3577ffSUlrich Weigand  %cond = icmp slt i32 %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 signed 32-bit range.
81e1d9f00fSRichard Sandiforddefine double @f7(double %a, double %b, i32 %i1) {
82d24ab20eSStephen Lin; CHECK-LABEL: f7:
839e3577ffSUlrich Weigand; CHECK: cfi %r2, 2147483647
84586f4177SRichard Sandiford; CHECK-NEXT: je
859e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
869e3577ffSUlrich Weigand; CHECK: br %r14
879e3577ffSUlrich Weigand  %cond = icmp eq i32 %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 should be treated as a negative value.
94e1d9f00fSRichard Sandiforddefine double @f8(double %a, double %b, i32 %i1) {
95d24ab20eSStephen Lin; CHECK-LABEL: f8:
969e3577ffSUlrich Weigand; CHECK: cfi %r2, -2147483648
97586f4177SRichard Sandiford; CHECK-NEXT: je
989e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
999e3577ffSUlrich Weigand; CHECK: br %r14
1009e3577ffSUlrich Weigand  %cond = icmp eq i32 %i1, 2147483648
101*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
102*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1039e3577ffSUlrich Weigand  ret double %res
1049e3577ffSUlrich Weigand}
1059e3577ffSUlrich Weigand
106e1d9f00fSRichard Sandiford; Check the high end of the negative CIJ range.
107e1d9f00fSRichard Sandiforddefine double @f9(double %a, double %b, i32 %i1) {
108d24ab20eSStephen Lin; CHECK-LABEL: f9:
109e1d9f00fSRichard Sandiford; CHECK: cijl %r2, -1
1109e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1119e3577ffSUlrich Weigand; CHECK: br %r14
1129e3577ffSUlrich Weigand  %cond = icmp slt i32 %i1, -1
113*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
114*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1159e3577ffSUlrich Weigand  ret double %res
1169e3577ffSUlrich Weigand}
1179e3577ffSUlrich Weigand
118e1d9f00fSRichard Sandiford; Check the low end of the CIJ range.
119e1d9f00fSRichard Sandiforddefine double @f10(double %a, double %b, i32 %i1) {
120d24ab20eSStephen Lin; CHECK-LABEL: f10:
121e1d9f00fSRichard Sandiford; CHECK: cijl %r2, -128
122e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
123e1d9f00fSRichard Sandiford; CHECK: br %r14
124e1d9f00fSRichard Sandiford  %cond = icmp slt i32 %i1, -128
125*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
126*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
127e1d9f00fSRichard Sandiford  ret double %res
128e1d9f00fSRichard Sandiford}
129e1d9f00fSRichard Sandiford
130e1d9f00fSRichard Sandiford; Check the next value down, which must use CHI instead.
131e1d9f00fSRichard Sandiforddefine double @f11(double %a, double %b, i32 %i1) {
132d24ab20eSStephen Lin; CHECK-LABEL: f11:
133e1d9f00fSRichard Sandiford; CHECK: chi %r2, -129
134e1d9f00fSRichard Sandiford; CHECK-NEXT: jl
135e1d9f00fSRichard Sandiford; CHECK: ldr %f0, %f2
136e1d9f00fSRichard Sandiford; CHECK: br %r14
137e1d9f00fSRichard Sandiford  %cond = icmp slt i32 %i1, -129
138*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
139*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
140e1d9f00fSRichard Sandiford  ret double %res
141e1d9f00fSRichard Sandiford}
142e1d9f00fSRichard Sandiford
1439e3577ffSUlrich Weigand; Check the low end of the CHI range.
144e1d9f00fSRichard Sandiforddefine double @f12(double %a, double %b, i32 %i1) {
145d24ab20eSStephen Lin; CHECK-LABEL: f12:
1469e3577ffSUlrich Weigand; CHECK: chi %r2, -32768
147586f4177SRichard Sandiford; CHECK-NEXT: jl
1489e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1499e3577ffSUlrich Weigand; CHECK: br %r14
1509e3577ffSUlrich Weigand  %cond = icmp slt i32 %i1, -32768
151*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
152*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1539e3577ffSUlrich Weigand  ret double %res
1549e3577ffSUlrich Weigand}
1559e3577ffSUlrich Weigand
1569e3577ffSUlrich Weigand; Check the next value down, which must use CFI instead.
157e1d9f00fSRichard Sandiforddefine double @f13(double %a, double %b, i32 %i1) {
158d24ab20eSStephen Lin; CHECK-LABEL: f13:
1599e3577ffSUlrich Weigand; CHECK: cfi %r2, -32769
160586f4177SRichard Sandiford; CHECK-NEXT: jl
1619e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1629e3577ffSUlrich Weigand; CHECK: br %r14
1639e3577ffSUlrich Weigand  %cond = icmp slt i32 %i1, -32769
164*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
165*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1669e3577ffSUlrich Weigand  ret double %res
1679e3577ffSUlrich Weigand}
1689e3577ffSUlrich Weigand
1699e3577ffSUlrich Weigand; Check the low end of the signed 32-bit range.
170e1d9f00fSRichard Sandiforddefine double @f14(double %a, double %b, i32 %i1) {
171d24ab20eSStephen Lin; CHECK-LABEL: f14:
1729e3577ffSUlrich Weigand; CHECK: cfi %r2, -2147483648
173586f4177SRichard Sandiford; CHECK-NEXT: je
1749e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1759e3577ffSUlrich Weigand; CHECK: br %r14
1769e3577ffSUlrich Weigand  %cond = icmp eq i32 %i1, -2147483648
177*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
178*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1799e3577ffSUlrich Weigand  ret double %res
1809e3577ffSUlrich Weigand}
1819e3577ffSUlrich Weigand
1829e3577ffSUlrich Weigand; Check the next value down, which should be treated as a positive value.
183e1d9f00fSRichard Sandiforddefine double @f15(double %a, double %b, i32 %i1) {
184d24ab20eSStephen Lin; CHECK-LABEL: f15:
1859e3577ffSUlrich Weigand; CHECK: cfi %r2, 2147483647
186586f4177SRichard Sandiford; CHECK-NEXT: je
1879e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2
1889e3577ffSUlrich Weigand; CHECK: br %r14
1899e3577ffSUlrich Weigand  %cond = icmp eq i32 %i1, -2147483649
190*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
191*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
1929e3577ffSUlrich Weigand  ret double %res
1939e3577ffSUlrich Weigand}
194a075708aSRichard Sandiford
195a075708aSRichard Sandiford; Check that < 1 becomes <= 0.
196a075708aSRichard Sandiforddefine double @f16(double %a, double %b, i32 %i1) {
197a075708aSRichard Sandiford; CHECK-LABEL: f16:
198a075708aSRichard Sandiford; CHECK: cijle %r2, 0
199a075708aSRichard Sandiford; CHECK: ldr %f0, %f2
200a075708aSRichard Sandiford; CHECK: br %r14
201a075708aSRichard Sandiford  %cond = icmp slt i32 %i1, 1
202*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
203*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
204a075708aSRichard Sandiford  ret double %res
205a075708aSRichard Sandiford}
206a075708aSRichard Sandiford
207a075708aSRichard Sandiford; Check that >= 1 becomes > 0.
208a075708aSRichard Sandiforddefine double @f17(double %a, double %b, i32 %i1) {
209a075708aSRichard Sandiford; CHECK-LABEL: f17:
210a075708aSRichard Sandiford; CHECK: cijh %r2, 0
211a075708aSRichard Sandiford; CHECK: ldr %f0, %f2
212a075708aSRichard Sandiford; CHECK: br %r14
213a075708aSRichard Sandiford  %cond = icmp sge i32 %i1, 1
214*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
215*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
216a075708aSRichard Sandiford  ret double %res
217a075708aSRichard Sandiford}
218a075708aSRichard Sandiford
219a075708aSRichard Sandiford; Check that > -1 becomes >= 0.
220a075708aSRichard Sandiforddefine double @f18(double %a, double %b, i32 %i1) {
221a075708aSRichard Sandiford; CHECK-LABEL: f18:
222a075708aSRichard Sandiford; CHECK: cijhe %r2, 0
223a075708aSRichard Sandiford; CHECK: ldr %f0, %f2
224a075708aSRichard Sandiford; CHECK: br %r14
225a075708aSRichard Sandiford  %cond = icmp sgt i32 %i1, -1
226*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
227*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
228a075708aSRichard Sandiford  ret double %res
229a075708aSRichard Sandiford}
230a075708aSRichard Sandiford
231a075708aSRichard Sandiford; Check that <= -1 becomes < 0.
232a075708aSRichard Sandiforddefine double @f19(double %a, double %b, i32 %i1) {
233a075708aSRichard Sandiford; CHECK-LABEL: f19:
234a075708aSRichard Sandiford; CHECK: cijl %r2, 0
235a075708aSRichard Sandiford; CHECK: ldr %f0, %f2
236a075708aSRichard Sandiford; CHECK: br %r14
237a075708aSRichard Sandiford  %cond = icmp sle i32 %i1, -1
238*2eb027d2SUlrich Weigand  %tmp = select i1 %cond, double %a, double %b
239*2eb027d2SUlrich Weigand  %res = fadd double %tmp, 1.0
240a075708aSRichard Sandiford  ret double %res
241a075708aSRichard Sandiford}
242