1 # RUN: llc -run-pass ppc-mi-peepholes -ppc-convert-rr-to-ri %s -o - -verify-machineinstrs | FileCheck %s
2 # RUN: llc -start-after ppc-mi-peepholes -ppc-late-peephole %s -o - -verify-machineinstrs | 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 @testADDC_rec(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 @testAND_rec(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 @testAND8_rec(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 @testRLDCL_rec(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 @testRLDCR_rec(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 @testRLDICL_MB0(i64 %a) local_unnamed_addr #0 {
556 %shr = lshr i64 %a, 11
557 %and = and i64 %shr, 16777215
561 ; Function Attrs: norecurse nounwind readnone
562 define i64 @testRLDICL_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
564 %shr = lshr i64 %a, 11
565 %and = and i64 %shr, 16777215
566 %tobool = icmp eq i64 %and, 0
567 %cond = select i1 %tobool, i64 %b, i64 %and
571 ; Function Attrs: norecurse nounwind readnone
572 define i64 @testRLDICL_rec2(i64 %a, i64 %b) local_unnamed_addr #0 {
574 %shr = lshr i64 %a, 11
575 %and = and i64 %shr, 16777215
576 %tobool = icmp eq i64 %and, 0
577 %cond = select i1 %tobool, i64 %b, i64 %and
581 ; Function Attrs: norecurse nounwind readnone
582 define i64 @testRLDICL_rec3(i64 %a, i64 %b) local_unnamed_addr #0 {
584 %shr = lshr i64 %a, 11
585 %and = and i64 %shr, 16777215
586 %tobool = icmp eq i64 %and, 0
587 %cond = select i1 %tobool, i64 %b, i64 %and
591 ; Function Attrs: norecurse nounwind readnone
592 define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
595 %and = and i32 %shl, 4080
599 ; Function Attrs: norecurse nounwind readnone
600 define zeroext i32 @testRLWINMFullReg(i32 zeroext %a) local_unnamed_addr #0 {
603 %and = and i32 %shl, 4080
607 ; Function Attrs: norecurse nounwind readnone
608 define zeroext i32 @testRLWINMFullRegOutOfRange(i32 zeroext %a) local_unnamed_addr #0 {
611 %and = and i32 %shl, 4080
615 ; Function Attrs: norecurse nounwind readnone
616 define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
619 %and = and i64 %shl, 4080
623 ; Function Attrs: norecurse nounwind readnone
624 define zeroext i32 @testRLWINM_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
626 %and = and i32 %a, 255
627 %tobool = icmp eq i32 %and, 0
628 %cond = select i1 %tobool, i32 %b, i32 %a
632 ; Function Attrs: norecurse nounwind readnone
633 define zeroext i32 @testRLWINM_rec2(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
635 %and = and i32 %a, 255
636 %tobool = icmp eq i32 %and, 0
637 %cond = select i1 %tobool, i32 %b, i32 %a
641 ; Function Attrs: norecurse nounwind readnone
642 define i64 @testRLWINM8_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
644 %a.tr = trunc i64 %a to i32
645 %0 = shl i32 %a.tr, 4
646 %conv = and i32 %0, 4080
647 %tobool = icmp eq i32 %conv, 0
648 %conv1 = zext i32 %conv to i64
649 %cond = select i1 %tobool, i64 %b, i64 %conv1
653 ; Function Attrs: norecurse nounwind readnone
654 define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
656 %shl = shl i64 %a, %b
660 ; Function Attrs: norecurse nounwind readnone
661 define i64 @testSLD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
663 %shl = shl i64 %a, %b
664 %tobool = icmp eq i64 %shl, 0
665 %cond = select i1 %tobool, i64 %b, i64 %a
669 ; Function Attrs: norecurse nounwind readnone
670 define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
672 %shr = lshr i64 %a, %b
676 ; Function Attrs: norecurse nounwind readnone
677 define i64 @testSRD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
679 %shr = lshr i64 %a, %b
680 %tobool = icmp eq i64 %shr, 0
681 %cond = select i1 %tobool, i64 %b, i64 %a
685 ; Function Attrs: norecurse nounwind readnone
686 define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
688 %shl = shl i32 %a, %b
692 ; Function Attrs: norecurse nounwind readnone
693 define zeroext i32 @testSLW_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
695 %shl = shl i32 %a, %b
696 %tobool = icmp eq i32 %shl, 0
697 %cond = select i1 %tobool, i32 %b, i32 %a
701 ; Function Attrs: norecurse nounwind readnone
702 define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
704 %shr = lshr i32 %a, %b
708 ; Function Attrs: norecurse nounwind readnone
709 define zeroext i32 @testSRW_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
711 %shr = lshr i32 %a, %b
712 %tobool = icmp eq i32 %shr, 0
713 %cond = select i1 %tobool, i32 %b, i32 %a
717 ; Function Attrs: norecurse nounwind readnone
718 define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
720 %shr = ashr i32 %a, %b
724 ; Function Attrs: norecurse nounwind readnone
725 define signext i32 @testSRAW_rec(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
727 %shr = ashr i32 %a, %b
728 %tobool = icmp eq i32 %shr, 0
729 %cond = select i1 %tobool, i32 %b, i32 %shr
733 ; Function Attrs: norecurse nounwind readnone
734 define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
736 %shr = ashr i64 %a, %b
740 ; Function Attrs: norecurse nounwind readnone
741 define i64 @testSRAD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
743 %shr = ashr i64 %a, %b
744 %tobool = icmp eq i64 %shr, 0
745 %cond = select i1 %tobool, i64 %b, i64 %shr
749 ; Function Attrs: norecurse nounwind
750 define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
752 %add = add i32 %idx, 1
753 %idxprom = zext i32 %add to i64
754 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
755 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
756 %add1 = add i32 %idx, 2
757 %idxprom2 = zext i32 %add1 to i64
758 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
759 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
763 ; Function Attrs: norecurse nounwind
764 define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
766 %add = add i32 %idx, 1
767 %idxprom = zext i32 %add to i64
768 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
769 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
770 %add1 = add i32 %idx, 2
771 %idxprom2 = zext i32 %add1 to i64
772 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
773 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
777 ; Function Attrs: norecurse nounwind
778 define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
780 %add = add i32 %idx, 1
781 %idxprom = zext i32 %add to i64
782 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
783 store i16 %a, i16* %arrayidx, align 2, !tbaa !6
784 %add1 = add i32 %idx, 2
785 %idxprom2 = zext i32 %add1 to i64
786 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
787 store i16 %a, i16* %arrayidx3, align 2, !tbaa !6
791 ; Function Attrs: norecurse nounwind
792 define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
794 %add = add i32 %idx, 1
795 %idxprom = zext i32 %add to i64
796 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
797 store i16 %a, i16* %arrayidx, align 1, !tbaa !3
798 %add1 = add i32 %idx, 2
799 %idxprom2 = zext i32 %add1 to i64
800 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
801 store i16 %a, i16* %arrayidx3, align 1, !tbaa !3
805 ; Function Attrs: norecurse nounwind
806 define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
808 %add = add i32 %idx, 1
809 %idxprom = zext i32 %add to i64
810 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
811 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
812 %add1 = add i32 %idx, 2
813 %idxprom2 = zext i32 %add1 to i64
814 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
815 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
819 ; Function Attrs: norecurse nounwind
820 define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
822 %add = add i32 %idx, 1
823 %idxprom = zext i32 %add to i64
824 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
825 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
826 %add1 = add i32 %idx, 2
827 %idxprom2 = zext i32 %add1 to i64
828 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
829 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
833 ; Function Attrs: norecurse nounwind
834 define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
836 %add = add i32 %idx, 1
837 %idxprom = zext i32 %add to i64
838 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
839 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
840 %add1 = add i32 %idx, 2
841 %idxprom2 = zext i32 %add1 to i64
842 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
843 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
847 ; Function Attrs: norecurse nounwind
848 define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
850 %add = add i32 %idx, 1
851 %idxprom = zext i32 %add to i64
852 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
853 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
854 %add1 = add i32 %idx, 2
855 %idxprom2 = zext i32 %add1 to i64
856 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
857 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
861 ; Function Attrs: norecurse nounwind readonly
862 define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
864 %add = add i32 %idx, 1
865 %idxprom = zext i32 %add to i64
866 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
867 store float %a, float* %arrayidx, align 4, !tbaa !14
868 %add1 = add i32 %idx, 2
869 %idxprom2 = zext i32 %add1 to i64
870 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
871 store float %a, float* %arrayidx3, align 4, !tbaa !14
875 ; Function Attrs: norecurse nounwind readonly
876 define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
878 %add = add i32 %idx, 1
879 %idxprom = zext i32 %add to i64
880 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
881 store float %a, float* %arrayidx, align 4, !tbaa !14
882 %add1 = add i32 %idx, 2
883 %idxprom2 = zext i32 %add1 to i64
884 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
885 store float %a, float* %arrayidx3, align 4, !tbaa !14
889 ; Function Attrs: norecurse nounwind readonly
890 define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
892 %add = add i32 %idx, 1
893 %idxprom = zext i32 %add to i64
894 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
895 store double %a, double* %arrayidx, align 8, !tbaa !12
896 %add1 = add i32 %idx, 2
897 %idxprom2 = zext i32 %add1 to i64
898 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
899 store double %a, double* %arrayidx3, align 8, !tbaa !12
903 ; Function Attrs: norecurse nounwind readonly
904 define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
906 %add = add i32 %idx, 1
907 %idxprom = zext i32 %add to i64
908 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
909 store double %a, double* %arrayidx, align 8, !tbaa !12
910 %add1 = add i32 %idx, 2
911 %idxprom2 = zext i32 %add1 to i64
912 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
913 store double %a, double* %arrayidx3, align 8, !tbaa !12
917 ; Function Attrs: norecurse nounwind
918 define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
920 %idxprom = zext i32 %idx to i64
921 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
922 store float %a, float* %arrayidx, align 4, !tbaa !14
926 ; Function Attrs: norecurse nounwind
927 define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
929 %idxprom = zext i32 %idx to i64
930 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
931 store double %a, double* %arrayidx, align 8, !tbaa !12
935 ; Function Attrs: norecurse nounwind
936 define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 {
938 %idxprom = zext i32 %idx to i64
939 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
940 store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3
944 ; Function Attrs: norecurse nounwind readnone
945 define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
947 %sub = sub nsw i128 %a, %b
951 ; Function Attrs: norecurse nounwind readnone
952 define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
954 %sub = sub nsw i128 %a, %b
958 ; Function Attrs: norecurse nounwind readnone
959 define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
961 %xor = xor i32 %b, %a
965 ; Function Attrs: norecurse nounwind readnone
966 define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
968 %xor = xor i64 %b, %a
972 ; Function Attrs: norecurse nounwind readnone
973 define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
975 %xor = xor i32 %a, 17
979 ; Function Attrs: norecurse nounwind readnone
980 define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
982 %xor = xor i64 %a, 17
986 attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "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" "unsafe-fp-math"="false" "use-soft-float"="false" }
987 attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "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" "unsafe-fp-math"="false" "use-soft-float"="false" }
988 attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "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" "unsafe-fp-math"="false" "use-soft-float"="false" }
989 attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "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" "unsafe-fp-math"="false" "use-soft-float"="false" }
991 !llvm.module.flags = !{!0, !1}
994 !0 = !{i32 1, !"wchar_size", i32 4}
995 !1 = !{i32 7, !"PIC Level", i32 2}
996 !2 = !{!"clang version 6.0.0 (trunk 316067)"}
997 !3 = !{!4, !4, i64 0}
998 !4 = !{!"omnipotent char", !5, i64 0}
999 !5 = !{!"Simple C/C++ TBAA"}
1000 !6 = !{!7, !7, i64 0}
1001 !7 = !{!"short", !4, i64 0}
1002 !8 = !{!9, !9, i64 0}
1003 !9 = !{!"int", !4, i64 0}
1004 !10 = !{!11, !11, i64 0}
1005 !11 = !{!"long long", !4, i64 0}
1006 !12 = !{!13, !13, i64 0}
1007 !13 = !{!"double", !4, i64 0}
1008 !14 = !{!15, !15, i64 0}
1009 !15 = !{!"float", !4, i64 0}
1014 # CHECK-ALL: name: testADD4
1016 exposesReturnsTwice: false
1018 regBankSelected: false
1020 tracksRegLiveness: true
1022 - { id: 0, class: g8rc, preferred-register: '' }
1023 - { id: 1, class: g8rc, preferred-register: '' }
1024 - { id: 2, class: gprc, preferred-register: '' }
1025 - { id: 3, class: gprc, preferred-register: '' }
1026 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
1027 - { id: 5, class: gprc, preferred-register: '' }
1028 - { id: 6, class: g8rc, preferred-register: '' }
1030 - { reg: '$x3', virtual-reg: '%0' }
1031 - { reg: '$x4', virtual-reg: '%1' }
1033 isFrameAddressTaken: false
1034 isReturnAddressTaken: false
1036 hasPatchPoint: false
1043 maxCallFrameSize: 4294967295
1044 hasOpaqueSPAdjustment: false
1046 hasMustTailInVarArgFunc: false
1060 %4 = ADD4 killed %3, %2
1061 %5 = ADD4 killed %2, killed %4
1062 ; CHECK: ADDI killed %3, 33
1063 ; CHECK: ADDI killed %4, 33
1064 ; CHECK-LATE: addi 3, 3, 33
1065 ; CHECK-LATE: addi 3, 3, 33
1066 %6 = EXTSW_32_64 killed %5
1068 BLR8 implicit $lr8, implicit $rm, implicit $x3
1073 # CHECK-ALL: name: testADD8
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_and_g8rc_nox0, preferred-register: '' }
1084 - { id: 3, class: g8rc, preferred-register: '' }
1086 - { reg: '$x3', virtual-reg: '%0' }
1087 - { reg: '$x4', virtual-reg: '%1' }
1089 isFrameAddressTaken: false
1090 isReturnAddressTaken: false
1092 hasPatchPoint: false
1099 maxCallFrameSize: 4294967295
1100 hasOpaqueSPAdjustment: false
1102 hasMustTailInVarArgFunc: false
1115 %3 = ADD8 killed %1, killed %2
1116 ; CHECK: ADDI8 %0, 33
1117 ; CHECK: ADDI8 killed %2, 33
1118 ; CHECK-LATE: addi 3, 3, 33
1119 ; CHECK-LATE: addi 3, 3, 33
1121 BLR8 implicit $lr8, implicit $rm, implicit $x3
1126 # CHECK-ALL: name: testADDC
1128 exposesReturnsTwice: false
1130 regBankSelected: false
1132 tracksRegLiveness: true
1134 - { id: 0, class: g8rc, preferred-register: '' }
1135 - { id: 1, class: g8rc, preferred-register: '' }
1136 - { id: 2, class: g8rc, preferred-register: '' }
1137 - { id: 3, class: g8rc, preferred-register: '' }
1138 - { id: 4, class: gprc, preferred-register: '' }
1139 - { id: 5, class: gprc, preferred-register: '' }
1140 - { id: 6, class: gprc, preferred-register: '' }
1141 - { id: 7, class: g8rc, preferred-register: '' }
1142 - { id: 8, class: g8rc, preferred-register: '' }
1144 - { reg: '$x3', virtual-reg: '%0' }
1145 - { reg: '$x4', virtual-reg: '%1' }
1146 - { reg: '$x5', virtual-reg: '%2' }
1147 - { reg: '$x6', virtual-reg: '%3' }
1149 isFrameAddressTaken: false
1150 isReturnAddressTaken: false
1152 hasPatchPoint: false
1159 maxCallFrameSize: 4294967295
1160 hasOpaqueSPAdjustment: false
1162 hasMustTailInVarArgFunc: false
1170 liveins: $x3, $x4, $x5, $x6
1178 %6 = ADDC %5, %4, implicit-def $carry
1179 ; CHECK: ADDIC %4, 55, implicit-def $carry
1180 ; CHECK-LATE: addic 3, 3, 55
1181 %7 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
1185 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1190 # CHECK-ALL: name: testADDC8
1192 exposesReturnsTwice: false
1194 regBankSelected: false
1196 tracksRegLiveness: true
1198 - { id: 0, class: g8rc, preferred-register: '' }
1199 - { id: 1, class: g8rc, preferred-register: '' }
1200 - { id: 2, class: g8rc, preferred-register: '' }
1201 - { id: 3, class: g8rc, preferred-register: '' }
1202 - { id: 4, class: g8rc, preferred-register: '' }
1203 - { id: 5, class: g8rc, preferred-register: '' }
1205 - { reg: '$x3', virtual-reg: '%0' }
1206 - { reg: '$x4', virtual-reg: '%1' }
1207 - { reg: '$x5', virtual-reg: '%2' }
1208 - { reg: '$x6', virtual-reg: '%3' }
1210 isFrameAddressTaken: false
1211 isReturnAddressTaken: false
1213 hasPatchPoint: false
1220 maxCallFrameSize: 4294967295
1221 hasOpaqueSPAdjustment: false
1223 hasMustTailInVarArgFunc: false
1231 liveins: $x3, $x4, $x5, $x6
1237 %4 = ADDC8 %2, %0, implicit-def $carry
1238 ; CHECK: ADDIC8 %2, 777, implicit-def $carry
1239 ; CHECK-LATE: addic 3, 5, 777
1240 %5 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
1243 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1248 # CHECK-ALL: name: testADDC_rec
1250 exposesReturnsTwice: false
1252 regBankSelected: false
1254 tracksRegLiveness: true
1256 - { id: 0, class: g8rc, preferred-register: '' }
1257 - { id: 1, class: gprc, preferred-register: '' }
1258 - { id: 2, class: gprc, preferred-register: '' }
1259 - { id: 3, class: gprc, preferred-register: '' }
1260 - { id: 4, class: crrc, preferred-register: '' }
1261 - { id: 5, class: crbitrc, preferred-register: '' }
1262 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1263 - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1264 - { id: 8, class: g8rc, preferred-register: '' }
1266 - { reg: '$x3', virtual-reg: '%0' }
1267 - { reg: '$x4', virtual-reg: '%1' }
1269 isFrameAddressTaken: false
1270 isReturnAddressTaken: false
1272 hasPatchPoint: false
1279 maxCallFrameSize: 4294967295
1280 hasOpaqueSPAdjustment: false
1282 hasMustTailInVarArgFunc: false
1295 %3 = ADDC_rec %1, %2, implicit-def $cr0, implicit-def $carry
1296 ; CHECK: ADDIC_rec %2, 433, implicit-def $cr0, implicit-def $carry
1297 ; CHECK-LATE: addic. 3, 3, 433
1298 %4 = COPY killed $cr0
1302 %8 = ISEL8 %7, %6, %5
1304 BLR8 implicit $lr8, implicit $rm, implicit $x3
1309 # CHECK-ALL: name: testADDI
1311 exposesReturnsTwice: false
1313 regBankSelected: false
1315 tracksRegLiveness: true
1317 - { id: 0, class: g8rc, preferred-register: '' }
1318 - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
1319 - { id: 2, class: gprc, preferred-register: '' }
1320 - { id: 3, class: g8rc, preferred-register: '' }
1322 - { reg: '$x3', virtual-reg: '%0' }
1324 isFrameAddressTaken: false
1325 isReturnAddressTaken: false
1327 hasPatchPoint: false
1334 maxCallFrameSize: 4294967295
1335 hasOpaqueSPAdjustment: false
1337 hasMustTailInVarArgFunc: false
1349 %2 = ADDI killed %1, 44
1350 %3 = EXTSW_32_64 killed %2
1352 ; CHECK-LATE: li 3, 121
1354 BLR8 implicit $lr8, implicit $rm, implicit $x3
1359 # CHECK-ALL: name: testADDI8
1361 exposesReturnsTwice: false
1363 regBankSelected: false
1365 tracksRegLiveness: true
1367 - { id: 0, class: g8rc, preferred-register: '' }
1368 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1369 - { id: 2, class: g8rc, preferred-register: '' }
1370 - { id: 3, class: g8rc, preferred-register: '' }
1372 - { reg: '$x3', virtual-reg: '%0' }
1374 isFrameAddressTaken: false
1375 isReturnAddressTaken: false
1377 hasPatchPoint: false
1384 maxCallFrameSize: 4294967295
1385 hasOpaqueSPAdjustment: false
1387 hasMustTailInVarArgFunc: false
1399 %2 = ADDI8 killed %1, 44
1401 ; CHECK-LATE: li 3, 377
1402 %3 = EXTSW killed %2
1404 BLR8 implicit $lr8, implicit $rm, implicit $x3
1409 # CHECK-ALL: name: testAND_rec
1411 exposesReturnsTwice: false
1413 regBankSelected: false
1415 tracksRegLiveness: true
1417 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1418 - { id: 1, class: gprc, preferred-register: '' }
1419 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1420 - { id: 3, class: gprc, preferred-register: '' }
1421 - { id: 4, class: crrc, preferred-register: '' }
1422 - { id: 5, class: gprc, preferred-register: '' }
1423 - { id: 6, class: g8rc, preferred-register: '' }
1425 - { reg: '$x3', virtual-reg: '%0' }
1426 - { reg: '$x4', virtual-reg: '%1' }
1428 isFrameAddressTaken: false
1429 isReturnAddressTaken: false
1431 hasPatchPoint: false
1438 maxCallFrameSize: 4294967295
1439 hasOpaqueSPAdjustment: false
1441 hasMustTailInVarArgFunc: false
1454 %3 = AND_rec %1, %2, implicit-def $cr0
1455 ; CHECK: ANDI_rec %2, 78, implicit-def $cr0
1456 ; CHECK-LATE: andi. 5, 3, 78
1457 %4 = COPY killed $cr0
1458 %5 = ISEL %2, %1, %4.sub_eq
1459 %6 = EXTSW_32_64 killed %5
1461 BLR8 implicit $lr8, implicit $rm, implicit $x3
1466 # CHECK-ALL: name: testAND8_rec
1468 exposesReturnsTwice: false
1470 regBankSelected: false
1472 tracksRegLiveness: true
1474 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1475 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1476 - { id: 2, class: g8rc, preferred-register: '' }
1477 - { id: 3, class: crrc, preferred-register: '' }
1478 - { id: 4, class: g8rc, preferred-register: '' }
1480 - { reg: '$x3', virtual-reg: '%0' }
1481 - { reg: '$x4', virtual-reg: '%1' }
1483 isFrameAddressTaken: false
1484 isReturnAddressTaken: false
1486 hasPatchPoint: false
1493 maxCallFrameSize: 4294967295
1494 hasOpaqueSPAdjustment: false
1496 hasMustTailInVarArgFunc: false
1508 %2 = AND8_rec %1, %0, implicit-def $cr0
1509 ; CHECK: ANDI8_rec %0, 321, implicit-def $cr0
1510 ; CHECK-LATE: andi. 5, 3, 321
1511 %3 = COPY killed $cr0
1512 %4 = ISEL8 %1, %0, %3.sub_eq
1514 BLR8 implicit $lr8, implicit $rm, implicit $x3
1519 # CHECK-ALL: name: testCMPD
1521 exposesReturnsTwice: false
1523 regBankSelected: false
1525 tracksRegLiveness: true
1527 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1528 - { id: 1, class: g8rc, preferred-register: '' }
1529 - { id: 2, class: crrc, preferred-register: '' }
1530 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1531 - { id: 4, class: g8rc, preferred-register: '' }
1532 - { id: 5, class: g8rc, preferred-register: '' }
1534 - { reg: '$x3', virtual-reg: '%0' }
1535 - { reg: '$x4', virtual-reg: '%1' }
1537 isFrameAddressTaken: false
1538 isReturnAddressTaken: false
1540 hasPatchPoint: false
1547 maxCallFrameSize: 4294967295
1548 hasOpaqueSPAdjustment: false
1550 hasMustTailInVarArgFunc: false
1563 ; CHECK: CMPDI %0, -3
1564 ; CHECK-LATE: cmpdi 3, -3
1565 %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
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
1618 ; CHECK: ADDI8 %1, 0
1619 %5 = ADD8 killed %4, %1
1621 BLR8 implicit $lr8, implicit $rm, implicit $x3
1626 # CHECK-ALL: name: testCMPDI_F
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 %4 = ISEL8 $zero8, %0, %2.sub_gt
1672 %5 = ADD8 killed %4, %1
1674 BLR8 implicit $lr8, implicit $rm, implicit $x3
1679 # CHECK-ALL: name: testCMPLD
1681 exposesReturnsTwice: false
1683 regBankSelected: false
1685 tracksRegLiveness: true
1687 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1688 - { id: 1, class: g8rc, preferred-register: '' }
1689 - { id: 2, class: crrc, preferred-register: '' }
1690 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1691 - { id: 4, class: g8rc, preferred-register: '' }
1692 - { id: 5, class: g8rc, preferred-register: '' }
1694 - { reg: '$x3', virtual-reg: '%0' }
1695 - { reg: '$x4', virtual-reg: '%1' }
1697 isFrameAddressTaken: false
1698 isReturnAddressTaken: false
1700 hasPatchPoint: false
1707 maxCallFrameSize: 4294967295
1708 hasOpaqueSPAdjustment: false
1710 hasMustTailInVarArgFunc: false
1723 ; CHECK: CMPLDI %0, 99
1724 ; CHECK-LATE: cmpldi 3, 99
1725 %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: testCMPLDI
1735 exposesReturnsTwice: false
1737 regBankSelected: false
1739 tracksRegLiveness: true
1741 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1742 - { id: 1, class: g8rc, preferred-register: '' }
1743 - { id: 2, class: crrc, preferred-register: '' }
1744 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1745 - { id: 4, class: g8rc, preferred-register: '' }
1746 - { id: 5, class: g8rc, preferred-register: '' }
1748 - { reg: '$x3', virtual-reg: '%0' }
1749 - { reg: '$x4', virtual-reg: '%1' }
1751 isFrameAddressTaken: false
1752 isReturnAddressTaken: false
1754 hasPatchPoint: false
1761 maxCallFrameSize: 4294967295
1762 hasOpaqueSPAdjustment: false
1764 hasMustTailInVarArgFunc: false
1776 %2 = CMPLDI %0, 65535
1777 %4 = ISEL8 $zero8, %0, %2.sub_gt
1779 %5 = ADD8 killed %4, %1
1781 BLR8 implicit $lr8, implicit $rm, implicit $x3
1786 # CHECK-ALL: name: testCMPW
1788 exposesReturnsTwice: false
1790 regBankSelected: false
1792 tracksRegLiveness: true
1794 - { id: 0, class: g8rc, preferred-register: '' }
1795 - { id: 1, class: g8rc, preferred-register: '' }
1796 - { id: 2, class: gprc, preferred-register: '' }
1797 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1798 - { id: 4, class: crrc, preferred-register: '' }
1799 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1800 - { id: 6, class: gprc, preferred-register: '' }
1801 - { id: 7, class: gprc, preferred-register: '' }
1802 - { id: 8, class: g8rc, preferred-register: '' }
1804 - { reg: '$x3', virtual-reg: '%0' }
1805 - { reg: '$x4', virtual-reg: '%1' }
1807 isFrameAddressTaken: false
1808 isReturnAddressTaken: false
1810 hasPatchPoint: false
1817 maxCallFrameSize: 4294967295
1818 hasOpaqueSPAdjustment: false
1820 hasMustTailInVarArgFunc: false
1835 ; CHECK: CMPWI %3, -1
1836 %6 = ISEL $zero, %3, %4.sub_gt
1837 %7 = ADD4 killed %6, %2
1838 %8 = EXTSW_32_64 killed %7
1840 BLR8 implicit $lr8, implicit $rm, implicit $x3
1845 # CHECK-ALL: name: testCMPWI
1847 exposesReturnsTwice: false
1849 regBankSelected: false
1851 tracksRegLiveness: true
1853 - { id: 0, class: g8rc, preferred-register: '' }
1854 - { id: 1, class: g8rc, preferred-register: '' }
1855 - { id: 2, class: gprc, preferred-register: '' }
1856 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1857 - { id: 4, class: crrc, preferred-register: '' }
1858 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1859 - { id: 6, class: gprc, preferred-register: '' }
1860 - { id: 7, class: gprc, preferred-register: '' }
1861 - { id: 8, class: g8rc, preferred-register: '' }
1863 - { reg: '$x3', virtual-reg: '%0' }
1864 - { reg: '$x4', virtual-reg: '%1' }
1866 isFrameAddressTaken: false
1867 isReturnAddressTaken: false
1869 hasPatchPoint: false
1876 maxCallFrameSize: 4294967295
1877 hasOpaqueSPAdjustment: false
1879 hasMustTailInVarArgFunc: false
1894 %6 = ISEL $zero, %3, %4.sub_gt
1896 %7 = ADD4 killed %6, killed %2
1897 %8 = EXTSW_32_64 killed %7
1899 BLR8 implicit $lr8, implicit $rm, implicit $x3
1904 # CHECK-ALL: name: testCMPLW
1906 exposesReturnsTwice: false
1908 regBankSelected: false
1910 tracksRegLiveness: true
1912 - { id: 0, class: g8rc, preferred-register: '' }
1913 - { id: 1, class: g8rc, preferred-register: '' }
1914 - { id: 2, class: gprc, preferred-register: '' }
1915 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1916 - { id: 4, class: crrc, preferred-register: '' }
1917 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1918 - { id: 6, class: gprc, preferred-register: '' }
1919 - { id: 7, class: gprc, preferred-register: '' }
1920 - { id: 8, class: g8rc, preferred-register: '' }
1921 - { id: 9, class: g8rc, preferred-register: '' }
1922 - { id: 10, class: g8rc, preferred-register: '' }
1924 - { reg: '$x3', virtual-reg: '%0' }
1925 - { reg: '$x4', virtual-reg: '%1' }
1927 isFrameAddressTaken: false
1928 isReturnAddressTaken: false
1930 hasPatchPoint: false
1937 maxCallFrameSize: 4294967295
1938 hasOpaqueSPAdjustment: false
1940 hasMustTailInVarArgFunc: false
1955 ; CHECK: CMPLWI %3, 32767
1956 ; CHECK-LATE: cmplwi 3, 32767
1957 %6 = ISEL $zero, %3, %4.sub_gt
1958 %7 = ADD4 killed %6, %2
1960 %8 = INSERT_SUBREG %9, killed %7, 1
1961 %10 = RLDICL killed %8, 0, 32
1963 BLR8 implicit $lr8, implicit $rm, implicit $x3
1968 # CHECK-ALL: name: testCMPLWI
1970 exposesReturnsTwice: false
1972 regBankSelected: false
1974 tracksRegLiveness: true
1976 - { id: 0, class: g8rc, preferred-register: '' }
1977 - { id: 1, class: g8rc, preferred-register: '' }
1978 - { id: 2, class: gprc, preferred-register: '' }
1979 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1980 - { id: 4, class: crrc, preferred-register: '' }
1981 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1982 - { id: 6, class: gprc, preferred-register: '' }
1983 - { id: 7, class: gprc, preferred-register: '' }
1984 - { id: 8, class: g8rc, preferred-register: '' }
1985 - { id: 9, class: g8rc, preferred-register: '' }
1986 - { id: 10, class: g8rc, preferred-register: '' }
1988 - { reg: '$x3', virtual-reg: '%0' }
1989 - { reg: '$x4', virtual-reg: '%1' }
1991 isFrameAddressTaken: false
1992 isReturnAddressTaken: false
1994 hasPatchPoint: false
2001 maxCallFrameSize: 4294967295
2002 hasOpaqueSPAdjustment: false
2004 hasMustTailInVarArgFunc: false
2019 %6 = ISEL $zero, %3, %4.sub_gt
2020 ; CHECK: ADDI killed %2, 0
2021 %7 = ADD4 killed %6, killed %2
2023 %8 = INSERT_SUBREG %9, killed %7, 1
2024 %10 = RLDICL killed %8, 0, 32
2026 BLR8 implicit $lr8, implicit $rm, implicit $x3
2031 # CHECK-ALL: name: testLBZUX
2033 exposesReturnsTwice: false
2035 regBankSelected: false
2037 tracksRegLiveness: true
2039 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2040 - { id: 1, class: g8rc, preferred-register: '' }
2041 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2042 - { id: 3, class: gprc, preferred-register: '' }
2043 - { id: 4, class: g8rc, preferred-register: '' }
2044 - { id: 5, class: g8rc, preferred-register: '' }
2045 - { id: 6, class: g8rc, preferred-register: '' }
2046 - { id: 7, class: gprc, preferred-register: '' }
2047 - { id: 8, class: gprc, preferred-register: '' }
2048 - { id: 9, class: g8rc, preferred-register: '' }
2049 - { id: 10, class: g8rc, preferred-register: '' }
2050 - { id: 11, class: g8rc, preferred-register: '' }
2051 - { id: 12, class: gprc, preferred-register: '' }
2052 - { id: 13, class: gprc, preferred-register: '' }
2053 - { id: 14, class: g8rc, preferred-register: '' }
2054 - { id: 15, class: g8rc, preferred-register: '' }
2055 - { id: 16, class: g8rc, preferred-register: '' }
2056 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2058 - { reg: '$x3', virtual-reg: '%0' }
2059 - { reg: '$x4', virtual-reg: '%1' }
2061 isFrameAddressTaken: false
2062 isReturnAddressTaken: false
2064 hasPatchPoint: false
2071 maxCallFrameSize: 4294967295
2072 hasOpaqueSPAdjustment: false
2074 hasMustTailInVarArgFunc: false
2089 %4 = INSERT_SUBREG %5, killed %3, 1
2090 %6 = RLDICL killed %4, 0, 32
2091 %7 = LBZX %0, killed %6 :: (load (s8) from %ir.arrayidx, !tbaa !3)
2094 %9 = INSERT_SUBREG %10, killed %8, 1
2096 %12,%17 = LBZUX %0, killed %11 :: (load (s8) from %ir.arrayidx3, !tbaa !3)
2097 ; CHECK: LBZU -15, %0
2098 ; CHECK-LATE: lbzu 5, -15(3)
2099 %13 = ADD4 killed %12, killed %7
2101 %14 = INSERT_SUBREG %15, killed %13, 1
2102 %16 = RLWINM8 killed %14, 0, 24, 31
2104 BLR8 implicit $lr8, implicit $rm, implicit $x3
2109 # CHECK-ALL: name: testLBZX
2111 exposesReturnsTwice: false
2113 regBankSelected: false
2115 tracksRegLiveness: true
2117 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2118 - { id: 1, class: g8rc, preferred-register: '' }
2119 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2120 - { id: 3, class: gprc, preferred-register: '' }
2121 - { id: 4, class: g8rc, preferred-register: '' }
2122 - { id: 5, class: g8rc, preferred-register: '' }
2123 - { id: 6, class: g8rc, preferred-register: '' }
2124 - { id: 7, class: gprc, preferred-register: '' }
2125 - { id: 8, class: gprc, preferred-register: '' }
2126 - { id: 9, class: g8rc, preferred-register: '' }
2127 - { id: 10, class: g8rc, preferred-register: '' }
2128 - { id: 11, class: g8rc, preferred-register: '' }
2129 - { id: 12, class: gprc, preferred-register: '' }
2130 - { id: 13, class: gprc, preferred-register: '' }
2131 - { id: 14, class: g8rc, preferred-register: '' }
2132 - { id: 15, class: g8rc, preferred-register: '' }
2133 - { id: 16, class: g8rc, preferred-register: '' }
2135 - { reg: '$x3', virtual-reg: '%0' }
2136 - { reg: '$x4', virtual-reg: '%1' }
2138 isFrameAddressTaken: false
2139 isReturnAddressTaken: false
2141 hasPatchPoint: false
2148 maxCallFrameSize: 4294967295
2149 hasOpaqueSPAdjustment: false
2151 hasMustTailInVarArgFunc: false
2166 %4 = INSERT_SUBREG %5, killed %3, 1
2167 %6 = RLDICL killed %4, 0, 32
2168 %7 = LBZX %0, killed %6 :: (load (s8) from %ir.arrayidx, !tbaa !3)
2169 ; CHECK: LBZ 45, killed %6
2170 ; CHECK-LATE: lbz 5, 45(5)
2173 %9 = INSERT_SUBREG %10, killed %8, 1
2174 %11 = RLDICL killed %9, 0, 32
2175 %12 = LBZX %0, killed %11 :: (load (s8) from %ir.arrayidx3, !tbaa !3)
2176 ; CHECK: LBZ 45, killed %11
2177 ; CHECK-LATE: lbz 3, 45(4)
2178 %13 = ADD4 killed %12, killed %7
2180 %14 = INSERT_SUBREG %15, killed %13, 1
2181 %16 = RLWINM8 killed %14, 0, 24, 31
2183 BLR8 implicit $lr8, implicit $rm, implicit $x3
2188 # CHECK-ALL: name: testLHZUX
2190 exposesReturnsTwice: false
2192 regBankSelected: false
2194 tracksRegLiveness: true
2196 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2197 - { id: 1, class: g8rc, preferred-register: '' }
2198 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2199 - { id: 3, class: gprc, preferred-register: '' }
2200 - { id: 4, class: g8rc, preferred-register: '' }
2201 - { id: 5, class: g8rc, preferred-register: '' }
2202 - { id: 6, class: g8rc, preferred-register: '' }
2203 - { id: 7, class: gprc, preferred-register: '' }
2204 - { id: 8, class: gprc, preferred-register: '' }
2205 - { id: 9, class: g8rc, preferred-register: '' }
2206 - { id: 10, class: g8rc, preferred-register: '' }
2207 - { id: 11, class: g8rc, preferred-register: '' }
2208 - { id: 12, class: gprc, preferred-register: '' }
2209 - { id: 13, class: gprc, preferred-register: '' }
2210 - { id: 14, class: g8rc, preferred-register: '' }
2211 - { id: 15, class: g8rc, preferred-register: '' }
2212 - { id: 16, class: g8rc, preferred-register: '' }
2213 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2215 - { reg: '$x3', virtual-reg: '%0' }
2216 - { reg: '$x4', virtual-reg: '%1' }
2218 isFrameAddressTaken: false
2219 isReturnAddressTaken: false
2221 hasPatchPoint: false
2228 maxCallFrameSize: 4294967295
2229 hasOpaqueSPAdjustment: false
2231 hasMustTailInVarArgFunc: false
2246 %4 = INSERT_SUBREG %5, killed %3, 1
2247 %6 = RLDIC killed %4, 1, 31
2248 %7 = LHZX %0, killed %6 :: (load (s16) from %ir.arrayidx, !tbaa !6)
2251 %9 = INSERT_SUBREG %10, killed %8, 1
2253 %12,%17 = LHZUX %0, killed %11 :: (load (s16) from %ir.arrayidx3, !tbaa !6)
2254 ; CHECK: LHZU 31440, %0
2255 ; CHECK-LATE: lhzu 5, 31440(3)
2256 %13 = ADD4 killed %12, killed %7
2258 %14 = INSERT_SUBREG %15, killed %13, 1
2259 %16 = RLWINM8 killed %14, 0, 16, 31
2261 BLR8 implicit $lr8, implicit $rm, implicit $x3
2266 # CHECK-ALL: name: testLHZX
2268 exposesReturnsTwice: false
2270 regBankSelected: false
2272 tracksRegLiveness: true
2274 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2275 - { id: 1, class: g8rc, preferred-register: '' }
2276 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2277 - { id: 3, class: gprc, preferred-register: '' }
2278 - { id: 4, class: g8rc, preferred-register: '' }
2279 - { id: 5, class: g8rc, preferred-register: '' }
2280 - { id: 6, class: g8rc, preferred-register: '' }
2281 - { id: 7, class: gprc, preferred-register: '' }
2282 - { id: 8, class: gprc, preferred-register: '' }
2283 - { id: 9, class: g8rc, preferred-register: '' }
2284 - { id: 10, class: g8rc, preferred-register: '' }
2285 - { id: 11, class: g8rc, preferred-register: '' }
2286 - { id: 12, class: gprc, preferred-register: '' }
2287 - { id: 13, class: gprc, preferred-register: '' }
2288 - { id: 14, class: g8rc, preferred-register: '' }
2289 - { id: 15, class: g8rc, preferred-register: '' }
2290 - { id: 16, class: g8rc, preferred-register: '' }
2292 - { reg: '$x3', virtual-reg: '%0' }
2293 - { reg: '$x4', virtual-reg: '%1' }
2295 isFrameAddressTaken: false
2296 isReturnAddressTaken: false
2298 hasPatchPoint: false
2305 maxCallFrameSize: 4294967295
2306 hasOpaqueSPAdjustment: false
2308 hasMustTailInVarArgFunc: false
2323 %4 = INSERT_SUBREG %5, killed %3, 1
2324 %6 = RLDIC killed %4, 1, 31
2325 %7 = LHZX %0, killed %6 :: (load (s16) from %ir.arrayidx, !tbaa !6)
2328 %9 = INSERT_SUBREG %10, killed %8, 1
2330 %12 = LHZX %0, killed %11 :: (load (s16) from %ir.arrayidx3, !tbaa !6)
2331 ; CHECK: LHZ 882, %0
2332 ; CHECK-LATE: lhz 3, 882(3)
2333 %13 = ADD4 killed %12, killed %7
2335 %14 = INSERT_SUBREG %15, killed %13, 1
2336 %16 = RLWINM8 killed %14, 0, 16, 31
2338 BLR8 implicit $lr8, implicit $rm, implicit $x3
2343 # CHECK-ALL: name: testLHAUX
2345 exposesReturnsTwice: false
2347 regBankSelected: false
2349 tracksRegLiveness: true
2351 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2352 - { id: 1, class: g8rc, preferred-register: '' }
2353 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2354 - { id: 3, class: gprc, preferred-register: '' }
2355 - { id: 4, class: g8rc, preferred-register: '' }
2356 - { id: 5, class: g8rc, preferred-register: '' }
2357 - { id: 6, class: g8rc, preferred-register: '' }
2358 - { id: 7, class: gprc, preferred-register: '' }
2359 - { id: 8, class: gprc, preferred-register: '' }
2360 - { id: 9, class: g8rc, preferred-register: '' }
2361 - { id: 10, class: g8rc, preferred-register: '' }
2362 - { id: 11, class: g8rc, preferred-register: '' }
2363 - { id: 12, class: gprc, preferred-register: '' }
2364 - { id: 13, class: gprc, preferred-register: '' }
2365 - { id: 14, class: g8rc, preferred-register: '' }
2366 - { id: 15, class: g8rc, preferred-register: '' }
2367 - { id: 16, class: g8rc, preferred-register: '' }
2368 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2370 - { reg: '$x3', virtual-reg: '%0' }
2371 - { reg: '$x4', virtual-reg: '%1' }
2373 isFrameAddressTaken: false
2374 isReturnAddressTaken: false
2376 hasPatchPoint: false
2383 maxCallFrameSize: 4294967295
2384 hasOpaqueSPAdjustment: false
2386 hasMustTailInVarArgFunc: false
2401 %4 = INSERT_SUBREG %5, killed %3, 1
2402 %6 = RLDIC %4, 1, 31
2403 %7 = LHZX %0, killed %6 :: (load (s16) from %ir.arrayidx, !tbaa !6)
2406 %9 = INSERT_SUBREG %10, killed %8, 1
2408 %12,%17 = LHAUX %0, killed %11 :: (load (s16) from %ir.arrayidx3, !tbaa !6)
2409 ; CHECK: LHAU 400, %0
2410 ; CHECK-LATE: lhau 5, 400(3)
2411 %13 = ADD4 killed %12, killed %7
2413 %14 = INSERT_SUBREG %15, killed %13, 1
2414 %16 = EXTSH8 killed %14
2416 BLR8 implicit $lr8, implicit $rm, implicit $x3
2421 # CHECK-ALL: name: testLHAX
2423 exposesReturnsTwice: false
2425 regBankSelected: false
2427 tracksRegLiveness: true
2429 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2430 - { id: 1, class: g8rc, preferred-register: '' }
2431 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2432 - { id: 3, class: gprc, preferred-register: '' }
2433 - { id: 4, class: g8rc, preferred-register: '' }
2434 - { id: 5, class: g8rc, preferred-register: '' }
2435 - { id: 6, class: g8rc, preferred-register: '' }
2436 - { id: 7, class: gprc, preferred-register: '' }
2437 - { id: 8, class: gprc, preferred-register: '' }
2438 - { id: 9, class: g8rc, preferred-register: '' }
2439 - { id: 10, class: g8rc, preferred-register: '' }
2440 - { id: 11, class: g8rc, preferred-register: '' }
2441 - { id: 12, class: gprc, preferred-register: '' }
2442 - { id: 13, class: gprc, preferred-register: '' }
2443 - { id: 14, class: g8rc, preferred-register: '' }
2444 - { id: 15, class: g8rc, preferred-register: '' }
2445 - { id: 16, class: g8rc, preferred-register: '' }
2447 - { reg: '$x3', virtual-reg: '%0' }
2448 - { reg: '$x4', virtual-reg: '%1' }
2450 isFrameAddressTaken: false
2451 isReturnAddressTaken: false
2453 hasPatchPoint: false
2460 maxCallFrameSize: 4294967295
2461 hasOpaqueSPAdjustment: false
2463 hasMustTailInVarArgFunc: false
2478 %4 = INSERT_SUBREG %5, killed %3, 1
2480 %7 = LHAX %0, killed %6 :: (load (s16) from %ir.arrayidx, !tbaa !6)
2481 ; CHECK: LHA -999, %0
2482 ; CHECK-LATE: lha 4, -999(3)
2485 %9 = INSERT_SUBREG %10, killed %8, 1
2487 %12 = LHAX %0, killed %11 :: (load (s16) from %ir.arrayidx3, !tbaa !6)
2488 ; CHECK: LHA 999, %0
2489 ; CHECK-LATE: lha 3, 999(3)
2490 %13 = ADD4 killed %12, killed %7
2492 %14 = INSERT_SUBREG %15, killed %13, 1
2493 %16 = EXTSH8 killed %14
2495 BLR8 implicit $lr8, implicit $rm, implicit $x3
2500 # CHECK-ALL: name: testLWZUX
2502 exposesReturnsTwice: false
2504 regBankSelected: false
2506 tracksRegLiveness: true
2508 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2509 - { id: 1, class: g8rc, preferred-register: '' }
2510 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2511 - { id: 3, class: gprc, preferred-register: '' }
2512 - { id: 4, class: g8rc, preferred-register: '' }
2513 - { id: 5, class: g8rc, preferred-register: '' }
2514 - { id: 6, class: g8rc, preferred-register: '' }
2515 - { id: 7, class: gprc, preferred-register: '' }
2516 - { id: 8, class: gprc, preferred-register: '' }
2517 - { id: 9, class: g8rc, preferred-register: '' }
2518 - { id: 10, class: g8rc, preferred-register: '' }
2519 - { id: 11, class: g8rc, preferred-register: '' }
2520 - { id: 12, class: gprc, preferred-register: '' }
2521 - { id: 13, class: gprc, preferred-register: '' }
2522 - { id: 14, class: g8rc, preferred-register: '' }
2523 - { id: 15, class: g8rc, preferred-register: '' }
2524 - { id: 16, class: g8rc, preferred-register: '' }
2525 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2526 - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2528 - { reg: '$x3', virtual-reg: '%0' }
2529 - { reg: '$x4', virtual-reg: '%1' }
2531 isFrameAddressTaken: false
2532 isReturnAddressTaken: false
2534 hasPatchPoint: false
2541 maxCallFrameSize: 4294967295
2542 hasOpaqueSPAdjustment: false
2544 hasMustTailInVarArgFunc: false
2559 %4 = INSERT_SUBREG %5, killed %3, 1
2561 %7,%17 = LWZUX %0, killed %6 :: (load (s32) from %ir.arrayidx, !tbaa !8)
2562 ; CHECK: LWZU 889, %0
2563 ; CHECK-LATE: lwzu {{[0-9]+}}, 889({{[0-9]+}})
2566 %9 = INSERT_SUBREG %10, killed %8, 1
2568 %12,%18 = LWZUX %0, killed %11 :: (load (s32) from %ir.arrayidx3, !tbaa !8)
2569 ; CHECK: LWZU -2, %0
2570 ; CHECK-LATE: lwzu {{[0-9]+}}, -2({{[0-9]+}})
2571 %13 = ADD4 killed %12, killed %7
2573 %14 = INSERT_SUBREG %15, killed %13, 1
2574 %16 = RLDICL killed %14, 0, 32
2576 BLR8 implicit $lr8, implicit $rm, implicit $x3
2581 # CHECK-ALL: name: testLWZX
2583 exposesReturnsTwice: false
2585 regBankSelected: false
2587 tracksRegLiveness: true
2589 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2590 - { id: 1, class: g8rc, preferred-register: '' }
2591 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2592 - { id: 3, class: gprc, preferred-register: '' }
2593 - { id: 4, class: g8rc, preferred-register: '' }
2594 - { id: 5, class: g8rc, preferred-register: '' }
2595 - { id: 6, class: g8rc, preferred-register: '' }
2596 - { id: 7, class: gprc, preferred-register: '' }
2597 - { id: 8, class: gprc, preferred-register: '' }
2598 - { id: 9, class: g8rc, preferred-register: '' }
2599 - { id: 10, class: g8rc, preferred-register: '' }
2600 - { id: 11, class: g8rc, preferred-register: '' }
2601 - { id: 12, class: gprc, preferred-register: '' }
2602 - { id: 13, class: gprc, preferred-register: '' }
2603 - { id: 14, class: g8rc, preferred-register: '' }
2604 - { id: 15, class: g8rc, preferred-register: '' }
2605 - { id: 16, class: g8rc, preferred-register: '' }
2607 - { reg: '$x3', virtual-reg: '%0' }
2608 - { reg: '$x4', virtual-reg: '%1' }
2610 isFrameAddressTaken: false
2611 isReturnAddressTaken: false
2613 hasPatchPoint: false
2620 maxCallFrameSize: 4294967295
2621 hasOpaqueSPAdjustment: false
2623 hasMustTailInVarArgFunc: false
2638 %4 = INSERT_SUBREG %5, killed %3, 1
2639 %6 = RLDIC %4, 2, 30
2640 %7 = LWZX %0, killed %6 :: (load (s32) from %ir.arrayidx, !tbaa !8)
2641 ; CHECK: LWZ 1000, killed %6
2642 ; CHECK-LATE: lwz 5, 1000(5)
2645 %9 = INSERT_SUBREG %10, killed %8, 1
2646 %11 = RLDIC %9, 2, 30
2647 %12 = LWZX %0, killed %11 :: (load (s32) from %ir.arrayidx3, !tbaa !8)
2648 ; CHECK: LWZ 1000, killed %11
2649 ; CHECK-LATE: lwz 3, 1000(4)
2650 %13 = ADD4 killed %12, killed %7
2652 %14 = INSERT_SUBREG %15, killed %13, 1
2653 %16 = RLDICL killed %14, 0, 32
2655 BLR8 implicit $lr8, implicit $rm, implicit $x3
2660 # CHECK-ALL: name: testLWAX
2662 exposesReturnsTwice: false
2664 regBankSelected: false
2666 tracksRegLiveness: true
2668 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2669 - { id: 1, class: g8rc, preferred-register: '' }
2670 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2671 - { id: 3, class: gprc, preferred-register: '' }
2672 - { id: 4, class: g8rc, preferred-register: '' }
2673 - { id: 5, class: g8rc, preferred-register: '' }
2674 - { id: 6, class: g8rc, preferred-register: '' }
2675 - { id: 7, class: g8rc, preferred-register: '' }
2676 - { id: 8, class: gprc, preferred-register: '' }
2677 - { id: 9, class: g8rc, preferred-register: '' }
2678 - { id: 10, class: g8rc, preferred-register: '' }
2679 - { id: 11, class: g8rc, preferred-register: '' }
2680 - { id: 12, class: g8rc, preferred-register: '' }
2681 - { id: 13, class: g8rc, preferred-register: '' }
2683 - { reg: '$x3', virtual-reg: '%0' }
2684 - { reg: '$x4', virtual-reg: '%1' }
2686 isFrameAddressTaken: false
2687 isReturnAddressTaken: false
2689 hasPatchPoint: false
2696 maxCallFrameSize: 4294967295
2697 hasOpaqueSPAdjustment: false
2699 hasMustTailInVarArgFunc: false
2714 %4 = INSERT_SUBREG %5, killed %3, 1
2715 %6 = RLDIC %4, 2, 30
2716 %7 = LWAX %0, killed %6 :: (load (s32) from %ir.arrayidx, !tbaa !8)
2717 ; CHECK: LWA 444, killed %6
2718 ; CHECK-LATE: lwa 5, 444(5)
2721 %9 = INSERT_SUBREG %10, killed %8, 1
2722 %11 = RLDIC %9, 2, 30
2723 %12 = LWAX %0, killed %11 :: (load (s32) from %ir.arrayidx3, !tbaa !8)
2724 ; CHECK: LWA 444, killed %11
2725 ; CHECK-LATE: lwa 3, 444(4)
2726 %13 = ADD8 killed %12, killed %7
2728 BLR8 implicit $lr8, implicit $rm, implicit $x3
2733 # CHECK-ALL: name: testLDUX
2735 exposesReturnsTwice: false
2737 regBankSelected: false
2739 tracksRegLiveness: true
2741 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2742 - { id: 1, class: g8rc, preferred-register: '' }
2743 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2744 - { id: 3, class: gprc, preferred-register: '' }
2745 - { id: 4, class: g8rc, preferred-register: '' }
2746 - { id: 5, class: g8rc, preferred-register: '' }
2747 - { id: 6, class: g8rc, preferred-register: '' }
2748 - { id: 7, class: g8rc, preferred-register: '' }
2749 - { id: 8, class: gprc, preferred-register: '' }
2750 - { id: 9, class: g8rc, preferred-register: '' }
2751 - { id: 10, class: g8rc, preferred-register: '' }
2752 - { id: 11, class: g8rc, preferred-register: '' }
2753 - { id: 12, class: g8rc, preferred-register: '' }
2754 - { id: 13, class: g8rc, preferred-register: '' }
2755 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2756 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2758 - { reg: '$x3', virtual-reg: '%0' }
2759 - { reg: '$x4', virtual-reg: '%1' }
2761 isFrameAddressTaken: false
2762 isReturnAddressTaken: false
2764 hasPatchPoint: false
2771 maxCallFrameSize: 4294967295
2772 hasOpaqueSPAdjustment: false
2774 hasMustTailInVarArgFunc: false
2789 %4 = INSERT_SUBREG %5, killed %3, 1
2791 %7,%14 = LDUX %0, killed %6 :: (load (s64) from %ir.arrayidx, !tbaa !10)
2792 ; CHECK: LDU 100, %0
2793 ; CHECK-LATE: ldu {{[0-9]+}}, 100({{[0-9]+}})
2796 %9 = INSERT_SUBREG %10, killed %8, 1
2798 %12,%15 = LDUX %0, killed %11 :: (load (s64) from %ir.arrayidx3, !tbaa !10)
2799 ; CHECK: LDU 200, %0
2800 ; CHECK-LATE: ldu {{[0-9]+}}, 200({{[0-9]+}})
2801 %13 = ADD8 killed %12, killed %7
2803 BLR8 implicit $lr8, implicit $rm, implicit $x3
2808 # CHECK-ALL: name: testLDX
2810 exposesReturnsTwice: false
2812 regBankSelected: false
2814 tracksRegLiveness: true
2816 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2817 - { id: 1, class: g8rc, preferred-register: '' }
2818 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2819 - { id: 3, class: gprc, preferred-register: '' }
2820 - { id: 4, class: g8rc, preferred-register: '' }
2821 - { id: 5, class: g8rc, preferred-register: '' }
2822 - { id: 6, class: g8rc, preferred-register: '' }
2823 - { id: 7, class: g8rc, preferred-register: '' }
2824 - { id: 8, class: gprc, preferred-register: '' }
2825 - { id: 9, class: g8rc, preferred-register: '' }
2826 - { id: 10, class: g8rc, preferred-register: '' }
2827 - { id: 11, class: g8rc, preferred-register: '' }
2828 - { id: 12, class: g8rc, preferred-register: '' }
2829 - { id: 13, class: g8rc, preferred-register: '' }
2831 - { reg: '$x3', virtual-reg: '%0' }
2832 - { reg: '$x4', virtual-reg: '%1' }
2834 isFrameAddressTaken: false
2835 isReturnAddressTaken: false
2837 hasPatchPoint: false
2844 maxCallFrameSize: 4294967295
2845 hasOpaqueSPAdjustment: false
2847 hasMustTailInVarArgFunc: false
2862 %4 = INSERT_SUBREG %5, killed %3, 1
2864 %7 = LDX %0, killed %6 :: (load (s64) from %ir.arrayidx, !tbaa !10)
2866 ; CHECK-LATE: ld 4, 120(3)
2869 %9 = INSERT_SUBREG %10, killed %8, 1
2871 %12 = LDX %0, killed %11 :: (load (s64) from %ir.arrayidx3, !tbaa !10)
2873 ; CHECK-LATE: ld 3, 280(3)
2874 %13 = ADD8 killed %12, killed %7
2876 BLR8 implicit $lr8, implicit $rm, implicit $x3
2881 # CHECK-ALL: name: testLFDUX
2883 exposesReturnsTwice: false
2885 regBankSelected: false
2887 tracksRegLiveness: true
2889 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2890 - { id: 1, class: g8rc, preferred-register: '' }
2891 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2892 - { id: 3, class: gprc, preferred-register: '' }
2893 - { id: 4, class: g8rc, preferred-register: '' }
2894 - { id: 5, class: g8rc, preferred-register: '' }
2895 - { id: 6, class: g8rc, preferred-register: '' }
2896 - { id: 7, class: f8rc, preferred-register: '' }
2897 - { id: 8, class: gprc, preferred-register: '' }
2898 - { id: 9, class: g8rc, preferred-register: '' }
2899 - { id: 10, class: g8rc, preferred-register: '' }
2900 - { id: 11, class: g8rc, preferred-register: '' }
2901 - { id: 12, class: f8rc, preferred-register: '' }
2902 - { id: 13, class: f8rc, preferred-register: '' }
2903 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2904 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2906 - { reg: '$x3', virtual-reg: '%0' }
2907 - { reg: '$x4', virtual-reg: '%1' }
2909 isFrameAddressTaken: false
2910 isReturnAddressTaken: false
2912 hasPatchPoint: false
2919 maxCallFrameSize: 4294967295
2920 hasOpaqueSPAdjustment: false
2922 hasMustTailInVarArgFunc: false
2937 %4 = INSERT_SUBREG %5, killed %3, 1
2939 %7,%14 = LFDUX %0, killed %6 :: (load (s64) from %ir.arrayidx, !tbaa !12)
2940 ; CHECK: LFDU 440, %0
2941 ; CHECK-LATE: lfdu {{[0-9]+}}, 440({{[0-9]+}})
2944 %9 = INSERT_SUBREG %10, killed %8, 1
2946 %12,%15 = LFDUX %0, killed %11 :: (load (s64) from %ir.arrayidx3, !tbaa !12)
2947 ; CHECK: LFDU 16, %0
2948 ; CHECK-LATE: lfdu {{[0-9]+}}, 16({{[0-9]+}})
2949 %13 = FADD killed %7, killed %12, implicit $rm
2951 BLR8 implicit $lr8, implicit $rm, implicit $f1
2956 # CHECK-ALL: name: testLFDX
2958 exposesReturnsTwice: false
2960 regBankSelected: false
2962 tracksRegLiveness: true
2964 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2965 - { id: 1, class: g8rc, preferred-register: '' }
2966 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2967 - { id: 3, class: gprc, preferred-register: '' }
2968 - { id: 4, class: g8rc, preferred-register: '' }
2969 - { id: 5, class: g8rc, preferred-register: '' }
2970 - { id: 6, class: g8rc, preferred-register: '' }
2971 - { id: 7, class: f8rc, preferred-register: '' }
2972 - { id: 8, class: gprc, preferred-register: '' }
2973 - { id: 9, class: g8rc, preferred-register: '' }
2974 - { id: 10, class: g8rc, preferred-register: '' }
2975 - { id: 11, class: g8rc, preferred-register: '' }
2976 - { id: 12, class: f8rc, preferred-register: '' }
2977 - { id: 13, class: f8rc, preferred-register: '' }
2979 - { reg: '$x3', virtual-reg: '%0' }
2980 - { reg: '$x4', virtual-reg: '%1' }
2982 isFrameAddressTaken: false
2983 isReturnAddressTaken: false
2985 hasPatchPoint: false
2992 maxCallFrameSize: 4294967295
2993 hasOpaqueSPAdjustment: false
2995 hasMustTailInVarArgFunc: false
3010 %4 = INSERT_SUBREG %5, killed %3, 1
3011 %6 = RLDIC %4, 3, 29
3012 %7 = LFDX %0, killed %6 :: (load (s64) from %ir.arrayidx, !tbaa !12)
3013 ; CHECK: LFD -20, killed %6
3014 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
3017 %9 = INSERT_SUBREG %10, killed %8, 1
3018 %11 = RLDIC %9, 3, 29
3019 %12 = LFDX %0, killed %11 :: (load (s64) from %ir.arrayidx3, !tbaa !12)
3020 ; CHECK: LFD -20, killed %11
3021 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
3022 %13 = FADD killed %7, killed %12, implicit $rm
3024 BLR8 implicit $lr8, implicit $rm, implicit $f1
3029 # CHECK-ALL: name: testLFSUX
3031 exposesReturnsTwice: false
3033 regBankSelected: false
3035 tracksRegLiveness: true
3037 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3038 - { id: 1, class: g8rc, preferred-register: '' }
3039 - { id: 2, class: g8rc, preferred-register: '' }
3040 - { id: 3, class: f8rc, preferred-register: '' }
3041 - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3042 - { id: 5, class: f8rc, preferred-register: '' }
3043 - { id: 6, class: g8rc, preferred-register: '' }
3044 - { id: 7, class: gprc, preferred-register: '' }
3045 - { id: 8, class: f8rc, preferred-register: '' }
3046 - { id: 9, class: f8rc, preferred-register: '' }
3047 - { id: 10, class: f8rc, preferred-register: '' }
3048 - { id: 11, class: g8rc, preferred-register: '' }
3049 - { id: 12, class: gprc, preferred-register: '' }
3050 - { id: 13, class: f8rc, preferred-register: '' }
3051 - { id: 14, class: f8rc, preferred-register: '' }
3052 - { id: 15, class: f8rc, preferred-register: '' }
3053 - { id: 16, class: g8rc, preferred-register: '' }
3054 - { id: 17, class: gprc, preferred-register: '' }
3055 - { id: 18, class: f8rc, preferred-register: '' }
3056 - { id: 19, class: f8rc, preferred-register: '' }
3057 - { id: 20, class: f8rc, preferred-register: '' }
3058 - { id: 21, class: g8rc, preferred-register: '' }
3059 - { id: 22, class: gprc, preferred-register: '' }
3060 - { id: 23, class: g8rc, preferred-register: '' }
3061 - { id: 24, class: vrrc, preferred-register: '' }
3063 - { reg: '$x3', virtual-reg: '%0' }
3064 - { reg: '$x4', virtual-reg: '%1' }
3066 isFrameAddressTaken: false
3067 isReturnAddressTaken: false
3069 hasPatchPoint: false
3076 maxCallFrameSize: 4294967295
3077 hasOpaqueSPAdjustment: false
3079 hasMustTailInVarArgFunc: false
3084 - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16,
3085 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3086 local-offset: -16, debug-info-variable: '', debug-info-expression: '',
3087 debug-info-location: '' }
3088 - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4,
3089 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3090 local-offset: -20, debug-info-variable: '', debug-info-expression: '',
3091 debug-info-location: '' }
3092 - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4,
3093 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3094 local-offset: -24, debug-info-variable: '', debug-info-expression: '',
3095 debug-info-location: '' }
3096 - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4,
3097 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3098 local-offset: -28, debug-info-variable: '', debug-info-expression: '',
3099 debug-info-location: '' }
3100 - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4,
3101 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3102 local-offset: -32, debug-info-variable: '', debug-info-expression: '',
3103 debug-info-location: '' }
3112 %3, %4 = LFSUX %0, killed %2 :: (load (s32) from %ir.arrayidx, !tbaa !14)
3113 ; CHECK: LFSU 72, %0
3114 ; CHECK-LATE: lfsu 0, 72(3)
3115 %5 = FCTIWUZ killed %3, implicit $rm
3116 %6 = ADDI8 %stack.4, 0
3117 STFIWX killed %5, $zero8, killed %6
3118 %7 = LWZ 0, %stack.4 :: (load (s32) from %stack.4)
3119 %8 = LFS 4, %4 :: (load (s32) from %ir.3, !tbaa !14)
3120 %10 = FCTIWUZ %8, implicit $rm
3121 %11 = ADDI8 %stack.1, 0
3122 STFIWX killed %10, $zero8, killed %11
3123 %12 = LWZ 0, %stack.1 :: (load (s32) from %stack.1)
3124 %13 = LFS 8, %4 :: (load (s32) from %ir.5, !tbaa !14)
3125 %15 = FCTIWUZ %13, implicit $rm
3126 %16 = ADDI8 %stack.2, 0
3127 STFIWX killed %15, $zero8, killed %16
3128 %17 = LWZ 0, %stack.2 :: (load (s32) from %stack.2)
3129 %18 = LFS 12, %4 :: (load (s32) from %ir.7, !tbaa !14)
3130 %20 = FCTIWUZ %18, implicit $rm
3131 %21 = ADDI8 %stack.3, 0
3132 STFIWX killed %20, $zero8, killed %21
3133 %22 = LWZ 0, %stack.3 :: (load (s32) from %stack.3)
3134 STW killed %7, 0, %stack.0 :: (store (s32) into %stack.0, align 16)
3135 STW killed %22, 12, %stack.0 :: (store (s32) into %stack.0 + 12)
3136 STW killed %17, 8, %stack.0 :: (store (s32) into %stack.0 + 8, align 8)
3137 STW killed %12, 4, %stack.0 :: (store (s32) into %stack.0 + 4)
3138 %23 = ADDI8 %stack.0, 0
3139 %24 = LVX $zero8, killed %23 :: (load (s128) from %stack.0)
3141 BLR8 implicit $lr8, implicit $rm, implicit $v2
3146 # CHECK-ALL: name: testLFSX
3148 exposesReturnsTwice: false
3150 regBankSelected: false
3152 tracksRegLiveness: true
3154 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3155 - { id: 1, class: g8rc, preferred-register: '' }
3156 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3157 - { id: 3, class: gprc, preferred-register: '' }
3158 - { id: 4, class: g8rc, preferred-register: '' }
3159 - { id: 5, class: g8rc, preferred-register: '' }
3160 - { id: 6, class: g8rc, preferred-register: '' }
3161 - { id: 7, class: f4rc, preferred-register: '' }
3162 - { id: 8, class: gprc, preferred-register: '' }
3163 - { id: 9, class: g8rc, preferred-register: '' }
3164 - { id: 10, class: g8rc, preferred-register: '' }
3165 - { id: 11, class: g8rc, preferred-register: '' }
3166 - { id: 12, class: f4rc, preferred-register: '' }
3167 - { id: 13, class: f4rc, preferred-register: '' }
3169 - { reg: '$x3', virtual-reg: '%0' }
3170 - { reg: '$x4', virtual-reg: '%1' }
3172 isFrameAddressTaken: false
3173 isReturnAddressTaken: false
3175 hasPatchPoint: false
3182 maxCallFrameSize: 4294967295
3183 hasOpaqueSPAdjustment: false
3185 hasMustTailInVarArgFunc: false
3200 %4 = INSERT_SUBREG %5, killed %3, 1
3202 %7 = LFSX %0, killed %6 :: (load (s32) from %ir.arrayidx, !tbaa !14)
3204 ; CHECK-LATE: lfs 0, 88(3)
3207 %9 = INSERT_SUBREG %10, killed %8, 1
3209 %12 = LFSX %0, killed %11 :: (load (s32) from %ir.arrayidx3, !tbaa !14)
3210 ; CHECK: LFS -88, %0
3211 ; CHECK-LATE: lfs 1, -88(3)
3212 %13 = FADDS killed %7, killed %12, implicit $rm
3214 BLR8 implicit $lr8, implicit $rm, implicit $f1
3219 # CHECK-ALL: name: testLXSDX
3221 exposesReturnsTwice: false
3223 regBankSelected: false
3225 tracksRegLiveness: true
3227 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3228 - { id: 1, class: g8rc, preferred-register: '' }
3229 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3230 - { id: 3, class: gprc, preferred-register: '' }
3231 - { id: 4, class: g8rc, preferred-register: '' }
3232 - { id: 5, class: g8rc, preferred-register: '' }
3233 - { id: 6, class: g8rc, preferred-register: '' }
3234 - { id: 7, class: vsfrc, preferred-register: '' }
3235 - { id: 8, class: gprc, preferred-register: '' }
3236 - { id: 9, class: g8rc, preferred-register: '' }
3237 - { id: 10, class: g8rc, preferred-register: '' }
3238 - { id: 11, class: g8rc, preferred-register: '' }
3239 - { id: 12, class: vsfrc, preferred-register: '' }
3240 - { id: 13, class: vsfrc, preferred-register: '' }
3242 - { reg: '$x3', virtual-reg: '%0' }
3243 - { reg: '$x4', virtual-reg: '%1' }
3245 isFrameAddressTaken: false
3246 isReturnAddressTaken: false
3248 hasPatchPoint: false
3255 maxCallFrameSize: 4294967295
3256 hasOpaqueSPAdjustment: false
3258 hasMustTailInVarArgFunc: false
3273 %4 = INSERT_SUBREG %5, killed %3, 1
3275 %7 = LXSDX %0, killed %6, implicit $rm :: (load (s64) from %ir.arrayidx, !tbaa !12)
3276 ; CHECK: DFLOADf64 100, %0
3277 ; CHECK-LATE: lfd 0, 100(3)
3280 %9 = INSERT_SUBREG %10, killed %8, 1
3282 %12 = LXSDX %0, killed %11, implicit $rm :: (load (s64) from %ir.arrayidx3, !tbaa !12)
3283 ; CHECK: DFLOADf64 -120, %0
3284 ; CHECK-LATE: lfd 1, -120(3)
3285 %13 = XSADDDP killed %7, killed %12, implicit $rm
3287 BLR8 implicit $lr8, implicit $rm, implicit $f1
3292 # CHECK-ALL: name: testLXSSPX
3294 exposesReturnsTwice: false
3296 regBankSelected: false
3298 tracksRegLiveness: true
3300 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3301 - { id: 1, class: g8rc, preferred-register: '' }
3302 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3303 - { id: 3, class: gprc, preferred-register: '' }
3304 - { id: 4, class: g8rc, preferred-register: '' }
3305 - { id: 5, class: g8rc, preferred-register: '' }
3306 - { id: 6, class: g8rc, preferred-register: '' }
3307 - { id: 7, class: vssrc, preferred-register: '' }
3308 - { id: 8, class: gprc, preferred-register: '' }
3309 - { id: 9, class: g8rc, preferred-register: '' }
3310 - { id: 10, class: g8rc, preferred-register: '' }
3311 - { id: 11, class: g8rc, preferred-register: '' }
3312 - { id: 12, class: vssrc, preferred-register: '' }
3313 - { id: 13, class: vssrc, preferred-register: '' }
3315 - { reg: '$x3', virtual-reg: '%0' }
3316 - { reg: '$x4', virtual-reg: '%1' }
3318 isFrameAddressTaken: false
3319 isReturnAddressTaken: false
3321 hasPatchPoint: false
3328 maxCallFrameSize: 4294967295
3329 hasOpaqueSPAdjustment: false
3331 hasMustTailInVarArgFunc: false
3346 %4 = INSERT_SUBREG %5, killed %3, 1
3348 %7 = LXSSPX %0, killed %6 :: (load (s32) from %ir.arrayidx, !tbaa !14)
3349 ; CHECK: DFLOADf32 96, %0
3350 ; CHECK-LATE: lfs 0, 96(3)
3353 %9 = INSERT_SUBREG %10, killed %8, 1
3355 %12 = LXSSPX %0, killed %11 :: (load (s32) from %ir.arrayidx3, !tbaa !14)
3356 ; CHECK: DFLOADf32 -92, %0
3357 ; CHECK-LATE: lfs 1, -92(3)
3358 %13 = XSADDSP killed %7, killed %12
3360 BLR8 implicit $lr8, implicit $rm, implicit $f1
3365 # CHECK-ALL: name: testLXVX
3367 exposesReturnsTwice: false
3369 regBankSelected: false
3371 tracksRegLiveness: true
3373 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3374 - { id: 1, class: g8rc, preferred-register: '' }
3375 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3376 - { id: 3, class: gprc, preferred-register: '' }
3377 - { id: 4, class: g8rc, preferred-register: '' }
3378 - { id: 5, class: g8rc, preferred-register: '' }
3379 - { id: 6, class: g8rc, preferred-register: '' }
3380 - { id: 7, class: vrrc, preferred-register: '' }
3381 - { id: 8, class: gprc, preferred-register: '' }
3382 - { id: 9, class: g8rc, preferred-register: '' }
3383 - { id: 10, class: g8rc, preferred-register: '' }
3384 - { id: 11, class: g8rc, preferred-register: '' }
3385 - { id: 12, class: vrrc, preferred-register: '' }
3386 - { id: 13, class: vrrc, preferred-register: '' }
3388 - { reg: '$x3', virtual-reg: '%0' }
3389 - { reg: '$x4', virtual-reg: '%1' }
3391 isFrameAddressTaken: false
3392 isReturnAddressTaken: false
3394 hasPatchPoint: false
3401 maxCallFrameSize: 4294967295
3402 hasOpaqueSPAdjustment: false
3404 hasMustTailInVarArgFunc: false
3419 %4 = INSERT_SUBREG %5, killed %3, 1
3421 %7 = LXVX %0, killed %6 :: (load (s128) from %ir.arrayidx, !tbaa !3)
3423 ; CHECK-LATE: lxv 34, 32(3)
3426 %9 = INSERT_SUBREG %10, killed %8, 1
3428 %12 = LXVX %0, killed %11 :: (load (s128) from %ir.arrayidx3, !tbaa !3)
3429 ; CHECK: LXV -16, %0
3430 ; CHECK-LATE: lxv 35, -16(3)
3431 %13 = VADDUWM killed %12, killed %7
3433 BLR8 implicit $lr8, implicit $rm, implicit $v2
3438 # CHECK-ALL: name: testOR
3440 exposesReturnsTwice: false
3442 regBankSelected: false
3444 tracksRegLiveness: true
3446 - { id: 0, class: gprc, preferred-register: '' }
3447 - { id: 1, class: g8rc, preferred-register: '' }
3448 - { id: 2, class: gprc, preferred-register: '' }
3449 - { id: 3, class: gprc, preferred-register: '' }
3451 - { reg: '$x3', virtual-reg: '%0' }
3452 - { reg: '$x4', virtual-reg: '%1' }
3454 isFrameAddressTaken: false
3455 isReturnAddressTaken: false
3457 hasPatchPoint: false
3464 maxCallFrameSize: 4294967295
3465 hasOpaqueSPAdjustment: false
3467 hasMustTailInVarArgFunc: false
3482 ; CHECK-LATE: ori 3, 4, 99
3483 $x3 = EXTSW_32_64 %2
3484 BLR8 implicit $lr8, implicit $rm, implicit $x3
3489 # CHECK-ALL: name: testOR8
3491 exposesReturnsTwice: false
3493 regBankSelected: false
3495 tracksRegLiveness: true
3497 - { id: 0, class: g8rc, preferred-register: '' }
3498 - { id: 1, class: g8rc, preferred-register: '' }
3499 - { id: 2, class: g8rc, preferred-register: '' }
3501 - { reg: '$x3', virtual-reg: '%0' }
3502 - { reg: '$x4', virtual-reg: '%1' }
3504 isFrameAddressTaken: false
3505 isReturnAddressTaken: false
3507 hasPatchPoint: false
3514 maxCallFrameSize: 4294967295
3515 hasOpaqueSPAdjustment: false
3517 hasMustTailInVarArgFunc: false
3530 ; CHECK: ORI8 %1, 777
3531 ; CHECK-LATE: ori 3, 4, 777
3533 BLR8 implicit $lr8, implicit $rm, implicit $x3
3538 # CHECK-ALL: name: testORI
3540 exposesReturnsTwice: false
3542 regBankSelected: false
3544 tracksRegLiveness: true
3546 - { id: 0, class: gprc, preferred-register: '' }
3547 - { id: 1, class: gprc, preferred-register: '' }
3549 - { reg: '$x3', virtual-reg: '%0' }
3551 isFrameAddressTaken: false
3552 isReturnAddressTaken: false
3554 hasPatchPoint: false
3561 maxCallFrameSize: 4294967295
3562 hasOpaqueSPAdjustment: false
3564 hasMustTailInVarArgFunc: false
3577 ; CHECK-LATE: li 3, 857
3578 $x3 = EXTSW_32_64 %1
3579 BLR8 implicit $lr8, implicit $rm, implicit $x3
3584 # CHECK-ALL: name: testORI8
3586 exposesReturnsTwice: false
3588 regBankSelected: false
3590 tracksRegLiveness: true
3592 - { id: 0, class: g8rc, preferred-register: '' }
3593 - { id: 1, class: g8rc, preferred-register: '' }
3595 - { reg: '$x3', virtual-reg: '%0' }
3597 isFrameAddressTaken: false
3598 isReturnAddressTaken: false
3600 hasPatchPoint: false
3607 maxCallFrameSize: 4294967295
3608 hasOpaqueSPAdjustment: false
3610 hasMustTailInVarArgFunc: false
3623 ; CHECK-LATE: li 3, 8819
3625 BLR8 implicit $lr8, implicit $rm, implicit $x3
3630 # CHECK-ALL: name: testRLDCL
3632 exposesReturnsTwice: false
3634 regBankSelected: false
3636 tracksRegLiveness: true
3638 - { id: 0, class: g8rc, preferred-register: '' }
3639 - { id: 1, class: g8rc, preferred-register: '' }
3640 - { id: 2, class: gprc, preferred-register: '' }
3641 - { id: 3, class: gprc, preferred-register: '' }
3642 - { id: 4, class: g8rc, preferred-register: '' }
3644 - { reg: '$x3', virtual-reg: '%0' }
3645 - { reg: '$x4', virtual-reg: '%1' }
3647 isFrameAddressTaken: false
3648 isReturnAddressTaken: false
3650 hasPatchPoint: false
3657 maxCallFrameSize: 4294967295
3658 hasOpaqueSPAdjustment: false
3660 hasMustTailInVarArgFunc: false
3674 %4 = RLDCL %0, killed %3, 0
3675 ; CHECK: RLDICL %0, 14, 0
3676 ; CHECK-LATE: rotldi 3, 3, 14
3678 BLR8 implicit $lr8, implicit $rm, implicit $x3
3683 # CHECK-ALL: name: testRLDCL_rec
3685 exposesReturnsTwice: false
3687 regBankSelected: false
3689 tracksRegLiveness: true
3691 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3692 - { id: 1, class: g8rc, preferred-register: '' }
3693 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3694 - { id: 3, class: gprc, preferred-register: '' }
3695 - { id: 4, class: g8rc, preferred-register: '' }
3696 - { id: 5, class: crrc, preferred-register: '' }
3697 - { id: 6, class: g8rc, preferred-register: '' }
3699 - { reg: '$x3', virtual-reg: '%0' }
3700 - { reg: '$x4', virtual-reg: '%1' }
3702 isFrameAddressTaken: false
3703 isReturnAddressTaken: false
3705 hasPatchPoint: false
3712 maxCallFrameSize: 4294967295
3713 hasOpaqueSPAdjustment: false
3715 hasMustTailInVarArgFunc: false
3727 %2 = RLDICL %1, 0, 58
3729 %4 = RLDCL_rec %0, killed %3, 0, implicit-def $cr0
3730 ; CHECK: RLDICL_rec %0, 37, 0, implicit-def $cr0
3731 ; CHECK-LATE: rotldi. 5, 3, 37
3732 %5 = COPY killed $cr0
3733 %6 = ISEL8 %2, %0, %5.sub_eq
3735 BLR8 implicit $lr8, implicit $rm, implicit $x3
3740 # CHECK-ALL: name: testRLDCR
3742 exposesReturnsTwice: false
3744 regBankSelected: false
3746 tracksRegLiveness: true
3748 - { id: 0, class: g8rc, preferred-register: '' }
3749 - { id: 1, class: g8rc, preferred-register: '' }
3750 - { id: 2, class: gprc, preferred-register: '' }
3751 - { id: 3, class: gprc, preferred-register: '' }
3752 - { id: 4, class: g8rc, preferred-register: '' }
3754 - { reg: '$x3', virtual-reg: '%0' }
3755 - { reg: '$x4', virtual-reg: '%1' }
3757 isFrameAddressTaken: false
3758 isReturnAddressTaken: false
3760 hasPatchPoint: false
3767 maxCallFrameSize: 4294967295
3768 hasOpaqueSPAdjustment: false
3770 hasMustTailInVarArgFunc: false
3784 %4 = RLDCR %0, killed %3, 0
3785 ; CHECK: RLDICR %0, 0, 0
3786 ; CHECK-LATE: rldicr 3, 3, 0, 0
3788 BLR8 implicit $lr8, implicit $rm, implicit $x3
3793 # CHECK-ALL: name: testRLDCR_rec
3795 exposesReturnsTwice: false
3797 regBankSelected: false
3799 tracksRegLiveness: true
3801 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3802 - { id: 1, class: g8rc, preferred-register: '' }
3803 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3804 - { id: 3, class: gprc, preferred-register: '' }
3805 - { id: 4, class: g8rc, preferred-register: '' }
3806 - { id: 5, class: crrc, preferred-register: '' }
3807 - { id: 6, class: g8rc, preferred-register: '' }
3809 - { reg: '$x3', virtual-reg: '%0' }
3810 - { reg: '$x4', virtual-reg: '%1' }
3812 isFrameAddressTaken: false
3813 isReturnAddressTaken: false
3815 hasPatchPoint: false
3822 maxCallFrameSize: 4294967295
3823 hasOpaqueSPAdjustment: false
3825 hasMustTailInVarArgFunc: false
3837 %2 = RLDICL %1, 0, 58
3839 %4 = RLDCR_rec %0, killed %3, 0, implicit-def $cr0
3840 ; CHECK: RLDICR_rec %0, 18, 0, implicit-def $cr0
3841 ; CHECK-LATE: rldicr. 5, 3, 18, 0
3842 %5 = COPY killed $cr0
3843 %6 = ISEL8 %2, %0, %5.sub_eq
3845 BLR8 implicit $lr8, implicit $rm, implicit $x3
3850 # CHECK-ALL: name: testRLDICL
3852 exposesReturnsTwice: false
3854 regBankSelected: false
3856 tracksRegLiveness: true
3858 - { id: 0, class: g8rc, preferred-register: '' }
3859 - { id: 1, class: g8rc, preferred-register: '' }
3861 - { reg: '$x3', virtual-reg: '%0' }
3863 isFrameAddressTaken: false
3864 isReturnAddressTaken: false
3866 hasPatchPoint: false
3873 maxCallFrameSize: 4294967295
3874 hasOpaqueSPAdjustment: false
3876 hasMustTailInVarArgFunc: false
3887 %1 = RLDICL %0, 53, 49
3889 ; CHECK-LATE: li 3, 32767
3891 BLR8 implicit $lr8, implicit $rm, implicit $x3
3895 name: testRLDICL_MB0
3896 # CHECK-ALL: name: testRLDICL_MB0
3898 exposesReturnsTwice: false
3900 regBankSelected: false
3902 tracksRegLiveness: true
3904 - { id: 0, class: g8rc, preferred-register: '' }
3905 - { id: 1, class: g8rc, preferred-register: '' }
3907 - { reg: '$x3', virtual-reg: '%0' }
3909 isFrameAddressTaken: false
3910 isReturnAddressTaken: false
3912 hasPatchPoint: false
3919 maxCallFrameSize: 4294967295
3920 hasOpaqueSPAdjustment: false
3922 hasMustTailInVarArgFunc: false
3933 %1 = RLDICL %0, 60, 0
3935 ; CHECK-LATE: li 3, 2
3937 BLR8 implicit $lr8, implicit $rm, implicit $x3
3941 name: testRLDICL_rec
3942 # CHECK-ALL: name: testRLDICL_rec
3944 exposesReturnsTwice: false
3946 regBankSelected: false
3948 tracksRegLiveness: true
3950 - { id: 0, class: g8rc, preferred-register: '' }
3951 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3952 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3953 - { id: 3, class: crrc, preferred-register: '' }
3954 - { id: 4, class: g8rc, preferred-register: '' }
3956 - { reg: '$x3', virtual-reg: '%0' }
3957 - { reg: '$x4', virtual-reg: '%1' }
3959 isFrameAddressTaken: false
3960 isReturnAddressTaken: false
3962 hasPatchPoint: false
3969 maxCallFrameSize: 4294967295
3970 hasOpaqueSPAdjustment: false
3972 hasMustTailInVarArgFunc: false
3984 %2 = RLDICL_rec %0, 53, 48, implicit-def $cr0
3985 ; CHECK: ANDI8_rec %0, 65535
3986 ; CHECK-LATE: li 3, -1
3987 ; CHECK-LATE: andi. 3, 3, 65535
3988 %3 = COPY killed $cr0
3989 %4 = ISEL8 %1, %2, %3.sub_eq
3991 BLR8 implicit $lr8, implicit $rm, implicit $x3
3995 name: testRLDICL_rec2
3996 # CHECK-ALL: name: testRLDICL_rec2
3998 exposesReturnsTwice: false
4000 regBankSelected: false
4002 tracksRegLiveness: true
4004 - { id: 0, class: g8rc, preferred-register: '' }
4005 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4006 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4007 - { id: 3, class: crrc, preferred-register: '' }
4008 - { id: 4, class: g8rc, preferred-register: '' }
4010 - { reg: '$x3', virtual-reg: '%0' }
4011 - { reg: '$x4', virtual-reg: '%1' }
4013 isFrameAddressTaken: false
4014 isReturnAddressTaken: false
4016 hasPatchPoint: false
4023 maxCallFrameSize: 4294967295
4024 hasOpaqueSPAdjustment: false
4026 hasMustTailInVarArgFunc: false
4038 %2 = RLDICL_rec %0, 61, 3, implicit-def $cr0
4040 ; CHECK: ANDI8_rec %0, 25
4041 ; CHECK-LATE-NOT: andi.
4042 %3 = COPY killed $cr0
4043 %4 = ISEL8 %1, %2, %3.sub_eq
4045 BLR8 implicit $lr8, implicit $rm, implicit $x3
4049 name: testRLDICL_rec3
4050 # CHECK-ALL: name: testRLDICL_rec3
4052 exposesReturnsTwice: false
4054 regBankSelected: false
4056 tracksRegLiveness: true
4058 - { id: 0, class: g8rc, preferred-register: '' }
4059 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4060 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4061 - { id: 3, class: crrc, preferred-register: '' }
4062 - { id: 4, class: g8rc, preferred-register: '' }
4064 - { reg: '$x3', virtual-reg: '%0' }
4065 - { reg: '$x4', virtual-reg: '%1' }
4067 isFrameAddressTaken: false
4068 isReturnAddressTaken: false
4070 hasPatchPoint: false
4077 maxCallFrameSize: 4294967295
4078 hasOpaqueSPAdjustment: false
4080 hasMustTailInVarArgFunc: false
4092 %2 = RLDICL_rec %0, 32, 32, implicit-def $cr0
4093 ; CHECK: ANDI8_rec %0, 0
4094 ; CHECK-LATE: li 3, 2
4095 ; CHECK-LATE: andi. 3, 3, 0
4096 %3 = COPY killed $cr0
4097 %4 = ISEL8 %1, %2, %3.sub_eq
4099 BLR8 implicit $lr8, implicit $rm, implicit $x3
4104 # CHECK-ALL: name: testRLWINM
4106 exposesReturnsTwice: false
4108 regBankSelected: false
4110 tracksRegLiveness: true
4112 - { id: 0, class: g8rc, preferred-register: '' }
4113 - { id: 1, class: gprc, preferred-register: '' }
4114 - { id: 2, class: gprc, preferred-register: '' }
4115 - { id: 3, class: g8rc, preferred-register: '' }
4116 - { id: 4, class: gprc, preferred-register: '' }
4118 - { reg: '$x3', virtual-reg: '%0' }
4120 isFrameAddressTaken: false
4121 isReturnAddressTaken: false
4123 hasPatchPoint: false
4130 maxCallFrameSize: 4294967295
4131 hasOpaqueSPAdjustment: false
4133 hasMustTailInVarArgFunc: false
4147 %4 = RLWINM killed %2, 4, 20, 27
4149 ; CHECK-LATE: li 3, 272
4150 $x3 = EXTSW_32_64 %4
4151 BLR8 implicit $lr8, implicit $rm, implicit $x3
4155 name: testRLWINMFullReg
4156 # CHECK-ALL: name: testRLWINMFullReg
4158 exposesReturnsTwice: false
4160 regBankSelected: false
4162 tracksRegLiveness: true
4164 - { id: 0, class: g8rc, preferred-register: '' }
4165 - { id: 1, class: gprc, preferred-register: '' }
4166 - { id: 2, class: gprc, preferred-register: '' }
4167 - { id: 3, class: g8rc, preferred-register: '' }
4168 - { id: 4, class: gprc, preferred-register: '' }
4170 - { reg: '$x3', virtual-reg: '%0' }
4172 isFrameAddressTaken: false
4173 isReturnAddressTaken: false
4175 hasPatchPoint: false
4182 maxCallFrameSize: 4294967295
4183 hasOpaqueSPAdjustment: false
4185 hasMustTailInVarArgFunc: false
4199 %4 = RLWINM killed %2, 31, 0, 31
4201 ; CHECK-LATE: li 3, 1
4202 $x3 = EXTSW_32_64 %4
4203 BLR8 implicit $lr8, implicit $rm, implicit $x3
4207 name: testRLWINMFullRegOutOfRange
4208 # CHECK-ALL: name: testRLWINMFullRegOutOfRange
4210 exposesReturnsTwice: false
4212 regBankSelected: false
4214 tracksRegLiveness: true
4216 - { id: 0, class: g8rc, preferred-register: '' }
4217 - { id: 1, class: gprc, preferred-register: '' }
4218 - { id: 2, class: gprc, preferred-register: '' }
4219 - { id: 3, class: g8rc, preferred-register: '' }
4220 - { id: 4, class: gprc, preferred-register: '' }
4222 - { reg: '$x3', virtual-reg: '%0' }
4224 isFrameAddressTaken: false
4225 isReturnAddressTaken: false
4227 hasPatchPoint: false
4234 maxCallFrameSize: 4294967295
4235 hasOpaqueSPAdjustment: false
4237 hasMustTailInVarArgFunc: false
4251 %4 = RLWINM killed %2, 31, 0, 31
4252 ; CHECK: RLWINM killed %2, 31, 0, 31
4253 ; CHECK-LATE: rotlwi 3, 3, 31
4254 $x3 = EXTSW_32_64 %4
4255 BLR8 implicit $lr8, implicit $rm, implicit $x3
4260 # CHECK-ALL: name: testRLWINM8
4262 exposesReturnsTwice: false
4264 regBankSelected: false
4266 tracksRegLiveness: true
4268 - { id: 0, class: g8rc, preferred-register: '' }
4269 - { id: 1, class: g8rc, preferred-register: '' }
4271 - { reg: '$x3', virtual-reg: '%0' }
4273 isFrameAddressTaken: false
4274 isReturnAddressTaken: false
4276 hasPatchPoint: false
4283 maxCallFrameSize: 4294967295
4284 hasOpaqueSPAdjustment: false
4286 hasMustTailInVarArgFunc: false
4297 %1 = RLWINM8 %0, 4, 20, 27
4299 ; CHECK-LATE: li 3, 3744
4301 BLR8 implicit $lr8, implicit $rm, implicit $x3
4305 name: testRLWINM_rec
4306 # CHECK-ALL: name: testRLWINM_rec
4308 exposesReturnsTwice: false
4310 regBankSelected: false
4312 tracksRegLiveness: true
4314 - { id: 0, class: g8rc, preferred-register: '' }
4315 - { id: 1, class: g8rc, preferred-register: '' }
4316 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4317 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4318 - { id: 4, class: gprc, preferred-register: '' }
4319 - { id: 5, class: crrc, preferred-register: '' }
4320 - { id: 6, class: gprc, preferred-register: '' }
4321 - { id: 7, class: g8rc, preferred-register: '' }
4322 - { id: 8, class: g8rc, preferred-register: '' }
4323 - { id: 9, class: g8rc, preferred-register: '' }
4325 - { reg: '$x3', virtual-reg: '%0' }
4326 - { reg: '$x4', virtual-reg: '%1' }
4328 isFrameAddressTaken: false
4329 isReturnAddressTaken: false
4331 hasPatchPoint: false
4338 maxCallFrameSize: 4294967295
4339 hasOpaqueSPAdjustment: false
4341 hasMustTailInVarArgFunc: false
4355 %4 = RLWINM_rec %3, 0, 24, 31, implicit-def $cr0
4357 ; CHECK: ANDI_rec %3, 65514
4358 ; CHECK-LATE: li 3, -22
4359 ; CHECK-LATE: andi. 5, 3, 234
4360 %5 = COPY killed $cr0
4361 %6 = ISEL %2, %3, %5.sub_eq
4363 %7 = INSERT_SUBREG %8, killed %6, 1
4364 %9 = RLDICL killed %7, 0, 32
4366 BLR8 implicit $lr8, implicit $rm, implicit $x3
4370 name: testRLWINM_rec2
4371 # CHECK-ALL: name: testRLWINM_rec2
4373 exposesReturnsTwice: false
4375 regBankSelected: false
4377 tracksRegLiveness: true
4379 - { id: 0, class: g8rc, preferred-register: '' }
4380 - { id: 1, class: g8rc, preferred-register: '' }
4381 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4382 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4383 - { id: 4, class: gprc, preferred-register: '' }
4384 - { id: 5, class: crrc, preferred-register: '' }
4385 - { id: 6, class: gprc, preferred-register: '' }
4386 - { id: 7, class: g8rc, preferred-register: '' }
4387 - { id: 8, class: g8rc, preferred-register: '' }
4388 - { id: 9, class: g8rc, preferred-register: '' }
4390 - { reg: '$x3', virtual-reg: '%0' }
4391 - { reg: '$x4', virtual-reg: '%1' }
4393 isFrameAddressTaken: false
4394 isReturnAddressTaken: false
4396 hasPatchPoint: false
4403 maxCallFrameSize: 4294967295
4404 hasOpaqueSPAdjustment: false
4406 hasMustTailInVarArgFunc: false
4420 %4 = RLWINM_rec %3, 5, 24, 31, implicit-def $cr0
4422 ; CHECK-NOT: ANDI8_rec %3, 65514
4423 ; CHECK-LATE-NOT: andi.
4424 %5 = COPY killed $cr0
4425 %6 = ISEL %2, %3, %5.sub_eq
4427 %7 = INSERT_SUBREG %8, killed %6, 1
4428 %9 = RLDICL killed %7, 0, 32
4430 BLR8 implicit $lr8, implicit $rm, implicit $x3
4434 name: testRLWINM8_rec
4435 # CHECK-ALL: name: testRLWINM8_rec
4437 exposesReturnsTwice: false
4439 regBankSelected: false
4441 tracksRegLiveness: true
4443 - { id: 0, class: g8rc, preferred-register: '' }
4444 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4445 - { id: 2, class: g8rc, preferred-register: '' }
4446 - { id: 3, class: g8rc, preferred-register: '' }
4447 - { id: 4, class: g8rc, preferred-register: '' }
4448 - { id: 5, class: g8rc, preferred-register: '' }
4449 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4450 - { id: 7, class: crrc, preferred-register: '' }
4451 - { id: 8, class: g8rc, preferred-register: '' }
4453 - { reg: '$x3', virtual-reg: '%0' }
4454 - { reg: '$x4', virtual-reg: '%1' }
4456 isFrameAddressTaken: false
4457 isReturnAddressTaken: false
4459 hasPatchPoint: false
4466 maxCallFrameSize: 4294967295
4467 hasOpaqueSPAdjustment: false
4469 hasMustTailInVarArgFunc: false
4482 %3 = RLWINM8_rec %2, 4, 20, 27, implicit-def $cr0
4483 ; CHECK: ANDI8_rec %2, 3808
4484 ; CHECK-LATE: li 3, -18
4485 ; CHECK-LATE: andi. 3, 3, 3808
4486 %7 = COPY killed $cr0
4487 %6 = RLDICL killed %3, 0, 32
4488 %8 = ISEL8 %1, %6, %7.sub_eq
4490 BLR8 implicit $lr8, implicit $rm, implicit $x3
4495 # CHECK-ALL: name: testSLD
4497 exposesReturnsTwice: false
4499 regBankSelected: false
4501 tracksRegLiveness: true
4503 - { id: 0, class: g8rc, preferred-register: '' }
4504 - { id: 1, class: g8rc, preferred-register: '' }
4505 - { id: 2, class: gprc, preferred-register: '' }
4506 - { id: 3, class: g8rc, preferred-register: '' }
4508 - { reg: '$x3', virtual-reg: '%0' }
4509 - { reg: '$x4', virtual-reg: '%1' }
4511 isFrameAddressTaken: false
4512 isReturnAddressTaken: false
4514 hasPatchPoint: false
4521 maxCallFrameSize: 4294967295
4522 hasOpaqueSPAdjustment: false
4524 hasMustTailInVarArgFunc: false
4537 %3 = SLD %0, killed %2
4538 ; CHECK: RLDICR %0, 13, 50
4539 ; CHECK-LATE: sldi 3, 3, 13
4541 BLR8 implicit $lr8, implicit $rm, implicit $x3
4546 # CHECK-ALL: name: testSLD_rec
4548 exposesReturnsTwice: false
4550 regBankSelected: false
4552 tracksRegLiveness: true
4554 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4555 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4556 - { id: 2, class: gprc, preferred-register: '' }
4557 - { id: 3, class: g8rc, preferred-register: '' }
4558 - { id: 4, class: crrc, preferred-register: '' }
4559 - { id: 5, class: g8rc, preferred-register: '' }
4561 - { reg: '$x3', virtual-reg: '%0' }
4562 - { reg: '$x4', virtual-reg: '%1' }
4564 isFrameAddressTaken: false
4565 isReturnAddressTaken: false
4567 hasPatchPoint: false
4574 maxCallFrameSize: 4294967295
4575 hasOpaqueSPAdjustment: false
4577 hasMustTailInVarArgFunc: false
4590 %3 = SLD_rec %0, killed %2, implicit-def $cr0
4591 ; CHECK: RLDICR_rec %0, 17, 46, implicit-def $cr0
4592 ; CHECK-LATE: rldicr. 5, 3, 17, 46
4593 %4 = COPY killed $cr0
4594 %5 = ISEL8 %1, %0, %4.sub_eq
4596 BLR8 implicit $lr8, implicit $rm, implicit $x3
4601 # CHECK-ALL: name: testSRD
4603 exposesReturnsTwice: false
4605 regBankSelected: false
4607 tracksRegLiveness: true
4609 - { id: 0, class: g8rc, preferred-register: '' }
4610 - { id: 1, class: g8rc, preferred-register: '' }
4611 - { id: 2, class: gprc, preferred-register: '' }
4612 - { id: 3, class: g8rc, preferred-register: '' }
4614 - { reg: '$x3', virtual-reg: '%0' }
4615 - { reg: '$x4', virtual-reg: '%1' }
4617 isFrameAddressTaken: false
4618 isReturnAddressTaken: false
4620 hasPatchPoint: false
4627 maxCallFrameSize: 4294967295
4628 hasOpaqueSPAdjustment: false
4630 hasMustTailInVarArgFunc: false
4643 %3 = SRD %0, killed %2
4644 ; CHECK: RLDICL %0, 60, 4
4645 ; CHECK-LATE: rldicl 3, 3, 60, 4
4647 BLR8 implicit $lr8, implicit $rm, implicit $x3
4652 # CHECK-ALL: name: testSRD_rec
4654 exposesReturnsTwice: false
4656 regBankSelected: false
4658 tracksRegLiveness: true
4660 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4661 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4662 - { id: 2, class: gprc, preferred-register: '' }
4663 - { id: 3, class: g8rc, preferred-register: '' }
4664 - { id: 4, class: crrc, preferred-register: '' }
4665 - { id: 5, class: g8rc, preferred-register: '' }
4667 - { reg: '$x3', virtual-reg: '%0' }
4668 - { reg: '$x4', virtual-reg: '%1' }
4670 isFrameAddressTaken: false
4671 isReturnAddressTaken: false
4673 hasPatchPoint: false
4680 maxCallFrameSize: 4294967295
4681 hasOpaqueSPAdjustment: false
4683 hasMustTailInVarArgFunc: false
4696 %3 = SRD_rec %0, killed %2, implicit-def $cr0
4697 ; CHECK: RLDICL_rec %0, 47, 17, implicit-def $cr0
4698 ; CHECK-LATE: rldicl. 5, 3, 47, 17
4699 %4 = COPY killed $cr0
4700 %5 = ISEL8 %1, %0, %4.sub_eq
4702 BLR8 implicit $lr8, implicit $rm, implicit $x3
4707 # CHECK-ALL: name: testSLW
4709 exposesReturnsTwice: false
4711 regBankSelected: false
4713 tracksRegLiveness: true
4715 - { id: 0, class: g8rc, preferred-register: '' }
4716 - { id: 1, class: g8rc, preferred-register: '' }
4717 - { id: 2, class: gprc, preferred-register: '' }
4718 - { id: 3, class: g8rc, preferred-register: '' }
4719 - { id: 4, class: g8rc, preferred-register: '' }
4720 - { id: 5, class: gprc, preferred-register: '' }
4721 - { id: 6, class: g8rc, preferred-register: '' }
4722 - { id: 7, class: g8rc, preferred-register: '' }
4723 - { id: 8, class: gprc, preferred-register: '' }
4725 - { reg: '$x3', virtual-reg: '%0' }
4726 - { reg: '$x4', virtual-reg: '%1' }
4728 isFrameAddressTaken: false
4729 isReturnAddressTaken: false
4731 hasPatchPoint: false
4738 maxCallFrameSize: 4294967295
4739 hasOpaqueSPAdjustment: false
4741 hasMustTailInVarArgFunc: false
4755 %8 = SLW killed %2, killed %5
4756 ; CHECK: RLWINM killed %2, 21, 0, 10
4757 ; CHECK-LATE: slwi 3, 4, 21
4758 $x3 = EXTSW_32_64 %8
4759 BLR8 implicit $lr8, implicit $rm, implicit $x3
4764 # CHECK-ALL: name: testSLW_rec
4766 exposesReturnsTwice: false
4768 regBankSelected: false
4770 tracksRegLiveness: true
4772 - { id: 0, class: g8rc, preferred-register: '' }
4773 - { id: 1, class: g8rc, preferred-register: '' }
4774 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4775 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4776 - { id: 4, class: gprc, preferred-register: '' }
4777 - { id: 5, class: crrc, preferred-register: '' }
4778 - { id: 6, class: gprc, preferred-register: '' }
4779 - { id: 7, class: g8rc, preferred-register: '' }
4780 - { id: 8, class: g8rc, preferred-register: '' }
4781 - { id: 9, class: g8rc, preferred-register: '' }
4783 - { reg: '$x3', virtual-reg: '%0' }
4784 - { reg: '$x4', virtual-reg: '%1' }
4786 isFrameAddressTaken: false
4787 isReturnAddressTaken: false
4789 hasPatchPoint: false
4796 maxCallFrameSize: 4294967295
4797 hasOpaqueSPAdjustment: false
4799 hasMustTailInVarArgFunc: false
4813 %4 = SLW_rec %3, %2, implicit-def $cr0
4814 ; CHECK: RLWINM_rec %3, 11, 0, 20, implicit-def $cr0
4815 ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20
4816 %5 = COPY killed $cr0
4817 %6 = ISEL %2, %3, %5.sub_eq
4819 %7 = INSERT_SUBREG %8, killed %6, 1
4820 %9 = RLDICL killed %7, 0, 32
4822 BLR8 implicit $lr8, implicit $rm, implicit $x3
4827 # CHECK-ALL: name: testSRW
4829 exposesReturnsTwice: false
4831 regBankSelected: false
4833 tracksRegLiveness: true
4835 - { id: 0, class: g8rc, preferred-register: '' }
4836 - { id: 1, class: g8rc, preferred-register: '' }
4837 - { id: 2, class: gprc, preferred-register: '' }
4838 - { id: 3, class: g8rc, preferred-register: '' }
4839 - { id: 4, class: g8rc, preferred-register: '' }
4840 - { id: 5, class: gprc, preferred-register: '' }
4841 - { id: 6, class: g8rc, preferred-register: '' }
4842 - { id: 7, class: g8rc, preferred-register: '' }
4843 - { id: 8, class: gprc, preferred-register: '' }
4845 - { reg: '$x3', virtual-reg: '%0' }
4846 - { reg: '$x4', virtual-reg: '%1' }
4848 isFrameAddressTaken: false
4849 isReturnAddressTaken: false
4851 hasPatchPoint: false
4858 maxCallFrameSize: 4294967295
4859 hasOpaqueSPAdjustment: false
4861 hasMustTailInVarArgFunc: false
4875 %8 = SRW killed %5, killed %2
4876 ; CHECK: RLWINM killed %5, 24, 8, 31
4877 ; CHECK-LATE: srwi 3, 3, 8
4878 $x3 = EXTSW_32_64 %8
4879 BLR8 implicit $lr8, implicit $rm, implicit $x3
4884 # CHECK-ALL: name: testSRW_rec
4886 exposesReturnsTwice: false
4888 regBankSelected: false
4890 tracksRegLiveness: true
4892 - { id: 0, class: g8rc, preferred-register: '' }
4893 - { id: 1, class: g8rc, preferred-register: '' }
4894 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4895 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4896 - { id: 4, class: gprc, preferred-register: '' }
4897 - { id: 5, class: crrc, preferred-register: '' }
4898 - { id: 6, class: gprc, preferred-register: '' }
4899 - { id: 7, class: g8rc, preferred-register: '' }
4900 - { id: 8, class: g8rc, preferred-register: '' }
4901 - { id: 9, class: g8rc, preferred-register: '' }
4903 - { reg: '$x3', virtual-reg: '%0' }
4904 - { reg: '$x4', virtual-reg: '%1' }
4906 isFrameAddressTaken: false
4907 isReturnAddressTaken: false
4909 hasPatchPoint: false
4916 maxCallFrameSize: 4294967295
4917 hasOpaqueSPAdjustment: false
4919 hasMustTailInVarArgFunc: false
4933 %4 = SRW_rec %3, %2, implicit-def $cr0
4934 ; CHECK: RLWINM_rec %3, 25, 7, 31
4935 ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31
4936 %5 = COPY killed $cr0
4937 %6 = ISEL %2, %3, %5.sub_eq
4939 %7 = INSERT_SUBREG %8, killed %6, 1
4940 %9 = RLDICL killed %7, 0, 32
4942 BLR8 implicit $lr8, implicit $rm, implicit $x3
4947 # CHECK-ALL: name: testSRAW
4949 exposesReturnsTwice: false
4951 regBankSelected: false
4953 tracksRegLiveness: true
4955 - { id: 0, class: g8rc, preferred-register: '' }
4956 - { id: 1, class: g8rc, preferred-register: '' }
4957 - { id: 2, class: gprc, preferred-register: '' }
4958 - { id: 3, class: gprc, preferred-register: '' }
4959 - { id: 4, class: gprc, preferred-register: '' }
4960 - { id: 5, class: g8rc, preferred-register: '' }
4962 - { reg: '$x3', virtual-reg: '%0' }
4963 - { reg: '$x4', virtual-reg: '%1' }
4965 isFrameAddressTaken: false
4966 isReturnAddressTaken: false
4968 hasPatchPoint: false
4975 maxCallFrameSize: 4294967295
4976 hasOpaqueSPAdjustment: false
4978 hasMustTailInVarArgFunc: false
4992 %4 = SRAW killed %3, killed %2, implicit-def dead $carry
4993 ; CHECK: SRAWI killed %3, 15, implicit-def dead $carry
4994 ; CHECK-LATE: srawi 3, 3, 15
4995 %5 = EXTSW_32_64 killed %4
4997 BLR8 implicit $lr8, implicit $rm, implicit $x3
5002 # CHECK-ALL: name: testSRAW_rec
5004 exposesReturnsTwice: false
5006 regBankSelected: false
5008 tracksRegLiveness: true
5010 - { id: 0, class: g8rc, preferred-register: '' }
5011 - { id: 1, class: g8rc, preferred-register: '' }
5012 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
5013 - { id: 3, class: gprc, preferred-register: '' }
5014 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5015 - { id: 5, class: crrc, preferred-register: '' }
5016 - { id: 6, class: gprc, preferred-register: '' }
5017 - { id: 7, class: g8rc, preferred-register: '' }
5019 - { reg: '$x3', virtual-reg: '%0' }
5020 - { reg: '$x4', virtual-reg: '%1' }
5022 isFrameAddressTaken: false
5023 isReturnAddressTaken: false
5025 hasPatchPoint: false
5032 maxCallFrameSize: 4294967295
5033 hasOpaqueSPAdjustment: false
5035 hasMustTailInVarArgFunc: false
5049 %4 = SRAW_rec killed %3, %2, implicit-def dead $carry, implicit-def $cr0
5050 ; CHECK: SRAWI_rec killed %3, 8, implicit-def dead $carry, implicit-def $cr0
5051 ; CHECK-LATE: srawi. 3, 3, 8
5052 %5 = COPY killed $cr0
5053 %6 = ISEL %2, %4, %5.sub_eq
5054 %7 = EXTSW_32_64 killed %6
5056 BLR8 implicit $lr8, implicit $rm, implicit $x3
5061 # CHECK-ALL: name: testSRAD
5063 exposesReturnsTwice: false
5065 regBankSelected: false
5067 tracksRegLiveness: true
5069 - { id: 0, class: g8rc, preferred-register: '' }
5070 - { id: 1, class: g8rc, preferred-register: '' }
5071 - { id: 2, class: gprc, preferred-register: '' }
5072 - { id: 3, class: g8rc, preferred-register: '' }
5074 - { reg: '$x3', virtual-reg: '%0' }
5075 - { reg: '$x4', virtual-reg: '%1' }
5077 isFrameAddressTaken: false
5078 isReturnAddressTaken: false
5080 hasPatchPoint: false
5087 maxCallFrameSize: 4294967295
5088 hasOpaqueSPAdjustment: false
5090 hasMustTailInVarArgFunc: false
5103 %3 = SRAD %0, killed %2, implicit-def dead $carry
5104 ; CHECK: SRADI %0, 44, implicit-def dead $carry
5105 ; CHECK-LATE: sradi 3, 3, 44
5107 BLR8 implicit $lr8, implicit $rm, implicit $x3
5112 # CHECK-ALL: name: testSRAD_rec
5114 exposesReturnsTwice: false
5116 regBankSelected: false
5118 tracksRegLiveness: true
5120 - { id: 0, class: g8rc, preferred-register: '' }
5121 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5122 - { id: 2, class: gprc, preferred-register: '' }
5123 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5124 - { id: 4, class: crrc, preferred-register: '' }
5125 - { id: 5, class: g8rc, preferred-register: '' }
5127 - { reg: '$x3', virtual-reg: '%0' }
5128 - { reg: '$x4', virtual-reg: '%1' }
5130 isFrameAddressTaken: false
5131 isReturnAddressTaken: false
5133 hasPatchPoint: false
5140 maxCallFrameSize: 4294967295
5141 hasOpaqueSPAdjustment: false
5143 hasMustTailInVarArgFunc: false
5156 %3 = SRAD_rec %0, killed %2, implicit-def dead $carry, implicit-def $cr0
5157 ; CHECK: SRADI_rec %0, 61, implicit-def dead $carry, implicit-def $cr0
5158 ; CHECK-LATE: sradi. 3, 3, 61
5159 %4 = COPY killed $cr0
5160 %5 = ISEL8 %1, %3, %4.sub_eq
5162 BLR8 implicit $lr8, implicit $rm, implicit $x3
5167 # CHECK-ALL: name: testSTBUX
5169 exposesReturnsTwice: false
5171 regBankSelected: false
5173 tracksRegLiveness: true
5175 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5176 - { id: 1, class: g8rc, preferred-register: '' }
5177 - { id: 2, class: g8rc, preferred-register: '' }
5178 - { id: 3, class: gprc, preferred-register: '' }
5179 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5180 - { id: 5, class: gprc, preferred-register: '' }
5181 - { id: 6, class: g8rc, preferred-register: '' }
5182 - { id: 7, class: g8rc, preferred-register: '' }
5183 - { id: 8, class: g8rc, preferred-register: '' }
5184 - { id: 9, class: gprc, preferred-register: '' }
5185 - { id: 10, class: g8rc, preferred-register: '' }
5186 - { id: 11, class: g8rc, preferred-register: '' }
5187 - { id: 12, class: g8rc, preferred-register: '' }
5188 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5189 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5191 - { reg: '$x3', virtual-reg: '%0' }
5192 - { reg: '$x4', virtual-reg: '%1' }
5193 - { reg: '$x5', virtual-reg: '%2' }
5195 isFrameAddressTaken: false
5196 isReturnAddressTaken: false
5198 hasPatchPoint: false
5205 maxCallFrameSize: 4294967295
5206 hasOpaqueSPAdjustment: false
5208 hasMustTailInVarArgFunc: false
5216 liveins: $x3, $x4, $x5
5225 %6 = INSERT_SUBREG %7, killed %5, 1
5227 %13 = STBUX %3, %0, killed %8 :: (store (s8) into %ir.arrayidx, !tbaa !3)
5228 ; CHECK: STBU %3, 966, %0
5229 ; CHECK-LATE: {{[0-9]+}}, 966({{[0-9]+}})
5232 %10 = INSERT_SUBREG %11, killed %9, 1
5234 %14 = STBUX %3, %0, killed %12 :: (store (s8) into %ir.arrayidx3, !tbaa !3)
5235 ; CHECK: STBU %3, 777, %0
5236 ; CHECK-LATE: {{[0-9]+}}, 777({{[0-9]+}})
5237 BLR8 implicit $lr8, implicit $rm
5242 # CHECK-ALL: name: testSTBX
5244 exposesReturnsTwice: false
5246 regBankSelected: false
5248 tracksRegLiveness: true
5250 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5251 - { id: 1, class: g8rc, preferred-register: '' }
5252 - { id: 2, class: g8rc, preferred-register: '' }
5253 - { id: 3, class: gprc, preferred-register: '' }
5254 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5255 - { id: 5, class: gprc, preferred-register: '' }
5256 - { id: 6, class: g8rc, preferred-register: '' }
5257 - { id: 7, class: g8rc, preferred-register: '' }
5258 - { id: 8, class: g8rc, preferred-register: '' }
5259 - { id: 9, class: gprc, preferred-register: '' }
5260 - { id: 10, class: g8rc, preferred-register: '' }
5261 - { id: 11, class: g8rc, preferred-register: '' }
5262 - { id: 12, class: g8rc, preferred-register: '' }
5264 - { reg: '$x3', virtual-reg: '%0' }
5265 - { reg: '$x4', virtual-reg: '%1' }
5266 - { reg: '$x5', virtual-reg: '%2' }
5268 isFrameAddressTaken: false
5269 isReturnAddressTaken: false
5271 hasPatchPoint: false
5278 maxCallFrameSize: 4294967295
5279 hasOpaqueSPAdjustment: false
5281 hasMustTailInVarArgFunc: false
5289 liveins: $x3, $x4, $x5
5298 %6 = INSERT_SUBREG %7, killed %5, 1
5299 %8 = RLDICL killed %6, 0, 32
5300 STBX %3, %0, killed %8 :: (store (s8) into %ir.arrayidx, !tbaa !3)
5301 ; CHECK: STB %3, 975, killed %8
5302 ; CHECK-LATE: stb 4, 975(6)
5305 %10 = INSERT_SUBREG %11, killed %9, 1
5306 %12 = RLDICL killed %10, 0, 32
5307 STBX %3, %0, killed %12 :: (store (s8) into %ir.arrayidx3, !tbaa !3)
5308 ; CHECK: STB %3, 975, killed %12
5309 ; CHECK-LATE: stb 4, 975(5)
5310 BLR8 implicit $lr8, implicit $rm
5315 # CHECK-ALL: name: testSTHUX
5317 exposesReturnsTwice: false
5319 regBankSelected: false
5321 tracksRegLiveness: true
5323 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5324 - { id: 1, class: g8rc, preferred-register: '' }
5325 - { id: 2, class: g8rc, preferred-register: '' }
5326 - { id: 3, class: gprc, preferred-register: '' }
5327 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5328 - { id: 5, class: gprc, preferred-register: '' }
5329 - { id: 6, class: g8rc, preferred-register: '' }
5330 - { id: 7, class: g8rc, preferred-register: '' }
5331 - { id: 8, class: g8rc, preferred-register: '' }
5332 - { id: 9, class: gprc, preferred-register: '' }
5333 - { id: 10, class: g8rc, preferred-register: '' }
5334 - { id: 11, class: g8rc, preferred-register: '' }
5335 - { id: 12, class: g8rc, preferred-register: '' }
5336 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5337 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5339 - { reg: '$x3', virtual-reg: '%0' }
5340 - { reg: '$x4', virtual-reg: '%1' }
5341 - { reg: '$x5', virtual-reg: '%2' }
5343 isFrameAddressTaken: false
5344 isReturnAddressTaken: false
5346 hasPatchPoint: false
5353 maxCallFrameSize: 4294967295
5354 hasOpaqueSPAdjustment: false
5356 hasMustTailInVarArgFunc: false
5364 liveins: $x3, $x4, $x5
5373 %6 = INSERT_SUBREG %7, killed %5, 1
5375 %13 = STHUX %3, %0, killed %8 :: (store (s16) into %ir.arrayidx, !tbaa !6)
5376 ; CHECK: STHU %3, 32000, %0
5377 ; CHECK-LATE: sthu {{[0-9]+}}, 32000({{[0-9]+}})
5380 %10 = INSERT_SUBREG %11, killed %9, 1
5382 %14 = STHUX %3, %0, killed %12 :: (store (s16) into %ir.arrayidx3, !tbaa !6)
5383 ; CHECK: STHU %3, -761, %0
5384 ; CHECK-LATE: sthu {{[0-9]+}}, -761({{[0-9]+}})
5385 BLR8 implicit $lr8, implicit $rm
5390 # CHECK-ALL: name: testSTHX
5392 exposesReturnsTwice: false
5394 regBankSelected: false
5396 tracksRegLiveness: true
5398 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5399 - { id: 1, class: g8rc, preferred-register: '' }
5400 - { id: 2, class: g8rc, preferred-register: '' }
5401 - { id: 3, class: gprc, preferred-register: '' }
5402 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5403 - { id: 5, class: gprc, preferred-register: '' }
5404 - { id: 6, class: g8rc, preferred-register: '' }
5405 - { id: 7, class: g8rc, preferred-register: '' }
5406 - { id: 8, class: g8rc, preferred-register: '' }
5407 - { id: 9, class: gprc, preferred-register: '' }
5408 - { id: 10, class: g8rc, preferred-register: '' }
5409 - { id: 11, class: g8rc, preferred-register: '' }
5410 - { id: 12, class: g8rc, preferred-register: '' }
5412 - { reg: '$x3', virtual-reg: '%0' }
5413 - { reg: '$x4', virtual-reg: '%1' }
5414 - { reg: '$x5', virtual-reg: '%2' }
5416 isFrameAddressTaken: false
5417 isReturnAddressTaken: false
5419 hasPatchPoint: false
5426 maxCallFrameSize: 4294967295
5427 hasOpaqueSPAdjustment: false
5429 hasMustTailInVarArgFunc: false
5437 liveins: $x3, $x4, $x5
5446 %6 = INSERT_SUBREG %7, killed %5, 1
5448 STHX %3, %0, killed %8 :: (store (s8) into %ir.arrayidx, !tbaa !3)
5449 ; CHECK: STH %3, 900, %0
5450 ; CHECK-LATE: sth {{[0-9]+}}, 900({{[0-9]+}})
5453 %10 = INSERT_SUBREG %11, killed %9, 1
5455 STHX %3, %0, killed %12 :: (store (s8) into %ir.arrayidx3, !tbaa !3)
5456 ; CHECK: STH %3, -900, %0
5457 ; CHECK-LATE: sth {{[0-9]+}}, -900({{[0-9]+}})
5458 BLR8 implicit $lr8, implicit $rm
5463 # CHECK-ALL: name: testSTWUX
5465 exposesReturnsTwice: false
5467 regBankSelected: false
5469 tracksRegLiveness: true
5471 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5472 - { id: 1, class: g8rc, preferred-register: '' }
5473 - { id: 2, class: g8rc, preferred-register: '' }
5474 - { id: 3, class: gprc, preferred-register: '' }
5475 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5476 - { id: 5, class: gprc, preferred-register: '' }
5477 - { id: 6, class: g8rc, preferred-register: '' }
5478 - { id: 7, class: g8rc, preferred-register: '' }
5479 - { id: 8, class: g8rc, preferred-register: '' }
5480 - { id: 9, class: gprc, preferred-register: '' }
5481 - { id: 10, class: g8rc, preferred-register: '' }
5482 - { id: 11, class: g8rc, preferred-register: '' }
5483 - { id: 12, class: g8rc, preferred-register: '' }
5484 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5485 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5487 - { reg: '$x3', virtual-reg: '%0' }
5488 - { reg: '$x4', virtual-reg: '%1' }
5489 - { reg: '$x5', virtual-reg: '%2' }
5491 isFrameAddressTaken: false
5492 isReturnAddressTaken: false
5494 hasPatchPoint: false
5501 maxCallFrameSize: 4294967295
5502 hasOpaqueSPAdjustment: false
5504 hasMustTailInVarArgFunc: false
5512 liveins: $x3, $x4, $x5
5521 %6 = INSERT_SUBREG %7, killed %5, 1
5523 %13 = STWUX %3, %0, killed %8 :: (store (s32) into %ir.arrayidx, !tbaa !8)
5524 ; CHECK: STWU %3, 111, %0
5525 ; CHECK-LATE: stwu {{[0-9]+}}, 111({{[0-9]+}})
5528 %10 = INSERT_SUBREG %11, killed %9, 1
5530 %14 = STWUX %3, %0, killed %12 :: (store (s32) into %ir.arrayidx3, !tbaa !8)
5531 ; CHECK: STWU %3, 0, %0
5532 ; CHECK-LATE: stwu {{[0-9]+}}, 0({{[0-9]+}})
5533 BLR8 implicit $lr8, implicit $rm
5538 # CHECK-ALL: name: testSTWX
5540 exposesReturnsTwice: false
5542 regBankSelected: false
5544 tracksRegLiveness: true
5546 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5547 - { id: 1, class: g8rc, preferred-register: '' }
5548 - { id: 2, class: g8rc, preferred-register: '' }
5549 - { id: 3, class: gprc, preferred-register: '' }
5550 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5551 - { id: 5, class: gprc, preferred-register: '' }
5552 - { id: 6, class: g8rc, preferred-register: '' }
5553 - { id: 7, class: g8rc, preferred-register: '' }
5554 - { id: 8, class: g8rc, preferred-register: '' }
5555 - { id: 9, class: gprc, preferred-register: '' }
5556 - { id: 10, class: g8rc, preferred-register: '' }
5557 - { id: 11, class: g8rc, preferred-register: '' }
5558 - { id: 12, class: g8rc, preferred-register: '' }
5560 - { reg: '$x3', virtual-reg: '%0' }
5561 - { reg: '$x4', virtual-reg: '%1' }
5562 - { reg: '$x5', virtual-reg: '%2' }
5564 isFrameAddressTaken: false
5565 isReturnAddressTaken: false
5567 hasPatchPoint: false
5574 maxCallFrameSize: 4294967295
5575 hasOpaqueSPAdjustment: false
5577 hasMustTailInVarArgFunc: false
5585 liveins: $x3, $x4, $x5
5594 %6 = INSERT_SUBREG %7, killed %5, 1
5596 STWX %3, %0, killed %8 :: (store (s32) into %ir.arrayidx, !tbaa !8)
5597 ; CHECK: STW %3, 2, %0
5598 ; CHECK-LATE: stw 4, 2(3)
5601 %10 = INSERT_SUBREG %11, killed %9, 1
5603 STWX %3, %0, killed %12 :: (store (s32) into %ir.arrayidx3, !tbaa !8)
5604 ; CHECK: STW %3, 99, %0
5605 ; CHECK-LATE: stw 4, 99(3)
5606 BLR8 implicit $lr8, implicit $rm
5611 # CHECK-ALL: name: testSTDUX
5613 exposesReturnsTwice: false
5615 regBankSelected: false
5617 tracksRegLiveness: true
5619 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5620 - { id: 1, class: g8rc, preferred-register: '' }
5621 - { id: 2, class: g8rc, preferred-register: '' }
5622 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5623 - { id: 4, class: gprc, preferred-register: '' }
5624 - { id: 5, class: g8rc, preferred-register: '' }
5625 - { id: 6, class: g8rc, preferred-register: '' }
5626 - { id: 7, class: g8rc, preferred-register: '' }
5627 - { id: 8, class: gprc, preferred-register: '' }
5628 - { id: 9, class: g8rc, preferred-register: '' }
5629 - { id: 10, class: g8rc, preferred-register: '' }
5630 - { id: 11, class: g8rc, preferred-register: '' }
5631 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5632 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5634 - { reg: '$x3', virtual-reg: '%0' }
5635 - { reg: '$x4', virtual-reg: '%1' }
5636 - { reg: '$x5', virtual-reg: '%2' }
5638 isFrameAddressTaken: false
5639 isReturnAddressTaken: false
5641 hasPatchPoint: false
5648 maxCallFrameSize: 4294967295
5649 hasOpaqueSPAdjustment: false
5651 hasMustTailInVarArgFunc: false
5659 liveins: $x3, $x4, $x5
5667 %5 = INSERT_SUBREG %6, killed %4, 1
5669 %12 = STDUX %1, %0, killed %7 :: (store (s64) into %ir.arrayidx, !tbaa !10)
5670 ; CHECK: STDU %1, 444, %0
5671 ; CHECK-LATE: stdu {{[0-9]+}}, 444({{[0-9]+}})
5674 %9 = INSERT_SUBREG %10, killed %8, 1
5676 %13 = STDUX %1, %0, killed %11 :: (store (s64) into %ir.arrayidx3, !tbaa !10)
5677 ; CHECK: STDU %1, -8, %0
5678 ; CHECK-LATE: stdu {{[0-9]+}}, -8({{[0-9]+}})
5679 BLR8 implicit $lr8, implicit $rm
5684 # CHECK-ALL: name: testSTDX
5686 exposesReturnsTwice: false
5688 regBankSelected: false
5690 tracksRegLiveness: true
5692 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5693 - { id: 1, class: g8rc, preferred-register: '' }
5694 - { id: 2, class: g8rc, preferred-register: '' }
5695 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5696 - { id: 4, class: gprc, preferred-register: '' }
5697 - { id: 5, class: g8rc, preferred-register: '' }
5698 - { id: 6, class: g8rc, preferred-register: '' }
5699 - { id: 7, class: g8rc, preferred-register: '' }
5700 - { id: 8, class: gprc, preferred-register: '' }
5701 - { id: 9, class: g8rc, preferred-register: '' }
5702 - { id: 10, class: g8rc, preferred-register: '' }
5703 - { id: 11, class: g8rc, preferred-register: '' }
5705 - { reg: '$x3', virtual-reg: '%0' }
5706 - { reg: '$x4', virtual-reg: '%1' }
5707 - { reg: '$x5', virtual-reg: '%2' }
5709 isFrameAddressTaken: false
5710 isReturnAddressTaken: false
5712 hasPatchPoint: false
5719 maxCallFrameSize: 4294967295
5720 hasOpaqueSPAdjustment: false
5722 hasMustTailInVarArgFunc: false
5730 liveins: $x3, $x4, $x5
5738 %5 = INSERT_SUBREG %6, killed %4, 1
5740 STDX %1, %0, killed %7 :: (store (s64) into %ir.arrayidx, !tbaa !10)
5741 ; CHECK: STD %1, 1000, killed %7
5742 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
5745 %9 = INSERT_SUBREG %10, killed %8, 1
5747 STDX %1, %0, killed %11 :: (store (s64) into %ir.arrayidx3, !tbaa !10)
5748 ; CHECK: STD %1, 1000, killed %11
5749 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
5750 BLR8 implicit $lr8, implicit $rm
5755 # CHECK-ALL: name: testSTFSX
5757 exposesReturnsTwice: false
5759 regBankSelected: false
5761 tracksRegLiveness: true
5763 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5764 - { id: 1, class: f4rc, preferred-register: '' }
5765 - { id: 2, class: g8rc, preferred-register: '' }
5766 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5767 - { id: 4, class: gprc, preferred-register: '' }
5768 - { id: 5, class: g8rc, preferred-register: '' }
5769 - { id: 6, class: g8rc, preferred-register: '' }
5770 - { id: 7, class: g8rc, preferred-register: '' }
5771 - { id: 8, class: gprc, preferred-register: '' }
5772 - { id: 9, class: g8rc, preferred-register: '' }
5773 - { id: 10, class: g8rc, preferred-register: '' }
5774 - { id: 11, class: g8rc, preferred-register: '' }
5776 - { reg: '$x3', virtual-reg: '%0' }
5777 - { reg: '$f1', virtual-reg: '%1' }
5778 - { reg: '$x5', virtual-reg: '%2' }
5780 isFrameAddressTaken: false
5781 isReturnAddressTaken: false
5783 hasPatchPoint: false
5790 maxCallFrameSize: 4294967295
5791 hasOpaqueSPAdjustment: false
5793 hasMustTailInVarArgFunc: false
5801 liveins: $x3, $f1, $x5
5809 %5 = INSERT_SUBREG %6, killed %4, 1
5811 STFSX %1, %0, killed %7 :: (store (s32) into %ir.arrayidx, !tbaa !14)
5812 ; CHECK: STFS %1, 400, %0
5813 ; CHECK-LATE: stfs 1, 400(3)
5816 %9 = INSERT_SUBREG %10, killed %8, 1
5818 STFSX %1, %0, killed %11 :: (store (s32) into %ir.arrayidx3, !tbaa !14)
5819 ; CHECK: STFS %1, -401, %0
5820 ; CHECK-LATE: stfs 1, -401(3)
5821 BLR8 implicit $lr8, implicit $rm
5826 # CHECK-ALL: name: testSTFSUX
5828 exposesReturnsTwice: false
5830 regBankSelected: false
5832 tracksRegLiveness: true
5834 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5835 - { id: 1, class: f4rc, preferred-register: '' }
5836 - { id: 2, class: g8rc, preferred-register: '' }
5837 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5838 - { id: 4, class: gprc, preferred-register: '' }
5839 - { id: 5, class: g8rc, preferred-register: '' }
5840 - { id: 6, class: g8rc, preferred-register: '' }
5841 - { id: 7, class: g8rc, preferred-register: '' }
5842 - { id: 8, class: gprc, preferred-register: '' }
5843 - { id: 9, class: g8rc, preferred-register: '' }
5844 - { id: 10, class: g8rc, preferred-register: '' }
5845 - { id: 11, class: g8rc, preferred-register: '' }
5846 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5847 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5849 - { reg: '$x3', virtual-reg: '%0' }
5850 - { reg: '$f1', virtual-reg: '%1' }
5851 - { reg: '$x5', virtual-reg: '%2' }
5853 isFrameAddressTaken: false
5854 isReturnAddressTaken: false
5856 hasPatchPoint: false
5863 maxCallFrameSize: 4294967295
5864 hasOpaqueSPAdjustment: false
5866 hasMustTailInVarArgFunc: false
5874 liveins: $x3, $f1, $x5
5882 %5 = INSERT_SUBREG %6, killed %4, 1
5884 %12 = STFSUX %1, %0, killed %7 :: (store (s32) into %ir.arrayidx, !tbaa !14)
5885 ; CHECK: STFSU %1, 111, %0
5886 ; CHECK-LATE: stfsu {{[0-9]+}}, 111({{[0-9]+}})
5889 %9 = INSERT_SUBREG %10, killed %8, 1
5891 %13 = STFSUX %1, %0, killed %11 :: (store (s32) into %ir.arrayidx3, !tbaa !14)
5892 ; CHECK: STFSU %1, 987, %0
5893 ; CHECK-LATE: stfsu {{[0-9]+}}, 987({{[0-9]+}})
5894 BLR8 implicit $lr8, implicit $rm
5899 # CHECK-ALL: name: testSTFDX
5901 exposesReturnsTwice: false
5903 regBankSelected: false
5905 tracksRegLiveness: true
5907 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5908 - { id: 1, class: f8rc, preferred-register: '' }
5909 - { id: 2, class: g8rc, preferred-register: '' }
5910 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5911 - { id: 4, class: gprc, preferred-register: '' }
5912 - { id: 5, class: g8rc, preferred-register: '' }
5913 - { id: 6, class: g8rc, preferred-register: '' }
5914 - { id: 7, class: g8rc, preferred-register: '' }
5915 - { id: 8, class: gprc, preferred-register: '' }
5916 - { id: 9, class: g8rc, preferred-register: '' }
5917 - { id: 10, class: g8rc, preferred-register: '' }
5918 - { id: 11, class: g8rc, preferred-register: '' }
5920 - { reg: '$x3', virtual-reg: '%0' }
5921 - { reg: '$f1', virtual-reg: '%1' }
5922 - { reg: '$x5', virtual-reg: '%2' }
5924 isFrameAddressTaken: false
5925 isReturnAddressTaken: false
5927 hasPatchPoint: false
5934 maxCallFrameSize: 4294967295
5935 hasOpaqueSPAdjustment: false
5937 hasMustTailInVarArgFunc: false
5945 liveins: $x3, $f1, $x5
5953 %5 = INSERT_SUBREG %6, killed %4, 1
5955 STFDX %1, %0, killed %7 :: (store (s64) into %ir.arrayidx, !tbaa !12)
5956 ; CHECK: STFD %1, 876, %0
5957 ; CHECK-LATE: stfd 1, 876(3)
5960 %9 = INSERT_SUBREG %10, killed %8, 1
5962 STFDX %1, %0, killed %11 :: (store (s64) into %ir.arrayidx3, !tbaa !12)
5963 ; CHECK: STFD %1, -873, %0
5964 ; CHECK-LATE: stfd 1, -873(3)
5965 BLR8 implicit $lr8, implicit $rm
5970 # CHECK-ALL: name: testSTFDUX
5972 exposesReturnsTwice: false
5974 regBankSelected: false
5976 tracksRegLiveness: true
5978 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5979 - { id: 1, class: f8rc, preferred-register: '' }
5980 - { id: 2, class: g8rc, preferred-register: '' }
5981 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5982 - { id: 4, class: gprc, preferred-register: '' }
5983 - { id: 5, class: g8rc, preferred-register: '' }
5984 - { id: 6, class: g8rc, preferred-register: '' }
5985 - { id: 7, class: g8rc, preferred-register: '' }
5986 - { id: 8, class: gprc, preferred-register: '' }
5987 - { id: 9, class: g8rc, preferred-register: '' }
5988 - { id: 10, class: g8rc, preferred-register: '' }
5989 - { id: 11, class: g8rc, preferred-register: '' }
5990 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5991 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5993 - { reg: '$x3', virtual-reg: '%0' }
5994 - { reg: '$f1', virtual-reg: '%1' }
5995 - { reg: '$x5', virtual-reg: '%2' }
5997 isFrameAddressTaken: false
5998 isReturnAddressTaken: false
6000 hasPatchPoint: false
6007 maxCallFrameSize: 4294967295
6008 hasOpaqueSPAdjustment: false
6010 hasMustTailInVarArgFunc: false
6018 liveins: $x3, $f1, $x5
6026 %5 = INSERT_SUBREG %6, killed %4, 1
6028 %12 = STFDUX %1, %0, killed %7 :: (store (s64) into %ir.arrayidx, !tbaa !12)
6029 ; CHECK: STFDU %1, -9038, %0
6030 ; CHECK-LATE: stfdu {{[0-9]+}}, -9038({{[0-9]+}})
6033 %9 = INSERT_SUBREG %10, killed %8, 1
6035 %13 = STFDUX %1, %0, killed %11 :: (store (s64) into %ir.arrayidx3, !tbaa !12)
6036 ; CHECK: STFDU %1, 6477, %0
6037 ; CHECK-LATE: stfdu {{[0-9]+}}, 6477({{[0-9]+}})
6038 BLR8 implicit $lr8, implicit $rm
6043 # CHECK-ALL: name: testSTXSSPX
6045 exposesReturnsTwice: false
6047 regBankSelected: false
6049 tracksRegLiveness: true
6051 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
6052 - { id: 1, class: vssrc, preferred-register: '' }
6053 - { id: 2, class: g8rc, preferred-register: '' }
6054 - { id: 3, class: g8rc, preferred-register: '' }
6056 - { reg: '$x3', virtual-reg: '%0' }
6057 - { reg: '$f1', virtual-reg: '%1' }
6058 - { reg: '$x5', virtual-reg: '%2' }
6060 isFrameAddressTaken: false
6061 isReturnAddressTaken: false
6063 hasPatchPoint: false
6070 maxCallFrameSize: 4294967295
6071 hasOpaqueSPAdjustment: false
6073 hasMustTailInVarArgFunc: false
6081 liveins: $x3, $f1, $x5
6087 STXSSPX %1, %0, killed %3 :: (store (s32) into %ir.arrayidx, !tbaa !14)
6088 ; CHECK: DFSTOREf32 %1, 444, %0
6089 ; CHECK-LATE: stfs 1, 444(3)
6090 BLR8 implicit $lr8, implicit $rm
6095 # CHECK-ALL: name: testSTXSDX
6097 exposesReturnsTwice: false
6099 regBankSelected: false
6101 tracksRegLiveness: true
6103 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
6104 - { id: 1, class: vsfrc, preferred-register: '' }
6105 - { id: 2, class: g8rc, preferred-register: '' }
6106 - { id: 3, class: g8rc, preferred-register: '' }
6108 - { reg: '$x3', virtual-reg: '%0' }
6109 - { reg: '$f1', virtual-reg: '%1' }
6110 - { reg: '$x5', virtual-reg: '%2' }
6112 isFrameAddressTaken: false
6113 isReturnAddressTaken: false
6115 hasPatchPoint: false
6122 maxCallFrameSize: 4294967295
6123 hasOpaqueSPAdjustment: false
6125 hasMustTailInVarArgFunc: false
6133 liveins: $x3, $f1, $x5
6139 STXSDX %1, %0, killed %3, implicit $rm :: (store (s64) into %ir.arrayidx, !tbaa !12)
6140 ; CHECK: DFSTOREf64 %1, 4, %0
6141 ; CHECK-LATE: stfd 1, 4(3)
6142 BLR8 implicit $lr8, implicit $rm
6147 # CHECK-ALL: name: testSTXVX
6149 exposesReturnsTwice: false
6151 regBankSelected: false
6153 tracksRegLiveness: true
6155 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
6156 - { id: 1, class: vrrc, preferred-register: '' }
6157 - { id: 2, class: g8rc, preferred-register: '' }
6158 - { id: 3, class: g8rc, preferred-register: '' }
6160 - { reg: '$x3', virtual-reg: '%0' }
6161 - { reg: '$v2', virtual-reg: '%1' }
6162 - { reg: '$x7', virtual-reg: '%2' }
6164 isFrameAddressTaken: false
6165 isReturnAddressTaken: false
6167 hasPatchPoint: false
6174 maxCallFrameSize: 4294967295
6175 hasOpaqueSPAdjustment: false
6177 hasMustTailInVarArgFunc: false
6185 liveins: $x3, $v2, $x7
6190 %3 = RLDICR %2, 4, 59
6191 STXVX %1, %0, killed %3 :: (store (s128) into %ir.arrayidx, !tbaa !3)
6192 ; CHECK: STXV %1, 16, killed %3
6193 ; CHECK-LATE: stxv 34, 16(4)
6194 BLR8 implicit $lr8, implicit $rm
6199 # CHECK-ALL: name: testSUBFC
6201 exposesReturnsTwice: false
6203 regBankSelected: false
6205 tracksRegLiveness: true
6207 - { id: 0, class: gprc, preferred-register: '' }
6208 - { id: 1, class: g8rc, preferred-register: '' }
6209 - { id: 2, class: g8rc, preferred-register: '' }
6210 - { id: 3, class: g8rc, preferred-register: '' }
6211 - { id: 4, class: gprc, preferred-register: '' }
6212 - { id: 5, class: gprc, preferred-register: '' }
6213 - { id: 6, class: gprc, preferred-register: '' }
6214 - { id: 7, class: gprc, preferred-register: '' }
6215 - { id: 8, class: gprc, preferred-register: '' }
6217 - { reg: '$x3', virtual-reg: '%0' }
6218 - { reg: '$x4', virtual-reg: '%1' }
6219 - { reg: '$x5', virtual-reg: '%2' }
6220 - { reg: '$x6', virtual-reg: '%3' }
6222 isFrameAddressTaken: false
6223 isReturnAddressTaken: false
6225 hasPatchPoint: false
6232 maxCallFrameSize: 4294967295
6233 hasOpaqueSPAdjustment: false
6235 hasMustTailInVarArgFunc: false
6243 liveins: $x3, $x4, $x5, $x6
6252 %4 = SUBFC %7, %0, implicit-def $carry
6253 ; CHECK: SUBFIC %7, 55
6254 ; CHECK-LATE: subfic 3, 5, 55
6255 %5 = SUBFE %6, %8, implicit-def dead $carry, implicit $carry
6256 $x3 = EXTSW_32_64 %4
6257 $x4 = EXTSW_32_64 %5
6258 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
6263 # CHECK-ALL: name: testSUBFC8
6265 exposesReturnsTwice: false
6267 regBankSelected: false
6269 tracksRegLiveness: true
6271 - { id: 0, class: g8rc, preferred-register: '' }
6272 - { id: 1, class: g8rc, preferred-register: '' }
6273 - { id: 2, class: g8rc, preferred-register: '' }
6274 - { id: 3, class: g8rc, preferred-register: '' }
6275 - { id: 4, class: g8rc, preferred-register: '' }
6276 - { id: 5, class: g8rc, preferred-register: '' }
6278 - { reg: '$x3', virtual-reg: '%0' }
6279 - { reg: '$x4', virtual-reg: '%1' }
6280 - { reg: '$x5', virtual-reg: '%2' }
6281 - { reg: '$x6', virtual-reg: '%3' }
6283 isFrameAddressTaken: false
6284 isReturnAddressTaken: false
6286 hasPatchPoint: false
6293 maxCallFrameSize: 4294967295
6294 hasOpaqueSPAdjustment: false
6296 hasMustTailInVarArgFunc: false
6304 liveins: $x3, $x4, $x5, $x6
6310 %4 = SUBFC8 %2, %0, implicit-def $carry
6311 ; CHECK: SUBFIC8 %2, 7635
6312 ; CHECK-LATE: subfic 3, 5, 7635
6313 %5 = SUBFE8 %3, %1, implicit-def dead $carry, implicit $carry
6316 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
6321 # CHECK-ALL: name: testXOR
6323 exposesReturnsTwice: false
6325 regBankSelected: false
6327 tracksRegLiveness: true
6329 - { id: 0, class: g8rc, preferred-register: '' }
6330 - { id: 1, class: gprc, preferred-register: '' }
6331 - { id: 2, class: gprc, preferred-register: '' }
6332 - { id: 3, class: gprc, preferred-register: '' }
6334 - { reg: '$x3', virtual-reg: '%0' }
6335 - { reg: '$x4', virtual-reg: '%1' }
6337 isFrameAddressTaken: false
6338 isReturnAddressTaken: false
6340 hasPatchPoint: false
6347 maxCallFrameSize: 4294967295
6348 hasOpaqueSPAdjustment: false
6350 hasMustTailInVarArgFunc: false
6364 ; CHECK: XORI %3, 10101
6365 ; CHECK-LATE: 3, 3, 10101
6366 $x3 = EXTSW_32_64 %2
6367 BLR8 implicit $lr8, implicit $rm, implicit $x3
6372 # CHECK-ALL: name: testXOR8
6374 exposesReturnsTwice: false
6376 regBankSelected: false
6378 tracksRegLiveness: true
6380 - { id: 0, class: g8rc, preferred-register: '' }
6381 - { id: 1, class: g8rc, preferred-register: '' }
6382 - { id: 2, class: g8rc, preferred-register: '' }
6384 - { reg: '$x3', virtual-reg: '%0' }
6385 - { reg: '$x4', virtual-reg: '%1' }
6387 isFrameAddressTaken: false
6388 isReturnAddressTaken: false
6390 hasPatchPoint: false
6397 maxCallFrameSize: 4294967295
6398 hasOpaqueSPAdjustment: false
6400 hasMustTailInVarArgFunc: false
6413 ; CHECK: XORI8 %1, 5535
6414 ; CHECK-LATE: xori 3, 4, 5535
6416 BLR8 implicit $lr8, implicit $rm, implicit $x3
6421 # CHECK-ALL: name: testXORI
6423 exposesReturnsTwice: false
6425 regBankSelected: false
6427 tracksRegLiveness: true
6429 - { id: 0, class: gprc, preferred-register: '' }
6430 - { id: 1, class: gprc, preferred-register: '' }
6432 - { reg: '$x3', virtual-reg: '%0' }
6434 isFrameAddressTaken: false
6435 isReturnAddressTaken: false
6437 hasPatchPoint: false
6444 maxCallFrameSize: 4294967295
6445 hasOpaqueSPAdjustment: false
6447 hasMustTailInVarArgFunc: false
6460 ; CHECK-LATE: li 3, 886
6461 $x3 = EXTSW_32_64 %1
6462 BLR8 implicit $lr8, implicit $rm, implicit $x3
6467 # CHECK-ALL: name: testXOR8I
6469 exposesReturnsTwice: false
6471 regBankSelected: false
6473 tracksRegLiveness: true
6475 - { id: 0, class: g8rc, preferred-register: '' }
6476 - { id: 1, class: g8rc, preferred-register: '' }
6478 - { reg: '$x3', virtual-reg: '%0' }
6480 isFrameAddressTaken: false
6481 isReturnAddressTaken: false
6483 hasPatchPoint: false
6490 maxCallFrameSize: 4294967295
6491 hasOpaqueSPAdjustment: false
6493 hasMustTailInVarArgFunc: false
6506 ; CHECK-LATE: li 3, 468
6508 BLR8 implicit $lr8, implicit $rm, implicit $x3