Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc  -march=mipsel -mattr=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16hf
      2 
      3 @x = global float 5.000000e+00, align 4
      4 @y = global float 1.500000e+01, align 4
      5 @xd = global double 6.000000e+00, align 8
      6 @yd = global double 1.800000e+01, align 8
      7 @two = global i32 2, align 4
      8 @addsf3_result = common global float 0.000000e+00, align 4
      9 @adddf3_result = common global double 0.000000e+00, align 8
     10 @subsf3_result = common global float 0.000000e+00, align 4
     11 @subdf3_result = common global double 0.000000e+00, align 8
     12 @mulsf3_result = common global float 0.000000e+00, align 4
     13 @muldf3_result = common global double 0.000000e+00, align 8
     14 @divsf3_result = common global float 0.000000e+00, align 4
     15 @divdf3_result = common global double 0.000000e+00, align 8
     16 @extendsfdf2_result = common global double 0.000000e+00, align 8
     17 @xd2 = global double 0x40147E6B74B4CF6A, align 8
     18 @truncdfsf2_result = common global float 0.000000e+00, align 4
     19 @fix_truncsfsi_result = common global i32 0, align 4
     20 @fix_truncdfsi_result = common global i32 0, align 4
     21 @si = global i32 -9, align 4
     22 @ui = global i32 9, align 4
     23 @floatsisf_result = common global float 0.000000e+00, align 4
     24 @floatsidf_result = common global double 0.000000e+00, align 8
     25 @floatunsisf_result = common global float 0.000000e+00, align 4
     26 @floatunsidf_result = common global double 0.000000e+00, align 8
     27 @xx = global float 5.000000e+00, align 4
     28 @eqsf2_result = common global i32 0, align 4
     29 @xxd = global double 6.000000e+00, align 8
     30 @eqdf2_result = common global i32 0, align 4
     31 @nesf2_result = common global i32 0, align 4
     32 @nedf2_result = common global i32 0, align 4
     33 @gesf2_result = common global i32 0, align 4
     34 @gedf2_result = common global i32 0, align 4
     35 @ltsf2_result = common global i32 0, align 4
     36 @ltdf2_result = common global i32 0, align 4
     37 @lesf2_result = common global i32 0, align 4
     38 @ledf2_result = common global i32 0, align 4
     39 @gtsf2_result = common global i32 0, align 4
     40 @gtdf2_result = common global i32 0, align 4
     41 
     42 define void @test_addsf3() nounwind {
     43 entry:
     44 ;16hf-LABEL: test_addsf3:
     45   %0 = load float, float* @x, align 4
     46   %1 = load float, float* @y, align 4
     47   %add = fadd float %0, %1
     48   store float %add, float* @addsf3_result, align 4
     49 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_addsf3)(${{[0-9]+}})
     50   ret void
     51 }
     52 
     53 define void @test_adddf3() nounwind {
     54 entry:
     55 ;16hf-LABEL: test_adddf3:
     56   %0 = load double, double* @xd, align 8
     57   %1 = load double, double* @yd, align 8
     58   %add = fadd double %0, %1
     59   store double %add, double* @adddf3_result, align 8
     60 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_adddf3)(${{[0-9]+}})
     61   ret void
     62 }
     63 
     64 define void @test_subsf3() nounwind {
     65 entry:
     66 ;16hf-LABEL: test_subsf3:
     67   %0 = load float, float* @x, align 4
     68   %1 = load float, float* @y, align 4
     69   %sub = fsub float %0, %1
     70   store float %sub, float* @subsf3_result, align 4
     71 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_subsf3)(${{[0-9]+}})
     72   ret void
     73 }
     74 
     75 define void @test_subdf3() nounwind {
     76 entry:
     77 ;16hf-LABEL: test_subdf3:
     78   %0 = load double, double* @xd, align 8
     79   %1 = load double, double* @yd, align 8
     80   %sub = fsub double %0, %1
     81   store double %sub, double* @subdf3_result, align 8
     82 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_subdf3)(${{[0-9]+}})
     83   ret void
     84 }
     85 
     86 define void @test_mulsf3() nounwind {
     87 entry:
     88 ;16hf-LABEL: test_mulsf3:
     89   %0 = load float, float* @x, align 4
     90   %1 = load float, float* @y, align 4
     91   %mul = fmul float %0, %1
     92   store float %mul, float* @mulsf3_result, align 4
     93 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_mulsf3)(${{[0-9]+}})
     94   ret void
     95 }
     96 
     97 define void @test_muldf3() nounwind {
     98 entry:
     99 ;16hf-LABEL: test_muldf3:
    100   %0 = load double, double* @xd, align 8
    101   %1 = load double, double* @yd, align 8
    102   %mul = fmul double %0, %1
    103   store double %mul, double* @muldf3_result, align 8
    104 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_muldf3)(${{[0-9]+}})
    105   ret void
    106 }
    107 
    108 define void @test_divsf3() nounwind {
    109 entry:
    110 ;16hf-LABEL: test_divsf3:
    111   %0 = load float, float* @y, align 4
    112   %1 = load float, float* @x, align 4
    113   %div = fdiv float %0, %1
    114   store float %div, float* @divsf3_result, align 4
    115 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_divsf3)(${{[0-9]+}})
    116   ret void
    117 }
    118 
    119 define void @test_divdf3() nounwind {
    120 entry:
    121 ;16hf-LABEL: test_divdf3:
    122   %0 = load double, double* @yd, align 8
    123   %mul = fmul double %0, 2.000000e+00
    124   %1 = load double, double* @xd, align 8
    125   %div = fdiv double %mul, %1
    126   store double %div, double* @divdf3_result, align 8
    127 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_divdf3)(${{[0-9]+}})
    128   ret void
    129 }
    130 
    131 define void @test_extendsfdf2() nounwind {
    132 entry:
    133 ;16hf-LABEL: test_extendsfdf2:
    134   %0 = load float, float* @x, align 4
    135   %conv = fpext float %0 to double
    136   store double %conv, double* @extendsfdf2_result, align 8
    137 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_extendsfdf2)(${{[0-9]+}})
    138   ret void
    139 }
    140 
    141 define void @test_truncdfsf2() nounwind {
    142 entry:
    143 ;16hf-LABEL: test_truncdfsf2:
    144   %0 = load double, double* @xd2, align 8
    145   %conv = fptrunc double %0 to float
    146   store float %conv, float* @truncdfsf2_result, align 4
    147 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_truncdfsf2)(${{[0-9]+}})
    148   ret void
    149 }
    150 
    151 define void @test_fix_truncsfsi() nounwind {
    152 entry:
    153 ;16hf-LABEL: test_fix_truncsfsi:
    154   %0 = load float, float* @x, align 4
    155   %conv = fptosi float %0 to i32
    156   store i32 %conv, i32* @fix_truncsfsi_result, align 4
    157 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_fix_truncsfsi)(${{[0-9]+}})
    158   ret void
    159 }
    160 
    161 define void @test_fix_truncdfsi() nounwind {
    162 entry:
    163 ;16hf-LABEL: test_fix_truncdfsi:
    164   %0 = load double, double* @xd, align 8
    165   %conv = fptosi double %0 to i32
    166   store i32 %conv, i32* @fix_truncdfsi_result, align 4
    167 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_fix_truncdfsi)(${{[0-9]+}})
    168   ret void
    169 }
    170 
    171 define void @test_floatsisf() nounwind {
    172 entry:
    173 ;16hf-LABEL: test_floatsisf:
    174   %0 = load i32, i32* @si, align 4
    175   %conv = sitofp i32 %0 to float
    176   store float %conv, float* @floatsisf_result, align 4
    177 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_floatsisf)(${{[0-9]+}})
    178   ret void
    179 }
    180 
    181 define void @test_floatsidf() nounwind {
    182 entry:
    183 ;16hf-LABEL: test_floatsidf:
    184   %0 = load i32, i32* @si, align 4
    185   %conv = sitofp i32 %0 to double
    186   store double %conv, double* @floatsidf_result, align 8
    187 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_floatsidf)(${{[0-9]+}})
    188   ret void
    189 }
    190 
    191 define void @test_floatunsisf() nounwind {
    192 entry:
    193 ;16hf-LABEL: test_floatunsisf:
    194   %0 = load i32, i32* @ui, align 4
    195   %conv = uitofp i32 %0 to float
    196   store float %conv, float* @floatunsisf_result, align 4
    197 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_floatunsisf)(${{[0-9]+}})
    198   ret void
    199 }
    200 
    201 define void @test_floatunsidf() nounwind {
    202 entry:
    203 ;16hf-LABEL: test_floatunsidf:
    204   %0 = load i32, i32* @ui, align 4
    205   %conv = uitofp i32 %0 to double
    206   store double %conv, double* @floatunsidf_result, align 8
    207 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_floatunsidf)(${{[0-9]+}})
    208   ret void
    209 }
    210 
    211 define void @test_eqsf2() nounwind {
    212 entry:
    213 ;16hf-LABEL: test_eqsf2:
    214   %0 = load float, float* @x, align 4
    215   %1 = load float, float* @xx, align 4
    216   %cmp = fcmp oeq float %0, %1
    217   %conv = zext i1 %cmp to i32
    218   store i32 %conv, i32* @eqsf2_result, align 4
    219 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_eqsf2)(${{[0-9]+}})
    220   ret void
    221 }
    222 
    223 define void @test_eqdf2() nounwind {
    224 entry:
    225 ;16hf-LABEL: test_eqdf2:
    226   %0 = load double, double* @xd, align 8
    227   %1 = load double, double* @xxd, align 8
    228   %cmp = fcmp oeq double %0, %1
    229   %conv = zext i1 %cmp to i32
    230   store i32 %conv, i32* @eqdf2_result, align 4
    231 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_eqdf2)(${{[0-9]+}})
    232   ret void
    233 }
    234 
    235 define void @test_nesf2() nounwind {
    236 entry:
    237 ;16hf-LABEL: test_nesf2:
    238   %0 = load float, float* @x, align 4
    239   %1 = load float, float* @y, align 4
    240   %cmp = fcmp une float %0, %1
    241   %conv = zext i1 %cmp to i32
    242   store i32 %conv, i32* @nesf2_result, align 4
    243 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_nesf2)(${{[0-9]+}})
    244   ret void
    245 }
    246 
    247 define void @test_nedf2() nounwind {
    248 entry:
    249 ;16hf-LABEL: test_nedf2:
    250   %0 = load double, double* @xd, align 8
    251   %1 = load double, double* @yd, align 8
    252   %cmp = fcmp une double %0, %1
    253   %conv = zext i1 %cmp to i32
    254   store i32 %conv, i32* @nedf2_result, align 4
    255 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_nedf2)(${{[0-9]+}})
    256   ret void
    257 }
    258 
    259 define void @test_gesf2() nounwind {
    260 entry:
    261 ;16hf-LABEL: test_gesf2:
    262   %0 = load float, float* @x, align 4
    263   %1 = load float, float* @xx, align 4
    264   %cmp = fcmp oge float %0, %1
    265   %2 = load float, float* @y, align 4
    266   %cmp1 = fcmp oge float %2, %0
    267   %and3 = and i1 %cmp, %cmp1
    268   %and = zext i1 %and3 to i32
    269   store i32 %and, i32* @gesf2_result, align 4
    270 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_gesf2)(${{[0-9]+}})
    271   ret void
    272 }
    273 
    274 define void @test_gedf2() nounwind {
    275 entry:
    276 ;16hf-LABEL: test_gedf2:
    277   %0 = load double, double* @xd, align 8
    278   %1 = load double, double* @xxd, align 8
    279   %cmp = fcmp oge double %0, %1
    280   %2 = load double, double* @yd, align 8
    281   %cmp1 = fcmp oge double %2, %0
    282   %and3 = and i1 %cmp, %cmp1
    283   %and = zext i1 %and3 to i32
    284   store i32 %and, i32* @gedf2_result, align 4
    285 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_gedf2)(${{[0-9]+}})
    286   ret void
    287 }
    288 
    289 define void @test_ltsf2() nounwind {
    290 entry:
    291 ;16hf-LABEL: test_ltsf2:
    292   %0 = load float, float* @x, align 4
    293   %1 = load float, float* @xx, align 4
    294   %lnot = fcmp uge float %0, %1
    295   %2 = load float, float* @y, align 4
    296   %cmp1 = fcmp olt float %0, %2
    297   %and2 = and i1 %lnot, %cmp1
    298   %and = zext i1 %and2 to i32
    299   store i32 %and, i32* @ltsf2_result, align 4
    300 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_ltsf2)(${{[0-9]+}})
    301 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_ltsf2)(${{[0-9]+}})
    302   ret void
    303 }
    304 
    305 define void @test_ltdf2() nounwind {
    306 entry:
    307 ;16hf-LABEL: test_ltdf2:
    308   %0 = load double, double* @xd, align 8
    309   %1 = load double, double* @xxd, align 8
    310   %lnot = fcmp uge double %0, %1
    311   %2 = load double, double* @yd, align 8
    312   %cmp1 = fcmp olt double %0, %2
    313   %and2 = and i1 %lnot, %cmp1
    314   %and = zext i1 %and2 to i32
    315   store i32 %and, i32* @ltdf2_result, align 4
    316 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_ltdf2)(${{[0-9]+}})
    317 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_ltdf2)(${{[0-9]+}})
    318   ret void
    319 }
    320 
    321 define void @test_lesf2() nounwind {
    322 entry:
    323 ;16hf-LABEL: test_lesf2:
    324   %0 = load float, float* @x, align 4
    325   %1 = load float, float* @xx, align 4
    326   %cmp = fcmp ole float %0, %1
    327   %2 = load float, float* @y, align 4
    328   %cmp1 = fcmp ole float %0, %2
    329   %and3 = and i1 %cmp, %cmp1
    330   %and = zext i1 %and3 to i32
    331   store i32 %and, i32* @lesf2_result, align 4
    332 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_lesf2)(${{[0-9]+}})
    333   ret void
    334 }
    335 
    336 define void @test_ledf2() nounwind {
    337 entry:
    338 ;16hf-LABEL: test_ledf2:
    339   %0 = load double, double* @xd, align 8
    340   %1 = load double, double* @xxd, align 8
    341   %cmp = fcmp ole double %0, %1
    342   %2 = load double, double* @yd, align 8
    343   %cmp1 = fcmp ole double %0, %2
    344   %and3 = and i1 %cmp, %cmp1
    345   %and = zext i1 %and3 to i32
    346   store i32 %and, i32* @ledf2_result, align 4
    347 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_ledf2)(${{[0-9]+}})
    348   ret void
    349 }
    350 
    351 define void @test_gtsf2() nounwind {
    352 entry:
    353 ;16hf-LABEL: test_gtsf2:
    354   %0 = load float, float* @x, align 4
    355   %1 = load float, float* @xx, align 4
    356   %lnot = fcmp ule float %0, %1
    357   %2 = load float, float* @y, align 4
    358   %cmp1 = fcmp ogt float %2, %0
    359   %and2 = and i1 %lnot, %cmp1
    360   %and = zext i1 %and2 to i32
    361   store i32 %and, i32* @gtsf2_result, align 4
    362 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_gtsf2)(${{[0-9]+}})
    363   ret void
    364 }
    365 
    366 define void @test_gtdf2() nounwind {
    367 entry:
    368 ;16hf-LABEL: test_gtdf2:
    369   %0 = load double, double* @xd, align 8
    370   %1 = load double, double* @xxd, align 8
    371   %lnot = fcmp ule double %0, %1
    372   %2 = load double, double* @yd, align 8
    373   %cmp1 = fcmp ogt double %2, %0
    374   %and2 = and i1 %lnot, %cmp1
    375   %and = zext i1 %and2 to i32
    376   store i32 %and, i32* @gtdf2_result, align 4
    377 ;16hf:  lw	${{[0-9]+}}, %call16(__mips16_gtdf2)(${{[0-9]+}})
    378   ret void
    379 }
    380 
    381 
    382