1 # RUN: llc -run-pass ppc-mi-peepholes -ppc-convert-rr-to-ri %s -o - | FileCheck %s
2 # RUN: llc -start-after ppc-mi-peepholes -ppc-late-peephole %s -o - | FileCheck %s --check-prefix=CHECK-LATE
5 ; ModuleID = 'convert-rr-to-ri-instrs.ll'
6 source_filename = "convert-rr-to-ri-instrs.c"
7 target datalayout = "e-m:e-i64:64-n32:64"
8 target triple = "powerpc64le-unknown-linux-gnu"
10 ; Function Attrs: norecurse nounwind readnone
11 define signext i32 @testADD4(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
13 %add = add nsw i32 %a, 33
14 %add1 = add nsw i32 %add, %b
18 ; Function Attrs: norecurse nounwind readnone
19 define i64 @testADD8(i64 %a, i64 %b) local_unnamed_addr #0 {
21 %add = add nsw i64 %a, 33
22 %add1 = add nsw i64 %add, %b
26 ; Function Attrs: norecurse nounwind readnone
27 define i128 @testADDC(i128 %a, i128 %b) local_unnamed_addr #0 {
29 %add = add nsw i128 %b, %a
33 ; Function Attrs: norecurse nounwind readnone
34 define i128 @testADDC8(i128 %a, i128 %b) local_unnamed_addr #0 {
36 %add = add nsw i128 %b, %a
40 ; Function Attrs: norecurse nounwind readnone
41 define i64 @testADDCo(i64 %a, i64 %b) local_unnamed_addr #0 {
43 %add = add nsw i64 %b, %a
44 %cmp = icmp eq i64 %add, 0
45 %neg = sext i1 %cmp to i64
46 %retval.0 = xor i64 %add, %neg
50 ; Function Attrs: norecurse nounwind readnone
51 define signext i32 @testADDI(i32 signext %a) local_unnamed_addr #0 {
53 %add = add nsw i32 %a, 44
57 ; Function Attrs: norecurse nounwind readnone
58 define signext i32 @testADDI8(i32 signext %a) local_unnamed_addr #0 {
60 %add = add nsw i32 %a, 44
64 ; Function Attrs: norecurse nounwind readnone
65 define signext i32 @testANDo(i64 %a, i64 %b) local_unnamed_addr #0 {
68 %tobool = icmp eq i64 %and, 0
69 %cond = select i1 %tobool, i64 %b, i64 %a
70 %conv = trunc i64 %cond to i32
74 ; Function Attrs: norecurse nounwind readnone
75 define i64 @testAND8o(i64 %a, i64 %b) local_unnamed_addr #0 {
78 %tobool = icmp eq i64 %and, 0
79 %cond = select i1 %tobool, i64 %b, i64 %a
83 ; Function Attrs: norecurse nounwind readnone
84 define i64 @testCMPD(i64 %a, i64 %b) local_unnamed_addr #0 {
86 %cmp = icmp sgt i64 %a, %b
87 %add = select i1 %cmp, i64 0, i64 %a
88 %cond = add nsw i64 %add, %b
92 ; Function Attrs: norecurse nounwind readnone
93 define i64 @testCMPDI(i64 %a, i64 %b) local_unnamed_addr #0 {
95 %cmp = icmp sgt i64 %a, 87
96 %add = select i1 %cmp, i64 0, i64 %a
97 %cond = add nsw i64 %add, %b
101 ; Function Attrs: norecurse nounwind readnone
102 define i64 @testCMPDI_F(i64 %a, i64 %b) local_unnamed_addr #0 {
104 %cmp = icmp sgt i64 %a, 87
105 %add = select i1 %cmp, i64 0, i64 %a
106 %cond = add nsw i64 %add, %b
110 ; Function Attrs: norecurse nounwind readnone
111 define i64 @testCMPLD(i64 %a, i64 %b) local_unnamed_addr #0 {
113 %cmp = icmp ugt i64 %a, %b
114 %add = select i1 %cmp, i64 0, i64 %a
115 %cond = add i64 %add, %b
119 ; Function Attrs: norecurse nounwind readnone
120 define i64 @testCMPLDI(i64 %a, i64 %b) local_unnamed_addr #0 {
122 %cmp = icmp ugt i64 %a, 87
123 %add = select i1 %cmp, i64 0, i64 %a
124 %cond = add i64 %add, %b
128 ; Function Attrs: norecurse nounwind readnone
129 define signext i32 @testCMPW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
131 %cmp = icmp sgt i32 %a, %b
132 %add = select i1 %cmp, i32 0, i32 %a
133 %cond = add nsw i32 %add, %b
137 ; Function Attrs: norecurse nounwind readnone
138 define signext i32 @testCMPWI(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
140 %cmp = icmp sgt i32 %a, 87
141 %add = select i1 %cmp, i32 0, i32 %a
142 %cond = add nsw i32 %add, %b
146 ; Function Attrs: norecurse nounwind readnone
147 define zeroext i32 @testCMPLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
149 %cmp = icmp ugt i32 %a, %b
150 %add = select i1 %cmp, i32 0, i32 %a
151 %cond = add i32 %add, %b
155 ; Function Attrs: norecurse nounwind readnone
156 define zeroext i32 @testCMPLWI(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
158 %cmp = icmp ugt i32 %a, 87
159 %add = select i1 %cmp, i32 0, i32 %a
160 %cond = add i32 %add, %b
164 ; Function Attrs: norecurse nounwind readonly
165 define zeroext i8 @testLBZUX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
167 %add = add i32 %idx, 1
168 %idxprom = zext i32 %add to i64
169 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
170 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
171 %conv = zext i8 %0 to i32
172 %add1 = add i32 %idx, 2
173 %idxprom2 = zext i32 %add1 to i64
174 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
175 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
176 %conv4 = zext i8 %1 to i32
177 %add5 = add nuw nsw i32 %conv4, %conv
178 %conv6 = trunc i32 %add5 to i8
182 ; Function Attrs: norecurse nounwind readonly
183 define zeroext i8 @testLBZX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
185 %add = add i32 %idx, 1
186 %idxprom = zext i32 %add to i64
187 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
188 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
189 %conv = zext i8 %0 to i32
190 %add1 = add i32 %idx, 2
191 %idxprom2 = zext i32 %add1 to i64
192 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
193 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
194 %conv4 = zext i8 %1 to i32
195 %add5 = add nuw nsw i32 %conv4, %conv
196 %conv6 = trunc i32 %add5 to i8
200 ; Function Attrs: norecurse nounwind readonly
201 define zeroext i16 @testLHZUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
203 %add = add i32 %idx, 1
204 %idxprom = zext i32 %add to i64
205 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
206 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
207 %conv = zext i16 %0 to i32
208 %add1 = add i32 %idx, 2
209 %idxprom2 = zext i32 %add1 to i64
210 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
211 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
212 %conv4 = zext i16 %1 to i32
213 %add5 = add nuw nsw i32 %conv4, %conv
214 %conv6 = trunc i32 %add5 to i16
218 ; Function Attrs: norecurse nounwind readonly
219 define zeroext i16 @testLHZX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
221 %add = add i32 %idx, 1
222 %idxprom = zext i32 %add to i64
223 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
224 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
225 %conv = zext i16 %0 to i32
226 %add1 = add i32 %idx, 2
227 %idxprom2 = zext i32 %add1 to i64
228 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
229 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
230 %conv4 = zext i16 %1 to i32
231 %add5 = add nuw nsw i32 %conv4, %conv
232 %conv6 = trunc i32 %add5 to i16
236 ; Function Attrs: norecurse nounwind readonly
237 define signext i16 @testLHAUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
239 %add = add i32 %idx, 1
240 %idxprom = zext i32 %add to i64
241 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
242 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
243 %conv9 = zext i16 %0 to i32
244 %add1 = add i32 %idx, 2
245 %idxprom2 = zext i32 %add1 to i64
246 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
247 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
248 %conv410 = zext i16 %1 to i32
249 %add5 = add nuw nsw i32 %conv410, %conv9
250 %conv6 = trunc i32 %add5 to i16
254 ; Function Attrs: norecurse nounwind readonly
255 define signext i16 @testLHAX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
257 %add = add i32 %idx, 1
258 %idxprom = zext i32 %add to i64
259 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
260 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
261 %conv9 = zext i16 %0 to i32
262 %add1 = add i32 %idx, 2
263 %idxprom2 = zext i32 %add1 to i64
264 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
265 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
266 %conv410 = zext i16 %1 to i32
267 %add5 = add nuw nsw i32 %conv410, %conv9
268 %conv6 = trunc i32 %add5 to i16
272 ; Function Attrs: norecurse nounwind readonly
273 define zeroext i32 @testLWZUX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
275 %add = add i32 %idx, 1
276 %idxprom = zext i32 %add to i64
277 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
278 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
279 %add1 = add i32 %idx, 2
280 %idxprom2 = zext i32 %add1 to i64
281 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
282 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
283 %add4 = add i32 %1, %0
287 ; Function Attrs: norecurse nounwind readonly
288 define zeroext i32 @testLWZX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
290 %add = add i32 %idx, 1
291 %idxprom = zext i32 %add to i64
292 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
293 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
294 %add1 = add i32 %idx, 2
295 %idxprom2 = zext i32 %add1 to i64
296 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
297 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
298 %add4 = add i32 %1, %0
302 ; Function Attrs: norecurse nounwind readonly
303 define i64 @testLWAX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
305 %add = add i32 %idx, 1
306 %idxprom = zext i32 %add to i64
307 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
308 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
309 %conv = sext i32 %0 to i64
310 %add1 = add i32 %idx, 2
311 %idxprom2 = zext i32 %add1 to i64
312 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
313 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
314 %conv4 = sext i32 %1 to i64
315 %add5 = add nsw i64 %conv4, %conv
319 ; Function Attrs: norecurse nounwind readonly
320 define i64 @testLDUX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
322 %add = add i32 %idx, 1
323 %idxprom = zext i32 %add to i64
324 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
325 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
326 %add1 = add i32 %idx, 2
327 %idxprom2 = zext i32 %add1 to i64
328 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
329 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
330 %add4 = add i64 %1, %0
334 ; Function Attrs: norecurse nounwind readonly
335 define i64 @testLDX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
337 %add = add i32 %idx, 1
338 %idxprom = zext i32 %add to i64
339 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
340 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
341 %add1 = add i32 %idx, 2
342 %idxprom2 = zext i32 %add1 to i64
343 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
344 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
345 %add4 = add i64 %1, %0
349 ; Function Attrs: norecurse nounwind readonly
350 define double @testLFDUX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
352 %add = add i32 %idx, 1
353 %idxprom = zext i32 %add to i64
354 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
355 %0 = load double, double* %arrayidx, align 8, !tbaa !12
356 %add1 = add i32 %idx, 2
357 %idxprom2 = zext i32 %add1 to i64
358 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
359 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
360 %add4 = fadd double %0, %1
364 ; Function Attrs: norecurse nounwind readonly
365 define double @testLFDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
367 %add = add i32 %idx, 1
368 %idxprom = zext i32 %add to i64
369 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
370 %0 = load double, double* %arrayidx, align 8, !tbaa !12
371 %add1 = add i32 %idx, 2
372 %idxprom2 = zext i32 %add1 to i64
373 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
374 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
375 %add4 = fadd double %0, %1
379 ; Function Attrs: norecurse nounwind readonly
380 define <4 x float> @testLFSUX(float* nocapture readonly %ptr, i32 signext %idx) local_unnamed_addr #2 {
382 %idxprom = sext i32 %idx to i64
383 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
384 %0 = load float, float* %arrayidx, align 4, !tbaa !14
385 %conv = fptoui float %0 to i32
386 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
387 %1 = bitcast float* %ptr to i8*
388 %2 = shl i64 %idxprom, 2
389 %uglygep = getelementptr i8, i8* %1, i64 %2
390 %uglygep2 = getelementptr i8, i8* %uglygep, i64 4
391 %3 = bitcast i8* %uglygep2 to float*
392 %4 = load float, float* %3, align 4, !tbaa !14
393 %conv3 = fptoui float %4 to i32
394 %vecinit4 = insertelement <4 x i32> %vecinit, i32 %conv3, i32 1
395 %uglygep5 = getelementptr i8, i8* %uglygep, i64 8
396 %5 = bitcast i8* %uglygep5 to float*
397 %6 = load float, float* %5, align 4, !tbaa !14
398 %conv8 = fptoui float %6 to i32
399 %vecinit9 = insertelement <4 x i32> %vecinit4, i32 %conv8, i32 2
400 %uglygep8 = getelementptr i8, i8* %uglygep, i64 12
401 %7 = bitcast i8* %uglygep8 to float*
402 %8 = load float, float* %7, align 4, !tbaa !14
403 %conv13 = fptoui float %8 to i32
404 %vecinit14 = insertelement <4 x i32> %vecinit9, i32 %conv13, i32 3
405 %9 = bitcast <4 x i32> %vecinit14 to <4 x float>
409 ; Function Attrs: norecurse nounwind readonly
410 define float @testLFSX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
412 %add = add i32 %idx, 1
413 %idxprom = zext i32 %add to i64
414 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
415 %0 = load float, float* %arrayidx, align 4, !tbaa !14
416 %add1 = add i32 %idx, 2
417 %idxprom2 = zext i32 %add1 to i64
418 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
419 %1 = load float, float* %arrayidx3, align 4, !tbaa !14
420 %add4 = fadd float %0, %1
424 ; Function Attrs: norecurse nounwind readonly
425 define double @testLXSDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
427 %add = add i32 %idx, 1
428 %idxprom = zext i32 %add to i64
429 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
430 %0 = load double, double* %arrayidx, align 8, !tbaa !12
431 %add1 = add i32 %idx, 2
432 %idxprom2 = zext i32 %add1 to i64
433 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
434 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
435 %add4 = fadd double %0, %1
439 ; Function Attrs: norecurse nounwind readonly
440 define float @testLXSSPX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
442 %add = add i32 %idx, 1
443 %idxprom = zext i32 %add to i64
444 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
445 %0 = load float, float* %arrayidx, align 4, !tbaa !14
446 %add1 = add i32 %idx, 2
447 %idxprom2 = zext i32 %add1 to i64
448 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
449 %1 = load float, float* %arrayidx3, align 4, !tbaa !14
450 %add4 = fadd float %0, %1
454 ; Function Attrs: norecurse nounwind readonly
455 define <4 x i32> @testLXVX(<4 x i32>* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
457 %add = add i32 %idx, 1
458 %idxprom = zext i32 %add to i64
459 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
460 %0 = load <4 x i32>, <4 x i32>* %arrayidx, align 16, !tbaa !3
461 %add1 = add i32 %idx, 2
462 %idxprom2 = zext i32 %add1 to i64
463 %arrayidx3 = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom2
464 %1 = load <4 x i32>, <4 x i32>* %arrayidx3, align 16, !tbaa !3
465 %add4 = add <4 x i32> %1, %0
469 ; Function Attrs: norecurse nounwind readnone
470 define signext i32 @testOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
476 ; Function Attrs: norecurse nounwind readnone
477 define i64 @testOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
483 ; Function Attrs: norecurse nounwind readnone
484 define signext i32 @testORI(i32 signext %a) local_unnamed_addr #0 {
490 ; Function Attrs: norecurse nounwind readnone
491 define i64 @testORI8(i64 %a) local_unnamed_addr #0 {
497 ; Function Attrs: norecurse nounwind readnone
498 define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 {
500 %and = and i64 %b, 63
501 %shl = shl i64 %a, %and
502 %sub = sub nsw i64 64, %and
503 %shr = lshr i64 %a, %sub
504 %or = or i64 %shr, %shl
508 ; Function Attrs: norecurse nounwind readnone
509 define i64 @testRLDCLo(i64 %a, i64 %b) local_unnamed_addr #0 {
511 %and = and i64 %b, 63
512 %shl = shl i64 %a, %and
513 %sub = sub nsw i64 64, %and
514 %shr = lshr i64 %a, %sub
515 %or = or i64 %shr, %shl
516 %tobool = icmp eq i64 %or, 0
517 %cond = select i1 %tobool, i64 %and, i64 %a
521 ; Function Attrs: norecurse nounwind readnone
522 define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 {
524 %and = and i64 %b, 63
525 %shl = shl i64 %a, %and
526 %sub = sub nsw i64 64, %and
527 %shr = lshr i64 %a, %sub
528 %or = or i64 %shr, %shl
532 ; Function Attrs: norecurse nounwind readnone
533 define i64 @testRLDCRo(i64 %a, i64 %b) local_unnamed_addr #0 {
535 %and = and i64 %b, 63
536 %shl = shl i64 %a, %and
537 %sub = sub nsw i64 64, %and
538 %shr = lshr i64 %a, %sub
539 %or = or i64 %shr, %shl
540 %tobool = icmp eq i64 %or, 0
541 %cond = select i1 %tobool, i64 %and, i64 %a
545 ; Function Attrs: norecurse nounwind readnone
546 define i64 @testRLDICL(i64 %a) local_unnamed_addr #0 {
548 %shr = lshr i64 %a, 11
549 %and = and i64 %shr, 16777215
553 ; Function Attrs: norecurse nounwind readnone
554 define i64 @testRLDICLo(i64 %a, i64 %b) local_unnamed_addr #0 {
556 %shr = lshr i64 %a, 11
557 %and = and i64 %shr, 16777215
558 %tobool = icmp eq i64 %and, 0
559 %cond = select i1 %tobool, i64 %b, i64 %and
563 ; Function Attrs: norecurse nounwind readnone
564 define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
567 %and = and i32 %shl, 4080
571 ; Function Attrs: norecurse nounwind readnone
572 define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
575 %and = and i64 %shl, 4080
579 ; Function Attrs: norecurse nounwind readnone
580 define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
582 %and = and i32 %a, 255
583 %tobool = icmp eq i32 %and, 0
584 %cond = select i1 %tobool, i32 %b, i32 %a
588 ; Function Attrs: norecurse nounwind readnone
589 define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 {
591 %a.tr = trunc i64 %a to i32
592 %0 = shl i32 %a.tr, 4
593 %conv = and i32 %0, 4080
594 %tobool = icmp eq i32 %conv, 0
595 %conv1 = zext i32 %conv to i64
596 %cond = select i1 %tobool, i64 %b, i64 %conv1
600 ; Function Attrs: norecurse nounwind readnone
601 define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
603 %shl = shl i64 %a, %b
607 ; Function Attrs: norecurse nounwind readnone
608 define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 {
610 %shl = shl i64 %a, %b
611 %tobool = icmp eq i64 %shl, 0
612 %cond = select i1 %tobool, i64 %b, i64 %a
616 ; Function Attrs: norecurse nounwind readnone
617 define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
619 %shr = lshr i64 %a, %b
623 ; Function Attrs: norecurse nounwind readnone
624 define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 {
626 %shr = lshr i64 %a, %b
627 %tobool = icmp eq i64 %shr, 0
628 %cond = select i1 %tobool, i64 %b, i64 %a
632 ; Function Attrs: norecurse nounwind readnone
633 define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
635 %shl = shl i32 %a, %b
639 ; Function Attrs: norecurse nounwind readnone
640 define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
642 %shl = shl i32 %a, %b
643 %tobool = icmp eq i32 %shl, 0
644 %cond = select i1 %tobool, i32 %b, i32 %a
648 ; Function Attrs: norecurse nounwind readnone
649 define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
651 %shr = lshr i32 %a, %b
655 ; Function Attrs: norecurse nounwind readnone
656 define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
658 %shr = lshr i32 %a, %b
659 %tobool = icmp eq i32 %shr, 0
660 %cond = select i1 %tobool, i32 %b, i32 %a
664 ; Function Attrs: norecurse nounwind readnone
665 define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
667 %shr = ashr i32 %a, %b
671 ; Function Attrs: norecurse nounwind readnone
672 define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
674 %shr = ashr i32 %a, %b
675 %tobool = icmp eq i32 %shr, 0
676 %cond = select i1 %tobool, i32 %b, i32 %shr
680 ; Function Attrs: norecurse nounwind readnone
681 define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
683 %shr = ashr i64 %a, %b
687 ; Function Attrs: norecurse nounwind readnone
688 define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 {
690 %shr = ashr i64 %a, %b
691 %tobool = icmp eq i64 %shr, 0
692 %cond = select i1 %tobool, i64 %b, i64 %shr
696 ; Function Attrs: norecurse nounwind
697 define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
699 %add = add i32 %idx, 1
700 %idxprom = zext i32 %add to i64
701 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
702 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
703 %add1 = add i32 %idx, 2
704 %idxprom2 = zext i32 %add1 to i64
705 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
706 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
710 ; Function Attrs: norecurse nounwind
711 define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
713 %add = add i32 %idx, 1
714 %idxprom = zext i32 %add to i64
715 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
716 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
717 %add1 = add i32 %idx, 2
718 %idxprom2 = zext i32 %add1 to i64
719 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
720 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
724 ; Function Attrs: norecurse nounwind
725 define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
727 %add = add i32 %idx, 1
728 %idxprom = zext i32 %add to i64
729 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
730 store i16 %a, i16* %arrayidx, align 2, !tbaa !6
731 %add1 = add i32 %idx, 2
732 %idxprom2 = zext i32 %add1 to i64
733 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
734 store i16 %a, i16* %arrayidx3, align 2, !tbaa !6
738 ; Function Attrs: norecurse nounwind
739 define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
741 %add = add i32 %idx, 1
742 %idxprom = zext i32 %add to i64
743 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
744 store i16 %a, i16* %arrayidx, align 1, !tbaa !3
745 %add1 = add i32 %idx, 2
746 %idxprom2 = zext i32 %add1 to i64
747 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
748 store i16 %a, i16* %arrayidx3, align 1, !tbaa !3
752 ; Function Attrs: norecurse nounwind
753 define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
755 %add = add i32 %idx, 1
756 %idxprom = zext i32 %add to i64
757 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
758 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
759 %add1 = add i32 %idx, 2
760 %idxprom2 = zext i32 %add1 to i64
761 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
762 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
766 ; Function Attrs: norecurse nounwind
767 define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
769 %add = add i32 %idx, 1
770 %idxprom = zext i32 %add to i64
771 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
772 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
773 %add1 = add i32 %idx, 2
774 %idxprom2 = zext i32 %add1 to i64
775 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
776 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
780 ; Function Attrs: norecurse nounwind
781 define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
783 %add = add i32 %idx, 1
784 %idxprom = zext i32 %add to i64
785 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
786 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
787 %add1 = add i32 %idx, 2
788 %idxprom2 = zext i32 %add1 to i64
789 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
790 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
794 ; Function Attrs: norecurse nounwind
795 define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
797 %add = add i32 %idx, 1
798 %idxprom = zext i32 %add to i64
799 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
800 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
801 %add1 = add i32 %idx, 2
802 %idxprom2 = zext i32 %add1 to i64
803 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
804 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
808 ; Function Attrs: norecurse nounwind readonly
809 define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
811 %add = add i32 %idx, 1
812 %idxprom = zext i32 %add to i64
813 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
814 store float %a, float* %arrayidx, align 4, !tbaa !14
815 %add1 = add i32 %idx, 2
816 %idxprom2 = zext i32 %add1 to i64
817 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
818 store float %a, float* %arrayidx3, align 4, !tbaa !14
822 ; Function Attrs: norecurse nounwind readonly
823 define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
825 %add = add i32 %idx, 1
826 %idxprom = zext i32 %add to i64
827 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
828 store float %a, float* %arrayidx, align 4, !tbaa !14
829 %add1 = add i32 %idx, 2
830 %idxprom2 = zext i32 %add1 to i64
831 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
832 store float %a, float* %arrayidx3, align 4, !tbaa !14
836 ; Function Attrs: norecurse nounwind readonly
837 define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
839 %add = add i32 %idx, 1
840 %idxprom = zext i32 %add to i64
841 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
842 store double %a, double* %arrayidx, align 8, !tbaa !12
843 %add1 = add i32 %idx, 2
844 %idxprom2 = zext i32 %add1 to i64
845 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
846 store double %a, double* %arrayidx3, align 8, !tbaa !12
850 ; Function Attrs: norecurse nounwind readonly
851 define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
853 %add = add i32 %idx, 1
854 %idxprom = zext i32 %add to i64
855 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
856 store double %a, double* %arrayidx, align 8, !tbaa !12
857 %add1 = add i32 %idx, 2
858 %idxprom2 = zext i32 %add1 to i64
859 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
860 store double %a, double* %arrayidx3, align 8, !tbaa !12
864 ; Function Attrs: norecurse nounwind
865 define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
867 %idxprom = zext i32 %idx to i64
868 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
869 store float %a, float* %arrayidx, align 4, !tbaa !14
873 ; Function Attrs: norecurse nounwind
874 define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
876 %idxprom = zext i32 %idx to i64
877 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
878 store double %a, double* %arrayidx, align 8, !tbaa !12
882 ; Function Attrs: norecurse nounwind
883 define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 {
885 %idxprom = zext i32 %idx to i64
886 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
887 store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3
891 ; Function Attrs: norecurse nounwind readnone
892 define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
894 %sub = sub nsw i128 %a, %b
898 ; Function Attrs: norecurse nounwind readnone
899 define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
901 %sub = sub nsw i128 %a, %b
905 ; Function Attrs: norecurse nounwind readnone
906 define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
908 %xor = xor i32 %b, %a
912 ; Function Attrs: norecurse nounwind readnone
913 define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
915 %xor = xor i64 %b, %a
919 ; Function Attrs: norecurse nounwind readnone
920 define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
922 %xor = xor i32 %a, 17
926 ; Function Attrs: norecurse nounwind readnone
927 define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
929 %xor = xor i64 %a, 17
933 attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
934 attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
935 attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,-vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
936 attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
938 !llvm.module.flags = !{!0, !1}
941 !0 = !{i32 1, !"wchar_size", i32 4}
942 !1 = !{i32 7, !"PIC Level", i32 2}
943 !2 = !{!"clang version 6.0.0 (trunk 316067)"}
944 !3 = !{!4, !4, i64 0}
945 !4 = !{!"omnipotent char", !5, i64 0}
946 !5 = !{!"Simple C/C++ TBAA"}
947 !6 = !{!7, !7, i64 0}
948 !7 = !{!"short", !4, i64 0}
949 !8 = !{!9, !9, i64 0}
950 !9 = !{!"int", !4, i64 0}
951 !10 = !{!11, !11, i64 0}
952 !11 = !{!"long long", !4, i64 0}
953 !12 = !{!13, !13, i64 0}
954 !13 = !{!"double", !4, i64 0}
955 !14 = !{!15, !15, i64 0}
956 !15 = !{!"float", !4, i64 0}
961 # CHECK-ALL: name: testADD4
963 exposesReturnsTwice: false
965 regBankSelected: false
967 tracksRegLiveness: true
969 - { id: 0, class: g8rc, preferred-register: '' }
970 - { id: 1, class: g8rc, preferred-register: '' }
971 - { id: 2, class: gprc, preferred-register: '' }
972 - { id: 3, class: gprc, preferred-register: '' }
973 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
974 - { id: 5, class: gprc, preferred-register: '' }
975 - { id: 6, class: g8rc, preferred-register: '' }
977 - { reg: '%x3', virtual-reg: '%0' }
978 - { reg: '%x4', virtual-reg: '%1' }
980 isFrameAddressTaken: false
981 isReturnAddressTaken: false
990 maxCallFrameSize: 4294967295
991 hasOpaqueSPAdjustment: false
993 hasMustTailInVarArgFunc: false
1007 %4 = ADD4 killed %3, %2
1008 %5 = ADD4 killed %2, killed %4
1009 ; CHECK: ADDI killed %3, 33
1010 ; CHECK: ADDI killed %4, 33
1011 ; CHECK-LATE: addi 3, 3, 33
1012 ; CHECK-LATE: addi 3, 3, 33
1013 %6 = EXTSW_32_64 killed %5
1015 BLR8 implicit %lr8, implicit %rm, implicit %x3
1020 # CHECK-ALL: name: testADD8
1022 exposesReturnsTwice: false
1024 regBankSelected: false
1026 tracksRegLiveness: true
1028 - { id: 0, class: g8rc, preferred-register: '' }
1029 - { id: 1, class: g8rc, preferred-register: '' }
1030 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1031 - { id: 3, class: g8rc, preferred-register: '' }
1033 - { reg: '%x3', virtual-reg: '%0' }
1034 - { reg: '%x4', virtual-reg: '%1' }
1036 isFrameAddressTaken: false
1037 isReturnAddressTaken: false
1039 hasPatchPoint: false
1046 maxCallFrameSize: 4294967295
1047 hasOpaqueSPAdjustment: false
1049 hasMustTailInVarArgFunc: false
1062 %3 = ADD8 killed %1, killed %2
1063 ; CHECK: ADDI8 %0, 33
1064 ; CHECK: ADDI8 killed %2, 33
1065 ; CHECK-LATE: addi 3, 3, 33
1066 ; CHECK-LATE: addi 3, 3, 33
1068 BLR8 implicit %lr8, implicit %rm, implicit %x3
1073 # CHECK-ALL: name: testADDC
1075 exposesReturnsTwice: false
1077 regBankSelected: false
1079 tracksRegLiveness: true
1081 - { id: 0, class: g8rc, preferred-register: '' }
1082 - { id: 1, class: g8rc, preferred-register: '' }
1083 - { id: 2, class: g8rc, preferred-register: '' }
1084 - { id: 3, class: g8rc, preferred-register: '' }
1085 - { id: 4, class: gprc, preferred-register: '' }
1086 - { id: 5, class: gprc, preferred-register: '' }
1087 - { id: 6, class: gprc, preferred-register: '' }
1088 - { id: 7, class: g8rc, preferred-register: '' }
1089 - { id: 8, class: g8rc, preferred-register: '' }
1091 - { reg: '%x3', virtual-reg: '%0' }
1092 - { reg: '%x4', virtual-reg: '%1' }
1093 - { reg: '%x5', virtual-reg: '%2' }
1094 - { reg: '%x6', virtual-reg: '%3' }
1096 isFrameAddressTaken: false
1097 isReturnAddressTaken: false
1099 hasPatchPoint: false
1106 maxCallFrameSize: 4294967295
1107 hasOpaqueSPAdjustment: false
1109 hasMustTailInVarArgFunc: false
1117 liveins: %x3, %x4, %x5, %x6
1125 %6 = ADDC %5, %4, implicit-def %carry
1126 ; CHECK: ADDIC %4, 55, implicit-def %carry
1127 ; CHECK-LATE: addic 3, 3, 55
1128 %7 = ADDE8 %3, %1, implicit-def dead %carry, implicit %carry
1132 BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
1137 # CHECK-ALL: name: testADDC8
1139 exposesReturnsTwice: false
1141 regBankSelected: false
1143 tracksRegLiveness: true
1145 - { id: 0, class: g8rc, preferred-register: '' }
1146 - { id: 1, class: g8rc, preferred-register: '' }
1147 - { id: 2, class: g8rc, preferred-register: '' }
1148 - { id: 3, class: g8rc, preferred-register: '' }
1149 - { id: 4, class: g8rc, preferred-register: '' }
1150 - { id: 5, class: g8rc, preferred-register: '' }
1152 - { reg: '%x3', virtual-reg: '%0' }
1153 - { reg: '%x4', virtual-reg: '%1' }
1154 - { reg: '%x5', virtual-reg: '%2' }
1155 - { reg: '%x6', virtual-reg: '%3' }
1157 isFrameAddressTaken: false
1158 isReturnAddressTaken: false
1160 hasPatchPoint: false
1167 maxCallFrameSize: 4294967295
1168 hasOpaqueSPAdjustment: false
1170 hasMustTailInVarArgFunc: false
1178 liveins: %x3, %x4, %x5, %x6
1184 %4 = ADDC8 %2, %0, implicit-def %carry
1185 ; CHECK: ADDIC8 %2, 777, implicit-def %carry
1186 ; CHECK-LATE: addic 3, 5, 777
1187 %5 = ADDE8 %3, %1, implicit-def dead %carry, implicit %carry
1190 BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
1195 # CHECK-ALL: name: testADDCo
1197 exposesReturnsTwice: false
1199 regBankSelected: false
1201 tracksRegLiveness: true
1203 - { id: 0, class: g8rc, preferred-register: '' }
1204 - { id: 1, class: gprc, preferred-register: '' }
1205 - { id: 2, class: gprc, preferred-register: '' }
1206 - { id: 3, class: gprc, preferred-register: '' }
1207 - { id: 4, class: crrc, preferred-register: '' }
1208 - { id: 5, class: crbitrc, preferred-register: '' }
1209 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1210 - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1211 - { id: 8, class: g8rc, preferred-register: '' }
1213 - { reg: '%x3', virtual-reg: '%0' }
1214 - { reg: '%x4', virtual-reg: '%1' }
1216 isFrameAddressTaken: false
1217 isReturnAddressTaken: false
1219 hasPatchPoint: false
1226 maxCallFrameSize: 4294967295
1227 hasOpaqueSPAdjustment: false
1229 hasMustTailInVarArgFunc: false
1242 %3 = ADDCo %1, %2, implicit-def %cr0, implicit-def %carry
1243 ; CHECK: ADDICo %2, 433, implicit-def %cr0, implicit-def %carry
1244 ; CHECK-LATE: addic. 3, 3, 433
1245 %4 = COPY killed %cr0
1249 %8 = ISEL8 %7, %6, %5
1251 BLR8 implicit %lr8, implicit %rm, implicit %x3
1256 # CHECK-ALL: name: testADDI
1258 exposesReturnsTwice: false
1260 regBankSelected: false
1262 tracksRegLiveness: true
1264 - { id: 0, class: g8rc, preferred-register: '' }
1265 - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
1266 - { id: 2, class: gprc, preferred-register: '' }
1267 - { id: 3, class: g8rc, preferred-register: '' }
1269 - { reg: '%x3', virtual-reg: '%0' }
1271 isFrameAddressTaken: false
1272 isReturnAddressTaken: false
1274 hasPatchPoint: false
1281 maxCallFrameSize: 4294967295
1282 hasOpaqueSPAdjustment: false
1284 hasMustTailInVarArgFunc: false
1296 %2 = ADDI killed %1, 44
1297 %3 = EXTSW_32_64 killed %2
1299 ; CHECK-LATE: li 3, 121
1301 BLR8 implicit %lr8, implicit %rm, implicit %x3
1306 # CHECK-ALL: name: testADDI8
1308 exposesReturnsTwice: false
1310 regBankSelected: false
1312 tracksRegLiveness: true
1314 - { id: 0, class: g8rc, preferred-register: '' }
1315 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1316 - { id: 2, class: g8rc, preferred-register: '' }
1317 - { id: 3, class: g8rc, preferred-register: '' }
1319 - { reg: '%x3', virtual-reg: '%0' }
1321 isFrameAddressTaken: false
1322 isReturnAddressTaken: false
1324 hasPatchPoint: false
1331 maxCallFrameSize: 4294967295
1332 hasOpaqueSPAdjustment: false
1334 hasMustTailInVarArgFunc: false
1346 %2 = ADDI8 killed %1, 44
1348 ; CHECK-LATE: li 3, 377
1349 %3 = EXTSW killed %2
1351 BLR8 implicit %lr8, implicit %rm, implicit %x3
1356 # CHECK-ALL: name: testANDo
1358 exposesReturnsTwice: false
1360 regBankSelected: false
1362 tracksRegLiveness: true
1364 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1365 - { id: 1, class: gprc, preferred-register: '' }
1366 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1367 - { id: 3, class: gprc, preferred-register: '' }
1368 - { id: 4, class: crrc, preferred-register: '' }
1369 - { id: 5, class: gprc, preferred-register: '' }
1370 - { id: 6, class: g8rc, preferred-register: '' }
1372 - { reg: '%x3', virtual-reg: '%0' }
1373 - { reg: '%x4', virtual-reg: '%1' }
1375 isFrameAddressTaken: false
1376 isReturnAddressTaken: false
1378 hasPatchPoint: false
1385 maxCallFrameSize: 4294967295
1386 hasOpaqueSPAdjustment: false
1388 hasMustTailInVarArgFunc: false
1401 %3 = ANDo %1, %2, implicit-def %cr0
1402 ; CHECK: ANDIo %2, 78, implicit-def %cr0
1403 ; CHECK-LATE: andi. 5, 3, 78
1404 %4 = COPY killed %cr0
1405 %5 = ISEL %2, %1, %4.sub_eq
1406 %6 = EXTSW_32_64 killed %5
1408 BLR8 implicit %lr8, implicit %rm, implicit %x3
1413 # CHECK-ALL: name: testAND8o
1415 exposesReturnsTwice: false
1417 regBankSelected: false
1419 tracksRegLiveness: true
1421 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1422 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1423 - { id: 2, class: g8rc, preferred-register: '' }
1424 - { id: 3, class: crrc, preferred-register: '' }
1425 - { id: 4, class: g8rc, preferred-register: '' }
1427 - { reg: '%x3', virtual-reg: '%0' }
1428 - { reg: '%x4', virtual-reg: '%1' }
1430 isFrameAddressTaken: false
1431 isReturnAddressTaken: false
1433 hasPatchPoint: false
1440 maxCallFrameSize: 4294967295
1441 hasOpaqueSPAdjustment: false
1443 hasMustTailInVarArgFunc: false
1455 %2 = AND8o %1, %0, implicit-def %cr0
1456 ; CHECK: ANDIo8 %0, 321, implicit-def %cr0
1457 ; CHECK-LATE: andi. 5, 3, 321
1458 %3 = COPY killed %cr0
1459 %4 = ISEL8 %1, %0, %3.sub_eq
1461 BLR8 implicit %lr8, implicit %rm, implicit %x3
1466 # CHECK-ALL: name: testCMPD
1468 exposesReturnsTwice: false
1470 regBankSelected: false
1472 tracksRegLiveness: true
1474 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1475 - { id: 1, class: g8rc, preferred-register: '' }
1476 - { id: 2, class: crrc, preferred-register: '' }
1477 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1478 - { id: 4, class: g8rc, preferred-register: '' }
1479 - { id: 5, class: g8rc, preferred-register: '' }
1481 - { reg: '%x3', virtual-reg: '%0' }
1482 - { reg: '%x4', virtual-reg: '%1' }
1484 isFrameAddressTaken: false
1485 isReturnAddressTaken: false
1487 hasPatchPoint: false
1494 maxCallFrameSize: 4294967295
1495 hasOpaqueSPAdjustment: false
1497 hasMustTailInVarArgFunc: false
1510 ; CHECK: CMPDI %0, -3
1511 ; CHECK-LATE: cmpdi 3, -3
1512 %4 = ISEL8 %zero8, %0, %2.sub_gt
1513 %5 = ADD8 killed %4, %1
1515 BLR8 implicit %lr8, implicit %rm, implicit %x3
1520 # CHECK-ALL: name: testCMPDI
1522 exposesReturnsTwice: false
1524 regBankSelected: false
1526 tracksRegLiveness: true
1528 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1529 - { id: 1, class: g8rc, preferred-register: '' }
1530 - { id: 2, class: crrc, preferred-register: '' }
1531 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1532 - { id: 4, class: g8rc, preferred-register: '' }
1533 - { id: 5, class: g8rc, preferred-register: '' }
1535 - { reg: '%x3', virtual-reg: '%0' }
1536 - { reg: '%x4', virtual-reg: '%1' }
1538 isFrameAddressTaken: false
1539 isReturnAddressTaken: false
1541 hasPatchPoint: false
1548 maxCallFrameSize: 4294967295
1549 hasOpaqueSPAdjustment: false
1551 hasMustTailInVarArgFunc: false
1564 %4 = ISEL8 %zero8, %0, %2.sub_gt
1566 %5 = ADD8 killed %4, %1
1568 BLR8 implicit %lr8, implicit %rm, implicit %x3
1573 # CHECK-ALL: name: testCMPDI_F
1575 exposesReturnsTwice: false
1577 regBankSelected: false
1579 tracksRegLiveness: true
1581 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1582 - { id: 1, class: g8rc, preferred-register: '' }
1583 - { id: 2, class: crrc, preferred-register: '' }
1584 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1585 - { id: 4, class: g8rc, preferred-register: '' }
1586 - { id: 5, class: g8rc, preferred-register: '' }
1588 - { reg: '%x3', virtual-reg: '%0' }
1589 - { reg: '%x4', virtual-reg: '%1' }
1591 isFrameAddressTaken: false
1592 isReturnAddressTaken: false
1594 hasPatchPoint: false
1601 maxCallFrameSize: 4294967295
1602 hasOpaqueSPAdjustment: false
1604 hasMustTailInVarArgFunc: false
1617 %4 = ISEL8 %zero8, %0, %2.sub_gt
1619 %5 = ADD8 killed %4, %1
1621 BLR8 implicit %lr8, implicit %rm, implicit %x3
1626 # CHECK-ALL: name: testCMPLD
1628 exposesReturnsTwice: false
1630 regBankSelected: false
1632 tracksRegLiveness: true
1634 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1635 - { id: 1, class: g8rc, preferred-register: '' }
1636 - { id: 2, class: crrc, preferred-register: '' }
1637 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1638 - { id: 4, class: g8rc, preferred-register: '' }
1639 - { id: 5, class: g8rc, preferred-register: '' }
1641 - { reg: '%x3', virtual-reg: '%0' }
1642 - { reg: '%x4', virtual-reg: '%1' }
1644 isFrameAddressTaken: false
1645 isReturnAddressTaken: false
1647 hasPatchPoint: false
1654 maxCallFrameSize: 4294967295
1655 hasOpaqueSPAdjustment: false
1657 hasMustTailInVarArgFunc: false
1670 ; CHECK: CMPLDI %0, 99
1671 ; CHECK-LATE: cmpldi 3, 99
1672 %4 = ISEL8 %zero8, %0, %2.sub_gt
1673 %5 = ADD8 killed %4, %1
1675 BLR8 implicit %lr8, implicit %rm, implicit %x3
1680 # CHECK-ALL: name: testCMPLDI
1682 exposesReturnsTwice: false
1684 regBankSelected: false
1686 tracksRegLiveness: true
1688 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1689 - { id: 1, class: g8rc, preferred-register: '' }
1690 - { id: 2, class: crrc, preferred-register: '' }
1691 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1692 - { id: 4, class: g8rc, preferred-register: '' }
1693 - { id: 5, class: g8rc, preferred-register: '' }
1695 - { reg: '%x3', virtual-reg: '%0' }
1696 - { reg: '%x4', virtual-reg: '%1' }
1698 isFrameAddressTaken: false
1699 isReturnAddressTaken: false
1701 hasPatchPoint: false
1708 maxCallFrameSize: 4294967295
1709 hasOpaqueSPAdjustment: false
1711 hasMustTailInVarArgFunc: false
1723 %2 = CMPLDI %0, 65535
1724 %4 = ISEL8 %zero8, %0, %2.sub_gt
1726 %5 = ADD8 killed %4, %1
1728 BLR8 implicit %lr8, implicit %rm, implicit %x3
1733 # CHECK-ALL: name: testCMPW
1735 exposesReturnsTwice: false
1737 regBankSelected: false
1739 tracksRegLiveness: true
1741 - { id: 0, class: g8rc, preferred-register: '' }
1742 - { id: 1, class: g8rc, preferred-register: '' }
1743 - { id: 2, class: gprc, preferred-register: '' }
1744 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1745 - { id: 4, class: crrc, preferred-register: '' }
1746 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1747 - { id: 6, class: gprc, preferred-register: '' }
1748 - { id: 7, class: gprc, preferred-register: '' }
1749 - { id: 8, class: g8rc, preferred-register: '' }
1751 - { reg: '%x3', virtual-reg: '%0' }
1752 - { reg: '%x4', virtual-reg: '%1' }
1754 isFrameAddressTaken: false
1755 isReturnAddressTaken: false
1757 hasPatchPoint: false
1764 maxCallFrameSize: 4294967295
1765 hasOpaqueSPAdjustment: false
1767 hasMustTailInVarArgFunc: false
1782 ; CHECK: CMPWI %3, -1
1783 %6 = ISEL %zero, %3, %4.sub_gt
1784 %7 = ADD4 killed %6, %2
1785 %8 = EXTSW_32_64 killed %7
1787 BLR8 implicit %lr8, implicit %rm, implicit %x3
1792 # CHECK-ALL: name: testCMPWI
1794 exposesReturnsTwice: false
1796 regBankSelected: false
1798 tracksRegLiveness: true
1800 - { id: 0, class: g8rc, preferred-register: '' }
1801 - { id: 1, class: g8rc, preferred-register: '' }
1802 - { id: 2, class: gprc, preferred-register: '' }
1803 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1804 - { id: 4, class: crrc, preferred-register: '' }
1805 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1806 - { id: 6, class: gprc, preferred-register: '' }
1807 - { id: 7, class: gprc, preferred-register: '' }
1808 - { id: 8, class: g8rc, preferred-register: '' }
1810 - { reg: '%x3', virtual-reg: '%0' }
1811 - { reg: '%x4', virtual-reg: '%1' }
1813 isFrameAddressTaken: false
1814 isReturnAddressTaken: false
1816 hasPatchPoint: false
1823 maxCallFrameSize: 4294967295
1824 hasOpaqueSPAdjustment: false
1826 hasMustTailInVarArgFunc: false
1841 %6 = ISEL %zero, %3, %4.sub_gt
1843 %7 = ADD4 killed %6, killed %2
1844 %8 = EXTSW_32_64 killed %7
1846 BLR8 implicit %lr8, implicit %rm, implicit %x3
1851 # CHECK-ALL: name: testCMPLW
1853 exposesReturnsTwice: false
1855 regBankSelected: false
1857 tracksRegLiveness: true
1859 - { id: 0, class: g8rc, preferred-register: '' }
1860 - { id: 1, class: g8rc, preferred-register: '' }
1861 - { id: 2, class: gprc, preferred-register: '' }
1862 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1863 - { id: 4, class: crrc, preferred-register: '' }
1864 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1865 - { id: 6, class: gprc, preferred-register: '' }
1866 - { id: 7, class: gprc, preferred-register: '' }
1867 - { id: 8, class: g8rc, preferred-register: '' }
1868 - { id: 9, class: g8rc, preferred-register: '' }
1869 - { id: 10, class: g8rc, preferred-register: '' }
1871 - { reg: '%x3', virtual-reg: '%0' }
1872 - { reg: '%x4', virtual-reg: '%1' }
1874 isFrameAddressTaken: false
1875 isReturnAddressTaken: false
1877 hasPatchPoint: false
1884 maxCallFrameSize: 4294967295
1885 hasOpaqueSPAdjustment: false
1887 hasMustTailInVarArgFunc: false
1902 ; CHECK: CMPLWI %3, 32767
1903 ; CHECK-LATE: cmplwi 3, 32767
1904 %6 = ISEL %zero, %3, %4.sub_gt
1905 %7 = ADD4 killed %6, %2
1907 %8 = INSERT_SUBREG %9, killed %7, 1
1908 %10 = RLDICL killed %8, 0, 32
1910 BLR8 implicit %lr8, implicit %rm, implicit %x3
1915 # CHECK-ALL: name: testCMPLWI
1917 exposesReturnsTwice: false
1919 regBankSelected: false
1921 tracksRegLiveness: true
1923 - { id: 0, class: g8rc, preferred-register: '' }
1924 - { id: 1, class: g8rc, preferred-register: '' }
1925 - { id: 2, class: gprc, preferred-register: '' }
1926 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1927 - { id: 4, class: crrc, preferred-register: '' }
1928 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1929 - { id: 6, class: gprc, preferred-register: '' }
1930 - { id: 7, class: gprc, preferred-register: '' }
1931 - { id: 8, class: g8rc, preferred-register: '' }
1932 - { id: 9, class: g8rc, preferred-register: '' }
1933 - { id: 10, class: g8rc, preferred-register: '' }
1935 - { reg: '%x3', virtual-reg: '%0' }
1936 - { reg: '%x4', virtual-reg: '%1' }
1938 isFrameAddressTaken: false
1939 isReturnAddressTaken: false
1941 hasPatchPoint: false
1948 maxCallFrameSize: 4294967295
1949 hasOpaqueSPAdjustment: false
1951 hasMustTailInVarArgFunc: false
1966 %6 = ISEL %zero, %3, %4.sub_gt
1968 %7 = ADD4 killed %6, killed %2
1970 %8 = INSERT_SUBREG %9, killed %7, 1
1971 %10 = RLDICL killed %8, 0, 32
1973 BLR8 implicit %lr8, implicit %rm, implicit %x3
1978 # CHECK-ALL: name: testLBZUX
1980 exposesReturnsTwice: false
1982 regBankSelected: false
1984 tracksRegLiveness: true
1986 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1987 - { id: 1, class: g8rc, preferred-register: '' }
1988 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1989 - { id: 3, class: gprc, preferred-register: '' }
1990 - { id: 4, class: g8rc, preferred-register: '' }
1991 - { id: 5, class: g8rc, preferred-register: '' }
1992 - { id: 6, class: g8rc, preferred-register: '' }
1993 - { id: 7, class: gprc, preferred-register: '' }
1994 - { id: 8, class: gprc, preferred-register: '' }
1995 - { id: 9, class: g8rc, preferred-register: '' }
1996 - { id: 10, class: g8rc, preferred-register: '' }
1997 - { id: 11, class: g8rc, preferred-register: '' }
1998 - { id: 12, class: gprc, preferred-register: '' }
1999 - { id: 13, class: gprc, preferred-register: '' }
2000 - { id: 14, class: g8rc, preferred-register: '' }
2001 - { id: 15, class: g8rc, preferred-register: '' }
2002 - { id: 16, class: g8rc, preferred-register: '' }
2003 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2005 - { reg: '%x3', virtual-reg: '%0' }
2006 - { reg: '%x4', virtual-reg: '%1' }
2008 isFrameAddressTaken: false
2009 isReturnAddressTaken: false
2011 hasPatchPoint: false
2018 maxCallFrameSize: 4294967295
2019 hasOpaqueSPAdjustment: false
2021 hasMustTailInVarArgFunc: false
2036 %4 = INSERT_SUBREG %5, killed %3, 1
2037 %6 = RLDICL killed %4, 0, 32
2038 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2041 %9 = INSERT_SUBREG %10, killed %8, 1
2043 %12,%17 = LBZUX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2044 ; CHECK: LBZU -15, %0
2045 ; CHECK-LATE: lbzu 5, -15(3)
2046 %13 = ADD4 killed %12, killed %7
2048 %14 = INSERT_SUBREG %15, killed %13, 1
2049 %16 = RLWINM8 killed %14, 0, 24, 31
2051 BLR8 implicit %lr8, implicit %rm, implicit %x3
2056 # CHECK-ALL: name: testLBZX
2058 exposesReturnsTwice: false
2060 regBankSelected: false
2062 tracksRegLiveness: true
2064 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2065 - { id: 1, class: g8rc, preferred-register: '' }
2066 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2067 - { id: 3, class: gprc, preferred-register: '' }
2068 - { id: 4, class: g8rc, preferred-register: '' }
2069 - { id: 5, class: g8rc, preferred-register: '' }
2070 - { id: 6, class: g8rc, preferred-register: '' }
2071 - { id: 7, class: gprc, preferred-register: '' }
2072 - { id: 8, class: gprc, preferred-register: '' }
2073 - { id: 9, class: g8rc, preferred-register: '' }
2074 - { id: 10, class: g8rc, preferred-register: '' }
2075 - { id: 11, class: g8rc, preferred-register: '' }
2076 - { id: 12, class: gprc, preferred-register: '' }
2077 - { id: 13, class: gprc, preferred-register: '' }
2078 - { id: 14, class: g8rc, preferred-register: '' }
2079 - { id: 15, class: g8rc, preferred-register: '' }
2080 - { id: 16, class: g8rc, preferred-register: '' }
2082 - { reg: '%x3', virtual-reg: '%0' }
2083 - { reg: '%x4', virtual-reg: '%1' }
2085 isFrameAddressTaken: false
2086 isReturnAddressTaken: false
2088 hasPatchPoint: false
2095 maxCallFrameSize: 4294967295
2096 hasOpaqueSPAdjustment: false
2098 hasMustTailInVarArgFunc: false
2113 %4 = INSERT_SUBREG %5, killed %3, 1
2114 %6 = RLDICL killed %4, 0, 32
2115 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2116 ; CHECK: LBZ 45, killed %6
2117 ; CHECK-LATE: lbz 5, 45(5)
2120 %9 = INSERT_SUBREG %10, killed %8, 1
2121 %11 = RLDICL killed %9, 0, 32
2122 %12 = LBZX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2123 ; CHECK: LBZ 45, killed %11
2124 ; CHECK-LATE: lbz 3, 45(4)
2125 %13 = ADD4 killed %12, killed %7
2127 %14 = INSERT_SUBREG %15, killed %13, 1
2128 %16 = RLWINM8 killed %14, 0, 24, 31
2130 BLR8 implicit %lr8, implicit %rm, implicit %x3
2135 # CHECK-ALL: name: testLHZUX
2137 exposesReturnsTwice: false
2139 regBankSelected: false
2141 tracksRegLiveness: true
2143 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2144 - { id: 1, class: g8rc, preferred-register: '' }
2145 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2146 - { id: 3, class: gprc, preferred-register: '' }
2147 - { id: 4, class: g8rc, preferred-register: '' }
2148 - { id: 5, class: g8rc, preferred-register: '' }
2149 - { id: 6, class: g8rc, preferred-register: '' }
2150 - { id: 7, class: gprc, preferred-register: '' }
2151 - { id: 8, class: gprc, preferred-register: '' }
2152 - { id: 9, class: g8rc, preferred-register: '' }
2153 - { id: 10, class: g8rc, preferred-register: '' }
2154 - { id: 11, class: g8rc, preferred-register: '' }
2155 - { id: 12, class: gprc, preferred-register: '' }
2156 - { id: 13, class: gprc, preferred-register: '' }
2157 - { id: 14, class: g8rc, preferred-register: '' }
2158 - { id: 15, class: g8rc, preferred-register: '' }
2159 - { id: 16, class: g8rc, preferred-register: '' }
2160 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2162 - { reg: '%x3', virtual-reg: '%0' }
2163 - { reg: '%x4', virtual-reg: '%1' }
2165 isFrameAddressTaken: false
2166 isReturnAddressTaken: false
2168 hasPatchPoint: false
2175 maxCallFrameSize: 4294967295
2176 hasOpaqueSPAdjustment: false
2178 hasMustTailInVarArgFunc: false
2193 %4 = INSERT_SUBREG %5, killed %3, 1
2194 %6 = RLDIC killed %4, 1, 31
2195 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2198 %9 = INSERT_SUBREG %10, killed %8, 1
2200 %12,%17 = LHZUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2201 ; CHECK: LHZU 31440, %0
2202 ; CHECK-LATE: lhzu 5, 31440(3)
2203 %13 = ADD4 killed %12, killed %7
2205 %14 = INSERT_SUBREG %15, killed %13, 1
2206 %16 = RLWINM8 killed %14, 0, 16, 31
2208 BLR8 implicit %lr8, implicit %rm, implicit %x3
2213 # CHECK-ALL: name: testLHZX
2215 exposesReturnsTwice: false
2217 regBankSelected: false
2219 tracksRegLiveness: true
2221 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2222 - { id: 1, class: g8rc, preferred-register: '' }
2223 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2224 - { id: 3, class: gprc, preferred-register: '' }
2225 - { id: 4, class: g8rc, preferred-register: '' }
2226 - { id: 5, class: g8rc, preferred-register: '' }
2227 - { id: 6, class: g8rc, preferred-register: '' }
2228 - { id: 7, class: gprc, preferred-register: '' }
2229 - { id: 8, class: gprc, preferred-register: '' }
2230 - { id: 9, class: g8rc, preferred-register: '' }
2231 - { id: 10, class: g8rc, preferred-register: '' }
2232 - { id: 11, class: g8rc, preferred-register: '' }
2233 - { id: 12, class: gprc, preferred-register: '' }
2234 - { id: 13, class: gprc, preferred-register: '' }
2235 - { id: 14, class: g8rc, preferred-register: '' }
2236 - { id: 15, class: g8rc, preferred-register: '' }
2237 - { id: 16, class: g8rc, preferred-register: '' }
2239 - { reg: '%x3', virtual-reg: '%0' }
2240 - { reg: '%x4', virtual-reg: '%1' }
2242 isFrameAddressTaken: false
2243 isReturnAddressTaken: false
2245 hasPatchPoint: false
2252 maxCallFrameSize: 4294967295
2253 hasOpaqueSPAdjustment: false
2255 hasMustTailInVarArgFunc: false
2270 %4 = INSERT_SUBREG %5, killed %3, 1
2271 %6 = RLDIC killed %4, 1, 31
2272 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2275 %9 = INSERT_SUBREG %10, killed %8, 1
2277 %12 = LHZX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2278 ; CHECK: LHZ 882, %0
2279 ; CHECK-LATE: lhz 3, 882(3)
2280 %13 = ADD4 killed %12, killed %7
2282 %14 = INSERT_SUBREG %15, killed %13, 1
2283 %16 = RLWINM8 killed %14, 0, 16, 31
2285 BLR8 implicit %lr8, implicit %rm, implicit %x3
2290 # CHECK-ALL: name: testLHAUX
2292 exposesReturnsTwice: false
2294 regBankSelected: false
2296 tracksRegLiveness: true
2298 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2299 - { id: 1, class: g8rc, preferred-register: '' }
2300 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2301 - { id: 3, class: gprc, preferred-register: '' }
2302 - { id: 4, class: g8rc, preferred-register: '' }
2303 - { id: 5, class: g8rc, preferred-register: '' }
2304 - { id: 6, class: g8rc, preferred-register: '' }
2305 - { id: 7, class: gprc, preferred-register: '' }
2306 - { id: 8, class: gprc, preferred-register: '' }
2307 - { id: 9, class: g8rc, preferred-register: '' }
2308 - { id: 10, class: g8rc, preferred-register: '' }
2309 - { id: 11, class: g8rc, preferred-register: '' }
2310 - { id: 12, class: gprc, preferred-register: '' }
2311 - { id: 13, class: gprc, preferred-register: '' }
2312 - { id: 14, class: g8rc, preferred-register: '' }
2313 - { id: 15, class: g8rc, preferred-register: '' }
2314 - { id: 16, class: g8rc, preferred-register: '' }
2315 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2317 - { reg: '%x3', virtual-reg: '%0' }
2318 - { reg: '%x4', virtual-reg: '%1' }
2320 isFrameAddressTaken: false
2321 isReturnAddressTaken: false
2323 hasPatchPoint: false
2330 maxCallFrameSize: 4294967295
2331 hasOpaqueSPAdjustment: false
2333 hasMustTailInVarArgFunc: false
2348 %4 = INSERT_SUBREG %5, killed %3, 1
2349 %6 = RLDIC %4, 1, 31
2350 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2353 %9 = INSERT_SUBREG %10, killed %8, 1
2355 %12,%17 = LHAUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2356 ; CHECK: LHAU 400, %0
2357 ; CHECK-LATE: lhau 5, 400(3)
2358 %13 = ADD4 killed %12, killed %7
2360 %14 = INSERT_SUBREG %15, killed %13, 1
2361 %16 = EXTSH8 killed %14
2363 BLR8 implicit %lr8, implicit %rm, implicit %x3
2368 # CHECK-ALL: name: testLHAX
2370 exposesReturnsTwice: false
2372 regBankSelected: false
2374 tracksRegLiveness: true
2376 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2377 - { id: 1, class: g8rc, preferred-register: '' }
2378 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2379 - { id: 3, class: gprc, preferred-register: '' }
2380 - { id: 4, class: g8rc, preferred-register: '' }
2381 - { id: 5, class: g8rc, preferred-register: '' }
2382 - { id: 6, class: g8rc, preferred-register: '' }
2383 - { id: 7, class: gprc, preferred-register: '' }
2384 - { id: 8, class: gprc, preferred-register: '' }
2385 - { id: 9, class: g8rc, preferred-register: '' }
2386 - { id: 10, class: g8rc, preferred-register: '' }
2387 - { id: 11, class: g8rc, preferred-register: '' }
2388 - { id: 12, class: gprc, preferred-register: '' }
2389 - { id: 13, class: gprc, preferred-register: '' }
2390 - { id: 14, class: g8rc, preferred-register: '' }
2391 - { id: 15, class: g8rc, preferred-register: '' }
2392 - { id: 16, class: g8rc, preferred-register: '' }
2394 - { reg: '%x3', virtual-reg: '%0' }
2395 - { reg: '%x4', virtual-reg: '%1' }
2397 isFrameAddressTaken: false
2398 isReturnAddressTaken: false
2400 hasPatchPoint: false
2407 maxCallFrameSize: 4294967295
2408 hasOpaqueSPAdjustment: false
2410 hasMustTailInVarArgFunc: false
2425 %4 = INSERT_SUBREG %5, killed %3, 1
2427 %7 = LHAX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2428 ; CHECK: LHA -999, %0
2429 ; CHECK-LATE: lha 4, -999(3)
2432 %9 = INSERT_SUBREG %10, killed %8, 1
2434 %12 = LHAX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2435 ; CHECK: LHA 999, %0
2436 ; CHECK-LATE: lha 3, 999(3)
2437 %13 = ADD4 killed %12, killed %7
2439 %14 = INSERT_SUBREG %15, killed %13, 1
2440 %16 = EXTSH8 killed %14
2442 BLR8 implicit %lr8, implicit %rm, implicit %x3
2447 # CHECK-ALL: name: testLWZUX
2449 exposesReturnsTwice: false
2451 regBankSelected: false
2453 tracksRegLiveness: true
2455 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2456 - { id: 1, class: g8rc, preferred-register: '' }
2457 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2458 - { id: 3, class: gprc, preferred-register: '' }
2459 - { id: 4, class: g8rc, preferred-register: '' }
2460 - { id: 5, class: g8rc, preferred-register: '' }
2461 - { id: 6, class: g8rc, preferred-register: '' }
2462 - { id: 7, class: gprc, preferred-register: '' }
2463 - { id: 8, class: gprc, preferred-register: '' }
2464 - { id: 9, class: g8rc, preferred-register: '' }
2465 - { id: 10, class: g8rc, preferred-register: '' }
2466 - { id: 11, class: g8rc, preferred-register: '' }
2467 - { id: 12, class: gprc, preferred-register: '' }
2468 - { id: 13, class: gprc, preferred-register: '' }
2469 - { id: 14, class: g8rc, preferred-register: '' }
2470 - { id: 15, class: g8rc, preferred-register: '' }
2471 - { id: 16, class: g8rc, preferred-register: '' }
2472 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2473 - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2475 - { reg: '%x3', virtual-reg: '%0' }
2476 - { reg: '%x4', virtual-reg: '%1' }
2478 isFrameAddressTaken: false
2479 isReturnAddressTaken: false
2481 hasPatchPoint: false
2488 maxCallFrameSize: 4294967295
2489 hasOpaqueSPAdjustment: false
2491 hasMustTailInVarArgFunc: false
2506 %4 = INSERT_SUBREG %5, killed %3, 1
2508 %7,%17 = LWZUX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2509 ; CHECK: LWZU 889, %0
2510 ; CHECK-LATE: lwzu 5, 889(4)
2513 %9 = INSERT_SUBREG %10, killed %8, 1
2515 %12,%18 = LWZUX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2516 ; CHECK: LWZU -2, %0
2517 ; CHECK-LATE: lwzu 4, -2(3)
2518 %13 = ADD4 killed %12, killed %7
2520 %14 = INSERT_SUBREG %15, killed %13, 1
2521 %16 = RLDICL killed %14, 0, 32
2523 BLR8 implicit %lr8, implicit %rm, implicit %x3
2528 # CHECK-ALL: name: testLWZX
2530 exposesReturnsTwice: false
2532 regBankSelected: false
2534 tracksRegLiveness: true
2536 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2537 - { id: 1, class: g8rc, preferred-register: '' }
2538 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2539 - { id: 3, class: gprc, preferred-register: '' }
2540 - { id: 4, class: g8rc, preferred-register: '' }
2541 - { id: 5, class: g8rc, preferred-register: '' }
2542 - { id: 6, class: g8rc, preferred-register: '' }
2543 - { id: 7, class: gprc, preferred-register: '' }
2544 - { id: 8, class: gprc, preferred-register: '' }
2545 - { id: 9, class: g8rc, preferred-register: '' }
2546 - { id: 10, class: g8rc, preferred-register: '' }
2547 - { id: 11, class: g8rc, preferred-register: '' }
2548 - { id: 12, class: gprc, preferred-register: '' }
2549 - { id: 13, class: gprc, preferred-register: '' }
2550 - { id: 14, class: g8rc, preferred-register: '' }
2551 - { id: 15, class: g8rc, preferred-register: '' }
2552 - { id: 16, class: g8rc, preferred-register: '' }
2554 - { reg: '%x3', virtual-reg: '%0' }
2555 - { reg: '%x4', virtual-reg: '%1' }
2557 isFrameAddressTaken: false
2558 isReturnAddressTaken: false
2560 hasPatchPoint: false
2567 maxCallFrameSize: 4294967295
2568 hasOpaqueSPAdjustment: false
2570 hasMustTailInVarArgFunc: false
2585 %4 = INSERT_SUBREG %5, killed %3, 1
2586 %6 = RLDIC %4, 2, 30
2587 %7 = LWZX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2588 ; CHECK: LWZ 1000, killed %6
2589 ; CHECK-LATE: lwz 5, 1000(5)
2592 %9 = INSERT_SUBREG %10, killed %8, 1
2593 %11 = RLDIC %9, 2, 30
2594 %12 = LWZX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2595 ; CHECK: LWZ 1000, killed %11
2596 ; CHECK-LATE: lwz 3, 1000(4)
2597 %13 = ADD4 killed %12, killed %7
2599 %14 = INSERT_SUBREG %15, killed %13, 1
2600 %16 = RLDICL killed %14, 0, 32
2602 BLR8 implicit %lr8, implicit %rm, implicit %x3
2607 # CHECK-ALL: name: testLWAX
2609 exposesReturnsTwice: false
2611 regBankSelected: false
2613 tracksRegLiveness: true
2615 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2616 - { id: 1, class: g8rc, preferred-register: '' }
2617 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2618 - { id: 3, class: gprc, preferred-register: '' }
2619 - { id: 4, class: g8rc, preferred-register: '' }
2620 - { id: 5, class: g8rc, preferred-register: '' }
2621 - { id: 6, class: g8rc, preferred-register: '' }
2622 - { id: 7, class: g8rc, preferred-register: '' }
2623 - { id: 8, class: gprc, preferred-register: '' }
2624 - { id: 9, class: g8rc, preferred-register: '' }
2625 - { id: 10, class: g8rc, preferred-register: '' }
2626 - { id: 11, class: g8rc, preferred-register: '' }
2627 - { id: 12, class: g8rc, preferred-register: '' }
2628 - { id: 13, class: g8rc, preferred-register: '' }
2630 - { reg: '%x3', virtual-reg: '%0' }
2631 - { reg: '%x4', virtual-reg: '%1' }
2633 isFrameAddressTaken: false
2634 isReturnAddressTaken: false
2636 hasPatchPoint: false
2643 maxCallFrameSize: 4294967295
2644 hasOpaqueSPAdjustment: false
2646 hasMustTailInVarArgFunc: false
2661 %4 = INSERT_SUBREG %5, killed %3, 1
2662 %6 = RLDIC %4, 2, 30
2663 %7 = LWAX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2664 ; CHECK: LWA 444, killed %6
2665 ; CHECK-LATE: lwa 5, 444(5)
2668 %9 = INSERT_SUBREG %10, killed %8, 1
2669 %11 = RLDIC %9, 2, 30
2670 %12 = LWAX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2671 ; CHECK: LWA 444, killed %11
2672 ; CHECK-LATE: lwa 3, 444(4)
2673 %13 = ADD8 killed %12, killed %7
2675 BLR8 implicit %lr8, implicit %rm, implicit %x3
2680 # CHECK-ALL: name: testLDUX
2682 exposesReturnsTwice: false
2684 regBankSelected: false
2686 tracksRegLiveness: true
2688 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2689 - { id: 1, class: g8rc, preferred-register: '' }
2690 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2691 - { id: 3, class: gprc, preferred-register: '' }
2692 - { id: 4, class: g8rc, preferred-register: '' }
2693 - { id: 5, class: g8rc, preferred-register: '' }
2694 - { id: 6, class: g8rc, preferred-register: '' }
2695 - { id: 7, class: g8rc, preferred-register: '' }
2696 - { id: 8, class: gprc, preferred-register: '' }
2697 - { id: 9, class: g8rc, preferred-register: '' }
2698 - { id: 10, class: g8rc, preferred-register: '' }
2699 - { id: 11, class: g8rc, preferred-register: '' }
2700 - { id: 12, class: g8rc, preferred-register: '' }
2701 - { id: 13, class: g8rc, preferred-register: '' }
2702 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2703 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2705 - { reg: '%x3', virtual-reg: '%0' }
2706 - { reg: '%x4', virtual-reg: '%1' }
2708 isFrameAddressTaken: false
2709 isReturnAddressTaken: false
2711 hasPatchPoint: false
2718 maxCallFrameSize: 4294967295
2719 hasOpaqueSPAdjustment: false
2721 hasMustTailInVarArgFunc: false
2736 %4 = INSERT_SUBREG %5, killed %3, 1
2738 %7,%14 = LDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2739 ; CHECK: LDU 100, %0
2740 ; CHECK-LATE: ldu 5, 100(4)
2743 %9 = INSERT_SUBREG %10, killed %8, 1
2745 %12,%15 = LDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2746 ; CHECK: LDU 200, %0
2747 ; CHECK-LATE: ldu 4, 200(3)
2748 %13 = ADD8 killed %12, killed %7
2750 BLR8 implicit %lr8, implicit %rm, implicit %x3
2755 # CHECK-ALL: name: testLDX
2757 exposesReturnsTwice: false
2759 regBankSelected: false
2761 tracksRegLiveness: true
2763 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2764 - { id: 1, class: g8rc, preferred-register: '' }
2765 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2766 - { id: 3, class: gprc, preferred-register: '' }
2767 - { id: 4, class: g8rc, preferred-register: '' }
2768 - { id: 5, class: g8rc, preferred-register: '' }
2769 - { id: 6, class: g8rc, preferred-register: '' }
2770 - { id: 7, class: g8rc, preferred-register: '' }
2771 - { id: 8, class: gprc, preferred-register: '' }
2772 - { id: 9, class: g8rc, preferred-register: '' }
2773 - { id: 10, class: g8rc, preferred-register: '' }
2774 - { id: 11, class: g8rc, preferred-register: '' }
2775 - { id: 12, class: g8rc, preferred-register: '' }
2776 - { id: 13, class: g8rc, preferred-register: '' }
2778 - { reg: '%x3', virtual-reg: '%0' }
2779 - { reg: '%x4', virtual-reg: '%1' }
2781 isFrameAddressTaken: false
2782 isReturnAddressTaken: false
2784 hasPatchPoint: false
2791 maxCallFrameSize: 4294967295
2792 hasOpaqueSPAdjustment: false
2794 hasMustTailInVarArgFunc: false
2809 %4 = INSERT_SUBREG %5, killed %3, 1
2811 %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2813 ; CHECK-LATE: ld 4, 120(3)
2816 %9 = INSERT_SUBREG %10, killed %8, 1
2818 %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2820 ; CHECK-LATE: ld 12, 280(3)
2821 %13 = ADD8 killed %12, killed %7
2823 BLR8 implicit %lr8, implicit %rm, implicit %x3
2828 # CHECK-ALL: name: testLFDUX
2830 exposesReturnsTwice: false
2832 regBankSelected: false
2834 tracksRegLiveness: true
2836 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2837 - { id: 1, class: g8rc, preferred-register: '' }
2838 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2839 - { id: 3, class: gprc, preferred-register: '' }
2840 - { id: 4, class: g8rc, preferred-register: '' }
2841 - { id: 5, class: g8rc, preferred-register: '' }
2842 - { id: 6, class: g8rc, preferred-register: '' }
2843 - { id: 7, class: f8rc, preferred-register: '' }
2844 - { id: 8, class: gprc, preferred-register: '' }
2845 - { id: 9, class: g8rc, preferred-register: '' }
2846 - { id: 10, class: g8rc, preferred-register: '' }
2847 - { id: 11, class: g8rc, preferred-register: '' }
2848 - { id: 12, class: f8rc, preferred-register: '' }
2849 - { id: 13, class: f8rc, preferred-register: '' }
2850 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2851 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2853 - { reg: '%x3', virtual-reg: '%0' }
2854 - { reg: '%x4', virtual-reg: '%1' }
2856 isFrameAddressTaken: false
2857 isReturnAddressTaken: false
2859 hasPatchPoint: false
2866 maxCallFrameSize: 4294967295
2867 hasOpaqueSPAdjustment: false
2869 hasMustTailInVarArgFunc: false
2884 %4 = INSERT_SUBREG %5, killed %3, 1
2886 %7,%14 = LFDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
2887 ; CHECK: LFDU 440, %0
2888 ; CHECK-LATE: lfdu 0, 440(4)
2891 %9 = INSERT_SUBREG %10, killed %8, 1
2893 %12,%15 = LFDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
2894 ; CHECK: LFDU 16, %0
2895 ; CHECK-LATE: lfdu 1, 16(3)
2896 %13 = FADD killed %7, killed %12, implicit %rm
2898 BLR8 implicit %lr8, implicit %rm, implicit %f1
2903 # CHECK-ALL: name: testLFDX
2905 exposesReturnsTwice: false
2907 regBankSelected: false
2909 tracksRegLiveness: true
2911 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2912 - { id: 1, class: g8rc, preferred-register: '' }
2913 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2914 - { id: 3, class: gprc, preferred-register: '' }
2915 - { id: 4, class: g8rc, preferred-register: '' }
2916 - { id: 5, class: g8rc, preferred-register: '' }
2917 - { id: 6, class: g8rc, preferred-register: '' }
2918 - { id: 7, class: f8rc, preferred-register: '' }
2919 - { id: 8, class: gprc, preferred-register: '' }
2920 - { id: 9, class: g8rc, preferred-register: '' }
2921 - { id: 10, class: g8rc, preferred-register: '' }
2922 - { id: 11, class: g8rc, preferred-register: '' }
2923 - { id: 12, class: f8rc, preferred-register: '' }
2924 - { id: 13, class: f8rc, preferred-register: '' }
2926 - { reg: '%x3', virtual-reg: '%0' }
2927 - { reg: '%x4', virtual-reg: '%1' }
2929 isFrameAddressTaken: false
2930 isReturnAddressTaken: false
2932 hasPatchPoint: false
2939 maxCallFrameSize: 4294967295
2940 hasOpaqueSPAdjustment: false
2942 hasMustTailInVarArgFunc: false
2957 %4 = INSERT_SUBREG %5, killed %3, 1
2958 %6 = RLDIC %4, 3, 29
2959 %7 = LFDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
2960 ; CHECK: LFD -20, killed %6
2961 ; CHECK-LATE: lfd 0, -20(5)
2964 %9 = INSERT_SUBREG %10, killed %8, 1
2965 %11 = RLDIC %9, 3, 29
2966 %12 = LFDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
2967 ; CHECK: LFD -20, killed %11
2968 ; CHECK-LATE: lfd 1, -20(4)
2969 %13 = FADD killed %7, killed %12, implicit %rm
2971 BLR8 implicit %lr8, implicit %rm, implicit %f1
2976 # CHECK-ALL: name: testLFSUX
2978 exposesReturnsTwice: false
2980 regBankSelected: false
2982 tracksRegLiveness: true
2984 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2985 - { id: 1, class: g8rc, preferred-register: '' }
2986 - { id: 2, class: g8rc, preferred-register: '' }
2987 - { id: 3, class: f8rc, preferred-register: '' }
2988 - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2989 - { id: 5, class: f8rc, preferred-register: '' }
2990 - { id: 6, class: g8rc, preferred-register: '' }
2991 - { id: 7, class: gprc, preferred-register: '' }
2992 - { id: 8, class: f8rc, preferred-register: '' }
2993 - { id: 9, class: f8rc, preferred-register: '' }
2994 - { id: 10, class: f8rc, preferred-register: '' }
2995 - { id: 11, class: g8rc, preferred-register: '' }
2996 - { id: 12, class: gprc, preferred-register: '' }
2997 - { id: 13, class: f8rc, preferred-register: '' }
2998 - { id: 14, class: f8rc, preferred-register: '' }
2999 - { id: 15, class: f8rc, preferred-register: '' }
3000 - { id: 16, class: g8rc, preferred-register: '' }
3001 - { id: 17, class: gprc, preferred-register: '' }
3002 - { id: 18, class: f8rc, preferred-register: '' }
3003 - { id: 19, class: f8rc, preferred-register: '' }
3004 - { id: 20, class: f8rc, preferred-register: '' }
3005 - { id: 21, class: g8rc, preferred-register: '' }
3006 - { id: 22, class: gprc, preferred-register: '' }
3007 - { id: 23, class: g8rc, preferred-register: '' }
3008 - { id: 24, class: vrrc, preferred-register: '' }
3010 - { reg: '%x3', virtual-reg: '%0' }
3011 - { reg: '%x4', virtual-reg: '%1' }
3013 isFrameAddressTaken: false
3014 isReturnAddressTaken: false
3016 hasPatchPoint: false
3023 maxCallFrameSize: 4294967295
3024 hasOpaqueSPAdjustment: false
3026 hasMustTailInVarArgFunc: false
3031 - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16,
3032 stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
3033 local-offset: -16, di-variable: '', di-expression: '', di-location: '' }
3034 - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4,
3035 stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
3036 local-offset: -20, di-variable: '', di-expression: '', di-location: '' }
3037 - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4,
3038 stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
3039 local-offset: -24, di-variable: '', di-expression: '', di-location: '' }
3040 - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4,
3041 stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
3042 local-offset: -28, di-variable: '', di-expression: '', di-location: '' }
3043 - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4,
3044 stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
3045 local-offset: -32, di-variable: '', di-expression: '', di-location: '' }
3054 %3, %4 = LFSUX %0, killed %2 :: (load 4 from %ir.arrayidx, !tbaa !14)
3055 ; CHECK: LFSU 72, %0
3056 ; CHECK-LATE: lfsu 0, 72(3)
3057 %5 = FCTIWUZ killed %3, implicit %rm
3058 %6 = ADDI8 %stack.4, 0
3059 STFIWX killed %5, %zero8, killed %6
3060 %7 = LWZ 0, %stack.4 :: (load 4 from %stack.4)
3061 %8 = LFS 4, %4 :: (load 4 from %ir.3, !tbaa !14)
3062 %10 = FCTIWUZ %8, implicit %rm
3063 %11 = ADDI8 %stack.1, 0
3064 STFIWX killed %10, %zero8, killed %11
3065 %12 = LWZ 0, %stack.1 :: (load 4 from %stack.1)
3066 %13 = LFS 8, %4 :: (load 4 from %ir.5, !tbaa !14)
3067 %15 = FCTIWUZ %13, implicit %rm
3068 %16 = ADDI8 %stack.2, 0
3069 STFIWX killed %15, %zero8, killed %16
3070 %17 = LWZ 0, %stack.2 :: (load 4 from %stack.2)
3071 %18 = LFS 12, %4 :: (load 4 from %ir.7, !tbaa !14)
3072 %20 = FCTIWUZ %18, implicit %rm
3073 %21 = ADDI8 %stack.3, 0
3074 STFIWX killed %20, %zero8, killed %21
3075 %22 = LWZ 0, %stack.3 :: (load 4 from %stack.3)
3076 STW killed %7, 0, %stack.0 :: (store 4 into %stack.0, align 16)
3077 STW killed %22, 12, %stack.0 :: (store 4 into %stack.0 + 12)
3078 STW killed %17, 8, %stack.0 :: (store 4 into %stack.0 + 8, align 8)
3079 STW killed %12, 4, %stack.0 :: (store 4 into %stack.0 + 4)
3080 %23 = ADDI8 %stack.0, 0
3081 %24 = LVX %zero8, killed %23 :: (load 16 from %stack.0)
3083 BLR8 implicit %lr8, implicit %rm, implicit %v2
3088 # CHECK-ALL: name: testLFSX
3090 exposesReturnsTwice: false
3092 regBankSelected: false
3094 tracksRegLiveness: true
3096 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3097 - { id: 1, class: g8rc, preferred-register: '' }
3098 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3099 - { id: 3, class: gprc, preferred-register: '' }
3100 - { id: 4, class: g8rc, preferred-register: '' }
3101 - { id: 5, class: g8rc, preferred-register: '' }
3102 - { id: 6, class: g8rc, preferred-register: '' }
3103 - { id: 7, class: f4rc, preferred-register: '' }
3104 - { id: 8, class: gprc, preferred-register: '' }
3105 - { id: 9, class: g8rc, preferred-register: '' }
3106 - { id: 10, class: g8rc, preferred-register: '' }
3107 - { id: 11, class: g8rc, preferred-register: '' }
3108 - { id: 12, class: f4rc, preferred-register: '' }
3109 - { id: 13, class: f4rc, preferred-register: '' }
3111 - { reg: '%x3', virtual-reg: '%0' }
3112 - { reg: '%x4', virtual-reg: '%1' }
3114 isFrameAddressTaken: false
3115 isReturnAddressTaken: false
3117 hasPatchPoint: false
3124 maxCallFrameSize: 4294967295
3125 hasOpaqueSPAdjustment: false
3127 hasMustTailInVarArgFunc: false
3142 %4 = INSERT_SUBREG %5, killed %3, 1
3144 %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3146 ; CHECK-LATE: lfs 0, 88(3)
3149 %9 = INSERT_SUBREG %10, killed %8, 1
3151 %12 = LFSX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3152 ; CHECK: LFS -88, %0
3153 ; CHECK-LATE: lfs 1, -88(3)
3154 %13 = FADDS killed %7, killed %12, implicit %rm
3156 BLR8 implicit %lr8, implicit %rm, implicit %f1
3161 # CHECK-ALL: name: testLXSDX
3163 exposesReturnsTwice: false
3165 regBankSelected: false
3167 tracksRegLiveness: true
3169 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3170 - { id: 1, class: g8rc, preferred-register: '' }
3171 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3172 - { id: 3, class: gprc, preferred-register: '' }
3173 - { id: 4, class: g8rc, preferred-register: '' }
3174 - { id: 5, class: g8rc, preferred-register: '' }
3175 - { id: 6, class: g8rc, preferred-register: '' }
3176 - { id: 7, class: vsfrc, preferred-register: '' }
3177 - { id: 8, class: gprc, preferred-register: '' }
3178 - { id: 9, class: g8rc, preferred-register: '' }
3179 - { id: 10, class: g8rc, preferred-register: '' }
3180 - { id: 11, class: g8rc, preferred-register: '' }
3181 - { id: 12, class: vsfrc, preferred-register: '' }
3182 - { id: 13, class: vsfrc, preferred-register: '' }
3184 - { reg: '%x3', virtual-reg: '%0' }
3185 - { reg: '%x4', virtual-reg: '%1' }
3187 isFrameAddressTaken: false
3188 isReturnAddressTaken: false
3190 hasPatchPoint: false
3197 maxCallFrameSize: 4294967295
3198 hasOpaqueSPAdjustment: false
3200 hasMustTailInVarArgFunc: false
3215 %4 = INSERT_SUBREG %5, killed %3, 1
3217 %7 = LXSDX %0, killed %6, implicit %rm :: (load 8 from %ir.arrayidx, !tbaa !12)
3218 ; CHECK: LXSD 100, %0
3219 ; CHECK-LATE: lxsd 0, 100(3)
3222 %9 = INSERT_SUBREG %10, killed %8, 1
3224 %12 = LXSDX %0, killed %11, implicit %rm :: (load 8 from %ir.arrayidx3, !tbaa !12)
3225 ; CHECK: LXSD -120, %0
3226 ; CHECK-LATE: lxsd 1, -120(3)
3227 %13 = XSADDDP killed %7, killed %12, implicit %rm
3229 BLR8 implicit %lr8, implicit %rm, implicit %f1
3234 # CHECK-ALL: name: testLXSSPX
3236 exposesReturnsTwice: false
3238 regBankSelected: false
3240 tracksRegLiveness: true
3242 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3243 - { id: 1, class: g8rc, preferred-register: '' }
3244 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3245 - { id: 3, class: gprc, preferred-register: '' }
3246 - { id: 4, class: g8rc, preferred-register: '' }
3247 - { id: 5, class: g8rc, preferred-register: '' }
3248 - { id: 6, class: g8rc, preferred-register: '' }
3249 - { id: 7, class: vssrc, preferred-register: '' }
3250 - { id: 8, class: gprc, preferred-register: '' }
3251 - { id: 9, class: g8rc, preferred-register: '' }
3252 - { id: 10, class: g8rc, preferred-register: '' }
3253 - { id: 11, class: g8rc, preferred-register: '' }
3254 - { id: 12, class: vssrc, preferred-register: '' }
3255 - { id: 13, class: vssrc, preferred-register: '' }
3257 - { reg: '%x3', virtual-reg: '%0' }
3258 - { reg: '%x4', virtual-reg: '%1' }
3260 isFrameAddressTaken: false
3261 isReturnAddressTaken: false
3263 hasPatchPoint: false
3270 maxCallFrameSize: 4294967295
3271 hasOpaqueSPAdjustment: false
3273 hasMustTailInVarArgFunc: false
3288 %4 = INSERT_SUBREG %5, killed %3, 1
3290 %7 = LXSSPX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3291 ; CHECK: LXSSP 96, %0
3292 ; CHECK-LATE: lxssp 0, 96(3)
3295 %9 = INSERT_SUBREG %10, killed %8, 1
3297 %12 = LXSSPX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3298 ; CHECK: LXSSP -92, %0
3299 ; CHECK-LATE: lxssp 1, -92(3)
3300 %13 = XSADDSP killed %7, killed %12
3302 BLR8 implicit %lr8, implicit %rm, implicit %f1
3307 # CHECK-ALL: name: testLXVX
3309 exposesReturnsTwice: false
3311 regBankSelected: false
3313 tracksRegLiveness: true
3315 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3316 - { id: 1, class: g8rc, preferred-register: '' }
3317 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3318 - { id: 3, class: gprc, preferred-register: '' }
3319 - { id: 4, class: g8rc, preferred-register: '' }
3320 - { id: 5, class: g8rc, preferred-register: '' }
3321 - { id: 6, class: g8rc, preferred-register: '' }
3322 - { id: 7, class: vrrc, preferred-register: '' }
3323 - { id: 8, class: gprc, preferred-register: '' }
3324 - { id: 9, class: g8rc, preferred-register: '' }
3325 - { id: 10, class: g8rc, preferred-register: '' }
3326 - { id: 11, class: g8rc, preferred-register: '' }
3327 - { id: 12, class: vrrc, preferred-register: '' }
3328 - { id: 13, class: vrrc, preferred-register: '' }
3330 - { reg: '%x3', virtual-reg: '%0' }
3331 - { reg: '%x4', virtual-reg: '%1' }
3333 isFrameAddressTaken: false
3334 isReturnAddressTaken: false
3336 hasPatchPoint: false
3343 maxCallFrameSize: 4294967295
3344 hasOpaqueSPAdjustment: false
3346 hasMustTailInVarArgFunc: false
3361 %4 = INSERT_SUBREG %5, killed %3, 1
3363 %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3)
3365 ; CHECK-LATE: lxv 34, 32(3)
3368 %9 = INSERT_SUBREG %10, killed %8, 1
3370 %12 = LXVX %0, killed %11 :: (load 16 from %ir.arrayidx3, !tbaa !3)
3371 ; CHECK: LXV -16, %0
3372 ; CHECK-LATE: lxv 35, -16(3)
3373 %13 = VADDUWM killed %12, killed %7
3375 BLR8 implicit %lr8, implicit %rm, implicit %v2
3380 # CHECK-ALL: name: testOR
3382 exposesReturnsTwice: false
3384 regBankSelected: false
3386 tracksRegLiveness: true
3388 - { id: 0, class: gprc, preferred-register: '' }
3389 - { id: 1, class: g8rc, preferred-register: '' }
3390 - { id: 2, class: gprc, preferred-register: '' }
3391 - { id: 3, class: gprc, preferred-register: '' }
3393 - { reg: '%x3', virtual-reg: '%0' }
3394 - { reg: '%x4', virtual-reg: '%1' }
3396 isFrameAddressTaken: false
3397 isReturnAddressTaken: false
3399 hasPatchPoint: false
3406 maxCallFrameSize: 4294967295
3407 hasOpaqueSPAdjustment: false
3409 hasMustTailInVarArgFunc: false
3424 ; CHECK-LATE: ori 3, 4, 99
3425 %x3 = EXTSW_32_64 %2
3426 BLR8 implicit %lr8, implicit %rm, implicit %x3
3431 # CHECK-ALL: name: testOR8
3433 exposesReturnsTwice: false
3435 regBankSelected: false
3437 tracksRegLiveness: true
3439 - { id: 0, class: g8rc, preferred-register: '' }
3440 - { id: 1, class: g8rc, preferred-register: '' }
3441 - { id: 2, class: g8rc, preferred-register: '' }
3443 - { reg: '%x3', virtual-reg: '%0' }
3444 - { reg: '%x4', virtual-reg: '%1' }
3446 isFrameAddressTaken: false
3447 isReturnAddressTaken: false
3449 hasPatchPoint: false
3456 maxCallFrameSize: 4294967295
3457 hasOpaqueSPAdjustment: false
3459 hasMustTailInVarArgFunc: false
3472 ; CHECK: ORI8 %1, 777
3473 ; CHECK-LATE: ori 3, 4, 777
3475 BLR8 implicit %lr8, implicit %rm, implicit %x3
3480 # CHECK-ALL: name: testORI
3482 exposesReturnsTwice: false
3484 regBankSelected: false
3486 tracksRegLiveness: true
3488 - { id: 0, class: gprc, preferred-register: '' }
3489 - { id: 1, class: gprc, preferred-register: '' }
3491 - { reg: '%x3', virtual-reg: '%0' }
3493 isFrameAddressTaken: false
3494 isReturnAddressTaken: false
3496 hasPatchPoint: false
3503 maxCallFrameSize: 4294967295
3504 hasOpaqueSPAdjustment: false
3506 hasMustTailInVarArgFunc: false
3519 ; CHECK-LATE: li 3, 857
3520 %x3 = EXTSW_32_64 %1
3521 BLR8 implicit %lr8, implicit %rm, implicit %x3
3526 # CHECK-ALL: name: testORI8
3528 exposesReturnsTwice: false
3530 regBankSelected: false
3532 tracksRegLiveness: true
3534 - { id: 0, class: g8rc, preferred-register: '' }
3535 - { id: 1, class: g8rc, preferred-register: '' }
3537 - { reg: '%x3', virtual-reg: '%0' }
3539 isFrameAddressTaken: false
3540 isReturnAddressTaken: false
3542 hasPatchPoint: false
3549 maxCallFrameSize: 4294967295
3550 hasOpaqueSPAdjustment: false
3552 hasMustTailInVarArgFunc: false
3565 ; CHECK-LATE: li 3, 8819
3567 BLR8 implicit %lr8, implicit %rm, implicit %x3
3572 # CHECK-ALL: name: testRLDCL
3574 exposesReturnsTwice: false
3576 regBankSelected: false
3578 tracksRegLiveness: true
3580 - { id: 0, class: g8rc, preferred-register: '' }
3581 - { id: 1, class: g8rc, preferred-register: '' }
3582 - { id: 2, class: gprc, preferred-register: '' }
3583 - { id: 3, class: gprc, preferred-register: '' }
3584 - { id: 4, class: g8rc, preferred-register: '' }
3586 - { reg: '%x3', virtual-reg: '%0' }
3587 - { reg: '%x4', virtual-reg: '%1' }
3589 isFrameAddressTaken: false
3590 isReturnAddressTaken: false
3592 hasPatchPoint: false
3599 maxCallFrameSize: 4294967295
3600 hasOpaqueSPAdjustment: false
3602 hasMustTailInVarArgFunc: false
3616 %4 = RLDCL %0, killed %3, 0
3617 ; CHECK: RLDICL %0, 14, 0
3618 ; CHECK-LATE: rotldi 3, 3, 14
3620 BLR8 implicit %lr8, implicit %rm, implicit %x3
3625 # CHECK-ALL: name: testRLDCLo
3627 exposesReturnsTwice: false
3629 regBankSelected: false
3631 tracksRegLiveness: true
3633 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3634 - { id: 1, class: g8rc, preferred-register: '' }
3635 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3636 - { id: 3, class: gprc, preferred-register: '' }
3637 - { id: 4, class: g8rc, preferred-register: '' }
3638 - { id: 5, class: crrc, preferred-register: '' }
3639 - { id: 6, class: g8rc, preferred-register: '' }
3641 - { reg: '%x3', virtual-reg: '%0' }
3642 - { reg: '%x4', virtual-reg: '%1' }
3644 isFrameAddressTaken: false
3645 isReturnAddressTaken: false
3647 hasPatchPoint: false
3654 maxCallFrameSize: 4294967295
3655 hasOpaqueSPAdjustment: false
3657 hasMustTailInVarArgFunc: false
3669 %2 = RLDICL %1, 0, 58
3671 %4 = RLDCLo %0, killed %3, 0, implicit-def %cr0
3672 ; CHECK: RLDICLo %0, 37, 0, implicit-def %cr0
3673 ; CHECK-LATE: rldicl. 5, 3, 37, 0
3674 %5 = COPY killed %cr0
3675 %6 = ISEL8 %2, %0, %5.sub_eq
3677 BLR8 implicit %lr8, implicit %rm, implicit %x3
3682 # CHECK-ALL: name: testRLDCR
3684 exposesReturnsTwice: false
3686 regBankSelected: false
3688 tracksRegLiveness: true
3690 - { id: 0, class: g8rc, preferred-register: '' }
3691 - { id: 1, class: g8rc, preferred-register: '' }
3692 - { id: 2, class: gprc, preferred-register: '' }
3693 - { id: 3, class: gprc, preferred-register: '' }
3694 - { id: 4, class: g8rc, preferred-register: '' }
3696 - { reg: '%x3', virtual-reg: '%0' }
3697 - { reg: '%x4', virtual-reg: '%1' }
3699 isFrameAddressTaken: false
3700 isReturnAddressTaken: false
3702 hasPatchPoint: false
3709 maxCallFrameSize: 4294967295
3710 hasOpaqueSPAdjustment: false
3712 hasMustTailInVarArgFunc: false
3726 %4 = RLDCR %0, killed %3, 0
3727 ; CHECK: RLDICR %0, 0, 0
3728 ; CHECK-LATE: rldicr 3, 3, 0, 0
3730 BLR8 implicit %lr8, implicit %rm, implicit %x3
3735 # CHECK-ALL: name: testRLDCRo
3737 exposesReturnsTwice: false
3739 regBankSelected: false
3741 tracksRegLiveness: true
3743 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3744 - { id: 1, class: g8rc, preferred-register: '' }
3745 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3746 - { id: 3, class: gprc, preferred-register: '' }
3747 - { id: 4, class: g8rc, preferred-register: '' }
3748 - { id: 5, class: crrc, preferred-register: '' }
3749 - { id: 6, class: g8rc, preferred-register: '' }
3751 - { reg: '%x3', virtual-reg: '%0' }
3752 - { reg: '%x4', virtual-reg: '%1' }
3754 isFrameAddressTaken: false
3755 isReturnAddressTaken: false
3757 hasPatchPoint: false
3764 maxCallFrameSize: 4294967295
3765 hasOpaqueSPAdjustment: false
3767 hasMustTailInVarArgFunc: false
3779 %2 = RLDICL %1, 0, 58
3781 %4 = RLDCRo %0, killed %3, 0, implicit-def %cr0
3782 ; CHECK: RLDICRo %0, 18, 0, implicit-def %cr0
3783 ; CHECK-LATE: rldicr. 5, 3, 18, 0
3784 %5 = COPY killed %cr0
3785 %6 = ISEL8 %2, %0, %5.sub_eq
3787 BLR8 implicit %lr8, implicit %rm, implicit %x3
3792 # CHECK-ALL: name: testRLDICL
3794 exposesReturnsTwice: false
3796 regBankSelected: false
3798 tracksRegLiveness: true
3800 - { id: 0, class: g8rc, preferred-register: '' }
3801 - { id: 1, class: g8rc, preferred-register: '' }
3803 - { reg: '%x3', virtual-reg: '%0' }
3805 isFrameAddressTaken: false
3806 isReturnAddressTaken: false
3808 hasPatchPoint: false
3815 maxCallFrameSize: 4294967295
3816 hasOpaqueSPAdjustment: false
3818 hasMustTailInVarArgFunc: false
3829 %1 = RLDICL %0, 53, 49
3831 ; CHECK-LATE: li 3, 32767
3833 BLR8 implicit %lr8, implicit %rm, implicit %x3
3838 # CHECK-ALL: name: testRLDICLo
3840 exposesReturnsTwice: false
3842 regBankSelected: false
3844 tracksRegLiveness: true
3846 - { id: 0, class: g8rc, preferred-register: '' }
3847 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3848 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3849 - { id: 3, class: crrc, preferred-register: '' }
3850 - { id: 4, class: g8rc, preferred-register: '' }
3852 - { reg: '%x3', virtual-reg: '%0' }
3853 - { reg: '%x4', virtual-reg: '%1' }
3855 isFrameAddressTaken: false
3856 isReturnAddressTaken: false
3858 hasPatchPoint: false
3865 maxCallFrameSize: 4294967295
3866 hasOpaqueSPAdjustment: false
3868 hasMustTailInVarArgFunc: false
3880 %2 = RLDICLo %0, 53, 48, implicit-def %cr0
3881 ; CHECK: ANDIo8 %0, 65535
3882 ; CHECK-LATE: li 3, -1
3883 ; CHECK-LATE: andi. 3, 3, 65535
3884 %3 = COPY killed %cr0
3885 %4 = ISEL8 %1, %2, %3.sub_eq
3887 BLR8 implicit %lr8, implicit %rm, implicit %x3
3892 # CHECK-ALL: name: testRLWINM
3894 exposesReturnsTwice: false
3896 regBankSelected: false
3898 tracksRegLiveness: true
3900 - { id: 0, class: g8rc, preferred-register: '' }
3901 - { id: 1, class: gprc, preferred-register: '' }
3902 - { id: 2, class: gprc, preferred-register: '' }
3903 - { id: 3, class: g8rc, preferred-register: '' }
3904 - { id: 4, class: gprc, preferred-register: '' }
3906 - { reg: '%x3', virtual-reg: '%0' }
3908 isFrameAddressTaken: false
3909 isReturnAddressTaken: false
3911 hasPatchPoint: false
3918 maxCallFrameSize: 4294967295
3919 hasOpaqueSPAdjustment: false
3921 hasMustTailInVarArgFunc: false
3935 %4 = RLWINM killed %2, 4, 20, 27
3937 ; CHECK-LATE: li 3, 272
3938 %x3 = EXTSW_32_64 %4
3939 BLR8 implicit %lr8, implicit %rm, implicit %x3
3944 # CHECK-ALL: name: testRLWINM8
3946 exposesReturnsTwice: false
3948 regBankSelected: false
3950 tracksRegLiveness: true
3952 - { id: 0, class: g8rc, preferred-register: '' }
3953 - { id: 1, class: g8rc, preferred-register: '' }
3955 - { reg: '%x3', virtual-reg: '%0' }
3957 isFrameAddressTaken: false
3958 isReturnAddressTaken: false
3960 hasPatchPoint: false
3967 maxCallFrameSize: 4294967295
3968 hasOpaqueSPAdjustment: false
3970 hasMustTailInVarArgFunc: false
3981 %1 = RLWINM8 %0, 4, 20, 27
3983 ; CHECK-LATE: li 3, 3744
3985 BLR8 implicit %lr8, implicit %rm, implicit %x3
3990 # CHECK-ALL: name: testRLWINMo
3992 exposesReturnsTwice: false
3994 regBankSelected: false
3996 tracksRegLiveness: true
3998 - { id: 0, class: g8rc, preferred-register: '' }
3999 - { id: 1, class: g8rc, preferred-register: '' }
4000 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4001 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4002 - { id: 4, class: gprc, preferred-register: '' }
4003 - { id: 5, class: crrc, preferred-register: '' }
4004 - { id: 6, class: gprc, preferred-register: '' }
4005 - { id: 7, class: g8rc, preferred-register: '' }
4006 - { id: 8, class: g8rc, preferred-register: '' }
4007 - { id: 9, class: g8rc, preferred-register: '' }
4009 - { reg: '%x3', virtual-reg: '%0' }
4010 - { reg: '%x4', virtual-reg: '%1' }
4012 isFrameAddressTaken: false
4013 isReturnAddressTaken: false
4015 hasPatchPoint: false
4022 maxCallFrameSize: 4294967295
4023 hasOpaqueSPAdjustment: false
4025 hasMustTailInVarArgFunc: false
4039 %4 = RLWINMo %3, 0, 24, 31, implicit-def %cr0
4040 ; CHECK: ANDIo %3, 234
4041 ; CHECK-LATE: li 3, -22
4042 ; CHECK-LATE: andi. 5, 3, 234
4043 %5 = COPY killed %cr0
4044 %6 = ISEL %2, %3, %5.sub_eq
4046 %7 = INSERT_SUBREG %8, killed %6, 1
4047 %9 = RLDICL killed %7, 0, 32
4049 BLR8 implicit %lr8, implicit %rm, implicit %x3
4054 # CHECK-ALL: name: testRLWINM8o
4056 exposesReturnsTwice: false
4058 regBankSelected: false
4060 tracksRegLiveness: true
4062 - { id: 0, class: g8rc, preferred-register: '' }
4063 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4064 - { id: 2, class: g8rc, preferred-register: '' }
4065 - { id: 3, class: g8rc, preferred-register: '' }
4066 - { id: 4, class: g8rc, preferred-register: '' }
4067 - { id: 5, class: g8rc, preferred-register: '' }
4068 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4069 - { id: 7, class: crrc, preferred-register: '' }
4070 - { id: 8, class: g8rc, preferred-register: '' }
4072 - { reg: '%x3', virtual-reg: '%0' }
4073 - { reg: '%x4', virtual-reg: '%1' }
4075 isFrameAddressTaken: false
4076 isReturnAddressTaken: false
4078 hasPatchPoint: false
4085 maxCallFrameSize: 4294967295
4086 hasOpaqueSPAdjustment: false
4088 hasMustTailInVarArgFunc: false
4101 %3 = RLWINM8o %2, 4, 20, 27, implicit-def %cr0
4102 ; CHECK: ANDIo8 %2, 3808
4103 ; CHECK-LATE: li 3, -18
4104 ; CHECK-LATE: andi. 3, 3, 3808
4105 %7 = COPY killed %cr0
4106 %6 = RLDICL killed %3, 0, 32
4107 %8 = ISEL8 %1, %6, %7.sub_eq
4109 BLR8 implicit %lr8, implicit %rm, implicit %x3
4114 # CHECK-ALL: name: testSLD
4116 exposesReturnsTwice: false
4118 regBankSelected: false
4120 tracksRegLiveness: true
4122 - { id: 0, class: g8rc, preferred-register: '' }
4123 - { id: 1, class: g8rc, preferred-register: '' }
4124 - { id: 2, class: gprc, preferred-register: '' }
4125 - { id: 3, class: g8rc, preferred-register: '' }
4127 - { reg: '%x3', virtual-reg: '%0' }
4128 - { reg: '%x4', virtual-reg: '%1' }
4130 isFrameAddressTaken: false
4131 isReturnAddressTaken: false
4133 hasPatchPoint: false
4140 maxCallFrameSize: 4294967295
4141 hasOpaqueSPAdjustment: false
4143 hasMustTailInVarArgFunc: false
4156 %3 = SLD %0, killed %2
4157 ; CHECK: RLDICR %0, 13, 50
4158 ; CHECK-LATE: sldi 3, 3, 13
4160 BLR8 implicit %lr8, implicit %rm, implicit %x3
4165 # CHECK-ALL: name: testSLDo
4167 exposesReturnsTwice: false
4169 regBankSelected: false
4171 tracksRegLiveness: true
4173 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4174 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4175 - { id: 2, class: gprc, preferred-register: '' }
4176 - { id: 3, class: g8rc, preferred-register: '' }
4177 - { id: 4, class: crrc, preferred-register: '' }
4178 - { id: 5, class: g8rc, preferred-register: '' }
4180 - { reg: '%x3', virtual-reg: '%0' }
4181 - { reg: '%x4', virtual-reg: '%1' }
4183 isFrameAddressTaken: false
4184 isReturnAddressTaken: false
4186 hasPatchPoint: false
4193 maxCallFrameSize: 4294967295
4194 hasOpaqueSPAdjustment: false
4196 hasMustTailInVarArgFunc: false
4209 %3 = SLDo %0, killed %2, implicit-def %cr0
4210 ; CHECK: RLDICRo %0, 17, 46, implicit-def %cr0
4211 ; CHECK-LATE: rldicr. 5, 3, 17, 46
4212 %4 = COPY killed %cr0
4213 %5 = ISEL8 %1, %0, %4.sub_eq
4215 BLR8 implicit %lr8, implicit %rm, implicit %x3
4220 # CHECK-ALL: name: testSRD
4222 exposesReturnsTwice: false
4224 regBankSelected: false
4226 tracksRegLiveness: true
4228 - { id: 0, class: g8rc, preferred-register: '' }
4229 - { id: 1, class: g8rc, preferred-register: '' }
4230 - { id: 2, class: gprc, preferred-register: '' }
4231 - { id: 3, class: g8rc, preferred-register: '' }
4233 - { reg: '%x3', virtual-reg: '%0' }
4234 - { reg: '%x4', virtual-reg: '%1' }
4236 isFrameAddressTaken: false
4237 isReturnAddressTaken: false
4239 hasPatchPoint: false
4246 maxCallFrameSize: 4294967295
4247 hasOpaqueSPAdjustment: false
4249 hasMustTailInVarArgFunc: false
4262 %3 = SRD %0, killed %2
4263 ; CHECK: RLDICL %0, 60, 4
4264 ; CHECK-LATE: rldicl 3, 3, 60, 4
4266 BLR8 implicit %lr8, implicit %rm, implicit %x3
4271 # CHECK-ALL: name: testSRDo
4273 exposesReturnsTwice: false
4275 regBankSelected: false
4277 tracksRegLiveness: true
4279 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4280 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4281 - { id: 2, class: gprc, preferred-register: '' }
4282 - { id: 3, class: g8rc, preferred-register: '' }
4283 - { id: 4, class: crrc, preferred-register: '' }
4284 - { id: 5, class: g8rc, preferred-register: '' }
4286 - { reg: '%x3', virtual-reg: '%0' }
4287 - { reg: '%x4', virtual-reg: '%1' }
4289 isFrameAddressTaken: false
4290 isReturnAddressTaken: false
4292 hasPatchPoint: false
4299 maxCallFrameSize: 4294967295
4300 hasOpaqueSPAdjustment: false
4302 hasMustTailInVarArgFunc: false
4315 %3 = SRDo %0, killed %2, implicit-def %cr0
4316 ; CHECK: RLDICLo %0, 47, 17, implicit-def %cr0
4317 ; CHECK-LATE: rldicl. 5, 3, 47, 17
4318 %4 = COPY killed %cr0
4319 %5 = ISEL8 %1, %0, %4.sub_eq
4321 BLR8 implicit %lr8, implicit %rm, implicit %x3
4326 # CHECK-ALL: name: testSLW
4328 exposesReturnsTwice: false
4330 regBankSelected: false
4332 tracksRegLiveness: true
4334 - { id: 0, class: g8rc, preferred-register: '' }
4335 - { id: 1, class: g8rc, preferred-register: '' }
4336 - { id: 2, class: gprc, preferred-register: '' }
4337 - { id: 3, class: g8rc, preferred-register: '' }
4338 - { id: 4, class: g8rc, preferred-register: '' }
4339 - { id: 5, class: gprc, preferred-register: '' }
4340 - { id: 6, class: g8rc, preferred-register: '' }
4341 - { id: 7, class: g8rc, preferred-register: '' }
4342 - { id: 8, class: gprc, preferred-register: '' }
4344 - { reg: '%x3', virtual-reg: '%0' }
4345 - { reg: '%x4', virtual-reg: '%1' }
4347 isFrameAddressTaken: false
4348 isReturnAddressTaken: false
4350 hasPatchPoint: false
4357 maxCallFrameSize: 4294967295
4358 hasOpaqueSPAdjustment: false
4360 hasMustTailInVarArgFunc: false
4374 %8 = SLW killed %2, killed %5
4375 ; CHECK: RLWINM killed %2, 21, 0, 10
4376 ; CHECK-LATE: slwi 3, 4, 21
4377 %x3 = EXTSW_32_64 %8
4378 BLR8 implicit %lr8, implicit %rm, implicit %x3
4383 # CHECK-ALL: name: testSLWo
4385 exposesReturnsTwice: false
4387 regBankSelected: false
4389 tracksRegLiveness: true
4391 - { id: 0, class: g8rc, preferred-register: '' }
4392 - { id: 1, class: g8rc, preferred-register: '' }
4393 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4394 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4395 - { id: 4, class: gprc, preferred-register: '' }
4396 - { id: 5, class: crrc, preferred-register: '' }
4397 - { id: 6, class: gprc, preferred-register: '' }
4398 - { id: 7, class: g8rc, preferred-register: '' }
4399 - { id: 8, class: g8rc, preferred-register: '' }
4400 - { id: 9, class: g8rc, preferred-register: '' }
4402 - { reg: '%x3', virtual-reg: '%0' }
4403 - { reg: '%x4', virtual-reg: '%1' }
4405 isFrameAddressTaken: false
4406 isReturnAddressTaken: false
4408 hasPatchPoint: false
4415 maxCallFrameSize: 4294967295
4416 hasOpaqueSPAdjustment: false
4418 hasMustTailInVarArgFunc: false
4432 %4 = SLWo %3, %2, implicit-def %cr0
4433 ; CHECK: RLWINMo %3, 11, 0, 20, implicit-def %cr0
4434 ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20
4435 %5 = COPY killed %cr0
4436 %6 = ISEL %2, %3, %5.sub_eq
4438 %7 = INSERT_SUBREG %8, killed %6, 1
4439 %9 = RLDICL killed %7, 0, 32
4441 BLR8 implicit %lr8, implicit %rm, implicit %x3
4446 # CHECK-ALL: name: testSRW
4448 exposesReturnsTwice: false
4450 regBankSelected: false
4452 tracksRegLiveness: true
4454 - { id: 0, class: g8rc, preferred-register: '' }
4455 - { id: 1, class: g8rc, preferred-register: '' }
4456 - { id: 2, class: gprc, preferred-register: '' }
4457 - { id: 3, class: g8rc, preferred-register: '' }
4458 - { id: 4, class: g8rc, preferred-register: '' }
4459 - { id: 5, class: gprc, preferred-register: '' }
4460 - { id: 6, class: g8rc, preferred-register: '' }
4461 - { id: 7, class: g8rc, preferred-register: '' }
4462 - { id: 8, class: gprc, preferred-register: '' }
4464 - { reg: '%x3', virtual-reg: '%0' }
4465 - { reg: '%x4', virtual-reg: '%1' }
4467 isFrameAddressTaken: false
4468 isReturnAddressTaken: false
4470 hasPatchPoint: false
4477 maxCallFrameSize: 4294967295
4478 hasOpaqueSPAdjustment: false
4480 hasMustTailInVarArgFunc: false
4494 %8 = SRW killed %5, killed %2
4495 ; CHECK: RLWINM killed %5, 24, 8, 31
4496 ; CHECK-LATE: srwi 3, 3, 8
4497 %x3 = EXTSW_32_64 %8
4498 BLR8 implicit %lr8, implicit %rm, implicit %x3
4503 # CHECK-ALL: name: testSRWo
4505 exposesReturnsTwice: false
4507 regBankSelected: false
4509 tracksRegLiveness: true
4511 - { id: 0, class: g8rc, preferred-register: '' }
4512 - { id: 1, class: g8rc, preferred-register: '' }
4513 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4514 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4515 - { id: 4, class: gprc, preferred-register: '' }
4516 - { id: 5, class: crrc, preferred-register: '' }
4517 - { id: 6, class: gprc, preferred-register: '' }
4518 - { id: 7, class: g8rc, preferred-register: '' }
4519 - { id: 8, class: g8rc, preferred-register: '' }
4520 - { id: 9, class: g8rc, preferred-register: '' }
4522 - { reg: '%x3', virtual-reg: '%0' }
4523 - { reg: '%x4', virtual-reg: '%1' }
4525 isFrameAddressTaken: false
4526 isReturnAddressTaken: false
4528 hasPatchPoint: false
4535 maxCallFrameSize: 4294967295
4536 hasOpaqueSPAdjustment: false
4538 hasMustTailInVarArgFunc: false
4552 %4 = SRWo %3, %2, implicit-def %cr0
4553 ; CHECK: RLWINMo %3, 25, 7, 31
4554 ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31
4555 %5 = COPY killed %cr0
4556 %6 = ISEL %2, %3, %5.sub_eq
4558 %7 = INSERT_SUBREG %8, killed %6, 1
4559 %9 = RLDICL killed %7, 0, 32
4561 BLR8 implicit %lr8, implicit %rm, implicit %x3
4566 # CHECK-ALL: name: testSRAW
4568 exposesReturnsTwice: false
4570 regBankSelected: false
4572 tracksRegLiveness: true
4574 - { id: 0, class: g8rc, preferred-register: '' }
4575 - { id: 1, class: g8rc, preferred-register: '' }
4576 - { id: 2, class: gprc, preferred-register: '' }
4577 - { id: 3, class: gprc, preferred-register: '' }
4578 - { id: 4, class: gprc, preferred-register: '' }
4579 - { id: 5, class: g8rc, preferred-register: '' }
4581 - { reg: '%x3', virtual-reg: '%0' }
4582 - { reg: '%x4', virtual-reg: '%1' }
4584 isFrameAddressTaken: false
4585 isReturnAddressTaken: false
4587 hasPatchPoint: false
4594 maxCallFrameSize: 4294967295
4595 hasOpaqueSPAdjustment: false
4597 hasMustTailInVarArgFunc: false
4611 %4 = SRAW killed %3, killed %2, implicit-def dead %carry
4612 ; CHECK: SRAWI killed %3, 15, implicit-def dead %carry
4613 ; CHECK-LATE: srawi 3, 3, 15
4614 %5 = EXTSW_32_64 killed %4
4616 BLR8 implicit %lr8, implicit %rm, implicit %x3
4621 # CHECK-ALL: name: testSRAWo
4623 exposesReturnsTwice: false
4625 regBankSelected: false
4627 tracksRegLiveness: true
4629 - { id: 0, class: g8rc, preferred-register: '' }
4630 - { id: 1, class: g8rc, preferred-register: '' }
4631 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4632 - { id: 3, class: gprc, preferred-register: '' }
4633 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4634 - { id: 5, class: crrc, preferred-register: '' }
4635 - { id: 6, class: gprc, preferred-register: '' }
4636 - { id: 7, class: g8rc, preferred-register: '' }
4638 - { reg: '%x3', virtual-reg: '%0' }
4639 - { reg: '%x4', virtual-reg: '%1' }
4641 isFrameAddressTaken: false
4642 isReturnAddressTaken: false
4644 hasPatchPoint: false
4651 maxCallFrameSize: 4294967295
4652 hasOpaqueSPAdjustment: false
4654 hasMustTailInVarArgFunc: false
4668 %4 = SRAWo killed %3, %2, implicit-def dead %carry, implicit-def %cr0
4669 ; CHECK: SRAWIo killed %3, 8, implicit-def dead %carry, implicit-def %cr0
4670 ; CHECK-LATE: srawi. 3, 3, 8
4671 %5 = COPY killed %cr0
4672 %6 = ISEL %2, %4, %5.sub_eq
4673 %7 = EXTSW_32_64 killed %6
4675 BLR8 implicit %lr8, implicit %rm, implicit %x3
4680 # CHECK-ALL: name: testSRAD
4682 exposesReturnsTwice: false
4684 regBankSelected: false
4686 tracksRegLiveness: true
4688 - { id: 0, class: g8rc, preferred-register: '' }
4689 - { id: 1, class: g8rc, preferred-register: '' }
4690 - { id: 2, class: gprc, preferred-register: '' }
4691 - { id: 3, class: g8rc, preferred-register: '' }
4693 - { reg: '%x3', virtual-reg: '%0' }
4694 - { reg: '%x4', virtual-reg: '%1' }
4696 isFrameAddressTaken: false
4697 isReturnAddressTaken: false
4699 hasPatchPoint: false
4706 maxCallFrameSize: 4294967295
4707 hasOpaqueSPAdjustment: false
4709 hasMustTailInVarArgFunc: false
4722 %3 = SRAD %0, killed %2, implicit-def dead %carry
4723 ; CHECK: SRADI %0, 44, implicit-def dead %carry
4724 ; CHECK-LATE: sradi 3, 3, 44
4726 BLR8 implicit %lr8, implicit %rm, implicit %x3
4731 # CHECK-ALL: name: testSRADo
4733 exposesReturnsTwice: false
4735 regBankSelected: false
4737 tracksRegLiveness: true
4739 - { id: 0, class: g8rc, preferred-register: '' }
4740 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4741 - { id: 2, class: gprc, preferred-register: '' }
4742 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4743 - { id: 4, class: crrc, preferred-register: '' }
4744 - { id: 5, class: g8rc, preferred-register: '' }
4746 - { reg: '%x3', virtual-reg: '%0' }
4747 - { reg: '%x4', virtual-reg: '%1' }
4749 isFrameAddressTaken: false
4750 isReturnAddressTaken: false
4752 hasPatchPoint: false
4759 maxCallFrameSize: 4294967295
4760 hasOpaqueSPAdjustment: false
4762 hasMustTailInVarArgFunc: false
4775 %3 = SRADo %0, killed %2, implicit-def dead %carry, implicit-def %cr0
4776 ; CHECK: SRADIo %0, 61, implicit-def dead %carry, implicit-def %cr0
4777 ; CHECK-LATE: sradi. 3, 3, 61
4778 %4 = COPY killed %cr0
4779 %5 = ISEL8 %1, %3, %4.sub_eq
4781 BLR8 implicit %lr8, implicit %rm, implicit %x3
4786 # CHECK-ALL: name: testSTBUX
4788 exposesReturnsTwice: false
4790 regBankSelected: false
4792 tracksRegLiveness: true
4794 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4795 - { id: 1, class: g8rc, preferred-register: '' }
4796 - { id: 2, class: g8rc, preferred-register: '' }
4797 - { id: 3, class: gprc, preferred-register: '' }
4798 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4799 - { id: 5, class: gprc, preferred-register: '' }
4800 - { id: 6, class: g8rc, preferred-register: '' }
4801 - { id: 7, class: g8rc, preferred-register: '' }
4802 - { id: 8, class: g8rc, preferred-register: '' }
4803 - { id: 9, class: gprc, preferred-register: '' }
4804 - { id: 10, class: g8rc, preferred-register: '' }
4805 - { id: 11, class: g8rc, preferred-register: '' }
4806 - { id: 12, class: g8rc, preferred-register: '' }
4807 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4808 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4810 - { reg: '%x3', virtual-reg: '%0' }
4811 - { reg: '%x4', virtual-reg: '%1' }
4812 - { reg: '%x5', virtual-reg: '%2' }
4814 isFrameAddressTaken: false
4815 isReturnAddressTaken: false
4817 hasPatchPoint: false
4824 maxCallFrameSize: 4294967295
4825 hasOpaqueSPAdjustment: false
4827 hasMustTailInVarArgFunc: false
4835 liveins: %x3, %x4, %x5
4844 %6 = INSERT_SUBREG %7, killed %5, 1
4846 %13 = STBUX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
4847 ; CHECK: STBU %3, 966, %0
4848 ; CHECK-LATE: 4, 966(5)
4851 %10 = INSERT_SUBREG %11, killed %9, 1
4853 %14 = STBUX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
4854 ; CHECK: STBU %3, 777, %0
4855 ; CHECK-LATE: 4, 777(3)
4856 BLR8 implicit %lr8, implicit %rm
4861 # CHECK-ALL: name: testSTBX
4863 exposesReturnsTwice: false
4865 regBankSelected: false
4867 tracksRegLiveness: true
4869 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4870 - { id: 1, class: g8rc, preferred-register: '' }
4871 - { id: 2, class: g8rc, preferred-register: '' }
4872 - { id: 3, class: gprc, preferred-register: '' }
4873 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4874 - { id: 5, class: gprc, preferred-register: '' }
4875 - { id: 6, class: g8rc, preferred-register: '' }
4876 - { id: 7, class: g8rc, preferred-register: '' }
4877 - { id: 8, class: g8rc, preferred-register: '' }
4878 - { id: 9, class: gprc, preferred-register: '' }
4879 - { id: 10, class: g8rc, preferred-register: '' }
4880 - { id: 11, class: g8rc, preferred-register: '' }
4881 - { id: 12, class: g8rc, preferred-register: '' }
4883 - { reg: '%x3', virtual-reg: '%0' }
4884 - { reg: '%x4', virtual-reg: '%1' }
4885 - { reg: '%x5', virtual-reg: '%2' }
4887 isFrameAddressTaken: false
4888 isReturnAddressTaken: false
4890 hasPatchPoint: false
4897 maxCallFrameSize: 4294967295
4898 hasOpaqueSPAdjustment: false
4900 hasMustTailInVarArgFunc: false
4908 liveins: %x3, %x4, %x5
4917 %6 = INSERT_SUBREG %7, killed %5, 1
4918 %8 = RLDICL killed %6, 0, 32
4919 STBX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
4920 ; CHECK: STB %3, 975, killed %8
4921 ; CHECK-LATE: stb 4, 975(6)
4924 %10 = INSERT_SUBREG %11, killed %9, 1
4925 %12 = RLDICL killed %10, 0, 32
4926 STBX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
4927 ; CHECK: STB %3, 975, killed %12
4928 ; CHECK-LATE: stb 4, 975(5)
4929 BLR8 implicit %lr8, implicit %rm
4934 # CHECK-ALL: name: testSTHUX
4936 exposesReturnsTwice: false
4938 regBankSelected: false
4940 tracksRegLiveness: true
4942 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4943 - { id: 1, class: g8rc, preferred-register: '' }
4944 - { id: 2, class: g8rc, preferred-register: '' }
4945 - { id: 3, class: gprc, preferred-register: '' }
4946 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4947 - { id: 5, class: gprc, preferred-register: '' }
4948 - { id: 6, class: g8rc, preferred-register: '' }
4949 - { id: 7, class: g8rc, preferred-register: '' }
4950 - { id: 8, class: g8rc, preferred-register: '' }
4951 - { id: 9, class: gprc, preferred-register: '' }
4952 - { id: 10, class: g8rc, preferred-register: '' }
4953 - { id: 11, class: g8rc, preferred-register: '' }
4954 - { id: 12, class: g8rc, preferred-register: '' }
4955 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4956 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4958 - { reg: '%x3', virtual-reg: '%0' }
4959 - { reg: '%x4', virtual-reg: '%1' }
4960 - { reg: '%x5', virtual-reg: '%2' }
4962 isFrameAddressTaken: false
4963 isReturnAddressTaken: false
4965 hasPatchPoint: false
4972 maxCallFrameSize: 4294967295
4973 hasOpaqueSPAdjustment: false
4975 hasMustTailInVarArgFunc: false
4983 liveins: %x3, %x4, %x5
4992 %6 = INSERT_SUBREG %7, killed %5, 1
4994 %13 = STHUX %3, %0, killed %8 :: (store 2 into %ir.arrayidx, !tbaa !6)
4995 ; CHECK: STHU %3, 32000, %0
4996 ; CHECK-LATE: sthu 4, 32000(5)
4999 %10 = INSERT_SUBREG %11, killed %9, 1
5001 %14 = STHUX %3, %0, killed %12 :: (store 2 into %ir.arrayidx3, !tbaa !6)
5002 ; CHECK: STHU %3, -761, %0
5003 ; CHECK-LATE: sthu 4, -761(3)
5004 BLR8 implicit %lr8, implicit %rm
5009 # CHECK-ALL: name: testSTHX
5011 exposesReturnsTwice: false
5013 regBankSelected: false
5015 tracksRegLiveness: true
5017 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5018 - { id: 1, class: g8rc, preferred-register: '' }
5019 - { id: 2, class: g8rc, preferred-register: '' }
5020 - { id: 3, class: gprc, preferred-register: '' }
5021 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5022 - { id: 5, class: gprc, preferred-register: '' }
5023 - { id: 6, class: g8rc, preferred-register: '' }
5024 - { id: 7, class: g8rc, preferred-register: '' }
5025 - { id: 8, class: g8rc, preferred-register: '' }
5026 - { id: 9, class: gprc, preferred-register: '' }
5027 - { id: 10, class: g8rc, preferred-register: '' }
5028 - { id: 11, class: g8rc, preferred-register: '' }
5029 - { id: 12, class: g8rc, preferred-register: '' }
5031 - { reg: '%x3', virtual-reg: '%0' }
5032 - { reg: '%x4', virtual-reg: '%1' }
5033 - { reg: '%x5', virtual-reg: '%2' }
5035 isFrameAddressTaken: false
5036 isReturnAddressTaken: false
5038 hasPatchPoint: false
5045 maxCallFrameSize: 4294967295
5046 hasOpaqueSPAdjustment: false
5048 hasMustTailInVarArgFunc: false
5056 liveins: %x3, %x4, %x5
5065 %6 = INSERT_SUBREG %7, killed %5, 1
5067 STHX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
5068 ; CHECK: STH %3, 900, %0
5069 ; CHECK-LATE: sth 4, 900(3)
5072 %10 = INSERT_SUBREG %11, killed %9, 1
5074 STHX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
5075 ; CHECK: STH %3, -900, %0
5076 ; CHECK-LATE: sth 4, -900(3)
5077 BLR8 implicit %lr8, implicit %rm
5082 # CHECK-ALL: name: testSTWUX
5084 exposesReturnsTwice: false
5086 regBankSelected: false
5088 tracksRegLiveness: true
5090 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5091 - { id: 1, class: g8rc, preferred-register: '' }
5092 - { id: 2, class: g8rc, preferred-register: '' }
5093 - { id: 3, class: gprc, preferred-register: '' }
5094 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5095 - { id: 5, class: gprc, preferred-register: '' }
5096 - { id: 6, class: g8rc, preferred-register: '' }
5097 - { id: 7, class: g8rc, preferred-register: '' }
5098 - { id: 8, class: g8rc, preferred-register: '' }
5099 - { id: 9, class: gprc, preferred-register: '' }
5100 - { id: 10, class: g8rc, preferred-register: '' }
5101 - { id: 11, class: g8rc, preferred-register: '' }
5102 - { id: 12, class: g8rc, preferred-register: '' }
5103 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5104 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5106 - { reg: '%x3', virtual-reg: '%0' }
5107 - { reg: '%x4', virtual-reg: '%1' }
5108 - { reg: '%x5', virtual-reg: '%2' }
5110 isFrameAddressTaken: false
5111 isReturnAddressTaken: false
5113 hasPatchPoint: false
5120 maxCallFrameSize: 4294967295
5121 hasOpaqueSPAdjustment: false
5123 hasMustTailInVarArgFunc: false
5131 liveins: %x3, %x4, %x5
5140 %6 = INSERT_SUBREG %7, killed %5, 1
5142 %13 = STWUX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5143 ; CHECK: STWU %3, 111, %0
5144 ; CHECK-LATE: stwu 4, 111(5)
5147 %10 = INSERT_SUBREG %11, killed %9, 1
5149 %14 = STWUX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5150 ; CHECK: STWU %3, 0, %0
5151 ; CHECK-LATE: stwu 4, 0(3)
5152 BLR8 implicit %lr8, implicit %rm
5157 # CHECK-ALL: name: testSTWX
5159 exposesReturnsTwice: false
5161 regBankSelected: false
5163 tracksRegLiveness: true
5165 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5166 - { id: 1, class: g8rc, preferred-register: '' }
5167 - { id: 2, class: g8rc, preferred-register: '' }
5168 - { id: 3, class: gprc, preferred-register: '' }
5169 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5170 - { id: 5, class: gprc, preferred-register: '' }
5171 - { id: 6, class: g8rc, preferred-register: '' }
5172 - { id: 7, class: g8rc, preferred-register: '' }
5173 - { id: 8, class: g8rc, preferred-register: '' }
5174 - { id: 9, class: gprc, preferred-register: '' }
5175 - { id: 10, class: g8rc, preferred-register: '' }
5176 - { id: 11, class: g8rc, preferred-register: '' }
5177 - { id: 12, class: g8rc, preferred-register: '' }
5179 - { reg: '%x3', virtual-reg: '%0' }
5180 - { reg: '%x4', virtual-reg: '%1' }
5181 - { reg: '%x5', virtual-reg: '%2' }
5183 isFrameAddressTaken: false
5184 isReturnAddressTaken: false
5186 hasPatchPoint: false
5193 maxCallFrameSize: 4294967295
5194 hasOpaqueSPAdjustment: false
5196 hasMustTailInVarArgFunc: false
5204 liveins: %x3, %x4, %x5
5213 %6 = INSERT_SUBREG %7, killed %5, 1
5215 STWX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5216 ; CHECK: STW %3, 2, %0
5217 ; CHECK-LATE: stw 4, 2(3)
5220 %10 = INSERT_SUBREG %11, killed %9, 1
5222 STWX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5223 ; CHECK: STW %3, 99, %0
5224 ; CHECK-LATE: stw 4, 99(3)
5225 BLR8 implicit %lr8, implicit %rm
5230 # CHECK-ALL: name: testSTDUX
5232 exposesReturnsTwice: false
5234 regBankSelected: false
5236 tracksRegLiveness: true
5238 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5239 - { id: 1, class: g8rc, preferred-register: '' }
5240 - { id: 2, class: g8rc, preferred-register: '' }
5241 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5242 - { id: 4, class: gprc, preferred-register: '' }
5243 - { id: 5, class: g8rc, preferred-register: '' }
5244 - { id: 6, class: g8rc, preferred-register: '' }
5245 - { id: 7, class: g8rc, preferred-register: '' }
5246 - { id: 8, class: gprc, preferred-register: '' }
5247 - { id: 9, class: g8rc, preferred-register: '' }
5248 - { id: 10, class: g8rc, preferred-register: '' }
5249 - { id: 11, class: g8rc, preferred-register: '' }
5250 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5251 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5253 - { reg: '%x3', virtual-reg: '%0' }
5254 - { reg: '%x4', virtual-reg: '%1' }
5255 - { reg: '%x5', virtual-reg: '%2' }
5257 isFrameAddressTaken: false
5258 isReturnAddressTaken: false
5260 hasPatchPoint: false
5267 maxCallFrameSize: 4294967295
5268 hasOpaqueSPAdjustment: false
5270 hasMustTailInVarArgFunc: false
5278 liveins: %x3, %x4, %x5
5286 %5 = INSERT_SUBREG %6, killed %4, 1
5288 %12 = STDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5289 ; CHECK: STDU %1, 444, %0
5290 ; CHECK-LATE: stdu 4, 444(5)
5293 %9 = INSERT_SUBREG %10, killed %8, 1
5295 %13 = STDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5296 ; CHECK: STDU %1, -8, %0
5297 ; CHECK-LATE: stdu 4, -8(3)
5298 BLR8 implicit %lr8, implicit %rm
5303 # CHECK-ALL: name: testSTDX
5305 exposesReturnsTwice: false
5307 regBankSelected: false
5309 tracksRegLiveness: true
5311 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5312 - { id: 1, class: g8rc, preferred-register: '' }
5313 - { id: 2, class: g8rc, preferred-register: '' }
5314 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5315 - { id: 4, class: gprc, preferred-register: '' }
5316 - { id: 5, class: g8rc, preferred-register: '' }
5317 - { id: 6, class: g8rc, preferred-register: '' }
5318 - { id: 7, class: g8rc, preferred-register: '' }
5319 - { id: 8, class: gprc, preferred-register: '' }
5320 - { id: 9, class: g8rc, preferred-register: '' }
5321 - { id: 10, class: g8rc, preferred-register: '' }
5322 - { id: 11, class: g8rc, preferred-register: '' }
5324 - { reg: '%x3', virtual-reg: '%0' }
5325 - { reg: '%x4', virtual-reg: '%1' }
5326 - { reg: '%x5', virtual-reg: '%2' }
5328 isFrameAddressTaken: false
5329 isReturnAddressTaken: false
5331 hasPatchPoint: false
5338 maxCallFrameSize: 4294967295
5339 hasOpaqueSPAdjustment: false
5341 hasMustTailInVarArgFunc: false
5349 liveins: %x3, %x4, %x5
5357 %5 = INSERT_SUBREG %6, killed %4, 1
5359 STDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5360 ; CHECK: STD %1, 1000, killed %7
5361 ; CHECK-LATE: 4, 1000(5)
5364 %9 = INSERT_SUBREG %10, killed %8, 1
5366 STDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5367 ; CHECK: STD %1, 1000, killed %11
5368 ; CHECK-LATE: 4, 1000(6)
5369 BLR8 implicit %lr8, implicit %rm
5374 # CHECK-ALL: name: testSTFSX
5376 exposesReturnsTwice: false
5378 regBankSelected: false
5380 tracksRegLiveness: true
5382 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5383 - { id: 1, class: f4rc, preferred-register: '' }
5384 - { id: 2, class: g8rc, preferred-register: '' }
5385 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5386 - { id: 4, class: gprc, preferred-register: '' }
5387 - { id: 5, class: g8rc, preferred-register: '' }
5388 - { id: 6, class: g8rc, preferred-register: '' }
5389 - { id: 7, class: g8rc, preferred-register: '' }
5390 - { id: 8, class: gprc, preferred-register: '' }
5391 - { id: 9, class: g8rc, preferred-register: '' }
5392 - { id: 10, class: g8rc, preferred-register: '' }
5393 - { id: 11, class: g8rc, preferred-register: '' }
5395 - { reg: '%x3', virtual-reg: '%0' }
5396 - { reg: '%f1', virtual-reg: '%1' }
5397 - { reg: '%x5', virtual-reg: '%2' }
5399 isFrameAddressTaken: false
5400 isReturnAddressTaken: false
5402 hasPatchPoint: false
5409 maxCallFrameSize: 4294967295
5410 hasOpaqueSPAdjustment: false
5412 hasMustTailInVarArgFunc: false
5420 liveins: %x3, %f1, %x5
5428 %5 = INSERT_SUBREG %6, killed %4, 1
5430 STFSX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5431 ; CHECK: STFS %1, 400, %0
5432 ; CHECK-LATE: stfs 1, 400(3)
5435 %9 = INSERT_SUBREG %10, killed %8, 1
5437 STFSX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5438 ; CHECK: STFS %1, -401, %0
5439 ; CHECK-LATE: stfs 1, -401(3)
5440 BLR8 implicit %lr8, implicit %rm
5445 # CHECK-ALL: name: testSTFSUX
5447 exposesReturnsTwice: false
5449 regBankSelected: false
5451 tracksRegLiveness: true
5453 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5454 - { id: 1, class: f4rc, preferred-register: '' }
5455 - { id: 2, class: g8rc, preferred-register: '' }
5456 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5457 - { id: 4, class: gprc, preferred-register: '' }
5458 - { id: 5, class: g8rc, preferred-register: '' }
5459 - { id: 6, class: g8rc, preferred-register: '' }
5460 - { id: 7, class: g8rc, preferred-register: '' }
5461 - { id: 8, class: gprc, preferred-register: '' }
5462 - { id: 9, class: g8rc, preferred-register: '' }
5463 - { id: 10, class: g8rc, preferred-register: '' }
5464 - { id: 11, class: g8rc, preferred-register: '' }
5465 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5466 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5468 - { reg: '%x3', virtual-reg: '%0' }
5469 - { reg: '%f1', virtual-reg: '%1' }
5470 - { reg: '%x5', virtual-reg: '%2' }
5472 isFrameAddressTaken: false
5473 isReturnAddressTaken: false
5475 hasPatchPoint: false
5482 maxCallFrameSize: 4294967295
5483 hasOpaqueSPAdjustment: false
5485 hasMustTailInVarArgFunc: false
5493 liveins: %x3, %f1, %x5
5501 %5 = INSERT_SUBREG %6, killed %4, 1
5503 %12 = STFSUX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5504 ; CHECK: STFSU %1, 111, %0
5505 ; CHECK-LATE: stfsu 1, 111(4)
5508 %9 = INSERT_SUBREG %10, killed %8, 1
5510 %13 = STFSUX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5511 ; CHECK: STFSU %1, 987, %0
5512 ; CHECK-LATE: stfsu 1, 987(3)
5513 BLR8 implicit %lr8, implicit %rm
5518 # CHECK-ALL: name: testSTFDX
5520 exposesReturnsTwice: false
5522 regBankSelected: false
5524 tracksRegLiveness: true
5526 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5527 - { id: 1, class: f8rc, preferred-register: '' }
5528 - { id: 2, class: g8rc, preferred-register: '' }
5529 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5530 - { id: 4, class: gprc, preferred-register: '' }
5531 - { id: 5, class: g8rc, preferred-register: '' }
5532 - { id: 6, class: g8rc, preferred-register: '' }
5533 - { id: 7, class: g8rc, preferred-register: '' }
5534 - { id: 8, class: gprc, preferred-register: '' }
5535 - { id: 9, class: g8rc, preferred-register: '' }
5536 - { id: 10, class: g8rc, preferred-register: '' }
5537 - { id: 11, class: g8rc, preferred-register: '' }
5539 - { reg: '%x3', virtual-reg: '%0' }
5540 - { reg: '%f1', virtual-reg: '%1' }
5541 - { reg: '%x5', virtual-reg: '%2' }
5543 isFrameAddressTaken: false
5544 isReturnAddressTaken: false
5546 hasPatchPoint: false
5553 maxCallFrameSize: 4294967295
5554 hasOpaqueSPAdjustment: false
5556 hasMustTailInVarArgFunc: false
5564 liveins: %x3, %f1, %x5
5572 %5 = INSERT_SUBREG %6, killed %4, 1
5574 STFDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5575 ; CHECK: STFD %1, 876, %0
5576 ; CHECK-LATE: stfd 1, 876(3)
5579 %9 = INSERT_SUBREG %10, killed %8, 1
5581 STFDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5582 ; CHECK: STFD %1, -873, %0
5583 ; CHECK-LATE: stfd 1, -873(3)
5584 BLR8 implicit %lr8, implicit %rm
5589 # CHECK-ALL: name: testSTFDUX
5591 exposesReturnsTwice: false
5593 regBankSelected: false
5595 tracksRegLiveness: true
5597 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5598 - { id: 1, class: f8rc, preferred-register: '' }
5599 - { id: 2, class: g8rc, preferred-register: '' }
5600 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5601 - { id: 4, class: gprc, preferred-register: '' }
5602 - { id: 5, class: g8rc, preferred-register: '' }
5603 - { id: 6, class: g8rc, preferred-register: '' }
5604 - { id: 7, class: g8rc, preferred-register: '' }
5605 - { id: 8, class: gprc, preferred-register: '' }
5606 - { id: 9, class: g8rc, preferred-register: '' }
5607 - { id: 10, class: g8rc, preferred-register: '' }
5608 - { id: 11, class: g8rc, preferred-register: '' }
5609 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5610 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5612 - { reg: '%x3', virtual-reg: '%0' }
5613 - { reg: '%f1', virtual-reg: '%1' }
5614 - { reg: '%x5', virtual-reg: '%2' }
5616 isFrameAddressTaken: false
5617 isReturnAddressTaken: false
5619 hasPatchPoint: false
5626 maxCallFrameSize: 4294967295
5627 hasOpaqueSPAdjustment: false
5629 hasMustTailInVarArgFunc: false
5637 liveins: %x3, %f1, %x5
5645 %5 = INSERT_SUBREG %6, killed %4, 1
5647 %12 = STFDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5648 ; CHECK: STFDU %1, -9038, %0
5649 ; CHECK-LATE: stfdu 1, -9038(4)
5652 %9 = INSERT_SUBREG %10, killed %8, 1
5654 %13 = STFDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5655 ; CHECK: STFDU %1, 6477, %0
5656 ; CHECK-LATE: stfdu 1, 6477(3)
5657 BLR8 implicit %lr8, implicit %rm
5662 # CHECK-ALL: name: testSTXSSPX
5664 exposesReturnsTwice: false
5666 regBankSelected: false
5668 tracksRegLiveness: true
5670 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5671 - { id: 1, class: vssrc, preferred-register: '' }
5672 - { id: 2, class: g8rc, preferred-register: '' }
5673 - { id: 3, class: g8rc, preferred-register: '' }
5675 - { reg: '%x3', virtual-reg: '%0' }
5676 - { reg: '%f1', virtual-reg: '%1' }
5677 - { reg: '%x5', virtual-reg: '%2' }
5679 isFrameAddressTaken: false
5680 isReturnAddressTaken: false
5682 hasPatchPoint: false
5689 maxCallFrameSize: 4294967295
5690 hasOpaqueSPAdjustment: false
5692 hasMustTailInVarArgFunc: false
5700 liveins: %x3, %f1, %x5
5706 STXSSPX %1, %0, killed %3 :: (store 4 into %ir.arrayidx, !tbaa !14)
5707 ; CHECK: STXSSP %1, 444, %0
5708 ; CHECK-LATE: stxssp 1, 444(3)
5709 BLR8 implicit %lr8, implicit %rm
5714 # CHECK-ALL: name: testSTXSDX
5716 exposesReturnsTwice: false
5718 regBankSelected: false
5720 tracksRegLiveness: true
5722 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5723 - { id: 1, class: vsfrc, preferred-register: '' }
5724 - { id: 2, class: g8rc, preferred-register: '' }
5725 - { id: 3, class: g8rc, preferred-register: '' }
5727 - { reg: '%x3', virtual-reg: '%0' }
5728 - { reg: '%f1', virtual-reg: '%1' }
5729 - { reg: '%x5', virtual-reg: '%2' }
5731 isFrameAddressTaken: false
5732 isReturnAddressTaken: false
5734 hasPatchPoint: false
5741 maxCallFrameSize: 4294967295
5742 hasOpaqueSPAdjustment: false
5744 hasMustTailInVarArgFunc: false
5752 liveins: %x3, %f1, %x5
5758 STXSDX %1, %0, killed %3, implicit %rm :: (store 8 into %ir.arrayidx, !tbaa !12)
5759 ; CHECK: STXSD %1, 4, %0
5760 ; CHECK-LATE: stxsd 1, 4(3)
5761 BLR8 implicit %lr8, implicit %rm
5766 # CHECK-ALL: name: testSTXVX
5768 exposesReturnsTwice: false
5770 regBankSelected: false
5772 tracksRegLiveness: true
5774 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5775 - { id: 1, class: vrrc, preferred-register: '' }
5776 - { id: 2, class: g8rc, preferred-register: '' }
5777 - { id: 3, class: g8rc, preferred-register: '' }
5779 - { reg: '%x3', virtual-reg: '%0' }
5780 - { reg: '%v2', virtual-reg: '%1' }
5781 - { reg: '%x7', virtual-reg: '%2' }
5783 isFrameAddressTaken: false
5784 isReturnAddressTaken: false
5786 hasPatchPoint: false
5793 maxCallFrameSize: 4294967295
5794 hasOpaqueSPAdjustment: false
5796 hasMustTailInVarArgFunc: false
5804 liveins: %x3, %v2, %x7
5809 %3 = RLDICR %2, 4, 59
5810 STXVX %1, %0, killed %3 :: (store 16 into %ir.arrayidx, !tbaa !3)
5811 ; CHECK: STXV %1, 16, killed %3
5812 ; CHECK-LATE: stxv 34, 16(4)
5813 BLR8 implicit %lr8, implicit %rm
5818 # CHECK-ALL: name: testSUBFC
5820 exposesReturnsTwice: false
5822 regBankSelected: false
5824 tracksRegLiveness: true
5826 - { id: 0, class: gprc, preferred-register: '' }
5827 - { id: 1, class: g8rc, preferred-register: '' }
5828 - { id: 2, class: g8rc, preferred-register: '' }
5829 - { id: 3, class: g8rc, preferred-register: '' }
5830 - { id: 4, class: gprc, preferred-register: '' }
5831 - { id: 5, class: gprc, preferred-register: '' }
5832 - { id: 6, class: gprc, preferred-register: '' }
5833 - { id: 7, class: gprc, preferred-register: '' }
5834 - { id: 8, class: gprc, preferred-register: '' }
5836 - { reg: '%x3', virtual-reg: '%0' }
5837 - { reg: '%x4', virtual-reg: '%1' }
5838 - { reg: '%x5', virtual-reg: '%2' }
5839 - { reg: '%x6', virtual-reg: '%3' }
5841 isFrameAddressTaken: false
5842 isReturnAddressTaken: false
5844 hasPatchPoint: false
5851 maxCallFrameSize: 4294967295
5852 hasOpaqueSPAdjustment: false
5854 hasMustTailInVarArgFunc: false
5862 liveins: %x3, %x4, %x5, %x6
5871 %4 = SUBFC %7, %0, implicit-def %carry
5872 ; CHECK: SUBFIC %7, 55
5873 ; CHECK-LATE: subfic 3, 5, 55
5874 %5 = SUBFE %6, %8, implicit-def dead %carry, implicit %carry
5875 %x3 = EXTSW_32_64 %4
5876 %x4 = EXTSW_32_64 %5
5877 BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
5882 # CHECK-ALL: name: testSUBFC8
5884 exposesReturnsTwice: false
5886 regBankSelected: false
5888 tracksRegLiveness: true
5890 - { id: 0, class: g8rc, preferred-register: '' }
5891 - { id: 1, class: g8rc, preferred-register: '' }
5892 - { id: 2, class: g8rc, preferred-register: '' }
5893 - { id: 3, class: g8rc, preferred-register: '' }
5894 - { id: 4, class: g8rc, preferred-register: '' }
5895 - { id: 5, class: g8rc, preferred-register: '' }
5897 - { reg: '%x3', virtual-reg: '%0' }
5898 - { reg: '%x4', virtual-reg: '%1' }
5899 - { reg: '%x5', virtual-reg: '%2' }
5900 - { reg: '%x6', virtual-reg: '%3' }
5902 isFrameAddressTaken: false
5903 isReturnAddressTaken: false
5905 hasPatchPoint: false
5912 maxCallFrameSize: 4294967295
5913 hasOpaqueSPAdjustment: false
5915 hasMustTailInVarArgFunc: false
5923 liveins: %x3, %x4, %x5, %x6
5929 %4 = SUBFC8 %2, %0, implicit-def %carry
5930 ; CHECK: SUBFIC8 %2, 7635
5931 ; CHECK-LATE: subfic 3, 5, 7635
5932 %5 = SUBFE8 %3, %1, implicit-def dead %carry, implicit %carry
5935 BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
5940 # CHECK-ALL: name: testXOR
5942 exposesReturnsTwice: false
5944 regBankSelected: false
5946 tracksRegLiveness: true
5948 - { id: 0, class: g8rc, preferred-register: '' }
5949 - { id: 1, class: gprc, preferred-register: '' }
5950 - { id: 2, class: gprc, preferred-register: '' }
5951 - { id: 3, class: gprc, preferred-register: '' }
5953 - { reg: '%x3', virtual-reg: '%0' }
5954 - { reg: '%x4', virtual-reg: '%1' }
5956 isFrameAddressTaken: false
5957 isReturnAddressTaken: false
5959 hasPatchPoint: false
5966 maxCallFrameSize: 4294967295
5967 hasOpaqueSPAdjustment: false
5969 hasMustTailInVarArgFunc: false
5983 ; CHECK: XORI %3, 10101
5984 ; CHECK-LATE: 3, 3, 10101
5985 %x3 = EXTSW_32_64 %2
5986 BLR8 implicit %lr8, implicit %rm, implicit %x3
5991 # CHECK-ALL: name: testXOR8
5993 exposesReturnsTwice: false
5995 regBankSelected: false
5997 tracksRegLiveness: true
5999 - { id: 0, class: g8rc, preferred-register: '' }
6000 - { id: 1, class: g8rc, preferred-register: '' }
6001 - { id: 2, class: g8rc, preferred-register: '' }
6003 - { reg: '%x3', virtual-reg: '%0' }
6004 - { reg: '%x4', virtual-reg: '%1' }
6006 isFrameAddressTaken: false
6007 isReturnAddressTaken: false
6009 hasPatchPoint: false
6016 maxCallFrameSize: 4294967295
6017 hasOpaqueSPAdjustment: false
6019 hasMustTailInVarArgFunc: false
6032 ; CHECK: XORI8 %1, 5535
6033 ; CHECK-LATE: xori 3, 4, 5535
6035 BLR8 implicit %lr8, implicit %rm, implicit %x3
6040 # CHECK-ALL: name: testXORI
6042 exposesReturnsTwice: false
6044 regBankSelected: false
6046 tracksRegLiveness: true
6048 - { id: 0, class: gprc, preferred-register: '' }
6049 - { id: 1, class: gprc, preferred-register: '' }
6051 - { reg: '%x3', virtual-reg: '%0' }
6053 isFrameAddressTaken: false
6054 isReturnAddressTaken: false
6056 hasPatchPoint: false
6063 maxCallFrameSize: 4294967295
6064 hasOpaqueSPAdjustment: false
6066 hasMustTailInVarArgFunc: false
6079 ; CHECK-LATE: li 3, 886
6080 %x3 = EXTSW_32_64 %1
6081 BLR8 implicit %lr8, implicit %rm, implicit %x3
6086 # CHECK-ALL: name: testXOR8I
6088 exposesReturnsTwice: false
6090 regBankSelected: false
6092 tracksRegLiveness: true
6094 - { id: 0, class: g8rc, preferred-register: '' }
6095 - { id: 1, class: g8rc, preferred-register: '' }
6097 - { reg: '%x3', virtual-reg: '%0' }
6099 isFrameAddressTaken: false
6100 isReturnAddressTaken: false
6102 hasPatchPoint: false
6109 maxCallFrameSize: 4294967295
6110 hasOpaqueSPAdjustment: false
6112 hasMustTailInVarArgFunc: false
6125 ; CHECK-LATE: li 3, 468
6127 BLR8 implicit %lr8, implicit %rm, implicit %x3