Home | History | Annotate | Download | only in InstSimplify
      1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
      2 ; RUN: opt < %s -instsimplify -S | FileCheck %s
      3 
      4 ; Test all integer predicates with bool types and true/false constants.
      5 ; Use vectors to provide test coverage that is not duplicated in other folds.
      6 
      7 define <2 x i1> @eq_t(<2 x i1> %a) {
      8 ; CHECK-LABEL: @eq_t(
      9 ; CHECK-NEXT:    ret <2 x i1> %a
     10 ;
     11   %r = icmp eq <2 x i1> %a, <i1 true, i1 true>
     12   ret <2 x i1> %r
     13 }
     14 
     15 define <2 x i1> @eq_t_undef_elt(<2 x i1> %a) {
     16 ; CHECK-LABEL: @eq_t_undef_elt(
     17 ; CHECK-NEXT:    ret <2 x i1> [[A:%.*]]
     18 ;
     19   %r = icmp eq <2 x i1> %a, <i1 undef, i1 true>
     20   ret <2 x i1> %r
     21 }
     22 
     23 define <2 x i1> @eq_f(<2 x i1> %a) {
     24 ; CHECK-LABEL: @eq_f(
     25 ; CHECK-NEXT:    [[R:%.*]] = icmp eq <2 x i1> %a, zeroinitializer
     26 ; CHECK-NEXT:    ret <2 x i1> [[R]]
     27 ;
     28   %r = icmp eq <2 x i1> %a, <i1 false, i1 false>
     29   ret <2 x i1> %r
     30 }
     31 
     32 define <2 x i1> @ne_t(<2 x i1> %a) {
     33 ; CHECK-LABEL: @ne_t(
     34 ; CHECK-NEXT:    [[R:%.*]] = icmp ne <2 x i1> %a, <i1 true, i1 true>
     35 ; CHECK-NEXT:    ret <2 x i1> [[R]]
     36 ;
     37   %r = icmp ne <2 x i1> %a, <i1 true, i1 true>
     38   ret <2 x i1> %r
     39 }
     40 
     41 define <2 x i1> @ne_f(<2 x i1> %a) {
     42 ; CHECK-LABEL: @ne_f(
     43 ; CHECK-NEXT:    ret <2 x i1> %a
     44 ;
     45   %r = icmp ne <2 x i1> %a, <i1 false, i1 false>
     46   ret <2 x i1> %r
     47 }
     48 
     49 define <2 x i1> @ugt_t(<2 x i1> %a) {
     50 ; CHECK-LABEL: @ugt_t(
     51 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
     52 ;
     53   %r = icmp ugt <2 x i1> %a, <i1 true, i1 true>
     54   ret <2 x i1> %r
     55 }
     56 
     57 define <2 x i1> @ugt_t_undef_elt(<2 x i1> %a) {
     58 ; CHECK-LABEL: @ugt_t_undef_elt(
     59 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
     60 ;
     61   %r = icmp ugt <2 x i1> %a, <i1 true, i1 undef>
     62   ret <2 x i1> %r
     63 }
     64 
     65 define <2 x i1> @ugt_f(<2 x i1> %a) {
     66 ; CHECK-LABEL: @ugt_f(
     67 ; CHECK-NEXT:    ret <2 x i1> %a
     68 ;
     69   %r = icmp ugt <2 x i1> %a, <i1 false, i1 false>
     70   ret <2 x i1> %r
     71 }
     72 
     73 define <2 x i1> @ult_t(<2 x i1> %a) {
     74 ; CHECK-LABEL: @ult_t(
     75 ; CHECK-NEXT:    [[R:%.*]] = icmp ult <2 x i1> %a, <i1 true, i1 true>
     76 ; CHECK-NEXT:    ret <2 x i1> [[R]]
     77 ;
     78   %r = icmp ult <2 x i1> %a, <i1 true, i1 true>
     79   ret <2 x i1> %r
     80 }
     81 
     82 define <2 x i1> @ult_f(<2 x i1> %a) {
     83 ; CHECK-LABEL: @ult_f(
     84 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
     85 ;
     86   %r = icmp ult <2 x i1> %a, <i1 false, i1 false>
     87   ret <2 x i1> %r
     88 }
     89 
     90 define <2 x i1> @sgt_t(<2 x i1> %a) {
     91 ; CHECK-LABEL: @sgt_t(
     92 ; CHECK-NEXT:    [[R:%.*]] = icmp sgt <2 x i1> %a, <i1 true, i1 true>
     93 ; CHECK-NEXT:    ret <2 x i1> [[R]]
     94 ;
     95   %r = icmp sgt <2 x i1> %a, <i1 true, i1 true>
     96   ret <2 x i1> %r
     97 }
     98 
     99 define <2 x i1> @sgt_f(<2 x i1> %a) {
    100 ; CHECK-LABEL: @sgt_f(
    101 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
    102 ;
    103   %r = icmp sgt <2 x i1> %a, <i1 false, i1 false>
    104   ret <2 x i1> %r
    105 }
    106 
    107 define <2 x i1> @slt_t(<2 x i1> %a) {
    108 ; CHECK-LABEL: @slt_t(
    109 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
    110 ;
    111   %r = icmp slt <2 x i1> %a, <i1 true, i1 true>
    112   ret <2 x i1> %r
    113 }
    114 
    115 define <2 x i1> @slt_f(<2 x i1> %a) {
    116 ; CHECK-LABEL: @slt_f(
    117 ; CHECK-NEXT:    ret <2 x i1> %a
    118 ;
    119   %r = icmp slt <2 x i1> %a, <i1 false, i1 false>
    120   ret <2 x i1> %r
    121 }
    122 
    123 define <2 x i1> @uge_t(<2 x i1> %a) {
    124 ; CHECK-LABEL: @uge_t(
    125 ; CHECK-NEXT:    ret <2 x i1> %a
    126 ;
    127   %r = icmp uge <2 x i1> %a, <i1 true, i1 true>
    128   ret <2 x i1> %r
    129 }
    130 
    131 define <2 x i1> @uge_f(<2 x i1> %a) {
    132 ; CHECK-LABEL: @uge_f(
    133 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
    134 ;
    135   %r = icmp uge <2 x i1> %a, <i1 false, i1 false>
    136   ret <2 x i1> %r
    137 }
    138 
    139 define <2 x i1> @ule_t(<2 x i1> %a) {
    140 ; CHECK-LABEL: @ule_t(
    141 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
    142 ;
    143   %r = icmp ule <2 x i1> %a, <i1 true, i1 true>
    144   ret <2 x i1> %r
    145 }
    146 
    147 define <2 x i1> @ule_f(<2 x i1> %a) {
    148 ; CHECK-LABEL: @ule_f(
    149 ; CHECK-NEXT:    [[R:%.*]] = icmp ule <2 x i1> %a, zeroinitializer
    150 ; CHECK-NEXT:    ret <2 x i1> [[R]]
    151 ;
    152   %r = icmp ule <2 x i1> %a, <i1 false, i1 false>
    153   ret <2 x i1> %r
    154 }
    155 
    156 define <2 x i1> @sge_t(<2 x i1> %a) {
    157 ; CHECK-LABEL: @sge_t(
    158 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
    159 ;
    160   %r = icmp sge <2 x i1> %a, <i1 true, i1 true>
    161   ret <2 x i1> %r
    162 }
    163 
    164 define <2 x i1> @sge_t_undef_elt(<2 x i1> %a) {
    165 ; CHECK-LABEL: @sge_t_undef_elt(
    166 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
    167 ;
    168   %r = icmp sge <2 x i1> %a, <i1 true, i1 undef>
    169   ret <2 x i1> %r
    170 }
    171 
    172 define <2 x i1> @sge_f(<2 x i1> %a) {
    173 ; CHECK-LABEL: @sge_f(
    174 ; CHECK-NEXT:    [[R:%.*]] = icmp sge <2 x i1> %a, zeroinitializer
    175 ; CHECK-NEXT:    ret <2 x i1> [[R]]
    176 ;
    177   %r = icmp sge <2 x i1> %a, <i1 false, i1 false>
    178   ret <2 x i1> %r
    179 }
    180 
    181 define <2 x i1> @sle_t(<2 x i1> %a) {
    182 ; CHECK-LABEL: @sle_t(
    183 ; CHECK-NEXT:    ret <2 x i1> %a
    184 ;
    185   %r = icmp sle <2 x i1> %a, <i1 true, i1 true>
    186   ret <2 x i1> %r
    187 }
    188 
    189 define <2 x i1> @sle_f(<2 x i1> %a) {
    190 ; CHECK-LABEL: @sle_f(
    191 ; CHECK-NEXT:    ret <2 x i1> <i1 true, i1 true>
    192 ;
    193   %r = icmp sle <2 x i1> %a, <i1 false, i1 false>
    194   ret <2 x i1> %r
    195 }
    196 
    197