19e3577ffSUlrich Weigand; Test 64-bit unsigned comparisons in which the second operand is constant. 29e3577ffSUlrich Weigand; 39e3577ffSUlrich Weigand; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 49e3577ffSUlrich Weigand 593183ee7SRichard Sandiford; Check a value near the low end of the range. We use signed forms for 693183ee7SRichard Sandiford; comparisons with zero, or things that are equivalent to them. 79e3577ffSUlrich Weiganddefine double @f1(double %a, double %b, i64 %i1) { 8d24ab20eSStephen Lin; CHECK-LABEL: f1: 993183ee7SRichard Sandiford; CHECK: clgijh %r2, 1 109e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2 119e3577ffSUlrich Weigand; CHECK: br %r14 129e3577ffSUlrich Weigand %cond = icmp ugt i64 %i1, 1 13*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 14*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 159e3577ffSUlrich Weigand ret double %res 169e3577ffSUlrich Weigand} 179e3577ffSUlrich Weigand 1893183ee7SRichard Sandiford; Check the top of the CLGIJ range. 199e3577ffSUlrich Weiganddefine double @f2(double %a, double %b, i64 %i1) { 20d24ab20eSStephen Lin; CHECK-LABEL: f2: 2193183ee7SRichard Sandiford; CHECK: clgijl %r2, 255 2293183ee7SRichard Sandiford; CHECK: ldr %f0, %f2 2393183ee7SRichard Sandiford; CHECK: br %r14 2493183ee7SRichard Sandiford %cond = icmp ult i64 %i1, 255 25*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 26*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 2793183ee7SRichard Sandiford ret double %res 2893183ee7SRichard Sandiford} 2993183ee7SRichard Sandiford 3093183ee7SRichard Sandiford; Check the next value up, which needs a separate comparison. 3193183ee7SRichard Sandiforddefine double @f3(double %a, double %b, i64 %i1) { 3293183ee7SRichard Sandiford; CHECK-LABEL: f3: 3393183ee7SRichard Sandiford; CHECK: clgfi %r2, 256 3493183ee7SRichard Sandiford; CHECK: jl 3593183ee7SRichard Sandiford; CHECK: ldr %f0, %f2 3693183ee7SRichard Sandiford; CHECK: br %r14 3793183ee7SRichard Sandiford %cond = icmp ult i64 %i1, 256 38*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 39*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 4093183ee7SRichard Sandiford ret double %res 4193183ee7SRichard Sandiford} 4293183ee7SRichard Sandiford 4393183ee7SRichard Sandiford; Check the high end of the CLGFI range. 4493183ee7SRichard Sandiforddefine double @f4(double %a, double %b, i64 %i1) { 4593183ee7SRichard Sandiford; CHECK-LABEL: f4: 469e3577ffSUlrich Weigand; CHECK: clgfi %r2, 4294967295 47586f4177SRichard Sandiford; CHECK-NEXT: jl 489e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2 499e3577ffSUlrich Weigand; CHECK: br %r14 509e3577ffSUlrich Weigand %cond = icmp ult i64 %i1, 4294967295 51*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 52*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 539e3577ffSUlrich Weigand ret double %res 549e3577ffSUlrich Weigand} 559e3577ffSUlrich Weigand 561f6666a4SUlrich Weigand; Check the next value up, which can use a shifted comparison 5793183ee7SRichard Sandiforddefine double @f5(double %a, double %b, i64 %i1) { 5893183ee7SRichard Sandiford; CHECK-LABEL: f5: 591f6666a4SUlrich Weigand; CHECK: srlg [[REG:%r[0-5]]], %r2, 32 601f6666a4SUlrich Weigand; CHECK: cgije [[REG]], 0 619e3577ffSUlrich Weigand; CHECK: ldr %f0, %f2 629e3577ffSUlrich Weigand; CHECK: br %r14 639e3577ffSUlrich Weigand %cond = icmp ult i64 %i1, 4294967296 64*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 65*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 669e3577ffSUlrich Weigand ret double %res 679e3577ffSUlrich Weigand} 681f6666a4SUlrich Weigand; Check the next value up, which must use a register comparison. 691f6666a4SUlrich Weiganddefine double @f6(double %a, double %b, i64 %i1) { 701f6666a4SUlrich Weigand; CHECK-LABEL: f6: 711f6666a4SUlrich Weigand; CHECK: clgrjl %r2, 721f6666a4SUlrich Weigand; CHECK: ldr %f0, %f2 731f6666a4SUlrich Weigand; CHECK: br %r14 741f6666a4SUlrich Weigand %cond = icmp ult i64 %i1, 4294967297 75*2eb027d2SUlrich Weigand %tmp = select i1 %cond, double %a, double %b 76*2eb027d2SUlrich Weigand %res = fadd double %tmp, 1.0 771f6666a4SUlrich Weigand ret double %res 781f6666a4SUlrich Weigand} 79