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