Home | History | Annotate | Download | only in InstCombine
      1 ; RUN: opt < %s -instcombine -S | grep "icmp s[lg]t i32 %n, 0" | count 16
      2 
      3 ; Instcombine should recognize that this code can be adjusted
      4 ; to fit the canonical smax/smin pattern.
      5 
      6 define i32 @floor_a(i32 %n) {
      7   %t = icmp sgt i32 %n, -1
      8   %m = select i1 %t, i32 %n, i32 0
      9   ret i32 %m
     10 }
     11 define i32 @ceil_a(i32 %n) {
     12   %t = icmp slt i32 %n, 1
     13   %m = select i1 %t, i32 %n, i32 0
     14   ret i32 %m
     15 }
     16 define i32 @floor_b(i32 %n) {
     17   %t = icmp sgt i32 %n, 0
     18   %m = select i1 %t, i32 %n, i32 0
     19   ret i32 %m
     20 }
     21 define i32 @ceil_b(i32 %n) {
     22   %t = icmp slt i32 %n, 0
     23   %m = select i1 %t, i32 %n, i32 0
     24   ret i32 %m
     25 }
     26 define i32 @floor_c(i32 %n) {
     27   %t = icmp sge i32 %n, 0
     28   %m = select i1 %t, i32 %n, i32 0
     29   ret i32 %m
     30 }
     31 define i32 @ceil_c(i32 %n) {
     32   %t = icmp sle i32 %n, 0
     33   %m = select i1 %t, i32 %n, i32 0
     34   ret i32 %m
     35 }
     36 define i32 @floor_d(i32 %n) {
     37   %t = icmp sge i32 %n, 1
     38   %m = select i1 %t, i32 %n, i32 0
     39   ret i32 %m
     40 }
     41 define i32 @ceil_d(i32 %n) {
     42   %t = icmp sle i32 %n, -1
     43   %m = select i1 %t, i32 %n, i32 0
     44   ret i32 %m
     45 }
     46 define i32 @floor_e(i32 %n) {
     47   %t = icmp sgt i32 %n, -1
     48   %m = select i1 %t, i32 %n, i32 0
     49   ret i32 %m
     50 }
     51 define i32 @ceil_e(i32 %n) {
     52   %t = icmp slt i32 %n, 1
     53   %m = select i1 %t, i32 %n, i32 0
     54   ret i32 %m
     55 }
     56 define i32 @floor_f(i32 %n) {
     57   %t = icmp sgt i32 %n, 0
     58   %m = select i1 %t, i32 %n, i32 0
     59   ret i32 %m
     60 }
     61 define i32 @ceil_f(i32 %n) {
     62   %t = icmp slt i32 %n, 0
     63   %m = select i1 %t, i32 %n, i32 0
     64   ret i32 %m
     65 }
     66 define i32 @floor_g(i32 %n) {
     67   %t = icmp sge i32 %n, 0
     68   %m = select i1 %t, i32 %n, i32 0
     69   ret i32 %m
     70 }
     71 define i32 @ceil_g(i32 %n) {
     72   %t = icmp sle i32 %n, 0
     73   %m = select i1 %t, i32 %n, i32 0
     74   ret i32 %m
     75 }
     76 define i32 @floor_h(i32 %n) {
     77   %t = icmp sge i32 %n, 1
     78   %m = select i1 %t, i32 %n, i32 0
     79   ret i32 %m
     80 }
     81 define i32 @ceil_h(i32 %n) {
     82   %t = icmp sle i32 %n, -1
     83   %m = select i1 %t, i32 %n, i32 0
     84   ret i32 %m
     85 }
     86