[mips][mips64r6] cl[oz], and dcl[oz] are re-encoded in MIPS32r6/MIPS64r6
[oota-llvm.git] / test / CodeGen / Mips / msa / spill.ll
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