Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc  -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16
      2 
      3 @t = global i32 10, align 4
      4 @f = global i32 199, align 4
      5 @a = global i32 1, align 4
      6 @b = global i32 10, align 4
      7 @c = global i32 1, align 4
      8 @z1 = common global i32 0, align 4
      9 @z2 = common global i32 0, align 4
     10 @z3 = common global i32 0, align 4
     11 @z4 = common global i32 0, align 4
     12 
     13 define void @calc_seleq() nounwind {
     14 entry:
     15   %0 = load i32, i32* @a, align 4
     16   %1 = load i32, i32* @b, align 4
     17   %cmp = icmp eq i32 %0, %1
     18   %2 = load i32, i32* @f, align 4
     19   %3 = load i32, i32* @t, align 4
     20   %cond = select i1 %cmp, i32 %2, i32 %3
     21   store i32 %cond, i32* @z1, align 4
     22 ; 16:	cmp	${{[0-9]+}}, ${{[0-9]+}}
     23 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
     24 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
     25   store i32 %cond, i32* @z2, align 4
     26   %4 = load i32, i32* @c, align 4
     27   %cmp6 = icmp eq i32 %4, %0
     28   %cond10 = select i1 %cmp6, i32 %3, i32 %2
     29   store i32 %cond10, i32* @z3, align 4
     30   store i32 %cond10, i32* @z4, align 4
     31   ret void
     32 }
     33 
     34 
     35 define void @calc_seleqk() nounwind {
     36 entry:
     37   %0 = load i32, i32* @a, align 4
     38   %cmp = icmp eq i32 %0, 1
     39   %1 = load i32, i32* @t, align 4
     40   %2 = load i32, i32* @f, align 4
     41   %cond = select i1 %cmp, i32 %1, i32 %2
     42   store i32 %cond, i32* @z1, align 4
     43 ; 16:	cmpi	${{[0-9]+}}, 1
     44 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
     45 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
     46   %cmp1 = icmp eq i32 %0, 10
     47   %cond5 = select i1 %cmp1, i32 %2, i32 %1
     48   store i32 %cond5, i32* @z2, align 4
     49   %3 = load i32, i32* @b, align 4
     50   %cmp6 = icmp eq i32 %3, 3
     51   %cond10 = select i1 %cmp6, i32 %2, i32 %1
     52   store i32 %cond10, i32* @z3, align 4
     53 ; 16:	cmpi	${{[0-9]+}}, 10
     54 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
     55 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
     56   %cmp11 = icmp eq i32 %3, 10
     57   %cond15 = select i1 %cmp11, i32 %1, i32 %2
     58   store i32 %cond15, i32* @z4, align 4
     59   ret void
     60 }
     61 
     62 define void @calc_seleqz() nounwind {
     63 entry:
     64   %0 = load i32, i32* @a, align 4
     65   %cmp = icmp eq i32 %0, 0
     66   %1 = load i32, i32* @t, align 4
     67   %2 = load i32, i32* @f, align 4
     68   %cond = select i1 %cmp, i32 %1, i32 %2
     69   store i32 %cond, i32* @z1, align 4
     70 ; 16:	beqz	${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
     71 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
     72   %3 = load i32, i32* @b, align 4
     73   %cmp1 = icmp eq i32 %3, 0
     74   %cond5 = select i1 %cmp1, i32 %2, i32 %1
     75   store i32 %cond5, i32* @z2, align 4
     76   %4 = load i32, i32* @c, align 4
     77   %cmp6 = icmp eq i32 %4, 0
     78   %cond10 = select i1 %cmp6, i32 %1, i32 %2
     79   store i32 %cond10, i32* @z3, align 4
     80   store i32 %cond, i32* @z4, align 4
     81   ret void
     82 }
     83 
     84 define void @calc_selge() nounwind {
     85 entry:
     86   %0 = load i32, i32* @a, align 4
     87   %1 = load i32, i32* @b, align 4
     88   %cmp = icmp sge i32 %0, %1
     89   %2 = load i32, i32* @f, align 4
     90   %3 = load i32, i32* @t, align 4
     91   %cond = select i1 %cmp, i32 %2, i32 %3
     92   store i32 %cond, i32* @z1, align 4
     93 ; 16:	slt	${{[0-9]+}}, ${{[0-9]+}}
     94 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
     95 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
     96   %cmp1 = icmp sge i32 %1, %0
     97   %cond5 = select i1 %cmp1, i32 %3, i32 %2
     98   store i32 %cond5, i32* @z2, align 4
     99   %4 = load i32, i32* @c, align 4
    100   %cmp6 = icmp sge i32 %4, %0
    101   %cond10 = select i1 %cmp6, i32 %3, i32 %2
    102   store i32 %cond10, i32* @z3, align 4
    103   %cmp11 = icmp sge i32 %0, %4
    104   %cond15 = select i1 %cmp11, i32 %3, i32 %2
    105   store i32 %cond15, i32* @z4, align 4
    106   ret void
    107 }
    108 
    109 define i32 @calc_selgt() nounwind {
    110 entry:
    111   %0 = load i32, i32* @a, align 4
    112   %1 = load i32, i32* @b, align 4
    113   %cmp = icmp sgt i32 %0, %1
    114 ; 16:	slt	${{[0-9]+}}, ${{[0-9]+}}
    115 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    116 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    117   %2 = load i32, i32* @f, align 4
    118   %3 = load i32, i32* @t, align 4
    119   %cond = select i1 %cmp, i32 %2, i32 %3
    120   store i32 %cond, i32* @z1, align 4
    121   %cmp1 = icmp sgt i32 %1, %0
    122   %cond5 = select i1 %cmp1, i32 %3, i32 %2
    123   store i32 %cond5, i32* @z2, align 4
    124   %4 = load i32, i32* @c, align 4
    125   %cmp6 = icmp sgt i32 %4, %0
    126   %cond10 = select i1 %cmp6, i32 %2, i32 %3
    127   store i32 %cond10, i32* @z3, align 4
    128   %cmp11 = icmp sgt i32 %0, %4
    129   %cond15 = select i1 %cmp11, i32 %2, i32 %3
    130   store i32 %cond15, i32* @z4, align 4
    131   ret i32 undef
    132 }
    133 
    134 define void @calc_selle() nounwind {
    135 entry:
    136   %0 = load i32, i32* @a, align 4
    137   %1 = load i32, i32* @b, align 4
    138   %cmp = icmp sle i32 %0, %1
    139   %2 = load i32, i32* @t, align 4
    140   %3 = load i32, i32* @f, align 4
    141   %cond = select i1 %cmp, i32 %2, i32 %3
    142   store i32 %cond, i32* @z1, align 4
    143 ; 16:	slt	${{[0-9]+}}, ${{[0-9]+}}
    144 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
    145 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    146   %cmp1 = icmp sle i32 %1, %0
    147   %cond5 = select i1 %cmp1, i32 %3, i32 %2
    148   store i32 %cond5, i32* @z2, align 4
    149   %4 = load i32, i32* @c, align 4
    150   %cmp6 = icmp sle i32 %4, %0
    151   %cond10 = select i1 %cmp6, i32 %2, i32 %3
    152   store i32 %cond10, i32* @z3, align 4
    153   %cmp11 = icmp sle i32 %0, %4
    154   %cond15 = select i1 %cmp11, i32 %2, i32 %3
    155   store i32 %cond15, i32* @z4, align 4
    156   ret void
    157 }
    158 
    159 define void @calc_selltk() nounwind {
    160 entry:
    161   %0 = load i32, i32* @a, align 4
    162   %cmp = icmp slt i32 %0, 10
    163   %1 = load i32, i32* @t, align 4
    164   %2 = load i32, i32* @f, align 4
    165   %cond = select i1 %cmp, i32 %1, i32 %2
    166   store i32 %cond, i32* @z1, align 4
    167 ; 16:	slti	${{[0-9]+}}, {{[0-9]+}}
    168 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    169 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    170   %3 = load i32, i32* @b, align 4
    171   %cmp1 = icmp slt i32 %3, 2
    172   %cond5 = select i1 %cmp1, i32 %2, i32 %1
    173   store i32 %cond5, i32* @z2, align 4
    174   %4 = load i32, i32* @c, align 4
    175   %cmp6 = icmp sgt i32 %4, 2
    176   %cond10 = select i1 %cmp6, i32 %2, i32 %1
    177   store i32 %cond10, i32* @z3, align 4
    178   %cmp11 = icmp sgt i32 %0, 2
    179   %cond15 = select i1 %cmp11, i32 %2, i32 %1
    180   store i32 %cond15, i32* @z4, align 4
    181   ret void
    182 }
    183 
    184 
    185 define void @calc_selne() nounwind {
    186 entry:
    187   %0 = load i32, i32* @a, align 4
    188   %1 = load i32, i32* @b, align 4
    189   %cmp = icmp ne i32 %0, %1
    190   %2 = load i32, i32* @t, align 4
    191   %3 = load i32, i32* @f, align 4
    192   %cond = select i1 %cmp, i32 %2, i32 %3
    193   store i32 %cond, i32* @z1, align 4
    194 ; 16:	cmp	${{[0-9]+}}, ${{[0-9]+}}
    195 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    196 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    197   store i32 %cond, i32* @z2, align 4
    198   %4 = load i32, i32* @c, align 4
    199   %cmp6 = icmp ne i32 %4, %0
    200   %cond10 = select i1 %cmp6, i32 %3, i32 %2
    201   store i32 %cond10, i32* @z3, align 4
    202   store i32 %cond10, i32* @z4, align 4
    203   ret void
    204 }
    205 
    206 define void @calc_selnek() nounwind {
    207 entry:
    208   %0 = load i32, i32* @a, align 4
    209   %cmp = icmp ne i32 %0, 1
    210   %1 = load i32, i32* @f, align 4
    211   %2 = load i32, i32* @t, align 4
    212   %cond = select i1 %cmp, i32 %1, i32 %2
    213   store i32 %cond, i32* @z1, align 4
    214 ; 16:	cmpi	${{[0-9]+}}, 1
    215 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    216 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    217   %cmp1 = icmp ne i32 %0, 10
    218   %cond5 = select i1 %cmp1, i32 %2, i32 %1
    219   store i32 %cond5, i32* @z2, align 4
    220   %3 = load i32, i32* @b, align 4
    221   %cmp6 = icmp ne i32 %3, 3
    222   %cond10 = select i1 %cmp6, i32 %2, i32 %1
    223   store i32 %cond10, i32* @z3, align 4
    224 ; 16:	cmpi	${{[0-9]+}}, 10
    225 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    226 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    227   %cmp11 = icmp ne i32 %3, 10
    228   %cond15 = select i1 %cmp11, i32 %1, i32 %2
    229   store i32 %cond15, i32* @z4, align 4
    230   ret void
    231 }
    232 
    233 define void @calc_selnez() nounwind {
    234 entry:
    235   %0 = load i32, i32* @a, align 4
    236   %cmp = icmp ne i32 %0, 0
    237   %1 = load i32, i32* @f, align 4
    238   %2 = load i32, i32* @t, align 4
    239   %cond = select i1 %cmp, i32 %1, i32 %2
    240   store i32 %cond, i32* @z1, align 4
    241 ; 16:	bnez	${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
    242 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    243   %3 = load i32, i32* @b, align 4
    244   %cmp1 = icmp ne i32 %3, 0
    245   %cond5 = select i1 %cmp1, i32 %2, i32 %1
    246   store i32 %cond5, i32* @z2, align 4
    247   %4 = load i32, i32* @c, align 4
    248   %cmp6 = icmp ne i32 %4, 0
    249   %cond10 = select i1 %cmp6, i32 %1, i32 %2
    250   store i32 %cond10, i32* @z3, align 4
    251   store i32 %cond, i32* @z4, align 4
    252   ret void
    253 }
    254 
    255 define void @calc_selnez2() nounwind {
    256 entry:
    257   %0 = load i32, i32* @a, align 4
    258   %tobool = icmp ne i32 %0, 0
    259   %1 = load i32, i32* @f, align 4
    260   %2 = load i32, i32* @t, align 4
    261   %cond = select i1 %tobool, i32 %1, i32 %2
    262   store i32 %cond, i32* @z1, align 4
    263 ; 16:	bnez	${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
    264 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    265   %3 = load i32, i32* @b, align 4
    266   %tobool1 = icmp ne i32 %3, 0
    267   %cond5 = select i1 %tobool1, i32 %2, i32 %1
    268   store i32 %cond5, i32* @z2, align 4
    269   %4 = load i32, i32* @c, align 4
    270   %tobool6 = icmp ne i32 %4, 0
    271   %cond10 = select i1 %tobool6, i32 %1, i32 %2
    272   store i32 %cond10, i32* @z3, align 4
    273   store i32 %cond, i32* @z4, align 4
    274   ret void
    275 }
    276 
    277 define void @calc_seluge() nounwind {
    278 entry:
    279   %0 = load i32, i32* @a, align 4
    280   %1 = load i32, i32* @b, align 4
    281   %cmp = icmp uge i32 %0, %1
    282   %2 = load i32, i32* @f, align 4
    283   %3 = load i32, i32* @t, align 4
    284   %cond = select i1 %cmp, i32 %2, i32 %3
    285   store i32 %cond, i32* @z1, align 4
    286 ; 16:	sltu	${{[0-9]+}}, ${{[0-9]+}}
    287 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
    288 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    289   %cmp1 = icmp uge i32 %1, %0
    290   %cond5 = select i1 %cmp1, i32 %3, i32 %2
    291   store i32 %cond5, i32* @z2, align 4
    292   %4 = load i32, i32* @c, align 4
    293   %cmp6 = icmp uge i32 %4, %0
    294   %cond10 = select i1 %cmp6, i32 %3, i32 %2
    295   store i32 %cond10, i32* @z3, align 4
    296   %cmp11 = icmp uge i32 %0, %4
    297   %cond15 = select i1 %cmp11, i32 %3, i32 %2
    298   store i32 %cond15, i32* @z4, align 4
    299   ret void
    300 }
    301 
    302 define void @calc_selugt() nounwind {
    303 entry:
    304   %0 = load i32, i32* @a, align 4
    305   %1 = load i32, i32* @b, align 4
    306   %cmp = icmp ugt i32 %0, %1
    307   %2 = load i32, i32* @f, align 4
    308   %3 = load i32, i32* @t, align 4
    309   %cond = select i1 %cmp, i32 %2, i32 %3
    310   store i32 %cond, i32* @z1, align 4
    311 ; 16:	sltu	${{[0-9]+}}, ${{[0-9]+}}
    312 ; 16:	btnez	$BB{{[0-9]+}}_{{[0-9]}}
    313 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    314   %cmp1 = icmp ugt i32 %1, %0
    315   %cond5 = select i1 %cmp1, i32 %3, i32 %2
    316   store i32 %cond5, i32* @z2, align 4
    317   %4 = load i32, i32* @c, align 4
    318   %cmp6 = icmp ugt i32 %4, %0
    319   %cond10 = select i1 %cmp6, i32 %2, i32 %3
    320   store i32 %cond10, i32* @z3, align 4
    321   %cmp11 = icmp ugt i32 %0, %4
    322   %cond15 = select i1 %cmp11, i32 %2, i32 %3
    323   store i32 %cond15, i32* @z4, align 4
    324   ret void
    325 }
    326 
    327 define void @calc_selule() nounwind {
    328 entry:
    329   %0 = load i32, i32* @a, align 4
    330   %1 = load i32, i32* @b, align 4
    331   %cmp = icmp ule i32 %0, %1
    332   %2 = load i32, i32* @t, align 4
    333   %3 = load i32, i32* @f, align 4
    334   %cond = select i1 %cmp, i32 %2, i32 %3
    335   store i32 %cond, i32* @z1, align 4
    336 ; 16:	sltu	${{[0-9]+}}, ${{[0-9]+}}
    337 ; 16:	bteqz	$BB{{[0-9]+}}_{{[0-9]}}
    338 ; 16: 	move    ${{[0-9]+}}, ${{[0-9]+}}
    339   %cmp1 = icmp ule i32 %1, %0
    340   %cond5 = select i1 %cmp1, i32 %3, i32 %2
    341   store i32 %cond5, i32* @z2, align 4
    342   %4 = load i32, i32* @c, align 4
    343   %cmp6 = icmp ule i32 %4, %0
    344   %cond10 = select i1 %cmp6, i32 %2, i32 %3
    345   store i32 %cond10, i32* @z3, align 4
    346   %cmp11 = icmp ule i32 %0, %4
    347   %cond15 = select i1 %cmp11, i32 %2, i32 %3
    348   store i32 %cond15, i32* @z4, align 4
    349   ret void
    350 }
    351