Home | History | Annotate | Download | only in Mips
      1 ; RUN: llc -march=mipsel -mattr=+dspr2 < %s | FileCheck %s
      2 
      3 define i64 @test__builtin_mips_dpa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
      4 entry:
      5 ; CHECK: dpa.w.ph
      6 
      7   %1 = bitcast i32 %a1.coerce to <2 x i16>
      8   %2 = bitcast i32 %a2.coerce to <2 x i16>
      9   %3 = tail call i64 @llvm.mips.dpa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     10   ret i64 %3
     11 }
     12 
     13 declare i64 @llvm.mips.dpa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
     14 
     15 define i64 @test__builtin_mips_dps_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
     16 entry:
     17 ; CHECK: dps.w.ph
     18 
     19   %1 = bitcast i32 %a1.coerce to <2 x i16>
     20   %2 = bitcast i32 %a2.coerce to <2 x i16>
     21   %3 = tail call i64 @llvm.mips.dps.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     22   ret i64 %3
     23 }
     24 
     25 declare i64 @llvm.mips.dps.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
     26 
     27 define i64 @test__builtin_mips_mulsa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
     28 entry:
     29 ; CHECK: mulsa.w.ph
     30 
     31   %1 = bitcast i32 %a1.coerce to <2 x i16>
     32   %2 = bitcast i32 %a2.coerce to <2 x i16>
     33   %3 = tail call i64 @llvm.mips.mulsa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     34   ret i64 %3
     35 }
     36 
     37 declare i64 @llvm.mips.mulsa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
     38 
     39 define i64 @test__builtin_mips_dpax_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
     40 entry:
     41 ; CHECK: dpax.w.ph
     42 
     43   %1 = bitcast i32 %a1.coerce to <2 x i16>
     44   %2 = bitcast i32 %a2.coerce to <2 x i16>
     45   %3 = tail call i64 @llvm.mips.dpax.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     46   ret i64 %3
     47 }
     48 
     49 declare i64 @llvm.mips.dpax.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
     50 
     51 define i64 @test__builtin_mips_dpsx_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind readnone {
     52 entry:
     53 ; CHECK: dpsx.w.ph
     54 
     55   %1 = bitcast i32 %a1.coerce to <2 x i16>
     56   %2 = bitcast i32 %a2.coerce to <2 x i16>
     57   %3 = tail call i64 @llvm.mips.dpsx.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     58   ret i64 %3
     59 }
     60 
     61 declare i64 @llvm.mips.dpsx.w.ph(i64, <2 x i16>, <2 x i16>) nounwind readnone
     62 
     63 define i64 @test__builtin_mips_dpaqx_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
     64 entry:
     65 ; CHECK: dpaqx_s.w.ph
     66 
     67   %1 = bitcast i32 %a1.coerce to <2 x i16>
     68   %2 = bitcast i32 %a2.coerce to <2 x i16>
     69   %3 = tail call i64 @llvm.mips.dpaqx.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     70   ret i64 %3
     71 }
     72 
     73 declare i64 @llvm.mips.dpaqx.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
     74 
     75 define i64 @test__builtin_mips_dpaqx_sa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
     76 entry:
     77 ; CHECK: dpaqx_sa.w.ph
     78 
     79   %1 = bitcast i32 %a1.coerce to <2 x i16>
     80   %2 = bitcast i32 %a2.coerce to <2 x i16>
     81   %3 = tail call i64 @llvm.mips.dpaqx.sa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     82   ret i64 %3
     83 }
     84 
     85 declare i64 @llvm.mips.dpaqx.sa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
     86 
     87 define i64 @test__builtin_mips_dpsqx_s_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
     88 entry:
     89 ; CHECK: dpsqx_s.w.ph
     90 
     91   %1 = bitcast i32 %a1.coerce to <2 x i16>
     92   %2 = bitcast i32 %a2.coerce to <2 x i16>
     93   %3 = tail call i64 @llvm.mips.dpsqx.s.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
     94   ret i64 %3
     95 }
     96 
     97 declare i64 @llvm.mips.dpsqx.s.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
     98 
     99 define i64 @test__builtin_mips_dpsqx_sa_w_ph1(i32 %i0, i32, i64 %a0, i32 %a1.coerce, i32 %a2.coerce) nounwind {
    100 entry:
    101 ; CHECK: dpsqx_sa.w.ph
    102 
    103   %1 = bitcast i32 %a1.coerce to <2 x i16>
    104   %2 = bitcast i32 %a2.coerce to <2 x i16>
    105   %3 = tail call i64 @llvm.mips.dpsqx.sa.w.ph(i64 %a0, <2 x i16> %1, <2 x i16> %2)
    106   ret i64 %3
    107 }
    108 
    109 declare i64 @llvm.mips.dpsqx.sa.w.ph(i64, <2 x i16>, <2 x i16>) nounwind
    110 
    111 define { i32 } @test__builtin_mips_addu_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    112 entry:
    113 ; CHECK: addu.ph
    114 
    115   %0 = bitcast i32 %a0.coerce to <2 x i16>
    116   %1 = bitcast i32 %a1.coerce to <2 x i16>
    117   %2 = tail call <2 x i16> @llvm.mips.addu.ph(<2 x i16> %0, <2 x i16> %1)
    118   %3 = bitcast <2 x i16> %2 to i32
    119   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    120   ret { i32 } %.fca.0.insert
    121 }
    122 
    123 declare <2 x i16> @llvm.mips.addu.ph(<2 x i16>, <2 x i16>) nounwind
    124 
    125 define { i32 } @test__builtin_mips_addu_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    126 entry:
    127 ; CHECK: addu_s.ph
    128 
    129   %0 = bitcast i32 %a0.coerce to <2 x i16>
    130   %1 = bitcast i32 %a1.coerce to <2 x i16>
    131   %2 = tail call <2 x i16> @llvm.mips.addu.s.ph(<2 x i16> %0, <2 x i16> %1)
    132   %3 = bitcast <2 x i16> %2 to i32
    133   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    134   ret { i32 } %.fca.0.insert
    135 }
    136 
    137 declare <2 x i16> @llvm.mips.addu.s.ph(<2 x i16>, <2 x i16>) nounwind
    138 
    139 define { i32 } @test__builtin_mips_mulq_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    140 entry:
    141 ; CHECK: mulq_s.ph
    142 
    143   %0 = bitcast i32 %a0.coerce to <2 x i16>
    144   %1 = bitcast i32 %a1.coerce to <2 x i16>
    145   %2 = tail call <2 x i16> @llvm.mips.mulq.s.ph(<2 x i16> %0, <2 x i16> %1)
    146   %3 = bitcast <2 x i16> %2 to i32
    147   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    148   ret { i32 } %.fca.0.insert
    149 }
    150 
    151 declare <2 x i16> @llvm.mips.mulq.s.ph(<2 x i16>, <2 x i16>) nounwind
    152 
    153 define { i32 } @test__builtin_mips_subu_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    154 entry:
    155 ; CHECK: subu.ph
    156 
    157   %0 = bitcast i32 %a0.coerce to <2 x i16>
    158   %1 = bitcast i32 %a1.coerce to <2 x i16>
    159   %2 = tail call <2 x i16> @llvm.mips.subu.ph(<2 x i16> %0, <2 x i16> %1)
    160   %3 = bitcast <2 x i16> %2 to i32
    161   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    162   ret { i32 } %.fca.0.insert
    163 }
    164 
    165 declare <2 x i16> @llvm.mips.subu.ph(<2 x i16>, <2 x i16>) nounwind
    166 
    167 define { i32 } @test__builtin_mips_subu_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    168 entry:
    169 ; CHECK: subu_s.ph
    170 
    171   %0 = bitcast i32 %a0.coerce to <2 x i16>
    172   %1 = bitcast i32 %a1.coerce to <2 x i16>
    173   %2 = tail call <2 x i16> @llvm.mips.subu.s.ph(<2 x i16> %0, <2 x i16> %1)
    174   %3 = bitcast <2 x i16> %2 to i32
    175   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    176   ret { i32 } %.fca.0.insert
    177 }
    178 
    179 declare <2 x i16> @llvm.mips.subu.s.ph(<2 x i16>, <2 x i16>) nounwind
    180 
    181 define i32 @test__builtin_mips_cmpgdu_eq_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    182 entry:
    183 ; CHECK: cmpgdu.eq.qb
    184 
    185   %0 = bitcast i32 %a0.coerce to <4 x i8>
    186   %1 = bitcast i32 %a1.coerce to <4 x i8>
    187   %2 = tail call i32 @llvm.mips.cmpgdu.eq.qb(<4 x i8> %0, <4 x i8> %1)
    188   ret i32 %2
    189 }
    190 
    191 declare i32 @llvm.mips.cmpgdu.eq.qb(<4 x i8>, <4 x i8>) nounwind
    192 
    193 define i32 @test__builtin_mips_cmpgdu_lt_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    194 entry:
    195 ; CHECK: cmpgdu.lt.qb
    196 
    197   %0 = bitcast i32 %a0.coerce to <4 x i8>
    198   %1 = bitcast i32 %a1.coerce to <4 x i8>
    199   %2 = tail call i32 @llvm.mips.cmpgdu.lt.qb(<4 x i8> %0, <4 x i8> %1)
    200   ret i32 %2
    201 }
    202 
    203 declare i32 @llvm.mips.cmpgdu.lt.qb(<4 x i8>, <4 x i8>) nounwind
    204 
    205 define i32 @test__builtin_mips_cmpgdu_le_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    206 entry:
    207 ; CHECK: cmpgdu.le.qb
    208 
    209   %0 = bitcast i32 %a0.coerce to <4 x i8>
    210   %1 = bitcast i32 %a1.coerce to <4 x i8>
    211   %2 = tail call i32 @llvm.mips.cmpgdu.le.qb(<4 x i8> %0, <4 x i8> %1)
    212   ret i32 %2
    213 }
    214 
    215 declare i32 @llvm.mips.cmpgdu.le.qb(<4 x i8>, <4 x i8>) nounwind
    216 
    217 define { i32 } @test__builtin_mips_precr_qb_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    218 entry:
    219 ; CHECK: precr.qb.ph
    220 
    221   %0 = bitcast i32 %a0.coerce to <2 x i16>
    222   %1 = bitcast i32 %a1.coerce to <2 x i16>
    223   %2 = tail call <4 x i8> @llvm.mips.precr.qb.ph(<2 x i16> %0, <2 x i16> %1)
    224   %3 = bitcast <4 x i8> %2 to i32
    225   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    226   ret { i32 } %.fca.0.insert
    227 }
    228 
    229 declare <4 x i8> @llvm.mips.precr.qb.ph(<2 x i16>, <2 x i16>) nounwind
    230 
    231 define { i32 } @test__builtin_mips_precr_sra_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    232 entry:
    233 ; CHECK: precr_sra.ph.w
    234 
    235   %0 = tail call <2 x i16> @llvm.mips.precr.sra.ph.w(i32 %a0, i32 %a1, i32 15)
    236   %1 = bitcast <2 x i16> %0 to i32
    237   %.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
    238   ret { i32 } %.fca.0.insert
    239 }
    240 
    241 declare <2 x i16> @llvm.mips.precr.sra.ph.w(i32, i32, i32) nounwind readnone
    242 
    243 define { i32 } @test__builtin_mips_precr_sra_r_ph_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    244 entry:
    245 ; CHECK: precr_sra_r.ph.w
    246 
    247   %0 = tail call <2 x i16> @llvm.mips.precr.sra.r.ph.w(i32 %a0, i32 %a1, i32 15)
    248   %1 = bitcast <2 x i16> %0 to i32
    249   %.fca.0.insert = insertvalue { i32 } undef, i32 %1, 0
    250   ret { i32 } %.fca.0.insert
    251 }
    252 
    253 declare <2 x i16> @llvm.mips.precr.sra.r.ph.w(i32, i32, i32) nounwind readnone
    254 
    255 define { i32 } @test__builtin_mips_shra_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
    256 entry:
    257 ; CHECK: shra.qb
    258 
    259   %0 = bitcast i32 %a0.coerce to <4 x i8>
    260   %1 = tail call <4 x i8> @llvm.mips.shra.qb(<4 x i8> %0, i32 3)
    261   %2 = bitcast <4 x i8> %1 to i32
    262   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    263   ret { i32 } %.fca.0.insert
    264 }
    265 
    266 declare <4 x i8> @llvm.mips.shra.qb(<4 x i8>, i32) nounwind readnone
    267 
    268 define { i32 } @test__builtin_mips_shra_r_qb1(i32 %i0, i32 %a0.coerce) nounwind readnone {
    269 entry:
    270 ; CHECK: shra_r.qb
    271 
    272   %0 = bitcast i32 %a0.coerce to <4 x i8>
    273   %1 = tail call <4 x i8> @llvm.mips.shra.r.qb(<4 x i8> %0, i32 3)
    274   %2 = bitcast <4 x i8> %1 to i32
    275   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    276   ret { i32 } %.fca.0.insert
    277 }
    278 
    279 declare <4 x i8> @llvm.mips.shra.r.qb(<4 x i8>, i32) nounwind readnone
    280 
    281 define { i32 } @test__builtin_mips_shra_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
    282 entry:
    283 ; CHECK: shrav.qb
    284 
    285   %0 = bitcast i32 %a0.coerce to <4 x i8>
    286   %1 = tail call <4 x i8> @llvm.mips.shra.qb(<4 x i8> %0, i32 %a1)
    287   %2 = bitcast <4 x i8> %1 to i32
    288   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    289   ret { i32 } %.fca.0.insert
    290 }
    291 
    292 define { i32 } @test__builtin_mips_shra_r_qb2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
    293 entry:
    294 ; CHECK: shrav_r.qb
    295 
    296   %0 = bitcast i32 %a0.coerce to <4 x i8>
    297   %1 = tail call <4 x i8> @llvm.mips.shra.r.qb(<4 x i8> %0, i32 %a1)
    298   %2 = bitcast <4 x i8> %1 to i32
    299   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    300   ret { i32 } %.fca.0.insert
    301 }
    302 
    303 define { i32 } @test__builtin_mips_shrl_ph1(i32 %i0, i32 %a0.coerce) nounwind readnone {
    304 entry:
    305 ; CHECK: shrl.ph
    306 
    307   %0 = bitcast i32 %a0.coerce to <2 x i16>
    308   %1 = tail call <2 x i16> @llvm.mips.shrl.ph(<2 x i16> %0, i32 7)
    309   %2 = bitcast <2 x i16> %1 to i32
    310   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    311   ret { i32 } %.fca.0.insert
    312 }
    313 
    314 declare <2 x i16> @llvm.mips.shrl.ph(<2 x i16>, i32) nounwind readnone
    315 
    316 define { i32 } @test__builtin_mips_shrl_ph2(i32 %i0, i32 %a0.coerce, i32 %a1) nounwind readnone {
    317 entry:
    318 ; CHECK: shrlv.ph
    319 
    320   %0 = bitcast i32 %a0.coerce to <2 x i16>
    321   %1 = tail call <2 x i16> @llvm.mips.shrl.ph(<2 x i16> %0, i32 %a1)
    322   %2 = bitcast <2 x i16> %1 to i32
    323   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    324   ret { i32 } %.fca.0.insert
    325 }
    326 
    327 define { i32 } @test__builtin_mips_absq_s_qb1(i32 %i0, i32 %a0.coerce) nounwind {
    328 entry:
    329 ; CHECK: absq_s.qb
    330 
    331   %0 = bitcast i32 %a0.coerce to <4 x i8>
    332   %1 = tail call <4 x i8> @llvm.mips.absq.s.qb(<4 x i8> %0)
    333   %2 = bitcast <4 x i8> %1 to i32
    334   %.fca.0.insert = insertvalue { i32 } undef, i32 %2, 0
    335   ret { i32 } %.fca.0.insert
    336 }
    337 
    338 declare <4 x i8> @llvm.mips.absq.s.qb(<4 x i8>) nounwind
    339 
    340 define { i32 } @test__builtin_mips_mul_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    341 entry:
    342 ; CHECK: mul.ph
    343 
    344   %0 = bitcast i32 %a0.coerce to <2 x i16>
    345   %1 = bitcast i32 %a1.coerce to <2 x i16>
    346   %2 = tail call <2 x i16> @llvm.mips.mul.ph(<2 x i16> %0, <2 x i16> %1)
    347   %3 = bitcast <2 x i16> %2 to i32
    348   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    349   ret { i32 } %.fca.0.insert
    350 }
    351 
    352 declare <2 x i16> @llvm.mips.mul.ph(<2 x i16>, <2 x i16>) nounwind
    353 
    354 define { i32 } @test__builtin_mips_mul_s_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind {
    355 entry:
    356 ; CHECK: mul_s.ph
    357 
    358   %0 = bitcast i32 %a0.coerce to <2 x i16>
    359   %1 = bitcast i32 %a1.coerce to <2 x i16>
    360   %2 = tail call <2 x i16> @llvm.mips.mul.s.ph(<2 x i16> %0, <2 x i16> %1)
    361   %3 = bitcast <2 x i16> %2 to i32
    362   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    363   ret { i32 } %.fca.0.insert
    364 }
    365 
    366 declare <2 x i16> @llvm.mips.mul.s.ph(<2 x i16>, <2 x i16>) nounwind
    367 
    368 define i32 @test__builtin_mips_mulq_rs_w1(i32 %i0, i32 %a0, i32 %a1) nounwind {
    369 entry:
    370 ; CHECK: mulq_rs.w
    371 
    372   %0 = tail call i32 @llvm.mips.mulq.rs.w(i32 %a0, i32 %a1)
    373   ret i32 %0
    374 }
    375 
    376 declare i32 @llvm.mips.mulq.rs.w(i32, i32) nounwind
    377 
    378 define i32 @test__builtin_mips_mulq_s_w1(i32 %i0, i32 %a0, i32 %a1) nounwind {
    379 entry:
    380 ; CHECK: mulq_s.w
    381 
    382   %0 = tail call i32 @llvm.mips.mulq.s.w(i32 %a0, i32 %a1)
    383   ret i32 %0
    384 }
    385 
    386 declare i32 @llvm.mips.mulq.s.w(i32, i32) nounwind
    387 
    388 define { i32 } @test__builtin_mips_adduh_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    389 entry:
    390 ; CHECK: adduh.qb
    391 
    392   %0 = bitcast i32 %a0.coerce to <4 x i8>
    393   %1 = bitcast i32 %a1.coerce to <4 x i8>
    394   %2 = tail call <4 x i8> @llvm.mips.adduh.qb(<4 x i8> %0, <4 x i8> %1)
    395   %3 = bitcast <4 x i8> %2 to i32
    396   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    397   ret { i32 } %.fca.0.insert
    398 }
    399 
    400 declare <4 x i8> @llvm.mips.adduh.qb(<4 x i8>, <4 x i8>) nounwind readnone
    401 
    402 define { i32 } @test__builtin_mips_adduh_r_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    403 entry:
    404 ; CHECK: adduh_r.qb
    405 
    406   %0 = bitcast i32 %a0.coerce to <4 x i8>
    407   %1 = bitcast i32 %a1.coerce to <4 x i8>
    408   %2 = tail call <4 x i8> @llvm.mips.adduh.r.qb(<4 x i8> %0, <4 x i8> %1)
    409   %3 = bitcast <4 x i8> %2 to i32
    410   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    411   ret { i32 } %.fca.0.insert
    412 }
    413 
    414 declare <4 x i8> @llvm.mips.adduh.r.qb(<4 x i8>, <4 x i8>) nounwind readnone
    415 
    416 define { i32 } @test__builtin_mips_subuh_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    417 entry:
    418 ; CHECK: subuh.qb
    419 
    420   %0 = bitcast i32 %a0.coerce to <4 x i8>
    421   %1 = bitcast i32 %a1.coerce to <4 x i8>
    422   %2 = tail call <4 x i8> @llvm.mips.subuh.qb(<4 x i8> %0, <4 x i8> %1)
    423   %3 = bitcast <4 x i8> %2 to i32
    424   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    425   ret { i32 } %.fca.0.insert
    426 }
    427 
    428 declare <4 x i8> @llvm.mips.subuh.qb(<4 x i8>, <4 x i8>) nounwind readnone
    429 
    430 define { i32 } @test__builtin_mips_subuh_r_qb1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    431 entry:
    432 ; CHECK: subuh_r.qb
    433 
    434   %0 = bitcast i32 %a0.coerce to <4 x i8>
    435   %1 = bitcast i32 %a1.coerce to <4 x i8>
    436   %2 = tail call <4 x i8> @llvm.mips.subuh.r.qb(<4 x i8> %0, <4 x i8> %1)
    437   %3 = bitcast <4 x i8> %2 to i32
    438   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    439   ret { i32 } %.fca.0.insert
    440 }
    441 
    442 declare <4 x i8> @llvm.mips.subuh.r.qb(<4 x i8>, <4 x i8>) nounwind readnone
    443 
    444 define { i32 } @test__builtin_mips_addqh_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    445 entry:
    446 ; CHECK: addqh.ph
    447 
    448   %0 = bitcast i32 %a0.coerce to <2 x i16>
    449   %1 = bitcast i32 %a1.coerce to <2 x i16>
    450   %2 = tail call <2 x i16> @llvm.mips.addqh.ph(<2 x i16> %0, <2 x i16> %1)
    451   %3 = bitcast <2 x i16> %2 to i32
    452   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    453   ret { i32 } %.fca.0.insert
    454 }
    455 
    456 declare <2 x i16> @llvm.mips.addqh.ph(<2 x i16>, <2 x i16>) nounwind readnone
    457 
    458 define { i32 } @test__builtin_mips_addqh_r_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    459 entry:
    460 ; CHECK: addqh_r.ph
    461 
    462   %0 = bitcast i32 %a0.coerce to <2 x i16>
    463   %1 = bitcast i32 %a1.coerce to <2 x i16>
    464   %2 = tail call <2 x i16> @llvm.mips.addqh.r.ph(<2 x i16> %0, <2 x i16> %1)
    465   %3 = bitcast <2 x i16> %2 to i32
    466   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    467   ret { i32 } %.fca.0.insert
    468 }
    469 
    470 declare <2 x i16> @llvm.mips.addqh.r.ph(<2 x i16>, <2 x i16>) nounwind readnone
    471 
    472 define i32 @test__builtin_mips_addqh_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    473 entry:
    474 ; CHECK: addqh.w
    475 
    476   %0 = tail call i32 @llvm.mips.addqh.w(i32 %a0, i32 %a1)
    477   ret i32 %0
    478 }
    479 
    480 declare i32 @llvm.mips.addqh.w(i32, i32) nounwind readnone
    481 
    482 define i32 @test__builtin_mips_addqh_r_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    483 entry:
    484 ; CHECK: addqh_r.w
    485 
    486   %0 = tail call i32 @llvm.mips.addqh.r.w(i32 %a0, i32 %a1)
    487   ret i32 %0
    488 }
    489 
    490 declare i32 @llvm.mips.addqh.r.w(i32, i32) nounwind readnone
    491 
    492 define { i32 } @test__builtin_mips_subqh_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    493 entry:
    494 ; CHECK: subqh.ph
    495 
    496   %0 = bitcast i32 %a0.coerce to <2 x i16>
    497   %1 = bitcast i32 %a1.coerce to <2 x i16>
    498   %2 = tail call <2 x i16> @llvm.mips.subqh.ph(<2 x i16> %0, <2 x i16> %1)
    499   %3 = bitcast <2 x i16> %2 to i32
    500   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    501   ret { i32 } %.fca.0.insert
    502 }
    503 
    504 declare <2 x i16> @llvm.mips.subqh.ph(<2 x i16>, <2 x i16>) nounwind readnone
    505 
    506 define { i32 } @test__builtin_mips_subqh_r_ph1(i32 %i0, i32 %a0.coerce, i32 %a1.coerce) nounwind readnone {
    507 entry:
    508 ; CHECK: subqh_r.ph
    509 
    510   %0 = bitcast i32 %a0.coerce to <2 x i16>
    511   %1 = bitcast i32 %a1.coerce to <2 x i16>
    512   %2 = tail call <2 x i16> @llvm.mips.subqh.r.ph(<2 x i16> %0, <2 x i16> %1)
    513   %3 = bitcast <2 x i16> %2 to i32
    514   %.fca.0.insert = insertvalue { i32 } undef, i32 %3, 0
    515   ret { i32 } %.fca.0.insert
    516 }
    517 
    518 declare <2 x i16> @llvm.mips.subqh.r.ph(<2 x i16>, <2 x i16>) nounwind readnone
    519 
    520 define i32 @test__builtin_mips_subqh_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    521 entry:
    522 ; CHECK: subqh.w
    523 
    524   %0 = tail call i32 @llvm.mips.subqh.w(i32 %a0, i32 %a1)
    525   ret i32 %0
    526 }
    527 
    528 declare i32 @llvm.mips.subqh.w(i32, i32) nounwind readnone
    529 
    530 define i32 @test__builtin_mips_subqh_r_w1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    531 entry:
    532 ; CHECK: subqh_r.w
    533 
    534   %0 = tail call i32 @llvm.mips.subqh.r.w(i32 %a0, i32 %a1)
    535   ret i32 %0
    536 }
    537 
    538 declare i32 @llvm.mips.subqh.r.w(i32, i32) nounwind readnone
    539 
    540 define i32 @test__builtin_mips_append1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    541 entry:
    542 ; CHECK: append ${{[0-9]+}}
    543 
    544   %0 = tail call i32 @llvm.mips.append(i32 %a0, i32 %a1, i32 15)
    545   ret i32 %0
    546 }
    547 
    548 declare i32 @llvm.mips.append(i32, i32, i32) nounwind readnone
    549 
    550 define i32 @test__builtin_mips_balign1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    551 entry:
    552 ; CHECK: balign ${{[0-9]+}}
    553 
    554   %0 = tail call i32 @llvm.mips.balign(i32 %a0, i32 %a1, i32 1)
    555   ret i32 %0
    556 }
    557 
    558 declare i32 @llvm.mips.balign(i32, i32, i32) nounwind readnone
    559 
    560 define i32 @test__builtin_mips_prepend1(i32 %i0, i32 %a0, i32 %a1) nounwind readnone {
    561 entry:
    562 ; CHECK: prepend ${{[0-9]+}}
    563 
    564   %0 = tail call i32 @llvm.mips.prepend(i32 %a0, i32 %a1, i32 15)
    565   ret i32 %0
    566 }
    567 
    568 declare i32 @llvm.mips.prepend(i32, i32, i32) nounwind readnone
    569