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
7define i32 @test_i8(<16 x i8>* %p0, <16 x i8>* %q1) nounwind {
8entry:
9  %p1  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 1
10  %p2  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 2
11  %p3  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 3
12  %p4  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 4
13  %p5  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 5
14  %p6  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 6
15  %p7  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 7
16  %p8  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 8
17  %p9  = getelementptr <16 x i8>, <16 x i8>* %p0, i32 9
18  %p10 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 10
19  %p11 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 11
20  %p12 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 12
21  %p13 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 13
22  %p14 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 14
23  %p15 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 15
24  %p16 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 16
25  %p17 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 17
26  %p18 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 18
27  %p19 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 19
28  %p20 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 20
29  %p21 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 21
30  %p22 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 22
31  %p23 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 23
32  %p24 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 24
33  %p25 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 25
34  %p26 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 26
35  %p27 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 27
36  %p28 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 28
37  %p29 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 29
38  %p30 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 30
39  %p31 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 31
40  %p32 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 32
41  %p33 = getelementptr <16 x i8>, <16 x i8>* %p0, i32 33
42  %0  = load <16 x i8>, <16 x i8>* %p0, align 16
43  %1  = load <16 x i8>, <16 x i8>* %p1, align 16
44  %2  = load <16 x i8>, <16 x i8>* %p2, align 16
45  %3  = load <16 x i8>, <16 x i8>* %p3, align 16
46  %4  = load <16 x i8>, <16 x i8>* %p4, align 16
47  %5  = load <16 x i8>, <16 x i8>* %p5, align 16
48  %6  = load <16 x i8>, <16 x i8>* %p6, align 16
49  %7  = load <16 x i8>, <16 x i8>* %p7, align 16
50  %8  = load <16 x i8>, <16 x i8>* %p8, align 16
51  %9  = load <16 x i8>, <16 x i8>* %p9, align 16
52  %10 = load <16 x i8>, <16 x i8>* %p10, align 16
53  %11 = load <16 x i8>, <16 x i8>* %p11, align 16
54  %12 = load <16 x i8>, <16 x i8>* %p12, align 16
55  %13 = load <16 x i8>, <16 x i8>* %p13, align 16
56  %14 = load <16 x i8>, <16 x i8>* %p14, align 16
57  %15 = load <16 x i8>, <16 x i8>* %p15, align 16
58  %16 = load <16 x i8>, <16 x i8>* %p16, align 16
59  %17 = load <16 x i8>, <16 x i8>* %p17, align 16
60  %18 = load <16 x i8>, <16 x i8>* %p18, align 16
61  %19 = load <16 x i8>, <16 x i8>* %p19, align 16
62  %20 = load <16 x i8>, <16 x i8>* %p20, align 16
63  %21 = load <16 x i8>, <16 x i8>* %p21, align 16
64  %22 = load <16 x i8>, <16 x i8>* %p22, align 16
65  %23 = load <16 x i8>, <16 x i8>* %p23, align 16
66  %24 = load <16 x i8>, <16 x i8>* %p24, align 16
67  %25 = load <16 x i8>, <16 x i8>* %p25, align 16
68  %26 = load <16 x i8>, <16 x i8>* %p26, align 16
69  %27 = load <16 x i8>, <16 x i8>* %p27, align 16
70  %28 = load <16 x i8>, <16 x i8>* %p28, align 16
71  %29 = load <16 x i8>, <16 x i8>* %p29, align 16
72  %30 = load <16 x i8>, <16 x i8>* %p30, align 16
73  %31 = load <16 x i8>, <16 x i8>* %p31, align 16
74  %32 = load <16 x i8>, <16 x i8>* %p32, align 16
75  %33 = load <16 x i8>, <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
146declare <16 x i8> @llvm.mips.addv.b(<16 x i8>, <16 x i8>) nounwind
147declare 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
156define i32 @test_i16(<8 x i16>* %p0, <8 x i16>* %q1) nounwind {
157entry:
158  %p1  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 1
159  %p2  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 2
160  %p3  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 3
161  %p4  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 4
162  %p5  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 5
163  %p6  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 6
164  %p7  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 7
165  %p8  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 8
166  %p9  = getelementptr <8 x i16>, <8 x i16>* %p0, i32 9
167  %p10 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 10
168  %p11 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 11
169  %p12 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 12
170  %p13 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 13
171  %p14 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 14
172  %p15 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 15
173  %p16 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 16
174  %p17 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 17
175  %p18 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 18
176  %p19 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 19
177  %p20 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 20
178  %p21 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 21
179  %p22 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 22
180  %p23 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 23
181  %p24 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 24
182  %p25 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 25
183  %p26 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 26
184  %p27 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 27
185  %p28 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 28
186  %p29 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 29
187  %p30 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 30
188  %p31 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 31
189  %p32 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 32
190  %p33 = getelementptr <8 x i16>, <8 x i16>* %p0, i32 33
191  %0  = load <8 x i16>, <8 x i16>* %p0, align 16
192  %1  = load <8 x i16>, <8 x i16>* %p1, align 16
193  %2  = load <8 x i16>, <8 x i16>* %p2, align 16
194  %3  = load <8 x i16>, <8 x i16>* %p3, align 16
195  %4  = load <8 x i16>, <8 x i16>* %p4, align 16
196  %5  = load <8 x i16>, <8 x i16>* %p5, align 16
197  %6  = load <8 x i16>, <8 x i16>* %p6, align 16
198  %7  = load <8 x i16>, <8 x i16>* %p7, align 16
199  %8  = load <8 x i16>, <8 x i16>* %p8, align 16
200  %9  = load <8 x i16>, <8 x i16>* %p9, align 16
201  %10 = load <8 x i16>, <8 x i16>* %p10, align 16
202  %11 = load <8 x i16>, <8 x i16>* %p11, align 16
203  %12 = load <8 x i16>, <8 x i16>* %p12, align 16
204  %13 = load <8 x i16>, <8 x i16>* %p13, align 16
205  %14 = load <8 x i16>, <8 x i16>* %p14, align 16
206  %15 = load <8 x i16>, <8 x i16>* %p15, align 16
207  %16 = load <8 x i16>, <8 x i16>* %p16, align 16
208  %17 = load <8 x i16>, <8 x i16>* %p17, align 16
209  %18 = load <8 x i16>, <8 x i16>* %p18, align 16
210  %19 = load <8 x i16>, <8 x i16>* %p19, align 16
211  %20 = load <8 x i16>, <8 x i16>* %p20, align 16
212  %21 = load <8 x i16>, <8 x i16>* %p21, align 16
213  %22 = load <8 x i16>, <8 x i16>* %p22, align 16
214  %23 = load <8 x i16>, <8 x i16>* %p23, align 16
215  %24 = load <8 x i16>, <8 x i16>* %p24, align 16
216  %25 = load <8 x i16>, <8 x i16>* %p25, align 16
217  %26 = load <8 x i16>, <8 x i16>* %p26, align 16
218  %27 = load <8 x i16>, <8 x i16>* %p27, align 16
219  %28 = load <8 x i16>, <8 x i16>* %p28, align 16
220  %29 = load <8 x i16>, <8 x i16>* %p29, align 16
221  %30 = load <8 x i16>, <8 x i16>* %p30, align 16
222  %31 = load <8 x i16>, <8 x i16>* %p31, align 16
223  %32 = load <8 x i16>, <8 x i16>* %p32, align 16
224  %33 = load <8 x i16>, <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
295declare <8 x i16> @llvm.mips.addv.h(<8 x i16>, <8 x i16>) nounwind
296declare 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
305define i32 @test_i32(<4 x i32>* %p0, <4 x i32>* %q1) nounwind {
306entry:
307  %p1  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 1
308  %p2  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 2
309  %p3  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 3
310  %p4  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 4
311  %p5  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 5
312  %p6  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 6
313  %p7  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 7
314  %p8  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 8
315  %p9  = getelementptr <4 x i32>, <4 x i32>* %p0, i32 9
316  %p10 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 10
317  %p11 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 11
318  %p12 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 12
319  %p13 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 13
320  %p14 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 14
321  %p15 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 15
322  %p16 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 16
323  %p17 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 17
324  %p18 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 18
325  %p19 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 19
326  %p20 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 20
327  %p21 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 21
328  %p22 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 22
329  %p23 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 23
330  %p24 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 24
331  %p25 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 25
332  %p26 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 26
333  %p27 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 27
334  %p28 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 28
335  %p29 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 29
336  %p30 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 30
337  %p31 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 31
338  %p32 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 32
339  %p33 = getelementptr <4 x i32>, <4 x i32>* %p0, i32 33
340  %0  = load <4 x i32>, <4 x i32>* %p0, align 16
341  %1  = load <4 x i32>, <4 x i32>* %p1, align 16
342  %2  = load <4 x i32>, <4 x i32>* %p2, align 16
343  %3  = load <4 x i32>, <4 x i32>* %p3, align 16
344  %4  = load <4 x i32>, <4 x i32>* %p4, align 16
345  %5  = load <4 x i32>, <4 x i32>* %p5, align 16
346  %6  = load <4 x i32>, <4 x i32>* %p6, align 16
347  %7  = load <4 x i32>, <4 x i32>* %p7, align 16
348  %8  = load <4 x i32>, <4 x i32>* %p8, align 16
349  %9  = load <4 x i32>, <4 x i32>* %p9, align 16
350  %10 = load <4 x i32>, <4 x i32>* %p10, align 16
351  %11 = load <4 x i32>, <4 x i32>* %p11, align 16
352  %12 = load <4 x i32>, <4 x i32>* %p12, align 16
353  %13 = load <4 x i32>, <4 x i32>* %p13, align 16
354  %14 = load <4 x i32>, <4 x i32>* %p14, align 16
355  %15 = load <4 x i32>, <4 x i32>* %p15, align 16
356  %16 = load <4 x i32>, <4 x i32>* %p16, align 16
357  %17 = load <4 x i32>, <4 x i32>* %p17, align 16
358  %18 = load <4 x i32>, <4 x i32>* %p18, align 16
359  %19 = load <4 x i32>, <4 x i32>* %p19, align 16
360  %20 = load <4 x i32>, <4 x i32>* %p20, align 16
361  %21 = load <4 x i32>, <4 x i32>* %p21, align 16
362  %22 = load <4 x i32>, <4 x i32>* %p22, align 16
363  %23 = load <4 x i32>, <4 x i32>* %p23, align 16
364  %24 = load <4 x i32>, <4 x i32>* %p24, align 16
365  %25 = load <4 x i32>, <4 x i32>* %p25, align 16
366  %26 = load <4 x i32>, <4 x i32>* %p26, align 16
367  %27 = load <4 x i32>, <4 x i32>* %p27, align 16
368  %28 = load <4 x i32>, <4 x i32>* %p28, align 16
369  %29 = load <4 x i32>, <4 x i32>* %p29, align 16
370  %30 = load <4 x i32>, <4 x i32>* %p30, align 16
371  %31 = load <4 x i32>, <4 x i32>* %p31, align 16
372  %32 = load <4 x i32>, <4 x i32>* %p32, align 16
373  %33 = load <4 x i32>, <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
444declare <4 x i32> @llvm.mips.addv.w(<4 x i32>, <4 x i32>) nounwind
445declare 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
454define i32 @test_i64(<2 x i64>* %p0, <2 x i64>* %q1) nounwind {
455entry:
456  %p1  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 1
457  %p2  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 2
458  %p3  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 3
459  %p4  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 4
460  %p5  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 5
461  %p6  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 6
462  %p7  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 7
463  %p8  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 8
464  %p9  = getelementptr <2 x i64>, <2 x i64>* %p0, i32 9
465  %p10 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 10
466  %p11 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 11
467  %p12 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 12
468  %p13 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 13
469  %p14 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 14
470  %p15 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 15
471  %p16 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 16
472  %p17 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 17
473  %p18 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 18
474  %p19 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 19
475  %p20 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 20
476  %p21 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 21
477  %p22 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 22
478  %p23 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 23
479  %p24 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 24
480  %p25 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 25
481  %p26 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 26
482  %p27 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 27
483  %p28 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 28
484  %p29 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 29
485  %p30 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 30
486  %p31 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 31
487  %p32 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 32
488  %p33 = getelementptr <2 x i64>, <2 x i64>* %p0, i32 33
489  %0  = load <2 x i64>, <2 x i64>* %p0, align 16
490  %1  = load <2 x i64>, <2 x i64>* %p1, align 16
491  %2  = load <2 x i64>, <2 x i64>* %p2, align 16
492  %3  = load <2 x i64>, <2 x i64>* %p3, align 16
493  %4  = load <2 x i64>, <2 x i64>* %p4, align 16
494  %5  = load <2 x i64>, <2 x i64>* %p5, align 16
495  %6  = load <2 x i64>, <2 x i64>* %p6, align 16
496  %7  = load <2 x i64>, <2 x i64>* %p7, align 16
497  %8  = load <2 x i64>, <2 x i64>* %p8, align 16
498  %9  = load <2 x i64>, <2 x i64>* %p9, align 16
499  %10 = load <2 x i64>, <2 x i64>* %p10, align 16
500  %11 = load <2 x i64>, <2 x i64>* %p11, align 16
501  %12 = load <2 x i64>, <2 x i64>* %p12, align 16
502  %13 = load <2 x i64>, <2 x i64>* %p13, align 16
503  %14 = load <2 x i64>, <2 x i64>* %p14, align 16
504  %15 = load <2 x i64>, <2 x i64>* %p15, align 16
505  %16 = load <2 x i64>, <2 x i64>* %p16, align 16
506  %17 = load <2 x i64>, <2 x i64>* %p17, align 16
507  %18 = load <2 x i64>, <2 x i64>* %p18, align 16
508  %19 = load <2 x i64>, <2 x i64>* %p19, align 16
509  %20 = load <2 x i64>, <2 x i64>* %p20, align 16
510  %21 = load <2 x i64>, <2 x i64>* %p21, align 16
511  %22 = load <2 x i64>, <2 x i64>* %p22, align 16
512  %23 = load <2 x i64>, <2 x i64>* %p23, align 16
513  %24 = load <2 x i64>, <2 x i64>* %p24, align 16
514  %25 = load <2 x i64>, <2 x i64>* %p25, align 16
515  %26 = load <2 x i64>, <2 x i64>* %p26, align 16
516  %27 = load <2 x i64>, <2 x i64>* %p27, align 16
517  %28 = load <2 x i64>, <2 x i64>* %p28, align 16
518  %29 = load <2 x i64>, <2 x i64>* %p29, align 16
519  %30 = load <2 x i64>, <2 x i64>* %p30, align 16
520  %31 = load <2 x i64>, <2 x i64>* %p31, align 16
521  %32 = load <2 x i64>, <2 x i64>* %p32, align 16
522  %33 = load <2 x i64>, <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
594declare <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