Home | History | Annotate | Download | only in SystemZ
      1 ; Test 32-bit unsigned comparisons in which the second operand is constant.
      2 ;
      3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
      4 
      5 ; Check a value near the low end of the range.  We use signed forms for
      6 ; comparisons with zero, or things that are equivalent to them.
      7 define double @f1(double %a, double %b, i32 %i1) {
      8 ; CHECK-LABEL: f1:
      9 ; CHECK: clijh %r2, 1
     10 ; CHECK: ldr %f0, %f2
     11 ; CHECK: br %r14
     12   %cond = icmp ugt i32 %i1, 1
     13   %tmp = select i1 %cond, double %a, double %b
     14   %res = fadd double %tmp, 1.0
     15   ret double %res
     16 }
     17 
     18 ; Check the top of the CLIJ range.
     19 define double @f2(double %a, double %b, i32 %i1) {
     20 ; CHECK-LABEL: f2:
     21 ; CHECK: clijl %r2, 255
     22 ; CHECK: ldr %f0, %f2
     23 ; CHECK: br %r14
     24   %cond = icmp ult i32 %i1, 255
     25   %tmp = select i1 %cond, double %a, double %b
     26   %res = fadd double %tmp, 1.0
     27   ret double %res
     28 }
     29 
     30 ; Check the next value up, which needs a separate comparison.
     31 define double @f3(double %a, double %b, i32 %i1) {
     32 ; CHECK-LABEL: f3:
     33 ; CHECK: clfi %r2, 256
     34 ; CHECK: jl
     35 ; CHECK: ldr %f0, %f2
     36 ; CHECK: br %r14
     37   %cond = icmp ult i32 %i1, 256
     38   %tmp = select i1 %cond, double %a, double %b
     39   %res = fadd double %tmp, 1.0
     40   ret double %res
     41 }
     42 
     43 ; Check a value near the high end of the range.
     44 define double @f4(double %a, double %b, i32 %i1) {
     45 ; CHECK-LABEL: f4:
     46 ; CHECK: clfi %r2, 4294967280
     47 ; CHECK-NEXT: jl
     48 ; CHECK: ldr %f0, %f2
     49 ; CHECK: br %r14
     50   %cond = icmp ult i32 %i1, 4294967280
     51   %tmp = select i1 %cond, double %a, double %b
     52   %res = fadd double %tmp, 1.0
     53   ret double %res
     54 }
     55