Home | History | Annotate | Download | only in msa
      1 ; Test the MSA intrinsics that are encoded with the I5 instruction format.
      2 ; There are lots of these so this covers those beginning with 'b'
      3 
      4 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s
      5 ; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s
      6 
      7 @llvm_mips_bclri_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
      8 @llvm_mips_bclri_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
      9 
     10 define void @llvm_mips_bclri_b_test() nounwind {
     11 entry:
     12   %0 = load <16 x i8>* @llvm_mips_bclri_b_ARG1
     13   %1 = tail call <16 x i8> @llvm.mips.bclri.b(<16 x i8> %0, i32 7)
     14   store <16 x i8> %1, <16 x i8>* @llvm_mips_bclri_b_RES
     15   ret void
     16 }
     17 
     18 declare <16 x i8> @llvm.mips.bclri.b(<16 x i8>, i32) nounwind
     19 
     20 ; CHECK: llvm_mips_bclri_b_test:
     21 ; CHECK: ld.b
     22 ; andi.b is equivalent to bclri.b
     23 ; CHECK: andi.b {{\$w[0-9]}}, {{\$w[0-9]}}, 127
     24 ; CHECK: st.b
     25 ; CHECK: .size llvm_mips_bclri_b_test
     26 ;
     27 @llvm_mips_bclri_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
     28 @llvm_mips_bclri_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
     29 
     30 define void @llvm_mips_bclri_h_test() nounwind {
     31 entry:
     32   %0 = load <8 x i16>* @llvm_mips_bclri_h_ARG1
     33   %1 = tail call <8 x i16> @llvm.mips.bclri.h(<8 x i16> %0, i32 7)
     34   store <8 x i16> %1, <8 x i16>* @llvm_mips_bclri_h_RES
     35   ret void
     36 }
     37 
     38 declare <8 x i16> @llvm.mips.bclri.h(<8 x i16>, i32) nounwind
     39 
     40 ; CHECK: llvm_mips_bclri_h_test:
     41 ; CHECK: ld.h
     42 ; CHECK: bclri.h
     43 ; CHECK: st.h
     44 ; CHECK: .size llvm_mips_bclri_h_test
     45 ;
     46 @llvm_mips_bclri_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
     47 @llvm_mips_bclri_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
     48 
     49 define void @llvm_mips_bclri_w_test() nounwind {
     50 entry:
     51   %0 = load <4 x i32>* @llvm_mips_bclri_w_ARG1
     52   %1 = tail call <4 x i32> @llvm.mips.bclri.w(<4 x i32> %0, i32 7)
     53   store <4 x i32> %1, <4 x i32>* @llvm_mips_bclri_w_RES
     54   ret void
     55 }
     56 
     57 declare <4 x i32> @llvm.mips.bclri.w(<4 x i32>, i32) nounwind
     58 
     59 ; CHECK: llvm_mips_bclri_w_test:
     60 ; CHECK: ld.w
     61 ; CHECK: bclri.w
     62 ; CHECK: st.w
     63 ; CHECK: .size llvm_mips_bclri_w_test
     64 ;
     65 @llvm_mips_bclri_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
     66 @llvm_mips_bclri_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
     67 
     68 define void @llvm_mips_bclri_d_test() nounwind {
     69 entry:
     70   %0 = load <2 x i64>* @llvm_mips_bclri_d_ARG1
     71   %1 = tail call <2 x i64> @llvm.mips.bclri.d(<2 x i64> %0, i32 7)
     72   store <2 x i64> %1, <2 x i64>* @llvm_mips_bclri_d_RES
     73   ret void
     74 }
     75 
     76 declare <2 x i64> @llvm.mips.bclri.d(<2 x i64>, i32) nounwind
     77 
     78 ; CHECK: llvm_mips_bclri_d_test:
     79 ; CHECK: ld.d
     80 ; CHECK: bclri.d
     81 ; CHECK: st.d
     82 ; CHECK: .size llvm_mips_bclri_d_test
     83 ;
     84 @llvm_mips_binsli_b_ARG1 = global <16 x i8> zeroinitializer, align 16
     85 @llvm_mips_binsli_b_ARG2 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
     86 @llvm_mips_binsli_b_RES  = global <16 x i8> zeroinitializer, align 16
     87 
     88 define void @llvm_mips_binsli_b_test() nounwind {
     89 entry:
     90   %0 = load <16 x i8>* @llvm_mips_binsli_b_ARG1
     91   %1 = load <16 x i8>* @llvm_mips_binsli_b_ARG2
     92   %2 = tail call <16 x i8> @llvm.mips.binsli.b(<16 x i8> %0, <16 x i8> %1, i32 7)
     93   store <16 x i8> %2, <16 x i8>* @llvm_mips_binsli_b_RES
     94   ret void
     95 }
     96 
     97 declare <16 x i8> @llvm.mips.binsli.b(<16 x i8>, <16 x i8>, i32) nounwind
     98 
     99 ; CHECK: llvm_mips_binsli_b_test:
    100 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsli_b_ARG1)(
    101 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsli_b_ARG2)(
    102 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[R1]])
    103 ; CHECK-DAG: ld.b [[R4:\$w[0-9]+]], 0([[R2]])
    104 ; CHECK-DAG: binsli.b [[R3]], [[R4]], 7
    105 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsli_b_RES)(
    106 ; CHECK-DAG: st.b [[R3]], 0([[R5]])
    107 ; CHECK: .size llvm_mips_binsli_b_test
    108 
    109 @llvm_mips_binsli_h_ARG1 = global <8 x i16> zeroinitializer, align 16
    110 @llvm_mips_binsli_h_ARG2 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
    111 @llvm_mips_binsli_h_RES  = global <8 x i16> zeroinitializer, align 16
    112 
    113 define void @llvm_mips_binsli_h_test() nounwind {
    114 entry:
    115   %0 = load <8 x i16>* @llvm_mips_binsli_h_ARG1
    116   %1 = load <8 x i16>* @llvm_mips_binsli_h_ARG2
    117   %2 = tail call <8 x i16> @llvm.mips.binsli.h(<8 x i16> %0, <8 x i16> %1, i32 7)
    118   store <8 x i16> %2, <8 x i16>* @llvm_mips_binsli_h_RES
    119   ret void
    120 }
    121 
    122 declare <8 x i16> @llvm.mips.binsli.h(<8 x i16>, <8 x i16>, i32) nounwind
    123 
    124 ; CHECK: llvm_mips_binsli_h_test:
    125 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsli_h_ARG1)(
    126 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsli_h_ARG2)(
    127 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[R1]])
    128 ; CHECK-DAG: ld.h [[R4:\$w[0-9]+]], 0([[R2]])
    129 ; CHECK-DAG: binsli.h [[R3]], [[R4]], 7
    130 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsli_h_RES)(
    131 ; CHECK-DAG: st.h [[R3]], 0([[R5]])
    132 ; CHECK: .size llvm_mips_binsli_h_test
    133 
    134 @llvm_mips_binsli_w_ARG1 = global <4 x i32> zeroinitializer, align 16
    135 @llvm_mips_binsli_w_ARG2 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
    136 @llvm_mips_binsli_w_RES  = global <4 x i32> zeroinitializer, align 16
    137 
    138 define void @llvm_mips_binsli_w_test() nounwind {
    139 entry:
    140   %0 = load <4 x i32>* @llvm_mips_binsli_w_ARG1
    141   %1 = load <4 x i32>* @llvm_mips_binsli_w_ARG2
    142   %2 = tail call <4 x i32> @llvm.mips.binsli.w(<4 x i32> %0, <4 x i32> %1, i32 7)
    143   store <4 x i32> %2, <4 x i32>* @llvm_mips_binsli_w_RES
    144   ret void
    145 }
    146 
    147 declare <4 x i32> @llvm.mips.binsli.w(<4 x i32>, <4 x i32>, i32) nounwind
    148 
    149 ; CHECK: llvm_mips_binsli_w_test:
    150 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsli_w_ARG1)(
    151 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsli_w_ARG2)(
    152 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0([[R1]])
    153 ; CHECK-DAG: ld.w [[R4:\$w[0-9]+]], 0([[R2]])
    154 ; CHECK-DAG: binsli.w [[R3]], [[R4]], 7
    155 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsli_w_RES)(
    156 ; CHECK-DAG: st.w [[R3]], 0([[R5]])
    157 ; CHECK: .size llvm_mips_binsli_w_test
    158 
    159 @llvm_mips_binsli_d_ARG1 = global <2 x i64> zeroinitializer, align 16
    160 @llvm_mips_binsli_d_ARG2 = global <2 x i64> <i64 0, i64 1>, align 16
    161 @llvm_mips_binsli_d_RES  = global <2 x i64> zeroinitializer, align 16
    162 
    163 define void @llvm_mips_binsli_d_test() nounwind {
    164 entry:
    165   %0 = load <2 x i64>* @llvm_mips_binsli_d_ARG1
    166   %1 = load <2 x i64>* @llvm_mips_binsli_d_ARG2
    167   ; TODO: We use a particularly wide mask here to work around a legalization
    168   ;       issue. If the mask doesn't fit within a 10-bit immediate, it gets
    169   ;       legalized into a constant pool. We should add a test to cover the
    170   ;       other cases once they correctly select binsli.d.
    171   %2 = tail call <2 x i64> @llvm.mips.binsli.d(<2 x i64> %0, <2 x i64> %1, i32 61)
    172   store <2 x i64> %2, <2 x i64>* @llvm_mips_binsli_d_RES
    173   ret void
    174 }
    175 
    176 declare <2 x i64> @llvm.mips.binsli.d(<2 x i64>, <2 x i64>, i32) nounwind
    177 
    178 ; CHECK: llvm_mips_binsli_d_test:
    179 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsli_d_ARG1)(
    180 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsli_d_ARG2)(
    181 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[R1]])
    182 ; CHECK-DAG: ld.d [[R4:\$w[0-9]+]], 0([[R2]])
    183 ; CHECK-DAG: binsli.d [[R3]], [[R4]], 61
    184 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsli_d_RES)(
    185 ; CHECK-DAG: st.d [[R3]], 0([[R5]])
    186 ; CHECK: .size llvm_mips_binsli_d_test
    187 
    188 @llvm_mips_binsri_b_ARG1 = global <16 x i8> zeroinitializer, align 16
    189 @llvm_mips_binsri_b_ARG2 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
    190 @llvm_mips_binsri_b_RES  = global <16 x i8> zeroinitializer, align 16
    191 
    192 define void @llvm_mips_binsri_b_test() nounwind {
    193 entry:
    194   %0 = load <16 x i8>* @llvm_mips_binsri_b_ARG1
    195   %1 = load <16 x i8>* @llvm_mips_binsri_b_ARG2
    196   %2 = tail call <16 x i8> @llvm.mips.binsri.b(<16 x i8> %0, <16 x i8> %1, i32 7)
    197   store <16 x i8> %2, <16 x i8>* @llvm_mips_binsri_b_RES
    198   ret void
    199 }
    200 
    201 declare <16 x i8> @llvm.mips.binsri.b(<16 x i8>, <16 x i8>, i32) nounwind
    202 
    203 ; CHECK: llvm_mips_binsri_b_test:
    204 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsri_b_ARG1)(
    205 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsri_b_ARG2)(
    206 ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[R1]])
    207 ; CHECK-DAG: ld.b [[R4:\$w[0-9]+]], 0([[R2]])
    208 ; CHECK-DAG: binsri.b [[R3]], [[R4]], 7
    209 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsri_b_RES)(
    210 ; CHECK-DAG: st.b [[R3]], 0([[R5]])
    211 ; CHECK: .size llvm_mips_binsri_b_test
    212 
    213 @llvm_mips_binsri_h_ARG1 = global <8 x i16> zeroinitializer, align 16
    214 @llvm_mips_binsri_h_ARG2 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
    215 @llvm_mips_binsri_h_RES  = global <8 x i16> zeroinitializer, align 16
    216 
    217 define void @llvm_mips_binsri_h_test() nounwind {
    218 entry:
    219   %0 = load <8 x i16>* @llvm_mips_binsri_h_ARG1
    220   %1 = load <8 x i16>* @llvm_mips_binsri_h_ARG2
    221   %2 = tail call <8 x i16> @llvm.mips.binsri.h(<8 x i16> %0, <8 x i16> %1, i32 7)
    222   store <8 x i16> %2, <8 x i16>* @llvm_mips_binsri_h_RES
    223   ret void
    224 }
    225 
    226 declare <8 x i16> @llvm.mips.binsri.h(<8 x i16>, <8 x i16>, i32) nounwind
    227 
    228 ; CHECK: llvm_mips_binsri_h_test:
    229 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsri_h_ARG1)(
    230 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsri_h_ARG2)(
    231 ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[R1]])
    232 ; CHECK-DAG: ld.h [[R4:\$w[0-9]+]], 0([[R2]])
    233 ; CHECK-DAG: binsri.h [[R3]], [[R4]], 7
    234 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsri_h_RES)(
    235 ; CHECK-DAG: st.h [[R3]], 0([[R5]])
    236 ; CHECK: .size llvm_mips_binsri_h_test
    237 
    238 @llvm_mips_binsri_w_ARG1 = global <4 x i32> zeroinitializer, align 16
    239 @llvm_mips_binsri_w_ARG2 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
    240 @llvm_mips_binsri_w_RES  = global <4 x i32> zeroinitializer, align 16
    241 
    242 define void @llvm_mips_binsri_w_test() nounwind {
    243 entry:
    244   %0 = load <4 x i32>* @llvm_mips_binsri_w_ARG1
    245   %1 = load <4 x i32>* @llvm_mips_binsri_w_ARG2
    246   %2 = tail call <4 x i32> @llvm.mips.binsri.w(<4 x i32> %0, <4 x i32> %1, i32 7)
    247   store <4 x i32> %2, <4 x i32>* @llvm_mips_binsri_w_RES
    248   ret void
    249 }
    250 
    251 declare <4 x i32> @llvm.mips.binsri.w(<4 x i32>, <4 x i32>, i32) nounwind
    252 
    253 ; CHECK: llvm_mips_binsri_w_test:
    254 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsri_w_ARG1)(
    255 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsri_w_ARG2)(
    256 ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0([[R1]])
    257 ; CHECK-DAG: ld.w [[R4:\$w[0-9]+]], 0([[R2]])
    258 ; CHECK-DAG: binsri.w [[R3]], [[R4]], 7
    259 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsri_w_RES)(
    260 ; CHECK-DAG: st.w [[R3]], 0([[R5]])
    261 ; CHECK: .size llvm_mips_binsri_w_test
    262 
    263 @llvm_mips_binsri_d_ARG1 = global <2 x i64> zeroinitializer, align 16
    264 @llvm_mips_binsri_d_ARG2 = global <2 x i64> <i64 0, i64 1>, align 16
    265 @llvm_mips_binsri_d_RES  = global <2 x i64> zeroinitializer, align 16
    266 
    267 define void @llvm_mips_binsri_d_test() nounwind {
    268 entry:
    269   %0 = load <2 x i64>* @llvm_mips_binsri_d_ARG1
    270   %1 = load <2 x i64>* @llvm_mips_binsri_d_ARG2
    271   %2 = tail call <2 x i64> @llvm.mips.binsri.d(<2 x i64> %0, <2 x i64> %1, i32 7)
    272   store <2 x i64> %2, <2 x i64>* @llvm_mips_binsri_d_RES
    273   ret void
    274 }
    275 
    276 declare <2 x i64> @llvm.mips.binsri.d(<2 x i64>, <2 x i64>, i32) nounwind
    277 
    278 ; CHECK: llvm_mips_binsri_d_test:
    279 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_binsri_d_ARG1)(
    280 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_binsri_d_ARG2)(
    281 ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[R1]])
    282 ; CHECK-DAG: ld.d [[R4:\$w[0-9]+]], 0([[R2]])
    283 ; CHECK-DAG: binsri.d [[R3]], [[R4]], 7
    284 ; CHECK-DAG: lw [[R5:\$[0-9]+]], %got(llvm_mips_binsri_d_RES)(
    285 ; CHECK-DAG: st.d [[R3]], 0([[R5]])
    286 ; CHECK: .size llvm_mips_binsri_d_test
    287 
    288 @llvm_mips_bnegi_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
    289 @llvm_mips_bnegi_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
    290 
    291 define void @llvm_mips_bnegi_b_test() nounwind {
    292 entry:
    293   %0 = load <16 x i8>* @llvm_mips_bnegi_b_ARG1
    294   %1 = tail call <16 x i8> @llvm.mips.bnegi.b(<16 x i8> %0, i32 7)
    295   store <16 x i8> %1, <16 x i8>* @llvm_mips_bnegi_b_RES
    296   ret void
    297 }
    298 
    299 declare <16 x i8> @llvm.mips.bnegi.b(<16 x i8>, i32) nounwind
    300 
    301 ; CHECK: llvm_mips_bnegi_b_test:
    302 ; CHECK: ld.b
    303 ; CHECK: bnegi.b
    304 ; CHECK: st.b
    305 ; CHECK: .size llvm_mips_bnegi_b_test
    306 ;
    307 @llvm_mips_bnegi_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
    308 @llvm_mips_bnegi_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
    309 
    310 define void @llvm_mips_bnegi_h_test() nounwind {
    311 entry:
    312   %0 = load <8 x i16>* @llvm_mips_bnegi_h_ARG1
    313   %1 = tail call <8 x i16> @llvm.mips.bnegi.h(<8 x i16> %0, i32 7)
    314   store <8 x i16> %1, <8 x i16>* @llvm_mips_bnegi_h_RES
    315   ret void
    316 }
    317 
    318 declare <8 x i16> @llvm.mips.bnegi.h(<8 x i16>, i32) nounwind
    319 
    320 ; CHECK: llvm_mips_bnegi_h_test:
    321 ; CHECK: ld.h
    322 ; CHECK: bnegi.h
    323 ; CHECK: st.h
    324 ; CHECK: .size llvm_mips_bnegi_h_test
    325 ;
    326 @llvm_mips_bnegi_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
    327 @llvm_mips_bnegi_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
    328 
    329 define void @llvm_mips_bnegi_w_test() nounwind {
    330 entry:
    331   %0 = load <4 x i32>* @llvm_mips_bnegi_w_ARG1
    332   %1 = tail call <4 x i32> @llvm.mips.bnegi.w(<4 x i32> %0, i32 7)
    333   store <4 x i32> %1, <4 x i32>* @llvm_mips_bnegi_w_RES
    334   ret void
    335 }
    336 
    337 declare <4 x i32> @llvm.mips.bnegi.w(<4 x i32>, i32) nounwind
    338 
    339 ; CHECK: llvm_mips_bnegi_w_test:
    340 ; CHECK: ld.w
    341 ; CHECK: bnegi.w
    342 ; CHECK: st.w
    343 ; CHECK: .size llvm_mips_bnegi_w_test
    344 ;
    345 @llvm_mips_bnegi_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
    346 @llvm_mips_bnegi_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
    347 
    348 define void @llvm_mips_bnegi_d_test() nounwind {
    349 entry:
    350   %0 = load <2 x i64>* @llvm_mips_bnegi_d_ARG1
    351   %1 = tail call <2 x i64> @llvm.mips.bnegi.d(<2 x i64> %0, i32 7)
    352   store <2 x i64> %1, <2 x i64>* @llvm_mips_bnegi_d_RES
    353   ret void
    354 }
    355 
    356 declare <2 x i64> @llvm.mips.bnegi.d(<2 x i64>, i32) nounwind
    357 
    358 ; CHECK: llvm_mips_bnegi_d_test:
    359 ; CHECK: ld.d
    360 ; CHECK: bnegi.d
    361 ; CHECK: st.d
    362 ; CHECK: .size llvm_mips_bnegi_d_test
    363 ;
    364 @llvm_mips_bseti_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16
    365 @llvm_mips_bseti_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16
    366 
    367 define void @llvm_mips_bseti_b_test() nounwind {
    368 entry:
    369   %0 = load <16 x i8>* @llvm_mips_bseti_b_ARG1
    370   %1 = tail call <16 x i8> @llvm.mips.bseti.b(<16 x i8> %0, i32 7)
    371   store <16 x i8> %1, <16 x i8>* @llvm_mips_bseti_b_RES
    372   ret void
    373 }
    374 
    375 declare <16 x i8> @llvm.mips.bseti.b(<16 x i8>, i32) nounwind
    376 
    377 ; CHECK: llvm_mips_bseti_b_test:
    378 ; CHECK: ld.b
    379 ; CHECK: bseti.b
    380 ; CHECK: st.b
    381 ; CHECK: .size llvm_mips_bseti_b_test
    382 ;
    383 @llvm_mips_bseti_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16
    384 @llvm_mips_bseti_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16
    385 
    386 define void @llvm_mips_bseti_h_test() nounwind {
    387 entry:
    388   %0 = load <8 x i16>* @llvm_mips_bseti_h_ARG1
    389   %1 = tail call <8 x i16> @llvm.mips.bseti.h(<8 x i16> %0, i32 7)
    390   store <8 x i16> %1, <8 x i16>* @llvm_mips_bseti_h_RES
    391   ret void
    392 }
    393 
    394 declare <8 x i16> @llvm.mips.bseti.h(<8 x i16>, i32) nounwind
    395 
    396 ; CHECK: llvm_mips_bseti_h_test:
    397 ; CHECK: ld.h
    398 ; CHECK: bseti.h
    399 ; CHECK: st.h
    400 ; CHECK: .size llvm_mips_bseti_h_test
    401 ;
    402 @llvm_mips_bseti_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16
    403 @llvm_mips_bseti_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16
    404 
    405 define void @llvm_mips_bseti_w_test() nounwind {
    406 entry:
    407   %0 = load <4 x i32>* @llvm_mips_bseti_w_ARG1
    408   %1 = tail call <4 x i32> @llvm.mips.bseti.w(<4 x i32> %0, i32 7)
    409   store <4 x i32> %1, <4 x i32>* @llvm_mips_bseti_w_RES
    410   ret void
    411 }
    412 
    413 declare <4 x i32> @llvm.mips.bseti.w(<4 x i32>, i32) nounwind
    414 
    415 ; CHECK: llvm_mips_bseti_w_test:
    416 ; CHECK: ld.w
    417 ; CHECK: bseti.w
    418 ; CHECK: st.w
    419 ; CHECK: .size llvm_mips_bseti_w_test
    420 ;
    421 @llvm_mips_bseti_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16
    422 @llvm_mips_bseti_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16
    423 
    424 define void @llvm_mips_bseti_d_test() nounwind {
    425 entry:
    426   %0 = load <2 x i64>* @llvm_mips_bseti_d_ARG1
    427   %1 = tail call <2 x i64> @llvm.mips.bseti.d(<2 x i64> %0, i32 7)
    428   store <2 x i64> %1, <2 x i64>* @llvm_mips_bseti_d_RES
    429   ret void
    430 }
    431 
    432 declare <2 x i64> @llvm.mips.bseti.d(<2 x i64>, i32) nounwind
    433 
    434 ; CHECK: llvm_mips_bseti_d_test:
    435 ; CHECK: ld.d
    436 ; CHECK: bseti.d
    437 ; CHECK: st.d
    438 ; CHECK: .size llvm_mips_bseti_d_test
    439 ;
    440