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