Home | History | Annotate | Download | only in msa
      1 ; Test that the correct instruction is chosen for spill and reload by trying
      2 ; to have 33 live MSA registers simultaneously
      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 define i32 @test_i8(<16 x i8>* %p0, <16 x i8>* %q1) nounwind {
      8 entry:
      9   %p1  = getelementptr <16 x i8>* %p0, i32 1
     10   %p2  = getelementptr <16 x i8>* %p0, i32 2
     11   %p3  = getelementptr <16 x i8>* %p0, i32 3
     12   %p4  = getelementptr <16 x i8>* %p0, i32 4
     13   %p5  = getelementptr <16 x i8>* %p0, i32 5
     14   %p6  = getelementptr <16 x i8>* %p0, i32 6
     15   %p7  = getelementptr <16 x i8>* %p0, i32 7
     16   %p8  = getelementptr <16 x i8>* %p0, i32 8
     17   %p9  = getelementptr <16 x i8>* %p0, i32 9
     18   %p10 = getelementptr <16 x i8>* %p0, i32 10
     19   %p11 = getelementptr <16 x i8>* %p0, i32 11
     20   %p12 = getelementptr <16 x i8>* %p0, i32 12
     21   %p13 = getelementptr <16 x i8>* %p0, i32 13
     22   %p14 = getelementptr <16 x i8>* %p0, i32 14
     23   %p15 = getelementptr <16 x i8>* %p0, i32 15
     24   %p16 = getelementptr <16 x i8>* %p0, i32 16
     25   %p17 = getelementptr <16 x i8>* %p0, i32 17
     26   %p18 = getelementptr <16 x i8>* %p0, i32 18
     27   %p19 = getelementptr <16 x i8>* %p0, i32 19
     28   %p20 = getelementptr <16 x i8>* %p0, i32 20
     29   %p21 = getelementptr <16 x i8>* %p0, i32 21
     30   %p22 = getelementptr <16 x i8>* %p0, i32 22
     31   %p23 = getelementptr <16 x i8>* %p0, i32 23
     32   %p24 = getelementptr <16 x i8>* %p0, i32 24
     33   %p25 = getelementptr <16 x i8>* %p0, i32 25
     34   %p26 = getelementptr <16 x i8>* %p0, i32 26
     35   %p27 = getelementptr <16 x i8>* %p0, i32 27
     36   %p28 = getelementptr <16 x i8>* %p0, i32 28
     37   %p29 = getelementptr <16 x i8>* %p0, i32 29
     38   %p30 = getelementptr <16 x i8>* %p0, i32 30
     39   %p31 = getelementptr <16 x i8>* %p0, i32 31
     40   %p32 = getelementptr <16 x i8>* %p0, i32 32
     41   %p33 = getelementptr <16 x i8>* %p0, i32 33
     42   %0  = load <16 x i8>* %p0, align 16
     43   %1  = load <16 x i8>* %p1, align 16
     44   %2  = load <16 x i8>* %p2, align 16
     45   %3  = load <16 x i8>* %p3, align 16
     46   %4  = load <16 x i8>* %p4, align 16
     47   %5  = load <16 x i8>* %p5, align 16
     48   %6  = load <16 x i8>* %p6, align 16
     49   %7  = load <16 x i8>* %p7, align 16
     50   %8  = load <16 x i8>* %p8, align 16
     51   %9  = load <16 x i8>* %p9, align 16
     52   %10 = load <16 x i8>* %p10, align 16
     53   %11 = load <16 x i8>* %p11, align 16
     54   %12 = load <16 x i8>* %p12, align 16
     55   %13 = load <16 x i8>* %p13, align 16
     56   %14 = load <16 x i8>* %p14, align 16
     57   %15 = load <16 x i8>* %p15, align 16
     58   %16 = load <16 x i8>* %p16, align 16
     59   %17 = load <16 x i8>* %p17, align 16
     60   %18 = load <16 x i8>* %p18, align 16
     61   %19 = load <16 x i8>* %p19, align 16
     62   %20 = load <16 x i8>* %p20, align 16
     63   %21 = load <16 x i8>* %p21, align 16
     64   %22 = load <16 x i8>* %p22, align 16
     65   %23 = load <16 x i8>* %p23, align 16
     66   %24 = load <16 x i8>* %p24, align 16
     67   %25 = load <16 x i8>* %p25, align 16
     68   %26 = load <16 x i8>* %p26, align 16
     69   %27 = load <16 x i8>* %p27, align 16
     70   %28 = load <16 x i8>* %p28, align 16
     71   %29 = load <16 x i8>* %p29, align 16
     72   %30 = load <16 x i8>* %p30, align 16
     73   %31 = load <16 x i8>* %p31, align 16
     74   %32 = load <16 x i8>* %p32, align 16
     75   %33 = load <16 x i8>* %p33, align 16
     76   %r1  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %0,   <16 x i8> %1)
     77   %r2  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r1,  <16 x i8> %2)
     78   %r3  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r2,  <16 x i8> %3)
     79   %r4  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r3,  <16 x i8> %4)
     80   %r5  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r4,  <16 x i8> %5)
     81   %r6  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r5,  <16 x i8> %6)
     82   %r7  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r6,  <16 x i8> %7)
     83   %r8  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r7,  <16 x i8> %8)
     84   %r9  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r8,  <16 x i8> %9)
     85   %r10 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r9,  <16 x i8> %10)
     86   %r11 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r10, <16 x i8> %11)
     87   %r12 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r11, <16 x i8> %12)
     88   %r13 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r12, <16 x i8> %13)
     89   %r14 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r13, <16 x i8> %14)
     90   %r15 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r14, <16 x i8> %15)
     91   %r16 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r15, <16 x i8> %16)
     92   %r17 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r16, <16 x i8> %17)
     93   %r18 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r17, <16 x i8> %18)
     94   %r19 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r18, <16 x i8> %19)
     95   %r20 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r19, <16 x i8> %20)
     96   %r21 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r20, <16 x i8> %21)
     97   %r22 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r21, <16 x i8> %22)
     98   %r23 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r22, <16 x i8> %23)
     99   %r24 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r23, <16 x i8> %24)
    100   %r25 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r24, <16 x i8> %25)
    101   %r26 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r25, <16 x i8> %26)
    102   %r27 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r26, <16 x i8> %27)
    103   %r28 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r27, <16 x i8> %28)
    104   %r29 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r28, <16 x i8> %29)
    105   %r30 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r29, <16 x i8> %30)
    106   %r31 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r30, <16 x i8> %31)
    107   %r32 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r31, <16 x i8> %32)
    108   %r33 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r32, <16 x i8> %33)
    109   %rx1  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %r33,   <16 x i8> %1)
    110   %rx2  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx1,  <16 x i8> %2)
    111   %rx3  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx2,  <16 x i8> %3)
    112   %rx4  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx3,  <16 x i8> %4)
    113   %rx5  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx4,  <16 x i8> %5)
    114   %rx6  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx5,  <16 x i8> %6)
    115   %rx7  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx6,  <16 x i8> %7)
    116   %rx8  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx7,  <16 x i8> %8)
    117   %rx9  = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx8,  <16 x i8> %9)
    118   %rx10 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx9,  <16 x i8> %10)
    119   %rx11 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx10, <16 x i8> %11)
    120   %rx12 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx11, <16 x i8> %12)
    121   %rx13 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx12, <16 x i8> %13)
    122   %rx14 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx13, <16 x i8> %14)
    123   %rx15 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx14, <16 x i8> %15)
    124   %rx16 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx15, <16 x i8> %16)
    125   %rx17 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx16, <16 x i8> %17)
    126   %rx18 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx17, <16 x i8> %18)
    127   %rx19 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx18, <16 x i8> %19)
    128   %rx20 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx19, <16 x i8> %20)
    129   %rx21 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx20, <16 x i8> %21)
    130   %rx22 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx21, <16 x i8> %22)
    131   %rx23 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx22, <16 x i8> %23)
    132   %rx24 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx23, <16 x i8> %24)
    133   %rx25 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx24, <16 x i8> %25)
    134   %rx26 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx25, <16 x i8> %26)
    135   %rx27 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx26, <16 x i8> %27)
    136   %rx28 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx27, <16 x i8> %28)
    137   %rx29 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx28, <16 x i8> %29)
    138   %rx30 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx29, <16 x i8> %30)
    139   %rx31 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx30, <16 x i8> %31)
    140   %rx32 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx31, <16 x i8> %32)
    141   %rx33 = call <16 x i8> @llvm.mips.addv.b(<16 x i8> %rx32, <16 x i8> %33)
    142   %res = call i32 @llvm.mips.copy.s.b(<16 x i8> %rx33, i32 0)
    143   ret i32 %res
    144 }
    145 
    146 declare <16 x i8> @llvm.mips.addv.b(<16 x i8>, <16 x i8>) nounwind
    147 declare i32       @llvm.mips.copy.s.b(<16 x i8>, i32) nounwind
    148 
    149 ; CHECK: test_i8:
    150 ; CHECK: st.b {{.*}} Spill
    151 ; CHECK: st.b {{.*}} Spill
    152 ; CHECK: ld.b {{.*}} Reload
    153 ; CHECK: ld.b {{.*}} Reload
    154 ; CHECK: .size
    155 
    156 define i32 @test_i16(<8 x i16>* %p0, <8 x i16>* %q1) nounwind {
    157 entry:
    158   %p1  = getelementptr <8 x i16>* %p0, i32 1
    159   %p2  = getelementptr <8 x i16>* %p0, i32 2
    160   %p3  = getelementptr <8 x i16>* %p0, i32 3
    161   %p4  = getelementptr <8 x i16>* %p0, i32 4
    162   %p5  = getelementptr <8 x i16>* %p0, i32 5
    163   %p6  = getelementptr <8 x i16>* %p0, i32 6
    164   %p7  = getelementptr <8 x i16>* %p0, i32 7
    165   %p8  = getelementptr <8 x i16>* %p0, i32 8
    166   %p9  = getelementptr <8 x i16>* %p0, i32 9
    167   %p10 = getelementptr <8 x i16>* %p0, i32 10
    168   %p11 = getelementptr <8 x i16>* %p0, i32 11
    169   %p12 = getelementptr <8 x i16>* %p0, i32 12
    170   %p13 = getelementptr <8 x i16>* %p0, i32 13
    171   %p14 = getelementptr <8 x i16>* %p0, i32 14
    172   %p15 = getelementptr <8 x i16>* %p0, i32 15
    173   %p16 = getelementptr <8 x i16>* %p0, i32 16
    174   %p17 = getelementptr <8 x i16>* %p0, i32 17
    175   %p18 = getelementptr <8 x i16>* %p0, i32 18
    176   %p19 = getelementptr <8 x i16>* %p0, i32 19
    177   %p20 = getelementptr <8 x i16>* %p0, i32 20
    178   %p21 = getelementptr <8 x i16>* %p0, i32 21
    179   %p22 = getelementptr <8 x i16>* %p0, i32 22
    180   %p23 = getelementptr <8 x i16>* %p0, i32 23
    181   %p24 = getelementptr <8 x i16>* %p0, i32 24
    182   %p25 = getelementptr <8 x i16>* %p0, i32 25
    183   %p26 = getelementptr <8 x i16>* %p0, i32 26
    184   %p27 = getelementptr <8 x i16>* %p0, i32 27
    185   %p28 = getelementptr <8 x i16>* %p0, i32 28
    186   %p29 = getelementptr <8 x i16>* %p0, i32 29
    187   %p30 = getelementptr <8 x i16>* %p0, i32 30
    188   %p31 = getelementptr <8 x i16>* %p0, i32 31
    189   %p32 = getelementptr <8 x i16>* %p0, i32 32
    190   %p33 = getelementptr <8 x i16>* %p0, i32 33
    191   %0  = load <8 x i16>* %p0, align 16
    192   %1  = load <8 x i16>* %p1, align 16
    193   %2  = load <8 x i16>* %p2, align 16
    194   %3  = load <8 x i16>* %p3, align 16
    195   %4  = load <8 x i16>* %p4, align 16
    196   %5  = load <8 x i16>* %p5, align 16
    197   %6  = load <8 x i16>* %p6, align 16
    198   %7  = load <8 x i16>* %p7, align 16
    199   %8  = load <8 x i16>* %p8, align 16
    200   %9  = load <8 x i16>* %p9, align 16
    201   %10 = load <8 x i16>* %p10, align 16
    202   %11 = load <8 x i16>* %p11, align 16
    203   %12 = load <8 x i16>* %p12, align 16
    204   %13 = load <8 x i16>* %p13, align 16
    205   %14 = load <8 x i16>* %p14, align 16
    206   %15 = load <8 x i16>* %p15, align 16
    207   %16 = load <8 x i16>* %p16, align 16
    208   %17 = load <8 x i16>* %p17, align 16
    209   %18 = load <8 x i16>* %p18, align 16
    210   %19 = load <8 x i16>* %p19, align 16
    211   %20 = load <8 x i16>* %p20, align 16
    212   %21 = load <8 x i16>* %p21, align 16
    213   %22 = load <8 x i16>* %p22, align 16
    214   %23 = load <8 x i16>* %p23, align 16
    215   %24 = load <8 x i16>* %p24, align 16
    216   %25 = load <8 x i16>* %p25, align 16
    217   %26 = load <8 x i16>* %p26, align 16
    218   %27 = load <8 x i16>* %p27, align 16
    219   %28 = load <8 x i16>* %p28, align 16
    220   %29 = load <8 x i16>* %p29, align 16
    221   %30 = load <8 x i16>* %p30, align 16
    222   %31 = load <8 x i16>* %p31, align 16
    223   %32 = load <8 x i16>* %p32, align 16
    224   %33 = load <8 x i16>* %p33, align 16
    225   %r1  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %0,   <8 x i16> %1)
    226   %r2  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r1,  <8 x i16> %2)
    227   %r3  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r2,  <8 x i16> %3)
    228   %r4  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r3,  <8 x i16> %4)
    229   %r5  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r4,  <8 x i16> %5)
    230   %r6  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r5,  <8 x i16> %6)
    231   %r7  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r6,  <8 x i16> %7)
    232   %r8  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r7,  <8 x i16> %8)
    233   %r9  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r8,  <8 x i16> %9)
    234   %r10 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r9,  <8 x i16> %10)
    235   %r11 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r10, <8 x i16> %11)
    236   %r12 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r11, <8 x i16> %12)
    237   %r13 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r12, <8 x i16> %13)
    238   %r14 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r13, <8 x i16> %14)
    239   %r15 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r14, <8 x i16> %15)
    240   %r16 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r15, <8 x i16> %16)
    241   %r17 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r16, <8 x i16> %17)
    242   %r18 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r17, <8 x i16> %18)
    243   %r19 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r18, <8 x i16> %19)
    244   %r20 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r19, <8 x i16> %20)
    245   %r21 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r20, <8 x i16> %21)
    246   %r22 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r21, <8 x i16> %22)
    247   %r23 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r22, <8 x i16> %23)
    248   %r24 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r23, <8 x i16> %24)
    249   %r25 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r24, <8 x i16> %25)
    250   %r26 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r25, <8 x i16> %26)
    251   %r27 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r26, <8 x i16> %27)
    252   %r28 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r27, <8 x i16> %28)
    253   %r29 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r28, <8 x i16> %29)
    254   %r30 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r29, <8 x i16> %30)
    255   %r31 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r30, <8 x i16> %31)
    256   %r32 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r31, <8 x i16> %32)
    257   %r33 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r32, <8 x i16> %33)
    258   %rx1  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %r33,   <8 x i16> %1)
    259   %rx2  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx1,  <8 x i16> %2)
    260   %rx3  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx2,  <8 x i16> %3)
    261   %rx4  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx3,  <8 x i16> %4)
    262   %rx5  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx4,  <8 x i16> %5)
    263   %rx6  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx5,  <8 x i16> %6)
    264   %rx7  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx6,  <8 x i16> %7)
    265   %rx8  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx7,  <8 x i16> %8)
    266   %rx9  = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx8,  <8 x i16> %9)
    267   %rx10 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx9,  <8 x i16> %10)
    268   %rx11 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx10, <8 x i16> %11)
    269   %rx12 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx11, <8 x i16> %12)
    270   %rx13 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx12, <8 x i16> %13)
    271   %rx14 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx13, <8 x i16> %14)
    272   %rx15 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx14, <8 x i16> %15)
    273   %rx16 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx15, <8 x i16> %16)
    274   %rx17 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx16, <8 x i16> %17)
    275   %rx18 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx17, <8 x i16> %18)
    276   %rx19 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx18, <8 x i16> %19)
    277   %rx20 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx19, <8 x i16> %20)
    278   %rx21 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx20, <8 x i16> %21)
    279   %rx22 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx21, <8 x i16> %22)
    280   %rx23 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx22, <8 x i16> %23)
    281   %rx24 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx23, <8 x i16> %24)
    282   %rx25 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx24, <8 x i16> %25)
    283   %rx26 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx25, <8 x i16> %26)
    284   %rx27 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx26, <8 x i16> %27)
    285   %rx28 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx27, <8 x i16> %28)
    286   %rx29 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx28, <8 x i16> %29)
    287   %rx30 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx29, <8 x i16> %30)
    288   %rx31 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx30, <8 x i16> %31)
    289   %rx32 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx31, <8 x i16> %32)
    290   %rx33 = call <8 x i16> @llvm.mips.addv.h(<8 x i16> %rx32, <8 x i16> %33)
    291   %res = call i32 @llvm.mips.copy.s.h(<8 x i16> %rx33, i32 0)
    292   ret i32 %res
    293 }
    294 
    295 declare <8 x i16> @llvm.mips.addv.h(<8 x i16>, <8 x i16>) nounwind
    296 declare i32       @llvm.mips.copy.s.h(<8 x i16>, i32) nounwind
    297 
    298 ; CHECK: test_i16:
    299 ; CHECK: st.h {{.*}} Spill
    300 ; CHECK: st.h {{.*}} Spill
    301 ; CHECK: ld.h {{.*}} Reload
    302 ; CHECK: ld.h {{.*}} Reload
    303 ; CHECK: .size
    304 
    305 define i32 @test_i32(<4 x i32>* %p0, <4 x i32>* %q1) nounwind {
    306 entry:
    307   %p1  = getelementptr <4 x i32>* %p0, i32 1
    308   %p2  = getelementptr <4 x i32>* %p0, i32 2
    309   %p3  = getelementptr <4 x i32>* %p0, i32 3
    310   %p4  = getelementptr <4 x i32>* %p0, i32 4
    311   %p5  = getelementptr <4 x i32>* %p0, i32 5
    312   %p6  = getelementptr <4 x i32>* %p0, i32 6
    313   %p7  = getelementptr <4 x i32>* %p0, i32 7
    314   %p8  = getelementptr <4 x i32>* %p0, i32 8
    315   %p9  = getelementptr <4 x i32>* %p0, i32 9
    316   %p10 = getelementptr <4 x i32>* %p0, i32 10
    317   %p11 = getelementptr <4 x i32>* %p0, i32 11
    318   %p12 = getelementptr <4 x i32>* %p0, i32 12
    319   %p13 = getelementptr <4 x i32>* %p0, i32 13
    320   %p14 = getelementptr <4 x i32>* %p0, i32 14
    321   %p15 = getelementptr <4 x i32>* %p0, i32 15
    322   %p16 = getelementptr <4 x i32>* %p0, i32 16
    323   %p17 = getelementptr <4 x i32>* %p0, i32 17
    324   %p18 = getelementptr <4 x i32>* %p0, i32 18
    325   %p19 = getelementptr <4 x i32>* %p0, i32 19
    326   %p20 = getelementptr <4 x i32>* %p0, i32 20
    327   %p21 = getelementptr <4 x i32>* %p0, i32 21
    328   %p22 = getelementptr <4 x i32>* %p0, i32 22
    329   %p23 = getelementptr <4 x i32>* %p0, i32 23
    330   %p24 = getelementptr <4 x i32>* %p0, i32 24
    331   %p25 = getelementptr <4 x i32>* %p0, i32 25
    332   %p26 = getelementptr <4 x i32>* %p0, i32 26
    333   %p27 = getelementptr <4 x i32>* %p0, i32 27
    334   %p28 = getelementptr <4 x i32>* %p0, i32 28
    335   %p29 = getelementptr <4 x i32>* %p0, i32 29
    336   %p30 = getelementptr <4 x i32>* %p0, i32 30
    337   %p31 = getelementptr <4 x i32>* %p0, i32 31
    338   %p32 = getelementptr <4 x i32>* %p0, i32 32
    339   %p33 = getelementptr <4 x i32>* %p0, i32 33
    340   %0  = load <4 x i32>* %p0, align 16
    341   %1  = load <4 x i32>* %p1, align 16
    342   %2  = load <4 x i32>* %p2, align 16
    343   %3  = load <4 x i32>* %p3, align 16
    344   %4  = load <4 x i32>* %p4, align 16
    345   %5  = load <4 x i32>* %p5, align 16
    346   %6  = load <4 x i32>* %p6, align 16
    347   %7  = load <4 x i32>* %p7, align 16
    348   %8  = load <4 x i32>* %p8, align 16
    349   %9  = load <4 x i32>* %p9, align 16
    350   %10 = load <4 x i32>* %p10, align 16
    351   %11 = load <4 x i32>* %p11, align 16
    352   %12 = load <4 x i32>* %p12, align 16
    353   %13 = load <4 x i32>* %p13, align 16
    354   %14 = load <4 x i32>* %p14, align 16
    355   %15 = load <4 x i32>* %p15, align 16
    356   %16 = load <4 x i32>* %p16, align 16
    357   %17 = load <4 x i32>* %p17, align 16
    358   %18 = load <4 x i32>* %p18, align 16
    359   %19 = load <4 x i32>* %p19, align 16
    360   %20 = load <4 x i32>* %p20, align 16
    361   %21 = load <4 x i32>* %p21, align 16
    362   %22 = load <4 x i32>* %p22, align 16
    363   %23 = load <4 x i32>* %p23, align 16
    364   %24 = load <4 x i32>* %p24, align 16
    365   %25 = load <4 x i32>* %p25, align 16
    366   %26 = load <4 x i32>* %p26, align 16
    367   %27 = load <4 x i32>* %p27, align 16
    368   %28 = load <4 x i32>* %p28, align 16
    369   %29 = load <4 x i32>* %p29, align 16
    370   %30 = load <4 x i32>* %p30, align 16
    371   %31 = load <4 x i32>* %p31, align 16
    372   %32 = load <4 x i32>* %p32, align 16
    373   %33 = load <4 x i32>* %p33, align 16
    374   %r1 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %0, <4 x i32> %1)
    375   %r2 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r1, <4 x i32> %2)
    376   %r3 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r2, <4 x i32> %3)
    377   %r4 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r3, <4 x i32> %4)
    378   %r5 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r4, <4 x i32> %5)
    379   %r6 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r5, <4 x i32> %6)
    380   %r7 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r6, <4 x i32> %7)
    381   %r8 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r7, <4 x i32> %8)
    382   %r9 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r8, <4 x i32> %9)
    383   %r10 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r9, <4 x i32> %10)
    384   %r11 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r10, <4 x i32> %11)
    385   %r12 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r11, <4 x i32> %12)
    386   %r13 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r12, <4 x i32> %13)
    387   %r14 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r13, <4 x i32> %14)
    388   %r15 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r14, <4 x i32> %15)
    389   %r16 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r15, <4 x i32> %16)
    390   %r17 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r16, <4 x i32> %17)
    391   %r18 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r17, <4 x i32> %18)
    392   %r19 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r18, <4 x i32> %19)
    393   %r20 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r19, <4 x i32> %20)
    394   %r21 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r20, <4 x i32> %21)
    395   %r22 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r21, <4 x i32> %22)
    396   %r23 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r22, <4 x i32> %23)
    397   %r24 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r23, <4 x i32> %24)
    398   %r25 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r24, <4 x i32> %25)
    399   %r26 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r25, <4 x i32> %26)
    400   %r27 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r26, <4 x i32> %27)
    401   %r28 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r27, <4 x i32> %28)
    402   %r29 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r28, <4 x i32> %29)
    403   %r30 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r29, <4 x i32> %30)
    404   %r31 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r30, <4 x i32> %31)
    405   %r32 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r31, <4 x i32> %32)
    406   %r33 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r32, <4 x i32> %33)
    407   %rx1 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %r33, <4 x i32> %1)
    408   %rx2 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx1, <4 x i32> %2)
    409   %rx3 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx2, <4 x i32> %3)
    410   %rx4 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx3, <4 x i32> %4)
    411   %rx5 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx4, <4 x i32> %5)
    412   %rx6 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx5, <4 x i32> %6)
    413   %rx7 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx6, <4 x i32> %7)
    414   %rx8 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx7, <4 x i32> %8)
    415   %rx9 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx8, <4 x i32> %9)
    416   %rx10 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx9, <4 x i32> %10)
    417   %rx11 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx10, <4 x i32> %11)
    418   %rx12 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx11, <4 x i32> %12)
    419   %rx13 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx12, <4 x i32> %13)
    420   %rx14 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx13, <4 x i32> %14)
    421   %rx15 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx14, <4 x i32> %15)
    422   %rx16 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx15, <4 x i32> %16)
    423   %rx17 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx16, <4 x i32> %17)
    424   %rx18 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx17, <4 x i32> %18)
    425   %rx19 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx18, <4 x i32> %19)
    426   %rx20 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx19, <4 x i32> %20)
    427   %rx21 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx20, <4 x i32> %21)
    428   %rx22 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx21, <4 x i32> %22)
    429   %rx23 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx22, <4 x i32> %23)
    430   %rx24 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx23, <4 x i32> %24)
    431   %rx25 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx24, <4 x i32> %25)
    432   %rx26 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx25, <4 x i32> %26)
    433   %rx27 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx26, <4 x i32> %27)
    434   %rx28 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx27, <4 x i32> %28)
    435   %rx29 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx28, <4 x i32> %29)
    436   %rx30 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx29, <4 x i32> %30)
    437   %rx31 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx30, <4 x i32> %31)
    438   %rx32 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx31, <4 x i32> %32)
    439   %rx33 = call <4 x i32> @llvm.mips.addv.w(<4 x i32> %rx32, <4 x i32> %33)
    440   %res = call i32 @llvm.mips.copy.s.w(<4 x i32> %rx33, i32 0)
    441   ret i32 %res
    442 }
    443 
    444 declare <4 x i32> @llvm.mips.addv.w(<4 x i32>, <4 x i32>) nounwind
    445 declare i32       @llvm.mips.copy.s.w(<4 x i32>, i32) nounwind
    446 
    447 ; CHECK: test_i32:
    448 ; CHECK: st.w {{.*}} Spill
    449 ; CHECK: st.w {{.*}} Spill
    450 ; CHECK: ld.w {{.*}} Reload
    451 ; CHECK: ld.w {{.*}} Reload
    452 ; CHECK: .size
    453 
    454 define i32 @test_i64(<2 x i64>* %p0, <2 x i64>* %q1) nounwind {
    455 entry:
    456   %p1  = getelementptr <2 x i64>* %p0, i32 1
    457   %p2  = getelementptr <2 x i64>* %p0, i32 2
    458   %p3  = getelementptr <2 x i64>* %p0, i32 3
    459   %p4  = getelementptr <2 x i64>* %p0, i32 4
    460   %p5  = getelementptr <2 x i64>* %p0, i32 5
    461   %p6  = getelementptr <2 x i64>* %p0, i32 6
    462   %p7  = getelementptr <2 x i64>* %p0, i32 7
    463   %p8  = getelementptr <2 x i64>* %p0, i32 8
    464   %p9  = getelementptr <2 x i64>* %p0, i32 9
    465   %p10 = getelementptr <2 x i64>* %p0, i32 10
    466   %p11 = getelementptr <2 x i64>* %p0, i32 11
    467   %p12 = getelementptr <2 x i64>* %p0, i32 12
    468   %p13 = getelementptr <2 x i64>* %p0, i32 13
    469   %p14 = getelementptr <2 x i64>* %p0, i32 14
    470   %p15 = getelementptr <2 x i64>* %p0, i32 15
    471   %p16 = getelementptr <2 x i64>* %p0, i32 16
    472   %p17 = getelementptr <2 x i64>* %p0, i32 17
    473   %p18 = getelementptr <2 x i64>* %p0, i32 18
    474   %p19 = getelementptr <2 x i64>* %p0, i32 19
    475   %p20 = getelementptr <2 x i64>* %p0, i32 20
    476   %p21 = getelementptr <2 x i64>* %p0, i32 21
    477   %p22 = getelementptr <2 x i64>* %p0, i32 22
    478   %p23 = getelementptr <2 x i64>* %p0, i32 23
    479   %p24 = getelementptr <2 x i64>* %p0, i32 24
    480   %p25 = getelementptr <2 x i64>* %p0, i32 25
    481   %p26 = getelementptr <2 x i64>* %p0, i32 26
    482   %p27 = getelementptr <2 x i64>* %p0, i32 27
    483   %p28 = getelementptr <2 x i64>* %p0, i32 28
    484   %p29 = getelementptr <2 x i64>* %p0, i32 29
    485   %p30 = getelementptr <2 x i64>* %p0, i32 30
    486   %p31 = getelementptr <2 x i64>* %p0, i32 31
    487   %p32 = getelementptr <2 x i64>* %p0, i32 32
    488   %p33 = getelementptr <2 x i64>* %p0, i32 33
    489   %0  = load <2 x i64>* %p0, align 16
    490   %1  = load <2 x i64>* %p1, align 16
    491   %2  = load <2 x i64>* %p2, align 16
    492   %3  = load <2 x i64>* %p3, align 16
    493   %4  = load <2 x i64>* %p4, align 16
    494   %5  = load <2 x i64>* %p5, align 16
    495   %6  = load <2 x i64>* %p6, align 16
    496   %7  = load <2 x i64>* %p7, align 16
    497   %8  = load <2 x i64>* %p8, align 16
    498   %9  = load <2 x i64>* %p9, align 16
    499   %10 = load <2 x i64>* %p10, align 16
    500   %11 = load <2 x i64>* %p11, align 16
    501   %12 = load <2 x i64>* %p12, align 16
    502   %13 = load <2 x i64>* %p13, align 16
    503   %14 = load <2 x i64>* %p14, align 16
    504   %15 = load <2 x i64>* %p15, align 16
    505   %16 = load <2 x i64>* %p16, align 16
    506   %17 = load <2 x i64>* %p17, align 16
    507   %18 = load <2 x i64>* %p18, align 16
    508   %19 = load <2 x i64>* %p19, align 16
    509   %20 = load <2 x i64>* %p20, align 16
    510   %21 = load <2 x i64>* %p21, align 16
    511   %22 = load <2 x i64>* %p22, align 16
    512   %23 = load <2 x i64>* %p23, align 16
    513   %24 = load <2 x i64>* %p24, align 16
    514   %25 = load <2 x i64>* %p25, align 16
    515   %26 = load <2 x i64>* %p26, align 16
    516   %27 = load <2 x i64>* %p27, align 16
    517   %28 = load <2 x i64>* %p28, align 16
    518   %29 = load <2 x i64>* %p29, align 16
    519   %30 = load <2 x i64>* %p30, align 16
    520   %31 = load <2 x i64>* %p31, align 16
    521   %32 = load <2 x i64>* %p32, align 16
    522   %33 = load <2 x i64>* %p33, align 16
    523   %r1  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %0,   <2 x i64> %1)
    524   %r2  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r1,  <2 x i64> %2)
    525   %r3  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r2,  <2 x i64> %3)
    526   %r4  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r3,  <2 x i64> %4)
    527   %r5  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r4,  <2 x i64> %5)
    528   %r6  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r5,  <2 x i64> %6)
    529   %r7  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r6,  <2 x i64> %7)
    530   %r8  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r7,  <2 x i64> %8)
    531   %r9  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r8,  <2 x i64> %9)
    532   %r10 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r9,  <2 x i64> %10)
    533   %r11 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r10, <2 x i64> %11)
    534   %r12 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r11, <2 x i64> %12)
    535   %r13 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r12, <2 x i64> %13)
    536   %r14 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r13, <2 x i64> %14)
    537   %r15 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r14, <2 x i64> %15)
    538   %r16 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r15, <2 x i64> %16)
    539   %r17 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r16, <2 x i64> %17)
    540   %r18 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r17, <2 x i64> %18)
    541   %r19 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r18, <2 x i64> %19)
    542   %r20 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r19, <2 x i64> %20)
    543   %r21 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r20, <2 x i64> %21)
    544   %r22 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r21, <2 x i64> %22)
    545   %r23 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r22, <2 x i64> %23)
    546   %r24 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r23, <2 x i64> %24)
    547   %r25 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r24, <2 x i64> %25)
    548   %r26 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r25, <2 x i64> %26)
    549   %r27 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r26, <2 x i64> %27)
    550   %r28 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r27, <2 x i64> %28)
    551   %r29 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r28, <2 x i64> %29)
    552   %r30 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r29, <2 x i64> %30)
    553   %r31 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r30, <2 x i64> %31)
    554   %r32 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r31, <2 x i64> %32)
    555   %r33 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r32, <2 x i64> %33)
    556   %rx1  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %r33,  <2 x i64> %1)
    557   %rx2  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx1,  <2 x i64> %2)
    558   %rx3  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx2,  <2 x i64> %3)
    559   %rx4  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx3,  <2 x i64> %4)
    560   %rx5  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx4,  <2 x i64> %5)
    561   %rx6  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx5,  <2 x i64> %6)
    562   %rx7  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx6,  <2 x i64> %7)
    563   %rx8  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx7,  <2 x i64> %8)
    564   %rx9  = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx8,  <2 x i64> %9)
    565   %rx10 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx9,  <2 x i64> %10)
    566   %rx11 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx10, <2 x i64> %11)
    567   %rx12 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx11, <2 x i64> %12)
    568   %rx13 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx12, <2 x i64> %13)
    569   %rx14 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx13, <2 x i64> %14)
    570   %rx15 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx14, <2 x i64> %15)
    571   %rx16 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx15, <2 x i64> %16)
    572   %rx17 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx16, <2 x i64> %17)
    573   %rx18 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx17, <2 x i64> %18)
    574   %rx19 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx18, <2 x i64> %19)
    575   %rx20 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx19, <2 x i64> %20)
    576   %rx21 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx20, <2 x i64> %21)
    577   %rx22 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx21, <2 x i64> %22)
    578   %rx23 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx22, <2 x i64> %23)
    579   %rx24 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx23, <2 x i64> %24)
    580   %rx25 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx24, <2 x i64> %25)
    581   %rx26 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx25, <2 x i64> %26)
    582   %rx27 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx26, <2 x i64> %27)
    583   %rx28 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx27, <2 x i64> %28)
    584   %rx29 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx28, <2 x i64> %29)
    585   %rx30 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx29, <2 x i64> %30)
    586   %rx31 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx30, <2 x i64> %31)
    587   %rx32 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx31, <2 x i64> %32)
    588   %rx33 = call <2 x i64> @llvm.mips.addv.d(<2 x i64> %rx32, <2 x i64> %33)
    589   %res1 = bitcast <2 x i64> %rx33 to <4 x i32>
    590   %res = call i32 @llvm.mips.copy.s.w(<4 x i32> %res1, i32 0)
    591   ret i32 %res
    592 }
    593 
    594 declare <2 x i64> @llvm.mips.addv.d(<2 x i64>, <2 x i64>) nounwind
    595 
    596 ; CHECK: test_i64:
    597 ; CHECK: st.d {{.*}} Spill
    598 ; CHECK: st.d {{.*}} Spill
    599 ; CHECK: ld.d {{.*}} Reload
    600 ; CHECK: ld.d {{.*}} Reload
    601 ; CHECK: .size
    602