Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc < %s -march=mipsel -mcpu=mips32   | FileCheck %s -check-prefix=ALL -check-prefix=FCC -check-prefix=32-FCC
      2 ; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=ALL -check-prefix=FCC -check-prefix=32-FCC
      3 ; RUN: llc < %s -march=mipsel -mcpu=mips32r6 | FileCheck %s -check-prefix=ALL -check-prefix=GPR -check-prefix=32-GPR
      4 ; RUN: llc < %s -march=mips64el -mcpu=mips64   | FileCheck %s -check-prefix=ALL -check-prefix=FCC -check-prefix=64-FCC
      5 ; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefix=ALL -check-prefix=FCC -check-prefix=64-FCC
      6 ; RUN: llc < %s -march=mips64el -mcpu=mips64r6 | FileCheck %s -check-prefix=ALL -check-prefix=GPR -check-prefix=64-GPR
      7 
      8 define void @func0(float %f2, float %f3) nounwind {
      9 entry:
     10 ; ALL-LABEL: func0:
     11 
     12 ; 32-FCC:        c.eq.s $f12, $f14
     13 ; 64-FCC:        c.eq.s $f12, $f13
     14 ; FCC:           bc1f   $BB0_2
     15 
     16 ; 32-GPR:        cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f14
     17 ; 64-GPR:        cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f13
     18 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
     19 ; FIXME: We ought to be able to transform not+bnez -> beqz
     20 ; GPR:           not      $[[GPRCC]], $[[GPRCC]]
     21 ; GPR:           bnez     $[[GPRCC]], $BB0_2
     22 
     23   %cmp = fcmp oeq float %f2, %f3
     24   br i1 %cmp, label %if.then, label %if.else
     25 
     26 if.then:                                          ; preds = %entry
     27   tail call void (...)* @g0() nounwind
     28   br label %if.end
     29 
     30 if.else:                                          ; preds = %entry
     31   tail call void (...)* @g1() nounwind
     32   br label %if.end
     33 
     34 if.end:                                           ; preds = %if.else, %if.then
     35   ret void
     36 }
     37 
     38 declare void @g0(...)
     39 
     40 declare void @g1(...)
     41 
     42 define void @func1(float %f2, float %f3) nounwind {
     43 entry:
     44 ; ALL-LABEL: func1:
     45 
     46 ; 32-FCC:        c.olt.s $f12, $f14
     47 ; 64-FCC:        c.olt.s $f12, $f13
     48 ; FCC:           bc1f    $BB1_2
     49 
     50 ; 32-GPR:        cmp.ule.s $[[FGRCC:f[0-9]+]], $f14, $f12
     51 ; 64-GPR:        cmp.ule.s $[[FGRCC:f[0-9]+]], $f13, $f12
     52 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
     53 ; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
     54 ; GPR:           bnez     $[[GPRCC]], $BB1_2
     55 
     56   %cmp = fcmp olt float %f2, %f3
     57   br i1 %cmp, label %if.then, label %if.else
     58 
     59 if.then:                                          ; preds = %entry
     60   tail call void (...)* @g0() nounwind
     61   br label %if.end
     62 
     63 if.else:                                          ; preds = %entry
     64   tail call void (...)* @g1() nounwind
     65   br label %if.end
     66 
     67 if.end:                                           ; preds = %if.else, %if.then
     68   ret void
     69 }
     70 
     71 define void @func2(float %f2, float %f3) nounwind {
     72 entry:
     73 ; ALL-LABEL: func2:
     74 
     75 ; 32-FCC:        c.ole.s $f12, $f14
     76 ; 64-FCC:        c.ole.s $f12, $f13
     77 ; FCC:           bc1t    $BB2_2
     78 
     79 ; 32-GPR:        cmp.ult.s $[[FGRCC:f[0-9]+]], $f14, $f12
     80 ; 64-GPR:        cmp.ult.s $[[FGRCC:f[0-9]+]], $f13, $f12
     81 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
     82 ; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
     83 ; GPR:           beqz     $[[GPRCC]], $BB2_2
     84 
     85   %cmp = fcmp ugt float %f2, %f3
     86   br i1 %cmp, label %if.else, label %if.then
     87 
     88 if.then:                                          ; preds = %entry
     89   tail call void (...)* @g0() nounwind
     90   br label %if.end
     91 
     92 if.else:                                          ; preds = %entry
     93   tail call void (...)* @g1() nounwind
     94   br label %if.end
     95 
     96 if.end:                                           ; preds = %if.else, %if.then
     97   ret void
     98 }
     99 
    100 define void @func3(double %f2, double %f3) nounwind {
    101 entry:
    102 ; ALL-LABEL: func3:
    103 
    104 ; 32-FCC:        c.eq.d $f12, $f14
    105 ; 64-FCC:        c.eq.d $f12, $f13
    106 ; FCC:           bc1f $BB3_2
    107 
    108 ; 32-GPR:        cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f14
    109 ; 64-GPR:        cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f13
    110 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
    111 ; FIXME: We ought to be able to transform not+bnez -> beqz
    112 ; GPR:           not      $[[GPRCC]], $[[GPRCC]]
    113 ; GPR:           bnez     $[[GPRCC]], $BB3_2
    114 
    115   %cmp = fcmp oeq double %f2, %f3
    116   br i1 %cmp, label %if.then, label %if.else
    117 
    118 if.then:                                          ; preds = %entry
    119   tail call void (...)* @g0() nounwind
    120   br label %if.end
    121 
    122 if.else:                                          ; preds = %entry
    123   tail call void (...)* @g1() nounwind
    124   br label %if.end
    125 
    126 if.end:                                           ; preds = %if.else, %if.then
    127   ret void
    128 }
    129 
    130 define void @func4(double %f2, double %f3) nounwind {
    131 entry:
    132 ; ALL-LABEL: func4:
    133 
    134 ; 32-FCC:        c.olt.d $f12, $f14
    135 ; 64-FCC:        c.olt.d $f12, $f13
    136 ; FCC:           bc1f $BB4_2
    137 
    138 ; 32-GPR:        cmp.ule.d $[[FGRCC:f[0-9]+]], $f14, $f12
    139 ; 64-GPR:        cmp.ule.d $[[FGRCC:f[0-9]+]], $f13, $f12
    140 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
    141 ; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
    142 ; GPR:           bnez     $[[GPRCC]], $BB4_2
    143 
    144   %cmp = fcmp olt double %f2, %f3
    145   br i1 %cmp, label %if.then, label %if.else
    146 
    147 if.then:                                          ; preds = %entry
    148   tail call void (...)* @g0() nounwind
    149   br label %if.end
    150 
    151 if.else:                                          ; preds = %entry
    152   tail call void (...)* @g1() nounwind
    153   br label %if.end
    154 
    155 if.end:                                           ; preds = %if.else, %if.then
    156   ret void
    157 }
    158 
    159 define void @func5(double %f2, double %f3) nounwind {
    160 entry:
    161 ; ALL-LABEL: func5:
    162 
    163 ; 32-FCC:        c.ole.d $f12, $f14
    164 ; 64-FCC:        c.ole.d $f12, $f13
    165 ; FCC:           bc1t $BB5_2
    166 
    167 ; 32-GPR:        cmp.ult.d $[[FGRCC:f[0-9]+]], $f14, $f12
    168 ; 64-GPR:        cmp.ult.d $[[FGRCC:f[0-9]+]], $f13, $f12
    169 ; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
    170 ; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
    171 ; GPR:           beqz     $[[GPRCC]], $BB5_2
    172 
    173   %cmp = fcmp ugt double %f2, %f3
    174   br i1 %cmp, label %if.else, label %if.then
    175 
    176 if.then:                                          ; preds = %entry
    177   tail call void (...)* @g0() nounwind
    178   br label %if.end
    179 
    180 if.else:                                          ; preds = %entry
    181   tail call void (...)* @g1() nounwind
    182   br label %if.end
    183 
    184 if.end:                                           ; preds = %if.else, %if.then
    185   ret void
    186 }
    187