Home | History | Annotate | Download | only in msa
      1 ; Test the MSA intrinsics that are encoded with the 3RF instruction format.
      2 
      3 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
      4 ; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
      5 
      6 @llvm_mips_fadd_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
      7 @llvm_mips_fadd_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
      8 @llvm_mips_fadd_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
      9 
     10 define void @llvm_mips_fadd_w_test() nounwind {
     11 entry:
     12   %0 = load <4 x float>* @llvm_mips_fadd_w_ARG1
     13   %1 = load <4 x float>* @llvm_mips_fadd_w_ARG2
     14   %2 = tail call <4 x float> @llvm.mips.fadd.w(<4 x float> %0, <4 x float> %1)
     15   store <4 x float> %2, <4 x float>* @llvm_mips_fadd_w_RES
     16   ret void
     17 }
     18 
     19 declare <4 x float> @llvm.mips.fadd.w(<4 x float>, <4 x float>) nounwind
     20 
     21 ; CHECK: llvm_mips_fadd_w_test:
     22 ; CHECK: ld.w
     23 ; CHECK: ld.w
     24 ; CHECK: fadd.w
     25 ; CHECK: st.w
     26 ; CHECK: .size llvm_mips_fadd_w_test
     27 ;
     28 @llvm_mips_fadd_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
     29 @llvm_mips_fadd_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
     30 @llvm_mips_fadd_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
     31 
     32 define void @llvm_mips_fadd_d_test() nounwind {
     33 entry:
     34   %0 = load <2 x double>* @llvm_mips_fadd_d_ARG1
     35   %1 = load <2 x double>* @llvm_mips_fadd_d_ARG2
     36   %2 = tail call <2 x double> @llvm.mips.fadd.d(<2 x double> %0, <2 x double> %1)
     37   store <2 x double> %2, <2 x double>* @llvm_mips_fadd_d_RES
     38   ret void
     39 }
     40 
     41 declare <2 x double> @llvm.mips.fadd.d(<2 x double>, <2 x double>) nounwind
     42 
     43 ; CHECK: llvm_mips_fadd_d_test:
     44 ; CHECK: ld.d
     45 ; CHECK: ld.d
     46 ; CHECK: fadd.d
     47 ; CHECK: st.d
     48 ; CHECK: .size llvm_mips_fadd_d_test
     49 
     50 define void @fadd_w_test() nounwind {
     51 entry:
     52   %0 = load <4 x float>* @llvm_mips_fadd_w_ARG1
     53   %1 = load <4 x float>* @llvm_mips_fadd_w_ARG2
     54   %2 = fadd <4 x float> %0, %1
     55   store <4 x float> %2, <4 x float>* @llvm_mips_fadd_w_RES
     56   ret void
     57 }
     58 
     59 ; CHECK: fadd_w_test:
     60 ; CHECK: ld.w
     61 ; CHECK: ld.w
     62 ; CHECK: fadd.w
     63 ; CHECK: st.w
     64 ; CHECK: .size fadd_w_test
     65 
     66 define void @fadd_d_test() nounwind {
     67 entry:
     68   %0 = load <2 x double>* @llvm_mips_fadd_d_ARG1
     69   %1 = load <2 x double>* @llvm_mips_fadd_d_ARG2
     70   %2 = fadd <2 x double> %0, %1
     71   store <2 x double> %2, <2 x double>* @llvm_mips_fadd_d_RES
     72   ret void
     73 }
     74 
     75 ; CHECK: fadd_d_test:
     76 ; CHECK: ld.d
     77 ; CHECK: ld.d
     78 ; CHECK: fadd.d
     79 ; CHECK: st.d
     80 ; CHECK: .size fadd_d_test
     81 ;
     82 @llvm_mips_fdiv_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
     83 @llvm_mips_fdiv_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
     84 @llvm_mips_fdiv_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
     85 
     86 define void @llvm_mips_fdiv_w_test() nounwind {
     87 entry:
     88   %0 = load <4 x float>* @llvm_mips_fdiv_w_ARG1
     89   %1 = load <4 x float>* @llvm_mips_fdiv_w_ARG2
     90   %2 = tail call <4 x float> @llvm.mips.fdiv.w(<4 x float> %0, <4 x float> %1)
     91   store <4 x float> %2, <4 x float>* @llvm_mips_fdiv_w_RES
     92   ret void
     93 }
     94 
     95 declare <4 x float> @llvm.mips.fdiv.w(<4 x float>, <4 x float>) nounwind
     96 
     97 ; CHECK: llvm_mips_fdiv_w_test:
     98 ; CHECK: ld.w
     99 ; CHECK: ld.w
    100 ; CHECK: fdiv.w
    101 ; CHECK: st.w
    102 ; CHECK: .size llvm_mips_fdiv_w_test
    103 ;
    104 @llvm_mips_fdiv_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    105 @llvm_mips_fdiv_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    106 @llvm_mips_fdiv_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    107 
    108 define void @llvm_mips_fdiv_d_test() nounwind {
    109 entry:
    110   %0 = load <2 x double>* @llvm_mips_fdiv_d_ARG1
    111   %1 = load <2 x double>* @llvm_mips_fdiv_d_ARG2
    112   %2 = tail call <2 x double> @llvm.mips.fdiv.d(<2 x double> %0, <2 x double> %1)
    113   store <2 x double> %2, <2 x double>* @llvm_mips_fdiv_d_RES
    114   ret void
    115 }
    116 
    117 declare <2 x double> @llvm.mips.fdiv.d(<2 x double>, <2 x double>) nounwind
    118 
    119 ; CHECK: llvm_mips_fdiv_d_test:
    120 ; CHECK: ld.d
    121 ; CHECK: ld.d
    122 ; CHECK: fdiv.d
    123 ; CHECK: st.d
    124 ; CHECK: .size llvm_mips_fdiv_d_test
    125 
    126 define void @fdiv_w_test() nounwind {
    127 entry:
    128   %0 = load <4 x float>* @llvm_mips_fdiv_w_ARG1
    129   %1 = load <4 x float>* @llvm_mips_fdiv_w_ARG2
    130   %2 = fdiv <4 x float> %0, %1
    131   store <4 x float> %2, <4 x float>* @llvm_mips_fdiv_w_RES
    132   ret void
    133 }
    134 
    135 ; CHECK: fdiv_w_test:
    136 ; CHECK: ld.w
    137 ; CHECK: ld.w
    138 ; CHECK: fdiv.w
    139 ; CHECK: st.w
    140 ; CHECK: .size fdiv_w_test
    141 
    142 define void @fdiv_d_test() nounwind {
    143 entry:
    144   %0 = load <2 x double>* @llvm_mips_fdiv_d_ARG1
    145   %1 = load <2 x double>* @llvm_mips_fdiv_d_ARG2
    146   %2 = fdiv <2 x double> %0, %1
    147   store <2 x double> %2, <2 x double>* @llvm_mips_fdiv_d_RES
    148   ret void
    149 }
    150 
    151 ; CHECK: fdiv_d_test:
    152 ; CHECK: ld.d
    153 ; CHECK: ld.d
    154 ; CHECK: fdiv.d
    155 ; CHECK: st.d
    156 ; CHECK: .size fdiv_d_test
    157 ;
    158 @llvm_mips_fmin_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    159 @llvm_mips_fmin_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    160 @llvm_mips_fmin_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    161 
    162 define void @llvm_mips_fmin_w_test() nounwind {
    163 entry:
    164   %0 = load <4 x float>* @llvm_mips_fmin_w_ARG1
    165   %1 = load <4 x float>* @llvm_mips_fmin_w_ARG2
    166   %2 = tail call <4 x float> @llvm.mips.fmin.w(<4 x float> %0, <4 x float> %1)
    167   store <4 x float> %2, <4 x float>* @llvm_mips_fmin_w_RES
    168   ret void
    169 }
    170 
    171 declare <4 x float> @llvm.mips.fmin.w(<4 x float>, <4 x float>) nounwind
    172 
    173 ; CHECK: llvm_mips_fmin_w_test:
    174 ; CHECK: ld.w
    175 ; CHECK: ld.w
    176 ; CHECK: fmin.w
    177 ; CHECK: st.w
    178 ; CHECK: .size llvm_mips_fmin_w_test
    179 ;
    180 @llvm_mips_fmin_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    181 @llvm_mips_fmin_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    182 @llvm_mips_fmin_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    183 
    184 define void @llvm_mips_fmin_d_test() nounwind {
    185 entry:
    186   %0 = load <2 x double>* @llvm_mips_fmin_d_ARG1
    187   %1 = load <2 x double>* @llvm_mips_fmin_d_ARG2
    188   %2 = tail call <2 x double> @llvm.mips.fmin.d(<2 x double> %0, <2 x double> %1)
    189   store <2 x double> %2, <2 x double>* @llvm_mips_fmin_d_RES
    190   ret void
    191 }
    192 
    193 declare <2 x double> @llvm.mips.fmin.d(<2 x double>, <2 x double>) nounwind
    194 
    195 ; CHECK: llvm_mips_fmin_d_test:
    196 ; CHECK: ld.d
    197 ; CHECK: ld.d
    198 ; CHECK: fmin.d
    199 ; CHECK: st.d
    200 ; CHECK: .size llvm_mips_fmin_d_test
    201 ;
    202 @llvm_mips_fmin_a_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    203 @llvm_mips_fmin_a_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    204 @llvm_mips_fmin_a_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    205 
    206 define void @llvm_mips_fmin_a_w_test() nounwind {
    207 entry:
    208   %0 = load <4 x float>* @llvm_mips_fmin_a_w_ARG1
    209   %1 = load <4 x float>* @llvm_mips_fmin_a_w_ARG2
    210   %2 = tail call <4 x float> @llvm.mips.fmin.a.w(<4 x float> %0, <4 x float> %1)
    211   store <4 x float> %2, <4 x float>* @llvm_mips_fmin_a_w_RES
    212   ret void
    213 }
    214 
    215 declare <4 x float> @llvm.mips.fmin.a.w(<4 x float>, <4 x float>) nounwind
    216 
    217 ; CHECK: llvm_mips_fmin_a_w_test:
    218 ; CHECK: ld.w
    219 ; CHECK: ld.w
    220 ; CHECK: fmin_a.w
    221 ; CHECK: st.w
    222 ; CHECK: .size llvm_mips_fmin_a_w_test
    223 ;
    224 @llvm_mips_fmin_a_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    225 @llvm_mips_fmin_a_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    226 @llvm_mips_fmin_a_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    227 
    228 define void @llvm_mips_fmin_a_d_test() nounwind {
    229 entry:
    230   %0 = load <2 x double>* @llvm_mips_fmin_a_d_ARG1
    231   %1 = load <2 x double>* @llvm_mips_fmin_a_d_ARG2
    232   %2 = tail call <2 x double> @llvm.mips.fmin.a.d(<2 x double> %0, <2 x double> %1)
    233   store <2 x double> %2, <2 x double>* @llvm_mips_fmin_a_d_RES
    234   ret void
    235 }
    236 
    237 declare <2 x double> @llvm.mips.fmin.a.d(<2 x double>, <2 x double>) nounwind
    238 
    239 ; CHECK: llvm_mips_fmin_a_d_test:
    240 ; CHECK: ld.d
    241 ; CHECK: ld.d
    242 ; CHECK: fmin_a.d
    243 ; CHECK: st.d
    244 ; CHECK: .size llvm_mips_fmin_a_d_test
    245 ;
    246 @llvm_mips_fmax_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    247 @llvm_mips_fmax_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    248 @llvm_mips_fmax_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    249 
    250 define void @llvm_mips_fmax_w_test() nounwind {
    251 entry:
    252   %0 = load <4 x float>* @llvm_mips_fmax_w_ARG1
    253   %1 = load <4 x float>* @llvm_mips_fmax_w_ARG2
    254   %2 = tail call <4 x float> @llvm.mips.fmax.w(<4 x float> %0, <4 x float> %1)
    255   store <4 x float> %2, <4 x float>* @llvm_mips_fmax_w_RES
    256   ret void
    257 }
    258 
    259 declare <4 x float> @llvm.mips.fmax.w(<4 x float>, <4 x float>) nounwind
    260 
    261 ; CHECK: llvm_mips_fmax_w_test:
    262 ; CHECK: ld.w
    263 ; CHECK: ld.w
    264 ; CHECK: fmax.w
    265 ; CHECK: st.w
    266 ; CHECK: .size llvm_mips_fmax_w_test
    267 ;
    268 @llvm_mips_fmax_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    269 @llvm_mips_fmax_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    270 @llvm_mips_fmax_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    271 
    272 define void @llvm_mips_fmax_d_test() nounwind {
    273 entry:
    274   %0 = load <2 x double>* @llvm_mips_fmax_d_ARG1
    275   %1 = load <2 x double>* @llvm_mips_fmax_d_ARG2
    276   %2 = tail call <2 x double> @llvm.mips.fmax.d(<2 x double> %0, <2 x double> %1)
    277   store <2 x double> %2, <2 x double>* @llvm_mips_fmax_d_RES
    278   ret void
    279 }
    280 
    281 declare <2 x double> @llvm.mips.fmax.d(<2 x double>, <2 x double>) nounwind
    282 
    283 ; CHECK: llvm_mips_fmax_d_test:
    284 ; CHECK: ld.d
    285 ; CHECK: ld.d
    286 ; CHECK: fmax.d
    287 ; CHECK: st.d
    288 ; CHECK: .size llvm_mips_fmax_d_test
    289 ;
    290 @llvm_mips_fmax_a_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    291 @llvm_mips_fmax_a_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    292 @llvm_mips_fmax_a_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    293 
    294 define void @llvm_mips_fmax_a_w_test() nounwind {
    295 entry:
    296   %0 = load <4 x float>* @llvm_mips_fmax_a_w_ARG1
    297   %1 = load <4 x float>* @llvm_mips_fmax_a_w_ARG2
    298   %2 = tail call <4 x float> @llvm.mips.fmax.a.w(<4 x float> %0, <4 x float> %1)
    299   store <4 x float> %2, <4 x float>* @llvm_mips_fmax_a_w_RES
    300   ret void
    301 }
    302 
    303 declare <4 x float> @llvm.mips.fmax.a.w(<4 x float>, <4 x float>) nounwind
    304 
    305 ; CHECK: llvm_mips_fmax_a_w_test:
    306 ; CHECK: ld.w
    307 ; CHECK: ld.w
    308 ; CHECK: fmax_a.w
    309 ; CHECK: st.w
    310 ; CHECK: .size llvm_mips_fmax_a_w_test
    311 ;
    312 @llvm_mips_fmax_a_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    313 @llvm_mips_fmax_a_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    314 @llvm_mips_fmax_a_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    315 
    316 define void @llvm_mips_fmax_a_d_test() nounwind {
    317 entry:
    318   %0 = load <2 x double>* @llvm_mips_fmax_a_d_ARG1
    319   %1 = load <2 x double>* @llvm_mips_fmax_a_d_ARG2
    320   %2 = tail call <2 x double> @llvm.mips.fmax.a.d(<2 x double> %0, <2 x double> %1)
    321   store <2 x double> %2, <2 x double>* @llvm_mips_fmax_a_d_RES
    322   ret void
    323 }
    324 
    325 declare <2 x double> @llvm.mips.fmax.a.d(<2 x double>, <2 x double>) nounwind
    326 
    327 ; CHECK: llvm_mips_fmax_a_d_test:
    328 ; CHECK: ld.d
    329 ; CHECK: ld.d
    330 ; CHECK: fmax_a.d
    331 ; CHECK: st.d
    332 ; CHECK: .size llvm_mips_fmax_a_d_test
    333 ;
    334 @llvm_mips_fmul_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    335 @llvm_mips_fmul_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    336 @llvm_mips_fmul_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    337 
    338 define void @llvm_mips_fmul_w_test() nounwind {
    339 entry:
    340   %0 = load <4 x float>* @llvm_mips_fmul_w_ARG1
    341   %1 = load <4 x float>* @llvm_mips_fmul_w_ARG2
    342   %2 = tail call <4 x float> @llvm.mips.fmul.w(<4 x float> %0, <4 x float> %1)
    343   store <4 x float> %2, <4 x float>* @llvm_mips_fmul_w_RES
    344   ret void
    345 }
    346 
    347 declare <4 x float> @llvm.mips.fmul.w(<4 x float>, <4 x float>) nounwind
    348 
    349 ; CHECK: llvm_mips_fmul_w_test:
    350 ; CHECK: ld.w
    351 ; CHECK: ld.w
    352 ; CHECK: fmul.w
    353 ; CHECK: st.w
    354 ; CHECK: .size llvm_mips_fmul_w_test
    355 ;
    356 @llvm_mips_fmul_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    357 @llvm_mips_fmul_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    358 @llvm_mips_fmul_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    359 
    360 define void @llvm_mips_fmul_d_test() nounwind {
    361 entry:
    362   %0 = load <2 x double>* @llvm_mips_fmul_d_ARG1
    363   %1 = load <2 x double>* @llvm_mips_fmul_d_ARG2
    364   %2 = tail call <2 x double> @llvm.mips.fmul.d(<2 x double> %0, <2 x double> %1)
    365   store <2 x double> %2, <2 x double>* @llvm_mips_fmul_d_RES
    366   ret void
    367 }
    368 
    369 declare <2 x double> @llvm.mips.fmul.d(<2 x double>, <2 x double>) nounwind
    370 
    371 ; CHECK: llvm_mips_fmul_d_test:
    372 ; CHECK: ld.d
    373 ; CHECK: ld.d
    374 ; CHECK: fmul.d
    375 ; CHECK: st.d
    376 ; CHECK: .size llvm_mips_fmul_d_test
    377 
    378 define void @fmul_w_test() nounwind {
    379 entry:
    380   %0 = load <4 x float>* @llvm_mips_fmul_w_ARG1
    381   %1 = load <4 x float>* @llvm_mips_fmul_w_ARG2
    382   %2 = fmul <4 x float> %0, %1
    383   store <4 x float> %2, <4 x float>* @llvm_mips_fmul_w_RES
    384   ret void
    385 }
    386 
    387 ; CHECK: fmul_w_test:
    388 ; CHECK: ld.w
    389 ; CHECK: ld.w
    390 ; CHECK: fmul.w
    391 ; CHECK: st.w
    392 ; CHECK: .size fmul_w_test
    393 
    394 define void @fmul_d_test() nounwind {
    395 entry:
    396   %0 = load <2 x double>* @llvm_mips_fmul_d_ARG1
    397   %1 = load <2 x double>* @llvm_mips_fmul_d_ARG2
    398   %2 = fmul <2 x double> %0, %1
    399   store <2 x double> %2, <2 x double>* @llvm_mips_fmul_d_RES
    400   ret void
    401 }
    402 
    403 ; CHECK: fmul_d_test:
    404 ; CHECK: ld.d
    405 ; CHECK: ld.d
    406 ; CHECK: fmul.d
    407 ; CHECK: st.d
    408 ; CHECK: .size fmul_d_test
    409 ;
    410 @llvm_mips_fsub_w_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 16
    411 @llvm_mips_fsub_w_ARG2 = global <4 x float> <float 4.000000e+00, float 5.000000e+00, float 6.000000e+00, float 7.000000e+00>, align 16
    412 @llvm_mips_fsub_w_RES  = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 16
    413 
    414 define void @llvm_mips_fsub_w_test() nounwind {
    415 entry:
    416   %0 = load <4 x float>* @llvm_mips_fsub_w_ARG1
    417   %1 = load <4 x float>* @llvm_mips_fsub_w_ARG2
    418   %2 = tail call <4 x float> @llvm.mips.fsub.w(<4 x float> %0, <4 x float> %1)
    419   store <4 x float> %2, <4 x float>* @llvm_mips_fsub_w_RES
    420   ret void
    421 }
    422 
    423 declare <4 x float> @llvm.mips.fsub.w(<4 x float>, <4 x float>) nounwind
    424 
    425 ; CHECK: llvm_mips_fsub_w_test:
    426 ; CHECK: ld.w
    427 ; CHECK: ld.w
    428 ; CHECK: fsub.w
    429 ; CHECK: st.w
    430 ; CHECK: .size llvm_mips_fsub_w_test
    431 ;
    432 @llvm_mips_fsub_d_ARG1 = global <2 x double> <double 0.000000e+00, double 1.000000e+00>, align 16
    433 @llvm_mips_fsub_d_ARG2 = global <2 x double> <double 2.000000e+00, double 3.000000e+00>, align 16
    434 @llvm_mips_fsub_d_RES  = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 16
    435 
    436 define void @llvm_mips_fsub_d_test() nounwind {
    437 entry:
    438   %0 = load <2 x double>* @llvm_mips_fsub_d_ARG1
    439   %1 = load <2 x double>* @llvm_mips_fsub_d_ARG2
    440   %2 = tail call <2 x double> @llvm.mips.fsub.d(<2 x double> %0, <2 x double> %1)
    441   store <2 x double> %2, <2 x double>* @llvm_mips_fsub_d_RES
    442   ret void
    443 }
    444 
    445 declare <2 x double> @llvm.mips.fsub.d(<2 x double>, <2 x double>) nounwind
    446 
    447 ; CHECK: llvm_mips_fsub_d_test:
    448 ; CHECK: ld.d
    449 ; CHECK: ld.d
    450 ; CHECK: fsub.d
    451 ; CHECK: st.d
    452 ; CHECK: .size llvm_mips_fsub_d_test
    453 ;
    454 
    455 define void @fsub_w_test() nounwind {
    456 entry:
    457   %0 = load <4 x float>* @llvm_mips_fsub_w_ARG1
    458   %1 = load <4 x float>* @llvm_mips_fsub_w_ARG2
    459   %2 = fsub <4 x float> %0, %1
    460   store <4 x float> %2, <4 x float>* @llvm_mips_fsub_w_RES
    461   ret void
    462 }
    463 
    464 ; CHECK: fsub_w_test:
    465 ; CHECK: ld.w
    466 ; CHECK: ld.w
    467 ; CHECK: fsub.w
    468 ; CHECK: st.w
    469 ; CHECK: .size fsub_w_test
    470 
    471 define void @fsub_d_test() nounwind {
    472 entry:
    473   %0 = load <2 x double>* @llvm_mips_fsub_d_ARG1
    474   %1 = load <2 x double>* @llvm_mips_fsub_d_ARG2
    475   %2 = fsub <2 x double> %0, %1
    476   store <2 x double> %2, <2 x double>* @llvm_mips_fsub_d_RES
    477   ret void
    478 }
    479 
    480 ; CHECK: fsub_d_test:
    481 ; CHECK: ld.d
    482 ; CHECK: ld.d
    483 ; CHECK: fsub.d
    484 ; CHECK: st.d
    485 ; CHECK: .size fsub_d_test
    486