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