Home | History | Annotate | Download | only in InstSimplify
      1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
      2 
      3 define i1 @max1(i32 %x, i32 %y) {
      4 ; CHECK-LABEL: @max1(
      5   %c = icmp sgt i32 %x, %y
      6   %m = select i1 %c, i32 %x, i32 %y
      7   %r = icmp slt i32 %m, %x
      8   ret i1 %r
      9 ; CHECK: ret i1 false
     10 }
     11 
     12 define i1 @max2(i32 %x, i32 %y) {
     13 ; CHECK-LABEL: @max2(
     14   %c = icmp sge i32 %x, %y
     15   %m = select i1 %c, i32 %x, i32 %y
     16   %r = icmp sge i32 %m, %x
     17   ret i1 %r
     18 ; CHECK: ret i1 true
     19 }
     20 
     21 define i1 @max3(i32 %x, i32 %y) {
     22 ; CHECK-LABEL: @max3(
     23   %c = icmp ugt i32 %x, %y
     24   %m = select i1 %c, i32 %x, i32 %y
     25   %r = icmp ult i32 %m, %x
     26   ret i1 %r
     27 ; CHECK: ret i1 false
     28 }
     29 
     30 define i1 @max4(i32 %x, i32 %y) {
     31 ; CHECK-LABEL: @max4(
     32   %c = icmp uge i32 %x, %y
     33   %m = select i1 %c, i32 %x, i32 %y
     34   %r = icmp uge i32 %m, %x
     35   ret i1 %r
     36 ; CHECK: ret i1 true
     37 }
     38 
     39 define i1 @max5(i32 %x, i32 %y) {
     40 ; CHECK-LABEL: @max5(
     41   %c = icmp sgt i32 %x, %y
     42   %m = select i1 %c, i32 %x, i32 %y
     43   %r = icmp sgt i32 %x, %m
     44   ret i1 %r
     45 ; CHECK: ret i1 false
     46 }
     47 
     48 define i1 @max6(i32 %x, i32 %y) {
     49 ; CHECK-LABEL: @max6(
     50   %c = icmp sge i32 %x, %y
     51   %m = select i1 %c, i32 %x, i32 %y
     52   %r = icmp sle i32 %x, %m
     53   ret i1 %r
     54 ; CHECK: ret i1 true
     55 }
     56 
     57 define i1 @max7(i32 %x, i32 %y) {
     58 ; CHECK-LABEL: @max7(
     59   %c = icmp ugt i32 %x, %y
     60   %m = select i1 %c, i32 %x, i32 %y
     61   %r = icmp ugt i32 %x, %m
     62   ret i1 %r
     63 ; CHECK: ret i1 false
     64 }
     65 
     66 define i1 @max8(i32 %x, i32 %y) {
     67 ; CHECK-LABEL: @max8(
     68   %c = icmp uge i32 %x, %y
     69   %m = select i1 %c, i32 %x, i32 %y
     70   %r = icmp ule i32 %x, %m
     71   ret i1 %r
     72 ; CHECK: ret i1 true
     73 }
     74 
     75 define i1 @min1(i32 %x, i32 %y) {
     76 ; CHECK-LABEL: @min1(
     77   %c = icmp sgt i32 %x, %y
     78   %m = select i1 %c, i32 %y, i32 %x
     79   %r = icmp sgt i32 %m, %x
     80   ret i1 %r
     81 ; CHECK: ret i1 false
     82 }
     83 
     84 define i1 @min2(i32 %x, i32 %y) {
     85 ; CHECK-LABEL: @min2(
     86   %c = icmp sge i32 %x, %y
     87   %m = select i1 %c, i32 %y, i32 %x
     88   %r = icmp sle i32 %m, %x
     89   ret i1 %r
     90 ; CHECK: ret i1 true
     91 }
     92 
     93 define i1 @min3(i32 %x, i32 %y) {
     94 ; CHECK-LABEL: @min3(
     95   %c = icmp ugt i32 %x, %y
     96   %m = select i1 %c, i32 %y, i32 %x
     97   %r = icmp ugt i32 %m, %x
     98   ret i1 %r
     99 ; CHECK: ret i1 false
    100 }
    101 
    102 define i1 @min4(i32 %x, i32 %y) {
    103 ; CHECK-LABEL: @min4(
    104   %c = icmp uge i32 %x, %y
    105   %m = select i1 %c, i32 %y, i32 %x
    106   %r = icmp ule i32 %m, %x
    107   ret i1 %r
    108 ; CHECK: ret i1 true
    109 }
    110 
    111 define i1 @min5(i32 %x, i32 %y) {
    112 ; CHECK-LABEL: @min5(
    113   %c = icmp sgt i32 %x, %y
    114   %m = select i1 %c, i32 %y, i32 %x
    115   %r = icmp slt i32 %x, %m
    116   ret i1 %r
    117 ; CHECK: ret i1 false
    118 }
    119 
    120 define i1 @min6(i32 %x, i32 %y) {
    121 ; CHECK-LABEL: @min6(
    122   %c = icmp sge i32 %x, %y
    123   %m = select i1 %c, i32 %y, i32 %x
    124   %r = icmp sge i32 %x, %m
    125   ret i1 %r
    126 ; CHECK: ret i1 true
    127 }
    128 
    129 define i1 @min7(i32 %x, i32 %y) {
    130 ; CHECK-LABEL: @min7(
    131   %c = icmp ugt i32 %x, %y
    132   %m = select i1 %c, i32 %y, i32 %x
    133   %r = icmp ult i32 %x, %m
    134   ret i1 %r
    135 ; CHECK: ret i1 false
    136 }
    137 
    138 define i1 @min8(i32 %x, i32 %y) {
    139 ; CHECK-LABEL: @min8(
    140   %c = icmp uge i32 %x, %y
    141   %m = select i1 %c, i32 %y, i32 %x
    142   %r = icmp uge i32 %x, %m
    143   ret i1 %r
    144 ; CHECK: ret i1 true
    145 }
    146 
    147 define i1 @maxmin1(i32 %x, i32 %y, i32 %z) {
    148 ; CHECK-LABEL: @maxmin1(
    149   %c1 = icmp sge i32 %x, %y
    150   %max = select i1 %c1, i32 %x, i32 %y
    151   %c2 = icmp sge i32 %x, %z
    152   %min = select i1 %c2, i32 %z, i32 %x
    153   %c = icmp sge i32 %max, %min
    154   ret i1 %c
    155 ; CHECK: ret i1 true
    156 }
    157 
    158 define i1 @maxmin2(i32 %x, i32 %y, i32 %z) {
    159 ; CHECK-LABEL: @maxmin2(
    160   %c1 = icmp sge i32 %x, %y
    161   %max = select i1 %c1, i32 %x, i32 %y
    162   %c2 = icmp sge i32 %x, %z
    163   %min = select i1 %c2, i32 %z, i32 %x
    164   %c = icmp sgt i32 %min, %max
    165   ret i1 %c
    166 ; CHECK: ret i1 false
    167 }
    168 
    169 define i1 @maxmin3(i32 %x, i32 %y, i32 %z) {
    170 ; CHECK-LABEL: @maxmin3(
    171   %c1 = icmp sge i32 %x, %y
    172   %max = select i1 %c1, i32 %x, i32 %y
    173   %c2 = icmp sge i32 %x, %z
    174   %min = select i1 %c2, i32 %z, i32 %x
    175   %c = icmp sle i32 %min, %max
    176   ret i1 %c
    177 ; CHECK: ret i1 true
    178 }
    179 
    180 define i1 @maxmin4(i32 %x, i32 %y, i32 %z) {
    181 ; CHECK-LABEL: @maxmin4(
    182   %c1 = icmp sge i32 %x, %y
    183   %max = select i1 %c1, i32 %x, i32 %y
    184   %c2 = icmp sge i32 %x, %z
    185   %min = select i1 %c2, i32 %z, i32 %x
    186   %c = icmp slt i32 %max, %min
    187   ret i1 %c
    188 ; CHECK: ret i1 false
    189 }
    190 
    191 define i1 @maxmin5(i32 %x, i32 %y, i32 %z) {
    192 ; CHECK-LABEL: @maxmin5(
    193   %c1 = icmp uge i32 %x, %y
    194   %max = select i1 %c1, i32 %x, i32 %y
    195   %c2 = icmp uge i32 %x, %z
    196   %min = select i1 %c2, i32 %z, i32 %x
    197   %c = icmp uge i32 %max, %min
    198   ret i1 %c
    199 ; CHECK: ret i1 true
    200 }
    201 
    202 define i1 @maxmin6(i32 %x, i32 %y, i32 %z) {
    203 ; CHECK-LABEL: @maxmin6(
    204   %c1 = icmp uge i32 %x, %y
    205   %max = select i1 %c1, i32 %x, i32 %y
    206   %c2 = icmp uge i32 %x, %z
    207   %min = select i1 %c2, i32 %z, i32 %x
    208   %c = icmp ugt i32 %min, %max
    209   ret i1 %c
    210 ; CHECK: ret i1 false
    211 }
    212 
    213 define i1 @maxmin7(i32 %x, i32 %y, i32 %z) {
    214 ; CHECK-LABEL: @maxmin7(
    215   %c1 = icmp uge i32 %x, %y
    216   %max = select i1 %c1, i32 %x, i32 %y
    217   %c2 = icmp uge i32 %x, %z
    218   %min = select i1 %c2, i32 %z, i32 %x
    219   %c = icmp ule i32 %min, %max
    220   ret i1 %c
    221 ; CHECK: ret i1 true
    222 }
    223 
    224 define i1 @maxmin8(i32 %x, i32 %y, i32 %z) {
    225 ; CHECK-LABEL: @maxmin8(
    226   %c1 = icmp uge i32 %x, %y
    227   %max = select i1 %c1, i32 %x, i32 %y
    228   %c2 = icmp uge i32 %x, %z
    229   %min = select i1 %c2, i32 %z, i32 %x
    230   %c = icmp ult i32 %max, %min
    231   ret i1 %c
    232 ; CHECK: ret i1 false
    233 }
    234 
    235 define i1 @eqcmp1(i32 %x, i32 %y) {
    236 ; CHECK-LABEL: @eqcmp1(
    237   %c = icmp sge i32 %x, %y
    238   %max = select i1 %c, i32 %x, i32 %y
    239   %r = icmp eq i32 %max, %x
    240   ret i1 %r
    241 ; CHECK: ret i1 %c
    242 }
    243 
    244 define i1 @eqcmp2(i32 %x, i32 %y) {
    245 ; CHECK-LABEL: @eqcmp2(
    246   %c = icmp sge i32 %x, %y
    247   %max = select i1 %c, i32 %x, i32 %y
    248   %r = icmp eq i32 %x, %max
    249   ret i1 %r
    250 ; CHECK: ret i1 %c
    251 }
    252 
    253 define i1 @eqcmp3(i32 %x, i32 %y) {
    254 ; CHECK-LABEL: @eqcmp3(
    255   %c = icmp uge i32 %x, %y
    256   %max = select i1 %c, i32 %x, i32 %y
    257   %r = icmp eq i32 %max, %x
    258   ret i1 %r
    259 ; CHECK: ret i1 %c
    260 }
    261 
    262 define i1 @eqcmp4(i32 %x, i32 %y) {
    263 ; CHECK-LABEL: @eqcmp4(
    264   %c = icmp uge i32 %x, %y
    265   %max = select i1 %c, i32 %x, i32 %y
    266   %r = icmp eq i32 %x, %max
    267   ret i1 %r
    268 ; CHECK: ret i1 %c
    269 }
    270