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 @testADDCo(i64 %a, i64 %b) local_unnamed_addr #0 {
43 %add = add nsw i64 %b, %a
44 %cmp = icmp eq i64 %add, 0
45 %neg = sext i1 %cmp to i64
46 %retval.0 = xor i64 %add, %neg
50 ; Function Attrs: norecurse nounwind readnone
51 define signext i32 @testADDI(i32 signext %a) local_unnamed_addr #0 {
53 %add = add nsw i32 %a, 44
57 ; Function Attrs: norecurse nounwind readnone
58 define signext i32 @testADDI8(i32 signext %a) local_unnamed_addr #0 {
60 %add = add nsw i32 %a, 44
64 ; Function Attrs: norecurse nounwind readnone
65 define signext i32 @testANDo(i64 %a, i64 %b) local_unnamed_addr #0 {
68 %tobool = icmp eq i64 %and, 0
69 %cond = select i1 %tobool, i64 %b, i64 %a
70 %conv = trunc i64 %cond to i32
74 ; Function Attrs: norecurse nounwind readnone
75 define i64 @testAND8o(i64 %a, i64 %b) local_unnamed_addr #0 {
78 %tobool = icmp eq i64 %and, 0
79 %cond = select i1 %tobool, i64 %b, i64 %a
83 ; Function Attrs: norecurse nounwind readnone
84 define i64 @testCMPD(i64 %a, i64 %b) local_unnamed_addr #0 {
86 %cmp = icmp sgt i64 %a, %b
87 %add = select i1 %cmp, i64 0, i64 %a
88 %cond = add nsw i64 %add, %b
92 ; Function Attrs: norecurse nounwind readnone
93 define i64 @testCMPDI(i64 %a, i64 %b) local_unnamed_addr #0 {
95 %cmp = icmp sgt i64 %a, 87
96 %add = select i1 %cmp, i64 0, i64 %a
97 %cond = add nsw i64 %add, %b
101 ; Function Attrs: norecurse nounwind readnone
102 define i64 @testCMPDI_F(i64 %a, i64 %b) local_unnamed_addr #0 {
104 %cmp = icmp sgt i64 %a, 87
105 %add = select i1 %cmp, i64 0, i64 %a
106 %cond = add nsw i64 %add, %b
110 ; Function Attrs: norecurse nounwind readnone
111 define i64 @testCMPLD(i64 %a, i64 %b) local_unnamed_addr #0 {
113 %cmp = icmp ugt i64 %a, %b
114 %add = select i1 %cmp, i64 0, i64 %a
115 %cond = add i64 %add, %b
119 ; Function Attrs: norecurse nounwind readnone
120 define i64 @testCMPLDI(i64 %a, i64 %b) local_unnamed_addr #0 {
122 %cmp = icmp ugt i64 %a, 87
123 %add = select i1 %cmp, i64 0, i64 %a
124 %cond = add i64 %add, %b
128 ; Function Attrs: norecurse nounwind readnone
129 define signext i32 @testCMPW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
131 %cmp = icmp sgt i32 %a, %b
132 %add = select i1 %cmp, i32 0, i32 %a
133 %cond = add nsw i32 %add, %b
137 ; Function Attrs: norecurse nounwind readnone
138 define signext i32 @testCMPWI(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
140 %cmp = icmp sgt i32 %a, 87
141 %add = select i1 %cmp, i32 0, i32 %a
142 %cond = add nsw i32 %add, %b
146 ; Function Attrs: norecurse nounwind readnone
147 define zeroext i32 @testCMPLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
149 %cmp = icmp ugt i32 %a, %b
150 %add = select i1 %cmp, i32 0, i32 %a
151 %cond = add i32 %add, %b
155 ; Function Attrs: norecurse nounwind readnone
156 define zeroext i32 @testCMPLWI(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
158 %cmp = icmp ugt i32 %a, 87
159 %add = select i1 %cmp, i32 0, i32 %a
160 %cond = add i32 %add, %b
164 ; Function Attrs: norecurse nounwind readonly
165 define zeroext i8 @testLBZUX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
167 %add = add i32 %idx, 1
168 %idxprom = zext i32 %add to i64
169 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
170 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
171 %conv = zext i8 %0 to i32
172 %add1 = add i32 %idx, 2
173 %idxprom2 = zext i32 %add1 to i64
174 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
175 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
176 %conv4 = zext i8 %1 to i32
177 %add5 = add nuw nsw i32 %conv4, %conv
178 %conv6 = trunc i32 %add5 to i8
182 ; Function Attrs: norecurse nounwind readonly
183 define zeroext i8 @testLBZX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
185 %add = add i32 %idx, 1
186 %idxprom = zext i32 %add to i64
187 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
188 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3
189 %conv = zext i8 %0 to i32
190 %add1 = add i32 %idx, 2
191 %idxprom2 = zext i32 %add1 to i64
192 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
193 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3
194 %conv4 = zext i8 %1 to i32
195 %add5 = add nuw nsw i32 %conv4, %conv
196 %conv6 = trunc i32 %add5 to i8
200 ; Function Attrs: norecurse nounwind readonly
201 define zeroext i16 @testLHZUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
203 %add = add i32 %idx, 1
204 %idxprom = zext i32 %add to i64
205 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
206 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
207 %conv = zext i16 %0 to i32
208 %add1 = add i32 %idx, 2
209 %idxprom2 = zext i32 %add1 to i64
210 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
211 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
212 %conv4 = zext i16 %1 to i32
213 %add5 = add nuw nsw i32 %conv4, %conv
214 %conv6 = trunc i32 %add5 to i16
218 ; Function Attrs: norecurse nounwind readonly
219 define zeroext i16 @testLHZX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
221 %add = add i32 %idx, 1
222 %idxprom = zext i32 %add to i64
223 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
224 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
225 %conv = zext i16 %0 to i32
226 %add1 = add i32 %idx, 2
227 %idxprom2 = zext i32 %add1 to i64
228 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
229 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
230 %conv4 = zext i16 %1 to i32
231 %add5 = add nuw nsw i32 %conv4, %conv
232 %conv6 = trunc i32 %add5 to i16
236 ; Function Attrs: norecurse nounwind readonly
237 define signext i16 @testLHAUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
239 %add = add i32 %idx, 1
240 %idxprom = zext i32 %add to i64
241 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
242 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
243 %conv9 = zext i16 %0 to i32
244 %add1 = add i32 %idx, 2
245 %idxprom2 = zext i32 %add1 to i64
246 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
247 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
248 %conv410 = zext i16 %1 to i32
249 %add5 = add nuw nsw i32 %conv410, %conv9
250 %conv6 = trunc i32 %add5 to i16
254 ; Function Attrs: norecurse nounwind readonly
255 define signext i16 @testLHAX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
257 %add = add i32 %idx, 1
258 %idxprom = zext i32 %add to i64
259 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
260 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6
261 %conv9 = zext i16 %0 to i32
262 %add1 = add i32 %idx, 2
263 %idxprom2 = zext i32 %add1 to i64
264 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
265 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6
266 %conv410 = zext i16 %1 to i32
267 %add5 = add nuw nsw i32 %conv410, %conv9
268 %conv6 = trunc i32 %add5 to i16
272 ; Function Attrs: norecurse nounwind readonly
273 define zeroext i32 @testLWZUX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
275 %add = add i32 %idx, 1
276 %idxprom = zext i32 %add to i64
277 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
278 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
279 %add1 = add i32 %idx, 2
280 %idxprom2 = zext i32 %add1 to i64
281 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
282 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
283 %add4 = add i32 %1, %0
287 ; Function Attrs: norecurse nounwind readonly
288 define zeroext i32 @testLWZX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
290 %add = add i32 %idx, 1
291 %idxprom = zext i32 %add to i64
292 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
293 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
294 %add1 = add i32 %idx, 2
295 %idxprom2 = zext i32 %add1 to i64
296 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
297 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
298 %add4 = add i32 %1, %0
302 ; Function Attrs: norecurse nounwind readonly
303 define i64 @testLWAX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
305 %add = add i32 %idx, 1
306 %idxprom = zext i32 %add to i64
307 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
308 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8
309 %conv = sext i32 %0 to i64
310 %add1 = add i32 %idx, 2
311 %idxprom2 = zext i32 %add1 to i64
312 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
313 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8
314 %conv4 = sext i32 %1 to i64
315 %add5 = add nsw i64 %conv4, %conv
319 ; Function Attrs: norecurse nounwind readonly
320 define i64 @testLDUX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
322 %add = add i32 %idx, 1
323 %idxprom = zext i32 %add to i64
324 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
325 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
326 %add1 = add i32 %idx, 2
327 %idxprom2 = zext i32 %add1 to i64
328 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
329 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
330 %add4 = add i64 %1, %0
334 ; Function Attrs: norecurse nounwind readonly
335 define i64 @testLDX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
337 %add = add i32 %idx, 1
338 %idxprom = zext i32 %add to i64
339 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
340 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10
341 %add1 = add i32 %idx, 2
342 %idxprom2 = zext i32 %add1 to i64
343 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
344 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10
345 %add4 = add i64 %1, %0
349 ; Function Attrs: norecurse nounwind readonly
350 define double @testLFDUX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
352 %add = add i32 %idx, 1
353 %idxprom = zext i32 %add to i64
354 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
355 %0 = load double, double* %arrayidx, align 8, !tbaa !12
356 %add1 = add i32 %idx, 2
357 %idxprom2 = zext i32 %add1 to i64
358 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
359 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
360 %add4 = fadd double %0, %1
364 ; Function Attrs: norecurse nounwind readonly
365 define double @testLFDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
367 %add = add i32 %idx, 1
368 %idxprom = zext i32 %add to i64
369 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
370 %0 = load double, double* %arrayidx, align 8, !tbaa !12
371 %add1 = add i32 %idx, 2
372 %idxprom2 = zext i32 %add1 to i64
373 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
374 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
375 %add4 = fadd double %0, %1
379 ; Function Attrs: norecurse nounwind readonly
380 define <4 x float> @testLFSUX(float* nocapture readonly %ptr, i32 signext %idx) local_unnamed_addr #2 {
382 %idxprom = sext i32 %idx to i64
383 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
384 %0 = load float, float* %arrayidx, align 4, !tbaa !14
385 %conv = fptoui float %0 to i32
386 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0
387 %1 = bitcast float* %ptr to i8*
388 %2 = shl i64 %idxprom, 2
389 %uglygep = getelementptr i8, i8* %1, i64 %2
390 %uglygep2 = getelementptr i8, i8* %uglygep, i64 4
391 %3 = bitcast i8* %uglygep2 to float*
392 %4 = load float, float* %3, align 4, !tbaa !14
393 %conv3 = fptoui float %4 to i32
394 %vecinit4 = insertelement <4 x i32> %vecinit, i32 %conv3, i32 1
395 %uglygep5 = getelementptr i8, i8* %uglygep, i64 8
396 %5 = bitcast i8* %uglygep5 to float*
397 %6 = load float, float* %5, align 4, !tbaa !14
398 %conv8 = fptoui float %6 to i32
399 %vecinit9 = insertelement <4 x i32> %vecinit4, i32 %conv8, i32 2
400 %uglygep8 = getelementptr i8, i8* %uglygep, i64 12
401 %7 = bitcast i8* %uglygep8 to float*
402 %8 = load float, float* %7, align 4, !tbaa !14
403 %conv13 = fptoui float %8 to i32
404 %vecinit14 = insertelement <4 x i32> %vecinit9, i32 %conv13, i32 3
405 %9 = bitcast <4 x i32> %vecinit14 to <4 x float>
409 ; Function Attrs: norecurse nounwind readonly
410 define float @testLFSX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
412 %add = add i32 %idx, 1
413 %idxprom = zext i32 %add to i64
414 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
415 %0 = load float, float* %arrayidx, align 4, !tbaa !14
416 %add1 = add i32 %idx, 2
417 %idxprom2 = zext i32 %add1 to i64
418 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
419 %1 = load float, float* %arrayidx3, align 4, !tbaa !14
420 %add4 = fadd float %0, %1
424 ; Function Attrs: norecurse nounwind readonly
425 define double @testLXSDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
427 %add = add i32 %idx, 1
428 %idxprom = zext i32 %add to i64
429 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
430 %0 = load double, double* %arrayidx, align 8, !tbaa !12
431 %add1 = add i32 %idx, 2
432 %idxprom2 = zext i32 %add1 to i64
433 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
434 %1 = load double, double* %arrayidx3, align 8, !tbaa !12
435 %add4 = fadd double %0, %1
439 ; Function Attrs: norecurse nounwind readonly
440 define float @testLXSSPX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
442 %add = add i32 %idx, 1
443 %idxprom = zext i32 %add to i64
444 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
445 %0 = load float, float* %arrayidx, align 4, !tbaa !14
446 %add1 = add i32 %idx, 2
447 %idxprom2 = zext i32 %add1 to i64
448 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
449 %1 = load float, float* %arrayidx3, align 4, !tbaa !14
450 %add4 = fadd float %0, %1
454 ; Function Attrs: norecurse nounwind readonly
455 define <4 x i32> @testLXVX(<4 x i32>* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
457 %add = add i32 %idx, 1
458 %idxprom = zext i32 %add to i64
459 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
460 %0 = load <4 x i32>, <4 x i32>* %arrayidx, align 16, !tbaa !3
461 %add1 = add i32 %idx, 2
462 %idxprom2 = zext i32 %add1 to i64
463 %arrayidx3 = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom2
464 %1 = load <4 x i32>, <4 x i32>* %arrayidx3, align 16, !tbaa !3
465 %add4 = add <4 x i32> %1, %0
469 ; Function Attrs: norecurse nounwind readnone
470 define signext i32 @testOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
476 ; Function Attrs: norecurse nounwind readnone
477 define i64 @testOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
483 ; Function Attrs: norecurse nounwind readnone
484 define signext i32 @testORI(i32 signext %a) local_unnamed_addr #0 {
490 ; Function Attrs: norecurse nounwind readnone
491 define i64 @testORI8(i64 %a) local_unnamed_addr #0 {
497 ; Function Attrs: norecurse nounwind readnone
498 define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 {
500 %and = and i64 %b, 63
501 %shl = shl i64 %a, %and
502 %sub = sub nsw i64 64, %and
503 %shr = lshr i64 %a, %sub
504 %or = or i64 %shr, %shl
508 ; Function Attrs: norecurse nounwind readnone
509 define i64 @testRLDCLo(i64 %a, i64 %b) local_unnamed_addr #0 {
511 %and = and i64 %b, 63
512 %shl = shl i64 %a, %and
513 %sub = sub nsw i64 64, %and
514 %shr = lshr i64 %a, %sub
515 %or = or i64 %shr, %shl
516 %tobool = icmp eq i64 %or, 0
517 %cond = select i1 %tobool, i64 %and, i64 %a
521 ; Function Attrs: norecurse nounwind readnone
522 define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 {
524 %and = and i64 %b, 63
525 %shl = shl i64 %a, %and
526 %sub = sub nsw i64 64, %and
527 %shr = lshr i64 %a, %sub
528 %or = or i64 %shr, %shl
532 ; Function Attrs: norecurse nounwind readnone
533 define i64 @testRLDCRo(i64 %a, i64 %b) local_unnamed_addr #0 {
535 %and = and i64 %b, 63
536 %shl = shl i64 %a, %and
537 %sub = sub nsw i64 64, %and
538 %shr = lshr i64 %a, %sub
539 %or = or i64 %shr, %shl
540 %tobool = icmp eq i64 %or, 0
541 %cond = select i1 %tobool, i64 %and, i64 %a
545 ; Function Attrs: norecurse nounwind readnone
546 define i64 @testRLDICL(i64 %a) local_unnamed_addr #0 {
548 %shr = lshr i64 %a, 11
549 %and = and i64 %shr, 16777215
553 ; Function Attrs: norecurse nounwind readnone
554 define i64 @testRLDICLo(i64 %a, i64 %b) local_unnamed_addr #0 {
556 %shr = lshr i64 %a, 11
557 %and = and i64 %shr, 16777215
558 %tobool = icmp eq i64 %and, 0
559 %cond = select i1 %tobool, i64 %b, i64 %and
563 ; Function Attrs: norecurse nounwind readnone
564 define i64 @testRLDICLo2(i64 %a, i64 %b) local_unnamed_addr #0 {
566 %shr = lshr i64 %a, 11
567 %and = and i64 %shr, 16777215
568 %tobool = icmp eq i64 %and, 0
569 %cond = select i1 %tobool, i64 %b, i64 %and
573 ; Function Attrs: norecurse nounwind readnone
574 define i64 @testRLDICLo3(i64 %a, i64 %b) local_unnamed_addr #0 {
576 %shr = lshr i64 %a, 11
577 %and = and i64 %shr, 16777215
578 %tobool = icmp eq i64 %and, 0
579 %cond = select i1 %tobool, i64 %b, i64 %and
583 ; Function Attrs: norecurse nounwind readnone
584 define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
587 %and = and i32 %shl, 4080
591 ; Function Attrs: norecurse nounwind readnone
592 define zeroext i32 @testRLWINMFullReg(i32 zeroext %a) local_unnamed_addr #0 {
595 %and = and i32 %shl, 4080
599 ; Function Attrs: norecurse nounwind readnone
600 define zeroext i32 @testRLWINMFullRegOutOfRange(i32 zeroext %a) local_unnamed_addr #0 {
603 %and = and i32 %shl, 4080
607 ; Function Attrs: norecurse nounwind readnone
608 define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
611 %and = and i64 %shl, 4080
615 ; Function Attrs: norecurse nounwind readnone
616 define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
618 %and = and i32 %a, 255
619 %tobool = icmp eq i32 %and, 0
620 %cond = select i1 %tobool, i32 %b, i32 %a
624 ; Function Attrs: norecurse nounwind readnone
625 define zeroext i32 @testRLWINMo2(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
627 %and = and i32 %a, 255
628 %tobool = icmp eq i32 %and, 0
629 %cond = select i1 %tobool, i32 %b, i32 %a
633 ; Function Attrs: norecurse nounwind readnone
634 define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 {
636 %a.tr = trunc i64 %a to i32
637 %0 = shl i32 %a.tr, 4
638 %conv = and i32 %0, 4080
639 %tobool = icmp eq i32 %conv, 0
640 %conv1 = zext i32 %conv to i64
641 %cond = select i1 %tobool, i64 %b, i64 %conv1
645 ; Function Attrs: norecurse nounwind readnone
646 define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
648 %shl = shl i64 %a, %b
652 ; Function Attrs: norecurse nounwind readnone
653 define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 {
655 %shl = shl i64 %a, %b
656 %tobool = icmp eq i64 %shl, 0
657 %cond = select i1 %tobool, i64 %b, i64 %a
661 ; Function Attrs: norecurse nounwind readnone
662 define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
664 %shr = lshr i64 %a, %b
668 ; Function Attrs: norecurse nounwind readnone
669 define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 {
671 %shr = lshr i64 %a, %b
672 %tobool = icmp eq i64 %shr, 0
673 %cond = select i1 %tobool, i64 %b, i64 %a
677 ; Function Attrs: norecurse nounwind readnone
678 define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
680 %shl = shl i32 %a, %b
684 ; Function Attrs: norecurse nounwind readnone
685 define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
687 %shl = shl i32 %a, %b
688 %tobool = icmp eq i32 %shl, 0
689 %cond = select i1 %tobool, i32 %b, i32 %a
693 ; Function Attrs: norecurse nounwind readnone
694 define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
696 %shr = lshr i32 %a, %b
700 ; Function Attrs: norecurse nounwind readnone
701 define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
703 %shr = lshr i32 %a, %b
704 %tobool = icmp eq i32 %shr, 0
705 %cond = select i1 %tobool, i32 %b, i32 %a
709 ; Function Attrs: norecurse nounwind readnone
710 define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
712 %shr = ashr i32 %a, %b
716 ; Function Attrs: norecurse nounwind readnone
717 define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
719 %shr = ashr i32 %a, %b
720 %tobool = icmp eq i32 %shr, 0
721 %cond = select i1 %tobool, i32 %b, i32 %shr
725 ; Function Attrs: norecurse nounwind readnone
726 define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
728 %shr = ashr i64 %a, %b
732 ; Function Attrs: norecurse nounwind readnone
733 define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 {
735 %shr = ashr i64 %a, %b
736 %tobool = icmp eq i64 %shr, 0
737 %cond = select i1 %tobool, i64 %b, i64 %shr
741 ; Function Attrs: norecurse nounwind
742 define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
744 %add = add i32 %idx, 1
745 %idxprom = zext i32 %add to i64
746 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
747 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
748 %add1 = add i32 %idx, 2
749 %idxprom2 = zext i32 %add1 to i64
750 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
751 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
755 ; Function Attrs: norecurse nounwind
756 define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
758 %add = add i32 %idx, 1
759 %idxprom = zext i32 %add to i64
760 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
761 store i8 %a, i8* %arrayidx, align 1, !tbaa !3
762 %add1 = add i32 %idx, 2
763 %idxprom2 = zext i32 %add1 to i64
764 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
765 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
769 ; Function Attrs: norecurse nounwind
770 define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
772 %add = add i32 %idx, 1
773 %idxprom = zext i32 %add to i64
774 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
775 store i16 %a, i16* %arrayidx, align 2, !tbaa !6
776 %add1 = add i32 %idx, 2
777 %idxprom2 = zext i32 %add1 to i64
778 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
779 store i16 %a, i16* %arrayidx3, align 2, !tbaa !6
783 ; Function Attrs: norecurse nounwind
784 define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
786 %add = add i32 %idx, 1
787 %idxprom = zext i32 %add to i64
788 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
789 store i16 %a, i16* %arrayidx, align 1, !tbaa !3
790 %add1 = add i32 %idx, 2
791 %idxprom2 = zext i32 %add1 to i64
792 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
793 store i16 %a, i16* %arrayidx3, align 1, !tbaa !3
797 ; Function Attrs: norecurse nounwind
798 define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
800 %add = add i32 %idx, 1
801 %idxprom = zext i32 %add to i64
802 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
803 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
804 %add1 = add i32 %idx, 2
805 %idxprom2 = zext i32 %add1 to i64
806 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
807 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
811 ; Function Attrs: norecurse nounwind
812 define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
814 %add = add i32 %idx, 1
815 %idxprom = zext i32 %add to i64
816 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
817 store i32 %a, i32* %arrayidx, align 4, !tbaa !8
818 %add1 = add i32 %idx, 2
819 %idxprom2 = zext i32 %add1 to i64
820 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
821 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
825 ; Function Attrs: norecurse nounwind
826 define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
828 %add = add i32 %idx, 1
829 %idxprom = zext i32 %add to i64
830 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
831 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
832 %add1 = add i32 %idx, 2
833 %idxprom2 = zext i32 %add1 to i64
834 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
835 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
839 ; Function Attrs: norecurse nounwind
840 define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
842 %add = add i32 %idx, 1
843 %idxprom = zext i32 %add to i64
844 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
845 store i64 %a, i64* %arrayidx, align 8, !tbaa !10
846 %add1 = add i32 %idx, 2
847 %idxprom2 = zext i32 %add1 to i64
848 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
849 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
853 ; Function Attrs: norecurse nounwind readonly
854 define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
856 %add = add i32 %idx, 1
857 %idxprom = zext i32 %add to i64
858 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
859 store float %a, float* %arrayidx, align 4, !tbaa !14
860 %add1 = add i32 %idx, 2
861 %idxprom2 = zext i32 %add1 to i64
862 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
863 store float %a, float* %arrayidx3, align 4, !tbaa !14
867 ; Function Attrs: norecurse nounwind readonly
868 define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
870 %add = add i32 %idx, 1
871 %idxprom = zext i32 %add to i64
872 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
873 store float %a, float* %arrayidx, align 4, !tbaa !14
874 %add1 = add i32 %idx, 2
875 %idxprom2 = zext i32 %add1 to i64
876 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
877 store float %a, float* %arrayidx3, align 4, !tbaa !14
881 ; Function Attrs: norecurse nounwind readonly
882 define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
884 %add = add i32 %idx, 1
885 %idxprom = zext i32 %add to i64
886 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
887 store double %a, double* %arrayidx, align 8, !tbaa !12
888 %add1 = add i32 %idx, 2
889 %idxprom2 = zext i32 %add1 to i64
890 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
891 store double %a, double* %arrayidx3, align 8, !tbaa !12
895 ; Function Attrs: norecurse nounwind readonly
896 define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
898 %add = add i32 %idx, 1
899 %idxprom = zext i32 %add to i64
900 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
901 store double %a, double* %arrayidx, align 8, !tbaa !12
902 %add1 = add i32 %idx, 2
903 %idxprom2 = zext i32 %add1 to i64
904 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
905 store double %a, double* %arrayidx3, align 8, !tbaa !12
909 ; Function Attrs: norecurse nounwind
910 define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
912 %idxprom = zext i32 %idx to i64
913 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
914 store float %a, float* %arrayidx, align 4, !tbaa !14
918 ; Function Attrs: norecurse nounwind
919 define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
921 %idxprom = zext i32 %idx to i64
922 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
923 store double %a, double* %arrayidx, align 8, !tbaa !12
927 ; Function Attrs: norecurse nounwind
928 define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 {
930 %idxprom = zext i32 %idx to i64
931 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
932 store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3
936 ; Function Attrs: norecurse nounwind readnone
937 define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
939 %sub = sub nsw i128 %a, %b
943 ; Function Attrs: norecurse nounwind readnone
944 define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
946 %sub = sub nsw i128 %a, %b
950 ; Function Attrs: norecurse nounwind readnone
951 define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
953 %xor = xor i32 %b, %a
957 ; Function Attrs: norecurse nounwind readnone
958 define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
960 %xor = xor i64 %b, %a
964 ; Function Attrs: norecurse nounwind readnone
965 define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
967 %xor = xor i32 %a, 17
971 ; Function Attrs: norecurse nounwind readnone
972 define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
974 %xor = xor i64 %a, 17
978 attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
979 attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
980 attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,-vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
981 attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
983 !llvm.module.flags = !{!0, !1}
986 !0 = !{i32 1, !"wchar_size", i32 4}
987 !1 = !{i32 7, !"PIC Level", i32 2}
988 !2 = !{!"clang version 6.0.0 (trunk 316067)"}
989 !3 = !{!4, !4, i64 0}
990 !4 = !{!"omnipotent char", !5, i64 0}
991 !5 = !{!"Simple C/C++ TBAA"}
992 !6 = !{!7, !7, i64 0}
993 !7 = !{!"short", !4, i64 0}
994 !8 = !{!9, !9, i64 0}
995 !9 = !{!"int", !4, i64 0}
996 !10 = !{!11, !11, i64 0}
997 !11 = !{!"long long", !4, i64 0}
998 !12 = !{!13, !13, i64 0}
999 !13 = !{!"double", !4, i64 0}
1000 !14 = !{!15, !15, i64 0}
1001 !15 = !{!"float", !4, i64 0}
1006 # CHECK-ALL: name: testADD4
1008 exposesReturnsTwice: false
1010 regBankSelected: false
1012 tracksRegLiveness: true
1014 - { id: 0, class: g8rc, preferred-register: '' }
1015 - { id: 1, class: g8rc, preferred-register: '' }
1016 - { id: 2, class: gprc, preferred-register: '' }
1017 - { id: 3, class: gprc, preferred-register: '' }
1018 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
1019 - { id: 5, class: gprc, preferred-register: '' }
1020 - { id: 6, class: g8rc, preferred-register: '' }
1022 - { reg: '$x3', virtual-reg: '%0' }
1023 - { reg: '$x4', virtual-reg: '%1' }
1025 isFrameAddressTaken: false
1026 isReturnAddressTaken: false
1028 hasPatchPoint: false
1035 maxCallFrameSize: 4294967295
1036 hasOpaqueSPAdjustment: false
1038 hasMustTailInVarArgFunc: false
1052 %4 = ADD4 killed %3, %2
1053 %5 = ADD4 killed %2, killed %4
1054 ; CHECK: ADDI killed %3, 33
1055 ; CHECK: ADDI killed %4, 33
1056 ; CHECK-LATE: addi 3, 3, 33
1057 ; CHECK-LATE: addi 3, 3, 33
1058 %6 = EXTSW_32_64 killed %5
1060 BLR8 implicit $lr8, implicit $rm, implicit $x3
1065 # CHECK-ALL: name: testADD8
1067 exposesReturnsTwice: false
1069 regBankSelected: false
1071 tracksRegLiveness: true
1073 - { id: 0, class: g8rc, preferred-register: '' }
1074 - { id: 1, class: g8rc, preferred-register: '' }
1075 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1076 - { id: 3, class: g8rc, preferred-register: '' }
1078 - { reg: '$x3', virtual-reg: '%0' }
1079 - { reg: '$x4', virtual-reg: '%1' }
1081 isFrameAddressTaken: false
1082 isReturnAddressTaken: false
1084 hasPatchPoint: false
1091 maxCallFrameSize: 4294967295
1092 hasOpaqueSPAdjustment: false
1094 hasMustTailInVarArgFunc: false
1107 %3 = ADD8 killed %1, killed %2
1108 ; CHECK: ADDI8 %0, 33
1109 ; CHECK: ADDI8 killed %2, 33
1110 ; CHECK-LATE: addi 3, 3, 33
1111 ; CHECK-LATE: addi 3, 3, 33
1113 BLR8 implicit $lr8, implicit $rm, implicit $x3
1118 # CHECK-ALL: name: testADDC
1120 exposesReturnsTwice: false
1122 regBankSelected: false
1124 tracksRegLiveness: true
1126 - { id: 0, class: g8rc, preferred-register: '' }
1127 - { id: 1, class: g8rc, preferred-register: '' }
1128 - { id: 2, class: g8rc, preferred-register: '' }
1129 - { id: 3, class: g8rc, preferred-register: '' }
1130 - { id: 4, class: gprc, preferred-register: '' }
1131 - { id: 5, class: gprc, preferred-register: '' }
1132 - { id: 6, class: gprc, preferred-register: '' }
1133 - { id: 7, class: g8rc, preferred-register: '' }
1134 - { id: 8, class: g8rc, preferred-register: '' }
1136 - { reg: '$x3', virtual-reg: '%0' }
1137 - { reg: '$x4', virtual-reg: '%1' }
1138 - { reg: '$x5', virtual-reg: '%2' }
1139 - { reg: '$x6', virtual-reg: '%3' }
1141 isFrameAddressTaken: false
1142 isReturnAddressTaken: false
1144 hasPatchPoint: false
1151 maxCallFrameSize: 4294967295
1152 hasOpaqueSPAdjustment: false
1154 hasMustTailInVarArgFunc: false
1162 liveins: $x3, $x4, $x5, $x6
1170 %6 = ADDC %5, %4, implicit-def $carry
1171 ; CHECK: ADDIC %4, 55, implicit-def $carry
1172 ; CHECK-LATE: addic 3, 3, 55
1173 %7 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
1177 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1182 # CHECK-ALL: name: testADDC8
1184 exposesReturnsTwice: false
1186 regBankSelected: false
1188 tracksRegLiveness: true
1190 - { id: 0, class: g8rc, preferred-register: '' }
1191 - { id: 1, class: g8rc, preferred-register: '' }
1192 - { id: 2, class: g8rc, preferred-register: '' }
1193 - { id: 3, class: g8rc, preferred-register: '' }
1194 - { id: 4, class: g8rc, preferred-register: '' }
1195 - { id: 5, class: g8rc, preferred-register: '' }
1197 - { reg: '$x3', virtual-reg: '%0' }
1198 - { reg: '$x4', virtual-reg: '%1' }
1199 - { reg: '$x5', virtual-reg: '%2' }
1200 - { reg: '$x6', virtual-reg: '%3' }
1202 isFrameAddressTaken: false
1203 isReturnAddressTaken: false
1205 hasPatchPoint: false
1212 maxCallFrameSize: 4294967295
1213 hasOpaqueSPAdjustment: false
1215 hasMustTailInVarArgFunc: false
1223 liveins: $x3, $x4, $x5, $x6
1229 %4 = ADDC8 %2, %0, implicit-def $carry
1230 ; CHECK: ADDIC8 %2, 777, implicit-def $carry
1231 ; CHECK-LATE: addic 3, 5, 777
1232 %5 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry
1235 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1240 # CHECK-ALL: name: testADDCo
1242 exposesReturnsTwice: false
1244 regBankSelected: false
1246 tracksRegLiveness: true
1248 - { id: 0, class: g8rc, preferred-register: '' }
1249 - { id: 1, class: gprc, preferred-register: '' }
1250 - { id: 2, class: gprc, preferred-register: '' }
1251 - { id: 3, class: gprc, preferred-register: '' }
1252 - { id: 4, class: crrc, preferred-register: '' }
1253 - { id: 5, class: crbitrc, preferred-register: '' }
1254 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1255 - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1256 - { id: 8, class: g8rc, preferred-register: '' }
1258 - { reg: '$x3', virtual-reg: '%0' }
1259 - { reg: '$x4', virtual-reg: '%1' }
1261 isFrameAddressTaken: false
1262 isReturnAddressTaken: false
1264 hasPatchPoint: false
1271 maxCallFrameSize: 4294967295
1272 hasOpaqueSPAdjustment: false
1274 hasMustTailInVarArgFunc: false
1287 %3 = ADDCo %1, %2, implicit-def $cr0, implicit-def $carry
1288 ; CHECK: ADDICo %2, 433, implicit-def $cr0, implicit-def $carry
1289 ; CHECK-LATE: addic. 3, 3, 433
1290 %4 = COPY killed $cr0
1294 %8 = ISEL8 %7, %6, %5
1296 BLR8 implicit $lr8, implicit $rm, implicit $x3
1301 # CHECK-ALL: name: testADDI
1303 exposesReturnsTwice: false
1305 regBankSelected: false
1307 tracksRegLiveness: true
1309 - { id: 0, class: g8rc, preferred-register: '' }
1310 - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
1311 - { id: 2, class: gprc, preferred-register: '' }
1312 - { id: 3, class: g8rc, preferred-register: '' }
1314 - { reg: '$x3', virtual-reg: '%0' }
1316 isFrameAddressTaken: false
1317 isReturnAddressTaken: false
1319 hasPatchPoint: false
1326 maxCallFrameSize: 4294967295
1327 hasOpaqueSPAdjustment: false
1329 hasMustTailInVarArgFunc: false
1341 %2 = ADDI killed %1, 44
1342 %3 = EXTSW_32_64 killed %2
1344 ; CHECK-LATE: li 3, 121
1346 BLR8 implicit $lr8, implicit $rm, implicit $x3
1351 # CHECK-ALL: name: testADDI8
1353 exposesReturnsTwice: false
1355 regBankSelected: false
1357 tracksRegLiveness: true
1359 - { id: 0, class: g8rc, preferred-register: '' }
1360 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1361 - { id: 2, class: g8rc, preferred-register: '' }
1362 - { id: 3, class: g8rc, preferred-register: '' }
1364 - { reg: '$x3', virtual-reg: '%0' }
1366 isFrameAddressTaken: false
1367 isReturnAddressTaken: false
1369 hasPatchPoint: false
1376 maxCallFrameSize: 4294967295
1377 hasOpaqueSPAdjustment: false
1379 hasMustTailInVarArgFunc: false
1391 %2 = ADDI8 killed %1, 44
1393 ; CHECK-LATE: li 3, 377
1394 %3 = EXTSW killed %2
1396 BLR8 implicit $lr8, implicit $rm, implicit $x3
1401 # CHECK-ALL: name: testANDo
1403 exposesReturnsTwice: false
1405 regBankSelected: false
1407 tracksRegLiveness: true
1409 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1410 - { id: 1, class: gprc, preferred-register: '' }
1411 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1412 - { id: 3, class: gprc, preferred-register: '' }
1413 - { id: 4, class: crrc, preferred-register: '' }
1414 - { id: 5, class: gprc, preferred-register: '' }
1415 - { id: 6, class: g8rc, preferred-register: '' }
1417 - { reg: '$x3', virtual-reg: '%0' }
1418 - { reg: '$x4', virtual-reg: '%1' }
1420 isFrameAddressTaken: false
1421 isReturnAddressTaken: false
1423 hasPatchPoint: false
1430 maxCallFrameSize: 4294967295
1431 hasOpaqueSPAdjustment: false
1433 hasMustTailInVarArgFunc: false
1446 %3 = ANDo %1, %2, implicit-def $cr0
1447 ; CHECK: ANDIo %2, 78, implicit-def $cr0
1448 ; CHECK-LATE: andi. 5, 3, 78
1449 %4 = COPY killed $cr0
1450 %5 = ISEL %2, %1, %4.sub_eq
1451 %6 = EXTSW_32_64 killed %5
1453 BLR8 implicit $lr8, implicit $rm, implicit $x3
1458 # CHECK-ALL: name: testAND8o
1460 exposesReturnsTwice: false
1462 regBankSelected: false
1464 tracksRegLiveness: true
1466 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1467 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1468 - { id: 2, class: g8rc, preferred-register: '' }
1469 - { id: 3, class: crrc, preferred-register: '' }
1470 - { id: 4, class: g8rc, preferred-register: '' }
1472 - { reg: '$x3', virtual-reg: '%0' }
1473 - { reg: '$x4', virtual-reg: '%1' }
1475 isFrameAddressTaken: false
1476 isReturnAddressTaken: false
1478 hasPatchPoint: false
1485 maxCallFrameSize: 4294967295
1486 hasOpaqueSPAdjustment: false
1488 hasMustTailInVarArgFunc: false
1500 %2 = AND8o %1, %0, implicit-def $cr0
1501 ; CHECK: ANDIo8 %0, 321, implicit-def $cr0
1502 ; CHECK-LATE: andi. 5, 3, 321
1503 %3 = COPY killed $cr0
1504 %4 = ISEL8 %1, %0, %3.sub_eq
1506 BLR8 implicit $lr8, implicit $rm, implicit $x3
1511 # CHECK-ALL: name: testCMPD
1513 exposesReturnsTwice: false
1515 regBankSelected: false
1517 tracksRegLiveness: true
1519 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1520 - { id: 1, class: g8rc, preferred-register: '' }
1521 - { id: 2, class: crrc, preferred-register: '' }
1522 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1523 - { id: 4, class: g8rc, preferred-register: '' }
1524 - { id: 5, class: g8rc, preferred-register: '' }
1526 - { reg: '$x3', virtual-reg: '%0' }
1527 - { reg: '$x4', virtual-reg: '%1' }
1529 isFrameAddressTaken: false
1530 isReturnAddressTaken: false
1532 hasPatchPoint: false
1539 maxCallFrameSize: 4294967295
1540 hasOpaqueSPAdjustment: false
1542 hasMustTailInVarArgFunc: false
1555 ; CHECK: CMPDI %0, -3
1556 ; CHECK-LATE: cmpdi 3, -3
1557 %4 = ISEL8 $zero8, %0, %2.sub_gt
1558 %5 = ADD8 killed %4, %1
1560 BLR8 implicit $lr8, implicit $rm, implicit $x3
1565 # CHECK-ALL: name: testCMPDI
1567 exposesReturnsTwice: false
1569 regBankSelected: false
1571 tracksRegLiveness: true
1573 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1574 - { id: 1, class: g8rc, preferred-register: '' }
1575 - { id: 2, class: crrc, preferred-register: '' }
1576 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1577 - { id: 4, class: g8rc, preferred-register: '' }
1578 - { id: 5, class: g8rc, preferred-register: '' }
1580 - { reg: '$x3', virtual-reg: '%0' }
1581 - { reg: '$x4', virtual-reg: '%1' }
1583 isFrameAddressTaken: false
1584 isReturnAddressTaken: false
1586 hasPatchPoint: false
1593 maxCallFrameSize: 4294967295
1594 hasOpaqueSPAdjustment: false
1596 hasMustTailInVarArgFunc: false
1609 %4 = ISEL8 $zero8, %0, %2.sub_gt
1611 %5 = ADD8 killed %4, %1
1613 BLR8 implicit $lr8, implicit $rm, implicit $x3
1618 # CHECK-ALL: name: testCMPDI_F
1620 exposesReturnsTwice: false
1622 regBankSelected: false
1624 tracksRegLiveness: true
1626 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1627 - { id: 1, class: g8rc, preferred-register: '' }
1628 - { id: 2, class: crrc, preferred-register: '' }
1629 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1630 - { id: 4, class: g8rc, preferred-register: '' }
1631 - { id: 5, class: g8rc, preferred-register: '' }
1633 - { reg: '$x3', virtual-reg: '%0' }
1634 - { reg: '$x4', virtual-reg: '%1' }
1636 isFrameAddressTaken: false
1637 isReturnAddressTaken: false
1639 hasPatchPoint: false
1646 maxCallFrameSize: 4294967295
1647 hasOpaqueSPAdjustment: false
1649 hasMustTailInVarArgFunc: false
1662 %4 = ISEL8 $zero8, %0, %2.sub_gt
1664 %5 = ADD8 killed %4, %1
1666 BLR8 implicit $lr8, implicit $rm, implicit $x3
1671 # CHECK-ALL: name: testCMPLD
1673 exposesReturnsTwice: false
1675 regBankSelected: false
1677 tracksRegLiveness: true
1679 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1680 - { id: 1, class: g8rc, preferred-register: '' }
1681 - { id: 2, class: crrc, preferred-register: '' }
1682 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1683 - { id: 4, class: g8rc, preferred-register: '' }
1684 - { id: 5, class: g8rc, preferred-register: '' }
1686 - { reg: '$x3', virtual-reg: '%0' }
1687 - { reg: '$x4', virtual-reg: '%1' }
1689 isFrameAddressTaken: false
1690 isReturnAddressTaken: false
1692 hasPatchPoint: false
1699 maxCallFrameSize: 4294967295
1700 hasOpaqueSPAdjustment: false
1702 hasMustTailInVarArgFunc: false
1715 ; CHECK: CMPLDI %0, 99
1716 ; CHECK-LATE: cmpldi 3, 99
1717 %4 = ISEL8 $zero8, %0, %2.sub_gt
1718 %5 = ADD8 killed %4, %1
1720 BLR8 implicit $lr8, implicit $rm, implicit $x3
1725 # CHECK-ALL: name: testCMPLDI
1727 exposesReturnsTwice: false
1729 regBankSelected: false
1731 tracksRegLiveness: true
1733 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1734 - { id: 1, class: g8rc, preferred-register: '' }
1735 - { id: 2, class: crrc, preferred-register: '' }
1736 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1737 - { id: 4, class: g8rc, preferred-register: '' }
1738 - { id: 5, class: g8rc, preferred-register: '' }
1740 - { reg: '$x3', virtual-reg: '%0' }
1741 - { reg: '$x4', virtual-reg: '%1' }
1743 isFrameAddressTaken: false
1744 isReturnAddressTaken: false
1746 hasPatchPoint: false
1753 maxCallFrameSize: 4294967295
1754 hasOpaqueSPAdjustment: false
1756 hasMustTailInVarArgFunc: false
1768 %2 = CMPLDI %0, 65535
1769 %4 = ISEL8 $zero8, %0, %2.sub_gt
1771 %5 = ADD8 killed %4, %1
1773 BLR8 implicit $lr8, implicit $rm, implicit $x3
1778 # CHECK-ALL: name: testCMPW
1780 exposesReturnsTwice: false
1782 regBankSelected: false
1784 tracksRegLiveness: true
1786 - { id: 0, class: g8rc, preferred-register: '' }
1787 - { id: 1, class: g8rc, preferred-register: '' }
1788 - { id: 2, class: gprc, preferred-register: '' }
1789 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1790 - { id: 4, class: crrc, preferred-register: '' }
1791 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1792 - { id: 6, class: gprc, preferred-register: '' }
1793 - { id: 7, class: gprc, preferred-register: '' }
1794 - { id: 8, class: g8rc, preferred-register: '' }
1796 - { reg: '$x3', virtual-reg: '%0' }
1797 - { reg: '$x4', virtual-reg: '%1' }
1799 isFrameAddressTaken: false
1800 isReturnAddressTaken: false
1802 hasPatchPoint: false
1809 maxCallFrameSize: 4294967295
1810 hasOpaqueSPAdjustment: false
1812 hasMustTailInVarArgFunc: false
1827 ; CHECK: CMPWI %3, -1
1828 %6 = ISEL $zero, %3, %4.sub_gt
1829 %7 = ADD4 killed %6, %2
1830 %8 = EXTSW_32_64 killed %7
1832 BLR8 implicit $lr8, implicit $rm, implicit $x3
1837 # CHECK-ALL: name: testCMPWI
1839 exposesReturnsTwice: false
1841 regBankSelected: false
1843 tracksRegLiveness: true
1845 - { id: 0, class: g8rc, preferred-register: '' }
1846 - { id: 1, class: g8rc, preferred-register: '' }
1847 - { id: 2, class: gprc, preferred-register: '' }
1848 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1849 - { id: 4, class: crrc, preferred-register: '' }
1850 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1851 - { id: 6, class: gprc, preferred-register: '' }
1852 - { id: 7, class: gprc, preferred-register: '' }
1853 - { id: 8, class: g8rc, preferred-register: '' }
1855 - { reg: '$x3', virtual-reg: '%0' }
1856 - { reg: '$x4', virtual-reg: '%1' }
1858 isFrameAddressTaken: false
1859 isReturnAddressTaken: false
1861 hasPatchPoint: false
1868 maxCallFrameSize: 4294967295
1869 hasOpaqueSPAdjustment: false
1871 hasMustTailInVarArgFunc: false
1886 %6 = ISEL $zero, %3, %4.sub_gt
1888 %7 = ADD4 killed %6, killed %2
1889 %8 = EXTSW_32_64 killed %7
1891 BLR8 implicit $lr8, implicit $rm, implicit $x3
1896 # CHECK-ALL: name: testCMPLW
1898 exposesReturnsTwice: false
1900 regBankSelected: false
1902 tracksRegLiveness: true
1904 - { id: 0, class: g8rc, preferred-register: '' }
1905 - { id: 1, class: g8rc, preferred-register: '' }
1906 - { id: 2, class: gprc, preferred-register: '' }
1907 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1908 - { id: 4, class: crrc, preferred-register: '' }
1909 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1910 - { id: 6, class: gprc, preferred-register: '' }
1911 - { id: 7, class: gprc, preferred-register: '' }
1912 - { id: 8, class: g8rc, preferred-register: '' }
1913 - { id: 9, class: g8rc, preferred-register: '' }
1914 - { id: 10, class: g8rc, preferred-register: '' }
1916 - { reg: '$x3', virtual-reg: '%0' }
1917 - { reg: '$x4', virtual-reg: '%1' }
1919 isFrameAddressTaken: false
1920 isReturnAddressTaken: false
1922 hasPatchPoint: false
1929 maxCallFrameSize: 4294967295
1930 hasOpaqueSPAdjustment: false
1932 hasMustTailInVarArgFunc: false
1947 ; CHECK: CMPLWI %3, 32767
1948 ; CHECK-LATE: cmplwi 3, 32767
1949 %6 = ISEL $zero, %3, %4.sub_gt
1950 %7 = ADD4 killed %6, %2
1952 %8 = INSERT_SUBREG %9, killed %7, 1
1953 %10 = RLDICL killed %8, 0, 32
1955 BLR8 implicit $lr8, implicit $rm, implicit $x3
1960 # CHECK-ALL: name: testCMPLWI
1962 exposesReturnsTwice: false
1964 regBankSelected: false
1966 tracksRegLiveness: true
1968 - { id: 0, class: g8rc, preferred-register: '' }
1969 - { id: 1, class: g8rc, preferred-register: '' }
1970 - { id: 2, class: gprc, preferred-register: '' }
1971 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1972 - { id: 4, class: crrc, preferred-register: '' }
1973 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1974 - { id: 6, class: gprc, preferred-register: '' }
1975 - { id: 7, class: gprc, preferred-register: '' }
1976 - { id: 8, class: g8rc, preferred-register: '' }
1977 - { id: 9, class: g8rc, preferred-register: '' }
1978 - { id: 10, class: g8rc, preferred-register: '' }
1980 - { reg: '$x3', virtual-reg: '%0' }
1981 - { reg: '$x4', virtual-reg: '%1' }
1983 isFrameAddressTaken: false
1984 isReturnAddressTaken: false
1986 hasPatchPoint: false
1993 maxCallFrameSize: 4294967295
1994 hasOpaqueSPAdjustment: false
1996 hasMustTailInVarArgFunc: false
2011 %6 = ISEL $zero, %3, %4.sub_gt
2013 %7 = ADD4 killed %6, killed %2
2015 %8 = INSERT_SUBREG %9, killed %7, 1
2016 %10 = RLDICL killed %8, 0, 32
2018 BLR8 implicit $lr8, implicit $rm, implicit $x3
2023 # CHECK-ALL: name: testLBZUX
2025 exposesReturnsTwice: false
2027 regBankSelected: false
2029 tracksRegLiveness: true
2031 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2032 - { id: 1, class: g8rc, preferred-register: '' }
2033 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2034 - { id: 3, class: gprc, preferred-register: '' }
2035 - { id: 4, class: g8rc, preferred-register: '' }
2036 - { id: 5, class: g8rc, preferred-register: '' }
2037 - { id: 6, class: g8rc, preferred-register: '' }
2038 - { id: 7, class: gprc, preferred-register: '' }
2039 - { id: 8, class: gprc, preferred-register: '' }
2040 - { id: 9, class: g8rc, preferred-register: '' }
2041 - { id: 10, class: g8rc, preferred-register: '' }
2042 - { id: 11, class: g8rc, preferred-register: '' }
2043 - { id: 12, class: gprc, preferred-register: '' }
2044 - { id: 13, class: gprc, preferred-register: '' }
2045 - { id: 14, class: g8rc, preferred-register: '' }
2046 - { id: 15, class: g8rc, preferred-register: '' }
2047 - { id: 16, class: g8rc, preferred-register: '' }
2048 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2050 - { reg: '$x3', virtual-reg: '%0' }
2051 - { reg: '$x4', virtual-reg: '%1' }
2053 isFrameAddressTaken: false
2054 isReturnAddressTaken: false
2056 hasPatchPoint: false
2063 maxCallFrameSize: 4294967295
2064 hasOpaqueSPAdjustment: false
2066 hasMustTailInVarArgFunc: false
2081 %4 = INSERT_SUBREG %5, killed %3, 1
2082 %6 = RLDICL killed %4, 0, 32
2083 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2086 %9 = INSERT_SUBREG %10, killed %8, 1
2088 %12,%17 = LBZUX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2089 ; CHECK: LBZU -15, %0
2090 ; CHECK-LATE: lbzu 5, -15(3)
2091 %13 = ADD4 killed %12, killed %7
2093 %14 = INSERT_SUBREG %15, killed %13, 1
2094 %16 = RLWINM8 killed %14, 0, 24, 31
2096 BLR8 implicit $lr8, implicit $rm, implicit $x3
2101 # CHECK-ALL: name: testLBZX
2103 exposesReturnsTwice: false
2105 regBankSelected: false
2107 tracksRegLiveness: true
2109 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2110 - { id: 1, class: g8rc, preferred-register: '' }
2111 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2112 - { id: 3, class: gprc, preferred-register: '' }
2113 - { id: 4, class: g8rc, preferred-register: '' }
2114 - { id: 5, class: g8rc, preferred-register: '' }
2115 - { id: 6, class: g8rc, preferred-register: '' }
2116 - { id: 7, class: gprc, preferred-register: '' }
2117 - { id: 8, class: gprc, preferred-register: '' }
2118 - { id: 9, class: g8rc, preferred-register: '' }
2119 - { id: 10, class: g8rc, preferred-register: '' }
2120 - { id: 11, class: g8rc, preferred-register: '' }
2121 - { id: 12, class: gprc, preferred-register: '' }
2122 - { id: 13, class: gprc, preferred-register: '' }
2123 - { id: 14, class: g8rc, preferred-register: '' }
2124 - { id: 15, class: g8rc, preferred-register: '' }
2125 - { id: 16, class: g8rc, preferred-register: '' }
2127 - { reg: '$x3', virtual-reg: '%0' }
2128 - { reg: '$x4', virtual-reg: '%1' }
2130 isFrameAddressTaken: false
2131 isReturnAddressTaken: false
2133 hasPatchPoint: false
2140 maxCallFrameSize: 4294967295
2141 hasOpaqueSPAdjustment: false
2143 hasMustTailInVarArgFunc: false
2158 %4 = INSERT_SUBREG %5, killed %3, 1
2159 %6 = RLDICL killed %4, 0, 32
2160 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2161 ; CHECK: LBZ 45, killed %6
2162 ; CHECK-LATE: lbz 5, 45(5)
2165 %9 = INSERT_SUBREG %10, killed %8, 1
2166 %11 = RLDICL killed %9, 0, 32
2167 %12 = LBZX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2168 ; CHECK: LBZ 45, killed %11
2169 ; CHECK-LATE: lbz 3, 45(4)
2170 %13 = ADD4 killed %12, killed %7
2172 %14 = INSERT_SUBREG %15, killed %13, 1
2173 %16 = RLWINM8 killed %14, 0, 24, 31
2175 BLR8 implicit $lr8, implicit $rm, implicit $x3
2180 # CHECK-ALL: name: testLHZUX
2182 exposesReturnsTwice: false
2184 regBankSelected: false
2186 tracksRegLiveness: true
2188 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2189 - { id: 1, class: g8rc, preferred-register: '' }
2190 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2191 - { id: 3, class: gprc, preferred-register: '' }
2192 - { id: 4, class: g8rc, preferred-register: '' }
2193 - { id: 5, class: g8rc, preferred-register: '' }
2194 - { id: 6, class: g8rc, preferred-register: '' }
2195 - { id: 7, class: gprc, preferred-register: '' }
2196 - { id: 8, class: gprc, preferred-register: '' }
2197 - { id: 9, class: g8rc, preferred-register: '' }
2198 - { id: 10, class: g8rc, preferred-register: '' }
2199 - { id: 11, class: g8rc, preferred-register: '' }
2200 - { id: 12, class: gprc, preferred-register: '' }
2201 - { id: 13, class: gprc, preferred-register: '' }
2202 - { id: 14, class: g8rc, preferred-register: '' }
2203 - { id: 15, class: g8rc, preferred-register: '' }
2204 - { id: 16, class: g8rc, preferred-register: '' }
2205 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2207 - { reg: '$x3', virtual-reg: '%0' }
2208 - { reg: '$x4', virtual-reg: '%1' }
2210 isFrameAddressTaken: false
2211 isReturnAddressTaken: false
2213 hasPatchPoint: false
2220 maxCallFrameSize: 4294967295
2221 hasOpaqueSPAdjustment: false
2223 hasMustTailInVarArgFunc: false
2238 %4 = INSERT_SUBREG %5, killed %3, 1
2239 %6 = RLDIC killed %4, 1, 31
2240 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2243 %9 = INSERT_SUBREG %10, killed %8, 1
2245 %12,%17 = LHZUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2246 ; CHECK: LHZU 31440, %0
2247 ; CHECK-LATE: lhzu 5, 31440(3)
2248 %13 = ADD4 killed %12, killed %7
2250 %14 = INSERT_SUBREG %15, killed %13, 1
2251 %16 = RLWINM8 killed %14, 0, 16, 31
2253 BLR8 implicit $lr8, implicit $rm, implicit $x3
2258 # CHECK-ALL: name: testLHZX
2260 exposesReturnsTwice: false
2262 regBankSelected: false
2264 tracksRegLiveness: true
2266 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2267 - { id: 1, class: g8rc, preferred-register: '' }
2268 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2269 - { id: 3, class: gprc, preferred-register: '' }
2270 - { id: 4, class: g8rc, preferred-register: '' }
2271 - { id: 5, class: g8rc, preferred-register: '' }
2272 - { id: 6, class: g8rc, preferred-register: '' }
2273 - { id: 7, class: gprc, preferred-register: '' }
2274 - { id: 8, class: gprc, preferred-register: '' }
2275 - { id: 9, class: g8rc, preferred-register: '' }
2276 - { id: 10, class: g8rc, preferred-register: '' }
2277 - { id: 11, class: g8rc, preferred-register: '' }
2278 - { id: 12, class: gprc, preferred-register: '' }
2279 - { id: 13, class: gprc, preferred-register: '' }
2280 - { id: 14, class: g8rc, preferred-register: '' }
2281 - { id: 15, class: g8rc, preferred-register: '' }
2282 - { id: 16, class: g8rc, preferred-register: '' }
2284 - { reg: '$x3', virtual-reg: '%0' }
2285 - { reg: '$x4', virtual-reg: '%1' }
2287 isFrameAddressTaken: false
2288 isReturnAddressTaken: false
2290 hasPatchPoint: false
2297 maxCallFrameSize: 4294967295
2298 hasOpaqueSPAdjustment: false
2300 hasMustTailInVarArgFunc: false
2315 %4 = INSERT_SUBREG %5, killed %3, 1
2316 %6 = RLDIC killed %4, 1, 31
2317 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2320 %9 = INSERT_SUBREG %10, killed %8, 1
2322 %12 = LHZX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2323 ; CHECK: LHZ 882, %0
2324 ; CHECK-LATE: lhz 3, 882(3)
2325 %13 = ADD4 killed %12, killed %7
2327 %14 = INSERT_SUBREG %15, killed %13, 1
2328 %16 = RLWINM8 killed %14, 0, 16, 31
2330 BLR8 implicit $lr8, implicit $rm, implicit $x3
2335 # CHECK-ALL: name: testLHAUX
2337 exposesReturnsTwice: false
2339 regBankSelected: false
2341 tracksRegLiveness: true
2343 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2344 - { id: 1, class: g8rc, preferred-register: '' }
2345 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2346 - { id: 3, class: gprc, preferred-register: '' }
2347 - { id: 4, class: g8rc, preferred-register: '' }
2348 - { id: 5, class: g8rc, preferred-register: '' }
2349 - { id: 6, class: g8rc, preferred-register: '' }
2350 - { id: 7, class: gprc, preferred-register: '' }
2351 - { id: 8, class: gprc, preferred-register: '' }
2352 - { id: 9, class: g8rc, preferred-register: '' }
2353 - { id: 10, class: g8rc, preferred-register: '' }
2354 - { id: 11, class: g8rc, preferred-register: '' }
2355 - { id: 12, class: gprc, preferred-register: '' }
2356 - { id: 13, class: gprc, preferred-register: '' }
2357 - { id: 14, class: g8rc, preferred-register: '' }
2358 - { id: 15, class: g8rc, preferred-register: '' }
2359 - { id: 16, class: g8rc, preferred-register: '' }
2360 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2362 - { reg: '$x3', virtual-reg: '%0' }
2363 - { reg: '$x4', virtual-reg: '%1' }
2365 isFrameAddressTaken: false
2366 isReturnAddressTaken: false
2368 hasPatchPoint: false
2375 maxCallFrameSize: 4294967295
2376 hasOpaqueSPAdjustment: false
2378 hasMustTailInVarArgFunc: false
2393 %4 = INSERT_SUBREG %5, killed %3, 1
2394 %6 = RLDIC %4, 1, 31
2395 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2398 %9 = INSERT_SUBREG %10, killed %8, 1
2400 %12,%17 = LHAUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2401 ; CHECK: LHAU 400, %0
2402 ; CHECK-LATE: lhau 5, 400(3)
2403 %13 = ADD4 killed %12, killed %7
2405 %14 = INSERT_SUBREG %15, killed %13, 1
2406 %16 = EXTSH8 killed %14
2408 BLR8 implicit $lr8, implicit $rm, implicit $x3
2413 # CHECK-ALL: name: testLHAX
2415 exposesReturnsTwice: false
2417 regBankSelected: false
2419 tracksRegLiveness: true
2421 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2422 - { id: 1, class: g8rc, preferred-register: '' }
2423 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2424 - { id: 3, class: gprc, preferred-register: '' }
2425 - { id: 4, class: g8rc, preferred-register: '' }
2426 - { id: 5, class: g8rc, preferred-register: '' }
2427 - { id: 6, class: g8rc, preferred-register: '' }
2428 - { id: 7, class: gprc, preferred-register: '' }
2429 - { id: 8, class: gprc, preferred-register: '' }
2430 - { id: 9, class: g8rc, preferred-register: '' }
2431 - { id: 10, class: g8rc, preferred-register: '' }
2432 - { id: 11, class: g8rc, preferred-register: '' }
2433 - { id: 12, class: gprc, preferred-register: '' }
2434 - { id: 13, class: gprc, preferred-register: '' }
2435 - { id: 14, class: g8rc, preferred-register: '' }
2436 - { id: 15, class: g8rc, preferred-register: '' }
2437 - { id: 16, class: g8rc, preferred-register: '' }
2439 - { reg: '$x3', virtual-reg: '%0' }
2440 - { reg: '$x4', virtual-reg: '%1' }
2442 isFrameAddressTaken: false
2443 isReturnAddressTaken: false
2445 hasPatchPoint: false
2452 maxCallFrameSize: 4294967295
2453 hasOpaqueSPAdjustment: false
2455 hasMustTailInVarArgFunc: false
2470 %4 = INSERT_SUBREG %5, killed %3, 1
2472 %7 = LHAX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2473 ; CHECK: LHA -999, %0
2474 ; CHECK-LATE: lha 4, -999(3)
2477 %9 = INSERT_SUBREG %10, killed %8, 1
2479 %12 = LHAX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2480 ; CHECK: LHA 999, %0
2481 ; CHECK-LATE: lha 3, 999(3)
2482 %13 = ADD4 killed %12, killed %7
2484 %14 = INSERT_SUBREG %15, killed %13, 1
2485 %16 = EXTSH8 killed %14
2487 BLR8 implicit $lr8, implicit $rm, implicit $x3
2492 # CHECK-ALL: name: testLWZUX
2494 exposesReturnsTwice: false
2496 regBankSelected: false
2498 tracksRegLiveness: true
2500 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2501 - { id: 1, class: g8rc, preferred-register: '' }
2502 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2503 - { id: 3, class: gprc, preferred-register: '' }
2504 - { id: 4, class: g8rc, preferred-register: '' }
2505 - { id: 5, class: g8rc, preferred-register: '' }
2506 - { id: 6, class: g8rc, preferred-register: '' }
2507 - { id: 7, class: gprc, preferred-register: '' }
2508 - { id: 8, class: gprc, preferred-register: '' }
2509 - { id: 9, class: g8rc, preferred-register: '' }
2510 - { id: 10, class: g8rc, preferred-register: '' }
2511 - { id: 11, class: g8rc, preferred-register: '' }
2512 - { id: 12, class: gprc, preferred-register: '' }
2513 - { id: 13, class: gprc, preferred-register: '' }
2514 - { id: 14, class: g8rc, preferred-register: '' }
2515 - { id: 15, class: g8rc, preferred-register: '' }
2516 - { id: 16, class: g8rc, preferred-register: '' }
2517 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2518 - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2520 - { reg: '$x3', virtual-reg: '%0' }
2521 - { reg: '$x4', virtual-reg: '%1' }
2523 isFrameAddressTaken: false
2524 isReturnAddressTaken: false
2526 hasPatchPoint: false
2533 maxCallFrameSize: 4294967295
2534 hasOpaqueSPAdjustment: false
2536 hasMustTailInVarArgFunc: false
2551 %4 = INSERT_SUBREG %5, killed %3, 1
2553 %7,%17 = LWZUX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2554 ; CHECK: LWZU 889, %0
2555 ; CHECK-LATE: lwzu {{[0-9]+}}, 889({{[0-9]+}})
2558 %9 = INSERT_SUBREG %10, killed %8, 1
2560 %12,%18 = LWZUX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2561 ; CHECK: LWZU -2, %0
2562 ; CHECK-LATE: lwzu {{[0-9]+}}, -2({{[0-9]+}})
2563 %13 = ADD4 killed %12, killed %7
2565 %14 = INSERT_SUBREG %15, killed %13, 1
2566 %16 = RLDICL killed %14, 0, 32
2568 BLR8 implicit $lr8, implicit $rm, implicit $x3
2573 # CHECK-ALL: name: testLWZX
2575 exposesReturnsTwice: false
2577 regBankSelected: false
2579 tracksRegLiveness: true
2581 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2582 - { id: 1, class: g8rc, preferred-register: '' }
2583 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2584 - { id: 3, class: gprc, preferred-register: '' }
2585 - { id: 4, class: g8rc, preferred-register: '' }
2586 - { id: 5, class: g8rc, preferred-register: '' }
2587 - { id: 6, class: g8rc, preferred-register: '' }
2588 - { id: 7, class: gprc, preferred-register: '' }
2589 - { id: 8, class: gprc, preferred-register: '' }
2590 - { id: 9, class: g8rc, preferred-register: '' }
2591 - { id: 10, class: g8rc, preferred-register: '' }
2592 - { id: 11, class: g8rc, preferred-register: '' }
2593 - { id: 12, class: gprc, preferred-register: '' }
2594 - { id: 13, class: gprc, preferred-register: '' }
2595 - { id: 14, class: g8rc, preferred-register: '' }
2596 - { id: 15, class: g8rc, preferred-register: '' }
2597 - { id: 16, class: g8rc, preferred-register: '' }
2599 - { reg: '$x3', virtual-reg: '%0' }
2600 - { reg: '$x4', virtual-reg: '%1' }
2602 isFrameAddressTaken: false
2603 isReturnAddressTaken: false
2605 hasPatchPoint: false
2612 maxCallFrameSize: 4294967295
2613 hasOpaqueSPAdjustment: false
2615 hasMustTailInVarArgFunc: false
2630 %4 = INSERT_SUBREG %5, killed %3, 1
2631 %6 = RLDIC %4, 2, 30
2632 %7 = LWZX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2633 ; CHECK: LWZ 1000, killed %6
2634 ; CHECK-LATE: lwz 5, 1000(5)
2637 %9 = INSERT_SUBREG %10, killed %8, 1
2638 %11 = RLDIC %9, 2, 30
2639 %12 = LWZX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2640 ; CHECK: LWZ 1000, killed %11
2641 ; CHECK-LATE: lwz 3, 1000(4)
2642 %13 = ADD4 killed %12, killed %7
2644 %14 = INSERT_SUBREG %15, killed %13, 1
2645 %16 = RLDICL killed %14, 0, 32
2647 BLR8 implicit $lr8, implicit $rm, implicit $x3
2652 # CHECK-ALL: name: testLWAX
2654 exposesReturnsTwice: false
2656 regBankSelected: false
2658 tracksRegLiveness: true
2660 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2661 - { id: 1, class: g8rc, preferred-register: '' }
2662 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2663 - { id: 3, class: gprc, preferred-register: '' }
2664 - { id: 4, class: g8rc, preferred-register: '' }
2665 - { id: 5, class: g8rc, preferred-register: '' }
2666 - { id: 6, class: g8rc, preferred-register: '' }
2667 - { id: 7, class: g8rc, preferred-register: '' }
2668 - { id: 8, class: gprc, preferred-register: '' }
2669 - { id: 9, class: g8rc, preferred-register: '' }
2670 - { id: 10, class: g8rc, preferred-register: '' }
2671 - { id: 11, class: g8rc, preferred-register: '' }
2672 - { id: 12, class: g8rc, preferred-register: '' }
2673 - { id: 13, class: g8rc, preferred-register: '' }
2675 - { reg: '$x3', virtual-reg: '%0' }
2676 - { reg: '$x4', virtual-reg: '%1' }
2678 isFrameAddressTaken: false
2679 isReturnAddressTaken: false
2681 hasPatchPoint: false
2688 maxCallFrameSize: 4294967295
2689 hasOpaqueSPAdjustment: false
2691 hasMustTailInVarArgFunc: false
2706 %4 = INSERT_SUBREG %5, killed %3, 1
2707 %6 = RLDIC %4, 2, 30
2708 %7 = LWAX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2709 ; CHECK: LWA 444, killed %6
2710 ; CHECK-LATE: lwa 5, 444(5)
2713 %9 = INSERT_SUBREG %10, killed %8, 1
2714 %11 = RLDIC %9, 2, 30
2715 %12 = LWAX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2716 ; CHECK: LWA 444, killed %11
2717 ; CHECK-LATE: lwa 3, 444(4)
2718 %13 = ADD8 killed %12, killed %7
2720 BLR8 implicit $lr8, implicit $rm, implicit $x3
2725 # CHECK-ALL: name: testLDUX
2727 exposesReturnsTwice: false
2729 regBankSelected: false
2731 tracksRegLiveness: true
2733 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2734 - { id: 1, class: g8rc, preferred-register: '' }
2735 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2736 - { id: 3, class: gprc, preferred-register: '' }
2737 - { id: 4, class: g8rc, preferred-register: '' }
2738 - { id: 5, class: g8rc, preferred-register: '' }
2739 - { id: 6, class: g8rc, preferred-register: '' }
2740 - { id: 7, class: g8rc, preferred-register: '' }
2741 - { id: 8, class: gprc, preferred-register: '' }
2742 - { id: 9, class: g8rc, preferred-register: '' }
2743 - { id: 10, class: g8rc, preferred-register: '' }
2744 - { id: 11, class: g8rc, preferred-register: '' }
2745 - { id: 12, class: g8rc, preferred-register: '' }
2746 - { id: 13, class: g8rc, preferred-register: '' }
2747 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2748 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2750 - { reg: '$x3', virtual-reg: '%0' }
2751 - { reg: '$x4', virtual-reg: '%1' }
2753 isFrameAddressTaken: false
2754 isReturnAddressTaken: false
2756 hasPatchPoint: false
2763 maxCallFrameSize: 4294967295
2764 hasOpaqueSPAdjustment: false
2766 hasMustTailInVarArgFunc: false
2781 %4 = INSERT_SUBREG %5, killed %3, 1
2783 %7,%14 = LDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2784 ; CHECK: LDU 100, %0
2785 ; CHECK-LATE: ldu {{[0-9]+}}, 100({{[0-9]+}})
2788 %9 = INSERT_SUBREG %10, killed %8, 1
2790 %12,%15 = LDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2791 ; CHECK: LDU 200, %0
2792 ; CHECK-LATE: ldu {{[0-9]+}}, 200({{[0-9]+}})
2793 %13 = ADD8 killed %12, killed %7
2795 BLR8 implicit $lr8, implicit $rm, implicit $x3
2800 # CHECK-ALL: name: testLDX
2802 exposesReturnsTwice: false
2804 regBankSelected: false
2806 tracksRegLiveness: true
2808 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2809 - { id: 1, class: g8rc, preferred-register: '' }
2810 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2811 - { id: 3, class: gprc, preferred-register: '' }
2812 - { id: 4, class: g8rc, preferred-register: '' }
2813 - { id: 5, class: g8rc, preferred-register: '' }
2814 - { id: 6, class: g8rc, preferred-register: '' }
2815 - { id: 7, class: g8rc, preferred-register: '' }
2816 - { id: 8, class: gprc, preferred-register: '' }
2817 - { id: 9, class: g8rc, preferred-register: '' }
2818 - { id: 10, class: g8rc, preferred-register: '' }
2819 - { id: 11, class: g8rc, preferred-register: '' }
2820 - { id: 12, class: g8rc, preferred-register: '' }
2821 - { id: 13, class: g8rc, preferred-register: '' }
2823 - { reg: '$x3', virtual-reg: '%0' }
2824 - { reg: '$x4', virtual-reg: '%1' }
2826 isFrameAddressTaken: false
2827 isReturnAddressTaken: false
2829 hasPatchPoint: false
2836 maxCallFrameSize: 4294967295
2837 hasOpaqueSPAdjustment: false
2839 hasMustTailInVarArgFunc: false
2854 %4 = INSERT_SUBREG %5, killed %3, 1
2856 %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2858 ; CHECK-LATE: ld 4, 120(3)
2861 %9 = INSERT_SUBREG %10, killed %8, 1
2863 %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2865 ; CHECK-LATE: ld 3, 280(3)
2866 %13 = ADD8 killed %12, killed %7
2868 BLR8 implicit $lr8, implicit $rm, implicit $x3
2873 # CHECK-ALL: name: testLFDUX
2875 exposesReturnsTwice: false
2877 regBankSelected: false
2879 tracksRegLiveness: true
2881 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2882 - { id: 1, class: g8rc, preferred-register: '' }
2883 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2884 - { id: 3, class: gprc, preferred-register: '' }
2885 - { id: 4, class: g8rc, preferred-register: '' }
2886 - { id: 5, class: g8rc, preferred-register: '' }
2887 - { id: 6, class: g8rc, preferred-register: '' }
2888 - { id: 7, class: f8rc, preferred-register: '' }
2889 - { id: 8, class: gprc, preferred-register: '' }
2890 - { id: 9, class: g8rc, preferred-register: '' }
2891 - { id: 10, class: g8rc, preferred-register: '' }
2892 - { id: 11, class: g8rc, preferred-register: '' }
2893 - { id: 12, class: f8rc, preferred-register: '' }
2894 - { id: 13, class: f8rc, preferred-register: '' }
2895 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2896 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2898 - { reg: '$x3', virtual-reg: '%0' }
2899 - { reg: '$x4', virtual-reg: '%1' }
2901 isFrameAddressTaken: false
2902 isReturnAddressTaken: false
2904 hasPatchPoint: false
2911 maxCallFrameSize: 4294967295
2912 hasOpaqueSPAdjustment: false
2914 hasMustTailInVarArgFunc: false
2929 %4 = INSERT_SUBREG %5, killed %3, 1
2931 %7,%14 = LFDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
2932 ; CHECK: LFDU 440, %0
2933 ; CHECK-LATE: lfdu {{[0-9]+}}, 440({{[0-9]+}})
2936 %9 = INSERT_SUBREG %10, killed %8, 1
2938 %12,%15 = LFDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
2939 ; CHECK: LFDU 16, %0
2940 ; CHECK-LATE: lfdu {{[0-9]+}}, 16({{[0-9]+}})
2941 %13 = FADD killed %7, killed %12, implicit $rm
2943 BLR8 implicit $lr8, implicit $rm, implicit $f1
2948 # CHECK-ALL: name: testLFDX
2950 exposesReturnsTwice: false
2952 regBankSelected: false
2954 tracksRegLiveness: true
2956 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2957 - { id: 1, class: g8rc, preferred-register: '' }
2958 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2959 - { id: 3, class: gprc, preferred-register: '' }
2960 - { id: 4, class: g8rc, preferred-register: '' }
2961 - { id: 5, class: g8rc, preferred-register: '' }
2962 - { id: 6, class: g8rc, preferred-register: '' }
2963 - { id: 7, class: f8rc, preferred-register: '' }
2964 - { id: 8, class: gprc, preferred-register: '' }
2965 - { id: 9, class: g8rc, preferred-register: '' }
2966 - { id: 10, class: g8rc, preferred-register: '' }
2967 - { id: 11, class: g8rc, preferred-register: '' }
2968 - { id: 12, class: f8rc, preferred-register: '' }
2969 - { id: 13, class: f8rc, preferred-register: '' }
2971 - { reg: '$x3', virtual-reg: '%0' }
2972 - { reg: '$x4', virtual-reg: '%1' }
2974 isFrameAddressTaken: false
2975 isReturnAddressTaken: false
2977 hasPatchPoint: false
2984 maxCallFrameSize: 4294967295
2985 hasOpaqueSPAdjustment: false
2987 hasMustTailInVarArgFunc: false
3002 %4 = INSERT_SUBREG %5, killed %3, 1
3003 %6 = RLDIC %4, 3, 29
3004 %7 = LFDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
3005 ; CHECK: LFD -20, killed %6
3006 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
3009 %9 = INSERT_SUBREG %10, killed %8, 1
3010 %11 = RLDIC %9, 3, 29
3011 %12 = LFDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
3012 ; CHECK: LFD -20, killed %11
3013 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}})
3014 %13 = FADD killed %7, killed %12, implicit $rm
3016 BLR8 implicit $lr8, implicit $rm, implicit $f1
3021 # CHECK-ALL: name: testLFSUX
3023 exposesReturnsTwice: false
3025 regBankSelected: false
3027 tracksRegLiveness: true
3029 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3030 - { id: 1, class: g8rc, preferred-register: '' }
3031 - { id: 2, class: g8rc, preferred-register: '' }
3032 - { id: 3, class: f8rc, preferred-register: '' }
3033 - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3034 - { id: 5, class: f8rc, preferred-register: '' }
3035 - { id: 6, class: g8rc, preferred-register: '' }
3036 - { id: 7, class: gprc, preferred-register: '' }
3037 - { id: 8, class: f8rc, preferred-register: '' }
3038 - { id: 9, class: f8rc, preferred-register: '' }
3039 - { id: 10, class: f8rc, preferred-register: '' }
3040 - { id: 11, class: g8rc, preferred-register: '' }
3041 - { id: 12, class: gprc, preferred-register: '' }
3042 - { id: 13, class: f8rc, preferred-register: '' }
3043 - { id: 14, class: f8rc, preferred-register: '' }
3044 - { id: 15, class: f8rc, preferred-register: '' }
3045 - { id: 16, class: g8rc, preferred-register: '' }
3046 - { id: 17, class: gprc, preferred-register: '' }
3047 - { id: 18, class: f8rc, preferred-register: '' }
3048 - { id: 19, class: f8rc, preferred-register: '' }
3049 - { id: 20, class: f8rc, preferred-register: '' }
3050 - { id: 21, class: g8rc, preferred-register: '' }
3051 - { id: 22, class: gprc, preferred-register: '' }
3052 - { id: 23, class: g8rc, preferred-register: '' }
3053 - { id: 24, class: vrrc, preferred-register: '' }
3055 - { reg: '$x3', virtual-reg: '%0' }
3056 - { reg: '$x4', virtual-reg: '%1' }
3058 isFrameAddressTaken: false
3059 isReturnAddressTaken: false
3061 hasPatchPoint: false
3068 maxCallFrameSize: 4294967295
3069 hasOpaqueSPAdjustment: false
3071 hasMustTailInVarArgFunc: false
3076 - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16,
3077 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3078 local-offset: -16, debug-info-variable: '', debug-info-expression: '',
3079 debug-info-location: '' }
3080 - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4,
3081 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3082 local-offset: -20, debug-info-variable: '', debug-info-expression: '',
3083 debug-info-location: '' }
3084 - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4,
3085 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3086 local-offset: -24, debug-info-variable: '', debug-info-expression: '',
3087 debug-info-location: '' }
3088 - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4,
3089 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3090 local-offset: -28, debug-info-variable: '', debug-info-expression: '',
3091 debug-info-location: '' }
3092 - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4,
3093 stack-id: default, callee-saved-register: '', callee-saved-restored: true,
3094 local-offset: -32, debug-info-variable: '', debug-info-expression: '',
3095 debug-info-location: '' }
3104 %3, %4 = LFSUX %0, killed %2 :: (load 4 from %ir.arrayidx, !tbaa !14)
3105 ; CHECK: LFSU 72, %0
3106 ; CHECK-LATE: lfsu 0, 72(3)
3107 %5 = FCTIWUZ killed %3, implicit $rm
3108 %6 = ADDI8 %stack.4, 0
3109 STFIWX killed %5, $zero8, killed %6
3110 %7 = LWZ 0, %stack.4 :: (load 4 from %stack.4)
3111 %8 = LFS 4, %4 :: (load 4 from %ir.3, !tbaa !14)
3112 %10 = FCTIWUZ %8, implicit $rm
3113 %11 = ADDI8 %stack.1, 0
3114 STFIWX killed %10, $zero8, killed %11
3115 %12 = LWZ 0, %stack.1 :: (load 4 from %stack.1)
3116 %13 = LFS 8, %4 :: (load 4 from %ir.5, !tbaa !14)
3117 %15 = FCTIWUZ %13, implicit $rm
3118 %16 = ADDI8 %stack.2, 0
3119 STFIWX killed %15, $zero8, killed %16
3120 %17 = LWZ 0, %stack.2 :: (load 4 from %stack.2)
3121 %18 = LFS 12, %4 :: (load 4 from %ir.7, !tbaa !14)
3122 %20 = FCTIWUZ %18, implicit $rm
3123 %21 = ADDI8 %stack.3, 0
3124 STFIWX killed %20, $zero8, killed %21
3125 %22 = LWZ 0, %stack.3 :: (load 4 from %stack.3)
3126 STW killed %7, 0, %stack.0 :: (store 4 into %stack.0, align 16)
3127 STW killed %22, 12, %stack.0 :: (store 4 into %stack.0 + 12)
3128 STW killed %17, 8, %stack.0 :: (store 4 into %stack.0 + 8, align 8)
3129 STW killed %12, 4, %stack.0 :: (store 4 into %stack.0 + 4)
3130 %23 = ADDI8 %stack.0, 0
3131 %24 = LVX $zero8, killed %23 :: (load 16 from %stack.0)
3133 BLR8 implicit $lr8, implicit $rm, implicit $v2
3138 # CHECK-ALL: name: testLFSX
3140 exposesReturnsTwice: false
3142 regBankSelected: false
3144 tracksRegLiveness: true
3146 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3147 - { id: 1, class: g8rc, preferred-register: '' }
3148 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3149 - { id: 3, class: gprc, preferred-register: '' }
3150 - { id: 4, class: g8rc, preferred-register: '' }
3151 - { id: 5, class: g8rc, preferred-register: '' }
3152 - { id: 6, class: g8rc, preferred-register: '' }
3153 - { id: 7, class: f4rc, preferred-register: '' }
3154 - { id: 8, class: gprc, preferred-register: '' }
3155 - { id: 9, class: g8rc, preferred-register: '' }
3156 - { id: 10, class: g8rc, preferred-register: '' }
3157 - { id: 11, class: g8rc, preferred-register: '' }
3158 - { id: 12, class: f4rc, preferred-register: '' }
3159 - { id: 13, class: f4rc, preferred-register: '' }
3161 - { reg: '$x3', virtual-reg: '%0' }
3162 - { reg: '$x4', virtual-reg: '%1' }
3164 isFrameAddressTaken: false
3165 isReturnAddressTaken: false
3167 hasPatchPoint: false
3174 maxCallFrameSize: 4294967295
3175 hasOpaqueSPAdjustment: false
3177 hasMustTailInVarArgFunc: false
3192 %4 = INSERT_SUBREG %5, killed %3, 1
3194 %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3196 ; CHECK-LATE: lfs 0, 88(3)
3199 %9 = INSERT_SUBREG %10, killed %8, 1
3201 %12 = LFSX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3202 ; CHECK: LFS -88, %0
3203 ; CHECK-LATE: lfs 1, -88(3)
3204 %13 = FADDS killed %7, killed %12, implicit $rm
3206 BLR8 implicit $lr8, implicit $rm, implicit $f1
3211 # CHECK-ALL: name: testLXSDX
3213 exposesReturnsTwice: false
3215 regBankSelected: false
3217 tracksRegLiveness: true
3219 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3220 - { id: 1, class: g8rc, preferred-register: '' }
3221 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3222 - { id: 3, class: gprc, preferred-register: '' }
3223 - { id: 4, class: g8rc, preferred-register: '' }
3224 - { id: 5, class: g8rc, preferred-register: '' }
3225 - { id: 6, class: g8rc, preferred-register: '' }
3226 - { id: 7, class: vsfrc, preferred-register: '' }
3227 - { id: 8, class: gprc, preferred-register: '' }
3228 - { id: 9, class: g8rc, preferred-register: '' }
3229 - { id: 10, class: g8rc, preferred-register: '' }
3230 - { id: 11, class: g8rc, preferred-register: '' }
3231 - { id: 12, class: vsfrc, preferred-register: '' }
3232 - { id: 13, class: vsfrc, preferred-register: '' }
3234 - { reg: '$x3', virtual-reg: '%0' }
3235 - { reg: '$x4', virtual-reg: '%1' }
3237 isFrameAddressTaken: false
3238 isReturnAddressTaken: false
3240 hasPatchPoint: false
3247 maxCallFrameSize: 4294967295
3248 hasOpaqueSPAdjustment: false
3250 hasMustTailInVarArgFunc: false
3265 %4 = INSERT_SUBREG %5, killed %3, 1
3267 %7 = LXSDX %0, killed %6, implicit $rm :: (load 8 from %ir.arrayidx, !tbaa !12)
3268 ; CHECK: DFLOADf64 100, %0
3269 ; CHECK-LATE: lfd 0, 100(3)
3272 %9 = INSERT_SUBREG %10, killed %8, 1
3274 %12 = LXSDX %0, killed %11, implicit $rm :: (load 8 from %ir.arrayidx3, !tbaa !12)
3275 ; CHECK: DFLOADf64 -120, %0
3276 ; CHECK-LATE: lfd 1, -120(3)
3277 %13 = XSADDDP killed %7, killed %12, implicit $rm
3279 BLR8 implicit $lr8, implicit $rm, implicit $f1
3284 # CHECK-ALL: name: testLXSSPX
3286 exposesReturnsTwice: false
3288 regBankSelected: false
3290 tracksRegLiveness: true
3292 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3293 - { id: 1, class: g8rc, preferred-register: '' }
3294 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3295 - { id: 3, class: gprc, preferred-register: '' }
3296 - { id: 4, class: g8rc, preferred-register: '' }
3297 - { id: 5, class: g8rc, preferred-register: '' }
3298 - { id: 6, class: g8rc, preferred-register: '' }
3299 - { id: 7, class: vssrc, preferred-register: '' }
3300 - { id: 8, class: gprc, preferred-register: '' }
3301 - { id: 9, class: g8rc, preferred-register: '' }
3302 - { id: 10, class: g8rc, preferred-register: '' }
3303 - { id: 11, class: g8rc, preferred-register: '' }
3304 - { id: 12, class: vssrc, preferred-register: '' }
3305 - { id: 13, class: vssrc, preferred-register: '' }
3307 - { reg: '$x3', virtual-reg: '%0' }
3308 - { reg: '$x4', virtual-reg: '%1' }
3310 isFrameAddressTaken: false
3311 isReturnAddressTaken: false
3313 hasPatchPoint: false
3320 maxCallFrameSize: 4294967295
3321 hasOpaqueSPAdjustment: false
3323 hasMustTailInVarArgFunc: false
3338 %4 = INSERT_SUBREG %5, killed %3, 1
3340 %7 = LXSSPX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3341 ; CHECK: DFLOADf32 96, %0
3342 ; CHECK-LATE: lfs 0, 96(3)
3345 %9 = INSERT_SUBREG %10, killed %8, 1
3347 %12 = LXSSPX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3348 ; CHECK: DFLOADf32 -92, %0
3349 ; CHECK-LATE: lfs 1, -92(3)
3350 %13 = XSADDSP killed %7, killed %12
3352 BLR8 implicit $lr8, implicit $rm, implicit $f1
3357 # CHECK-ALL: name: testLXVX
3359 exposesReturnsTwice: false
3361 regBankSelected: false
3363 tracksRegLiveness: true
3365 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3366 - { id: 1, class: g8rc, preferred-register: '' }
3367 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3368 - { id: 3, class: gprc, preferred-register: '' }
3369 - { id: 4, class: g8rc, preferred-register: '' }
3370 - { id: 5, class: g8rc, preferred-register: '' }
3371 - { id: 6, class: g8rc, preferred-register: '' }
3372 - { id: 7, class: vrrc, preferred-register: '' }
3373 - { id: 8, class: gprc, preferred-register: '' }
3374 - { id: 9, class: g8rc, preferred-register: '' }
3375 - { id: 10, class: g8rc, preferred-register: '' }
3376 - { id: 11, class: g8rc, preferred-register: '' }
3377 - { id: 12, class: vrrc, preferred-register: '' }
3378 - { id: 13, class: vrrc, preferred-register: '' }
3380 - { reg: '$x3', virtual-reg: '%0' }
3381 - { reg: '$x4', virtual-reg: '%1' }
3383 isFrameAddressTaken: false
3384 isReturnAddressTaken: false
3386 hasPatchPoint: false
3393 maxCallFrameSize: 4294967295
3394 hasOpaqueSPAdjustment: false
3396 hasMustTailInVarArgFunc: false
3411 %4 = INSERT_SUBREG %5, killed %3, 1
3413 %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3)
3415 ; CHECK-LATE: lxv 34, 32(3)
3418 %9 = INSERT_SUBREG %10, killed %8, 1
3420 %12 = LXVX %0, killed %11 :: (load 16 from %ir.arrayidx3, !tbaa !3)
3421 ; CHECK: LXV -16, %0
3422 ; CHECK-LATE: lxv 35, -16(3)
3423 %13 = VADDUWM killed %12, killed %7
3425 BLR8 implicit $lr8, implicit $rm, implicit $v2
3430 # CHECK-ALL: name: testOR
3432 exposesReturnsTwice: false
3434 regBankSelected: false
3436 tracksRegLiveness: true
3438 - { id: 0, class: gprc, preferred-register: '' }
3439 - { id: 1, class: g8rc, preferred-register: '' }
3440 - { id: 2, class: gprc, preferred-register: '' }
3441 - { id: 3, class: gprc, preferred-register: '' }
3443 - { reg: '$x3', virtual-reg: '%0' }
3444 - { reg: '$x4', virtual-reg: '%1' }
3446 isFrameAddressTaken: false
3447 isReturnAddressTaken: false
3449 hasPatchPoint: false
3456 maxCallFrameSize: 4294967295
3457 hasOpaqueSPAdjustment: false
3459 hasMustTailInVarArgFunc: false
3474 ; CHECK-LATE: ori 3, 4, 99
3475 $x3 = EXTSW_32_64 %2
3476 BLR8 implicit $lr8, implicit $rm, implicit $x3
3481 # CHECK-ALL: name: testOR8
3483 exposesReturnsTwice: false
3485 regBankSelected: false
3487 tracksRegLiveness: true
3489 - { id: 0, class: g8rc, preferred-register: '' }
3490 - { id: 1, class: g8rc, preferred-register: '' }
3491 - { id: 2, class: g8rc, preferred-register: '' }
3493 - { reg: '$x3', virtual-reg: '%0' }
3494 - { reg: '$x4', virtual-reg: '%1' }
3496 isFrameAddressTaken: false
3497 isReturnAddressTaken: false
3499 hasPatchPoint: false
3506 maxCallFrameSize: 4294967295
3507 hasOpaqueSPAdjustment: false
3509 hasMustTailInVarArgFunc: false
3522 ; CHECK: ORI8 %1, 777
3523 ; CHECK-LATE: ori 3, 4, 777
3525 BLR8 implicit $lr8, implicit $rm, implicit $x3
3530 # CHECK-ALL: name: testORI
3532 exposesReturnsTwice: false
3534 regBankSelected: false
3536 tracksRegLiveness: true
3538 - { id: 0, class: gprc, preferred-register: '' }
3539 - { id: 1, class: gprc, preferred-register: '' }
3541 - { reg: '$x3', virtual-reg: '%0' }
3543 isFrameAddressTaken: false
3544 isReturnAddressTaken: false
3546 hasPatchPoint: false
3553 maxCallFrameSize: 4294967295
3554 hasOpaqueSPAdjustment: false
3556 hasMustTailInVarArgFunc: false
3569 ; CHECK-LATE: li 3, 857
3570 $x3 = EXTSW_32_64 %1
3571 BLR8 implicit $lr8, implicit $rm, implicit $x3
3576 # CHECK-ALL: name: testORI8
3578 exposesReturnsTwice: false
3580 regBankSelected: false
3582 tracksRegLiveness: true
3584 - { id: 0, class: g8rc, preferred-register: '' }
3585 - { id: 1, class: g8rc, preferred-register: '' }
3587 - { reg: '$x3', virtual-reg: '%0' }
3589 isFrameAddressTaken: false
3590 isReturnAddressTaken: false
3592 hasPatchPoint: false
3599 maxCallFrameSize: 4294967295
3600 hasOpaqueSPAdjustment: false
3602 hasMustTailInVarArgFunc: false
3615 ; CHECK-LATE: li 3, 8819
3617 BLR8 implicit $lr8, implicit $rm, implicit $x3
3622 # CHECK-ALL: name: testRLDCL
3624 exposesReturnsTwice: false
3626 regBankSelected: false
3628 tracksRegLiveness: true
3630 - { id: 0, class: g8rc, preferred-register: '' }
3631 - { id: 1, class: g8rc, preferred-register: '' }
3632 - { id: 2, class: gprc, preferred-register: '' }
3633 - { id: 3, class: gprc, preferred-register: '' }
3634 - { id: 4, class: g8rc, preferred-register: '' }
3636 - { reg: '$x3', virtual-reg: '%0' }
3637 - { reg: '$x4', virtual-reg: '%1' }
3639 isFrameAddressTaken: false
3640 isReturnAddressTaken: false
3642 hasPatchPoint: false
3649 maxCallFrameSize: 4294967295
3650 hasOpaqueSPAdjustment: false
3652 hasMustTailInVarArgFunc: false
3666 %4 = RLDCL %0, killed %3, 0
3667 ; CHECK: RLDICL %0, 14, 0
3668 ; CHECK-LATE: rotldi 3, 3, 14
3670 BLR8 implicit $lr8, implicit $rm, implicit $x3
3675 # CHECK-ALL: name: testRLDCLo
3677 exposesReturnsTwice: false
3679 regBankSelected: false
3681 tracksRegLiveness: true
3683 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3684 - { id: 1, class: g8rc, preferred-register: '' }
3685 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3686 - { id: 3, class: gprc, preferred-register: '' }
3687 - { id: 4, class: g8rc, preferred-register: '' }
3688 - { id: 5, class: crrc, preferred-register: '' }
3689 - { id: 6, class: g8rc, preferred-register: '' }
3691 - { reg: '$x3', virtual-reg: '%0' }
3692 - { reg: '$x4', virtual-reg: '%1' }
3694 isFrameAddressTaken: false
3695 isReturnAddressTaken: false
3697 hasPatchPoint: false
3704 maxCallFrameSize: 4294967295
3705 hasOpaqueSPAdjustment: false
3707 hasMustTailInVarArgFunc: false
3719 %2 = RLDICL %1, 0, 58
3721 %4 = RLDCLo %0, killed %3, 0, implicit-def $cr0
3722 ; CHECK: RLDICLo %0, 37, 0, implicit-def $cr0
3723 ; CHECK-LATE: rldicl. 5, 3, 37, 0
3724 %5 = COPY killed $cr0
3725 %6 = ISEL8 %2, %0, %5.sub_eq
3727 BLR8 implicit $lr8, implicit $rm, implicit $x3
3732 # CHECK-ALL: name: testRLDCR
3734 exposesReturnsTwice: false
3736 regBankSelected: false
3738 tracksRegLiveness: true
3740 - { id: 0, class: g8rc, preferred-register: '' }
3741 - { id: 1, class: g8rc, preferred-register: '' }
3742 - { id: 2, class: gprc, preferred-register: '' }
3743 - { id: 3, class: gprc, preferred-register: '' }
3744 - { id: 4, class: g8rc, preferred-register: '' }
3746 - { reg: '$x3', virtual-reg: '%0' }
3747 - { reg: '$x4', virtual-reg: '%1' }
3749 isFrameAddressTaken: false
3750 isReturnAddressTaken: false
3752 hasPatchPoint: false
3759 maxCallFrameSize: 4294967295
3760 hasOpaqueSPAdjustment: false
3762 hasMustTailInVarArgFunc: false
3776 %4 = RLDCR %0, killed %3, 0
3777 ; CHECK: RLDICR %0, 0, 0
3778 ; CHECK-LATE: rldicr 3, 3, 0, 0
3780 BLR8 implicit $lr8, implicit $rm, implicit $x3
3785 # CHECK-ALL: name: testRLDCRo
3787 exposesReturnsTwice: false
3789 regBankSelected: false
3791 tracksRegLiveness: true
3793 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3794 - { id: 1, class: g8rc, preferred-register: '' }
3795 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3796 - { id: 3, class: gprc, preferred-register: '' }
3797 - { id: 4, class: g8rc, preferred-register: '' }
3798 - { id: 5, class: crrc, preferred-register: '' }
3799 - { id: 6, class: g8rc, preferred-register: '' }
3801 - { reg: '$x3', virtual-reg: '%0' }
3802 - { reg: '$x4', virtual-reg: '%1' }
3804 isFrameAddressTaken: false
3805 isReturnAddressTaken: false
3807 hasPatchPoint: false
3814 maxCallFrameSize: 4294967295
3815 hasOpaqueSPAdjustment: false
3817 hasMustTailInVarArgFunc: false
3829 %2 = RLDICL %1, 0, 58
3831 %4 = RLDCRo %0, killed %3, 0, implicit-def $cr0
3832 ; CHECK: RLDICRo %0, 18, 0, implicit-def $cr0
3833 ; CHECK-LATE: rldicr. 5, 3, 18, 0
3834 %5 = COPY killed $cr0
3835 %6 = ISEL8 %2, %0, %5.sub_eq
3837 BLR8 implicit $lr8, implicit $rm, implicit $x3
3842 # CHECK-ALL: name: testRLDICL
3844 exposesReturnsTwice: false
3846 regBankSelected: false
3848 tracksRegLiveness: true
3850 - { id: 0, class: g8rc, preferred-register: '' }
3851 - { id: 1, class: g8rc, preferred-register: '' }
3853 - { reg: '$x3', virtual-reg: '%0' }
3855 isFrameAddressTaken: false
3856 isReturnAddressTaken: false
3858 hasPatchPoint: false
3865 maxCallFrameSize: 4294967295
3866 hasOpaqueSPAdjustment: false
3868 hasMustTailInVarArgFunc: false
3879 %1 = RLDICL %0, 53, 49
3881 ; CHECK-LATE: li 3, 32767
3883 BLR8 implicit $lr8, implicit $rm, implicit $x3
3888 # CHECK-ALL: name: testRLDICLo
3890 exposesReturnsTwice: false
3892 regBankSelected: false
3894 tracksRegLiveness: true
3896 - { id: 0, class: g8rc, preferred-register: '' }
3897 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3898 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3899 - { id: 3, class: crrc, preferred-register: '' }
3900 - { id: 4, class: g8rc, preferred-register: '' }
3902 - { reg: '$x3', virtual-reg: '%0' }
3903 - { reg: '$x4', virtual-reg: '%1' }
3905 isFrameAddressTaken: false
3906 isReturnAddressTaken: false
3908 hasPatchPoint: false
3915 maxCallFrameSize: 4294967295
3916 hasOpaqueSPAdjustment: false
3918 hasMustTailInVarArgFunc: false
3930 %2 = RLDICLo %0, 53, 48, implicit-def $cr0
3931 ; CHECK: ANDIo8 %0, 65535
3932 ; CHECK-LATE: li 3, -1
3933 ; CHECK-LATE: andi. 3, 3, 65535
3934 %3 = COPY killed $cr0
3935 %4 = ISEL8 %1, %2, %3.sub_eq
3937 BLR8 implicit $lr8, implicit $rm, implicit $x3
3942 # CHECK-ALL: name: testRLDICLo2
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 = RLDICLo %0, 61, 3, implicit-def $cr0
3986 ; CHECK: ANDIo8 %0, 25
3987 ; CHECK-LATE-NOT: andi.
3988 %3 = COPY killed $cr0
3989 %4 = ISEL8 %1, %2, %3.sub_eq
3991 BLR8 implicit $lr8, implicit $rm, implicit $x3
3996 # CHECK-ALL: name: testRLDICLo3
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 = RLDICLo %0, 32, 32, implicit-def $cr0
4039 ; CHECK: ANDIo8 %0, 0
4040 ; CHECK-LATE: li 3, 2
4041 ; CHECK-LATE: andi. 3, 3, 0
4042 %3 = COPY killed $cr0
4043 %4 = ISEL8 %1, %2, %3.sub_eq
4045 BLR8 implicit $lr8, implicit $rm, implicit $x3
4050 # CHECK-ALL: name: testRLWINM
4052 exposesReturnsTwice: false
4054 regBankSelected: false
4056 tracksRegLiveness: true
4058 - { id: 0, class: g8rc, preferred-register: '' }
4059 - { id: 1, class: gprc, preferred-register: '' }
4060 - { id: 2, class: gprc, preferred-register: '' }
4061 - { id: 3, class: g8rc, preferred-register: '' }
4062 - { id: 4, class: gprc, preferred-register: '' }
4064 - { reg: '$x3', virtual-reg: '%0' }
4066 isFrameAddressTaken: false
4067 isReturnAddressTaken: false
4069 hasPatchPoint: false
4076 maxCallFrameSize: 4294967295
4077 hasOpaqueSPAdjustment: false
4079 hasMustTailInVarArgFunc: false
4093 %4 = RLWINM killed %2, 4, 20, 27
4095 ; CHECK-LATE: li 3, 272
4096 $x3 = EXTSW_32_64 %4
4097 BLR8 implicit $lr8, implicit $rm, implicit $x3
4101 name: testRLWINMFullReg
4102 # CHECK-ALL: name: testRLWINMFullReg
4104 exposesReturnsTwice: false
4106 regBankSelected: false
4108 tracksRegLiveness: true
4110 - { id: 0, class: g8rc, preferred-register: '' }
4111 - { id: 1, class: gprc, preferred-register: '' }
4112 - { id: 2, class: gprc, preferred-register: '' }
4113 - { id: 3, class: g8rc, preferred-register: '' }
4114 - { id: 4, class: gprc, preferred-register: '' }
4116 - { reg: '$x3', virtual-reg: '%0' }
4118 isFrameAddressTaken: false
4119 isReturnAddressTaken: false
4121 hasPatchPoint: false
4128 maxCallFrameSize: 4294967295
4129 hasOpaqueSPAdjustment: false
4131 hasMustTailInVarArgFunc: false
4145 %4 = RLWINM killed %2, 31, 0, 31
4147 ; CHECK-LATE: li 3, 1
4148 $x3 = EXTSW_32_64 %4
4149 BLR8 implicit $lr8, implicit $rm, implicit $x3
4153 name: testRLWINMFullRegOutOfRange
4154 # CHECK-ALL: name: testRLWINMFullRegOutOfRange
4156 exposesReturnsTwice: false
4158 regBankSelected: false
4160 tracksRegLiveness: true
4162 - { id: 0, class: g8rc, preferred-register: '' }
4163 - { id: 1, class: gprc, preferred-register: '' }
4164 - { id: 2, class: gprc, preferred-register: '' }
4165 - { id: 3, class: g8rc, preferred-register: '' }
4166 - { id: 4, class: gprc, preferred-register: '' }
4168 - { reg: '$x3', virtual-reg: '%0' }
4170 isFrameAddressTaken: false
4171 isReturnAddressTaken: false
4173 hasPatchPoint: false
4180 maxCallFrameSize: 4294967295
4181 hasOpaqueSPAdjustment: false
4183 hasMustTailInVarArgFunc: false
4197 %4 = RLWINM killed %2, 31, 0, 31
4198 ; CHECK: RLWINM killed %2, 31, 0, 31
4199 ; CHECK-LATE: rotlwi 3, 3, 31
4200 $x3 = EXTSW_32_64 %4
4201 BLR8 implicit $lr8, implicit $rm, implicit $x3
4206 # CHECK-ALL: name: testRLWINM8
4208 exposesReturnsTwice: false
4210 regBankSelected: false
4212 tracksRegLiveness: true
4214 - { id: 0, class: g8rc, preferred-register: '' }
4215 - { id: 1, class: g8rc, preferred-register: '' }
4217 - { reg: '$x3', virtual-reg: '%0' }
4219 isFrameAddressTaken: false
4220 isReturnAddressTaken: false
4222 hasPatchPoint: false
4229 maxCallFrameSize: 4294967295
4230 hasOpaqueSPAdjustment: false
4232 hasMustTailInVarArgFunc: false
4243 %1 = RLWINM8 %0, 4, 20, 27
4245 ; CHECK-LATE: li 3, 3744
4247 BLR8 implicit $lr8, implicit $rm, implicit $x3
4252 # CHECK-ALL: name: testRLWINMo
4254 exposesReturnsTwice: false
4256 regBankSelected: false
4258 tracksRegLiveness: true
4260 - { id: 0, class: g8rc, preferred-register: '' }
4261 - { id: 1, class: g8rc, preferred-register: '' }
4262 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4263 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4264 - { id: 4, class: gprc, preferred-register: '' }
4265 - { id: 5, class: crrc, preferred-register: '' }
4266 - { id: 6, class: gprc, preferred-register: '' }
4267 - { id: 7, class: g8rc, preferred-register: '' }
4268 - { id: 8, class: g8rc, preferred-register: '' }
4269 - { id: 9, class: g8rc, preferred-register: '' }
4271 - { reg: '$x3', virtual-reg: '%0' }
4272 - { reg: '$x4', virtual-reg: '%1' }
4274 isFrameAddressTaken: false
4275 isReturnAddressTaken: false
4277 hasPatchPoint: false
4284 maxCallFrameSize: 4294967295
4285 hasOpaqueSPAdjustment: false
4287 hasMustTailInVarArgFunc: false
4301 %4 = RLWINMo %3, 0, 24, 31, implicit-def $cr0
4303 ; CHECK: ANDIo %3, 65514
4304 ; CHECK-LATE: li 3, -22
4305 ; CHECK-LATE: andi. 5, 3, 234
4306 %5 = COPY killed $cr0
4307 %6 = ISEL %2, %3, %5.sub_eq
4309 %7 = INSERT_SUBREG %8, killed %6, 1
4310 %9 = RLDICL killed %7, 0, 32
4312 BLR8 implicit $lr8, implicit $rm, implicit $x3
4317 # CHECK-ALL: name: testRLWINMo2
4319 exposesReturnsTwice: false
4321 regBankSelected: false
4323 tracksRegLiveness: true
4325 - { id: 0, class: g8rc, preferred-register: '' }
4326 - { id: 1, class: g8rc, preferred-register: '' }
4327 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4328 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4329 - { id: 4, class: gprc, preferred-register: '' }
4330 - { id: 5, class: crrc, preferred-register: '' }
4331 - { id: 6, class: gprc, preferred-register: '' }
4332 - { id: 7, class: g8rc, preferred-register: '' }
4333 - { id: 8, class: g8rc, preferred-register: '' }
4334 - { id: 9, class: g8rc, preferred-register: '' }
4336 - { reg: '$x3', virtual-reg: '%0' }
4337 - { reg: '$x4', virtual-reg: '%1' }
4339 isFrameAddressTaken: false
4340 isReturnAddressTaken: false
4342 hasPatchPoint: false
4349 maxCallFrameSize: 4294967295
4350 hasOpaqueSPAdjustment: false
4352 hasMustTailInVarArgFunc: false
4366 %4 = RLWINMo %3, 5, 24, 31, implicit-def $cr0
4368 ; CHECK-NOT: ANDIo8 %3, 65514
4369 ; CHECK-LATE-NOT: andi.
4370 %5 = COPY killed $cr0
4371 %6 = ISEL %2, %3, %5.sub_eq
4373 %7 = INSERT_SUBREG %8, killed %6, 1
4374 %9 = RLDICL killed %7, 0, 32
4376 BLR8 implicit $lr8, implicit $rm, implicit $x3
4381 # CHECK-ALL: name: testRLWINM8o
4383 exposesReturnsTwice: false
4385 regBankSelected: false
4387 tracksRegLiveness: true
4389 - { id: 0, class: g8rc, preferred-register: '' }
4390 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4391 - { id: 2, class: g8rc, preferred-register: '' }
4392 - { id: 3, class: g8rc, preferred-register: '' }
4393 - { id: 4, class: g8rc, preferred-register: '' }
4394 - { id: 5, class: g8rc, preferred-register: '' }
4395 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4396 - { id: 7, class: crrc, preferred-register: '' }
4397 - { id: 8, class: g8rc, preferred-register: '' }
4399 - { reg: '$x3', virtual-reg: '%0' }
4400 - { reg: '$x4', virtual-reg: '%1' }
4402 isFrameAddressTaken: false
4403 isReturnAddressTaken: false
4405 hasPatchPoint: false
4412 maxCallFrameSize: 4294967295
4413 hasOpaqueSPAdjustment: false
4415 hasMustTailInVarArgFunc: false
4428 %3 = RLWINM8o %2, 4, 20, 27, implicit-def $cr0
4429 ; CHECK: ANDIo8 %2, 3808
4430 ; CHECK-LATE: li 3, -18
4431 ; CHECK-LATE: andi. 3, 3, 3808
4432 %7 = COPY killed $cr0
4433 %6 = RLDICL killed %3, 0, 32
4434 %8 = ISEL8 %1, %6, %7.sub_eq
4436 BLR8 implicit $lr8, implicit $rm, implicit $x3
4441 # CHECK-ALL: name: testSLD
4443 exposesReturnsTwice: false
4445 regBankSelected: false
4447 tracksRegLiveness: true
4449 - { id: 0, class: g8rc, preferred-register: '' }
4450 - { id: 1, class: g8rc, preferred-register: '' }
4451 - { id: 2, class: gprc, preferred-register: '' }
4452 - { id: 3, class: g8rc, preferred-register: '' }
4454 - { reg: '$x3', virtual-reg: '%0' }
4455 - { reg: '$x4', virtual-reg: '%1' }
4457 isFrameAddressTaken: false
4458 isReturnAddressTaken: false
4460 hasPatchPoint: false
4467 maxCallFrameSize: 4294967295
4468 hasOpaqueSPAdjustment: false
4470 hasMustTailInVarArgFunc: false
4483 %3 = SLD %0, killed %2
4484 ; CHECK: RLDICR %0, 13, 50
4485 ; CHECK-LATE: sldi 3, 3, 13
4487 BLR8 implicit $lr8, implicit $rm, implicit $x3
4492 # CHECK-ALL: name: testSLDo
4494 exposesReturnsTwice: false
4496 regBankSelected: false
4498 tracksRegLiveness: true
4500 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4501 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4502 - { id: 2, class: gprc, preferred-register: '' }
4503 - { id: 3, class: g8rc, preferred-register: '' }
4504 - { id: 4, class: crrc, preferred-register: '' }
4505 - { id: 5, class: g8rc, preferred-register: '' }
4507 - { reg: '$x3', virtual-reg: '%0' }
4508 - { reg: '$x4', virtual-reg: '%1' }
4510 isFrameAddressTaken: false
4511 isReturnAddressTaken: false
4513 hasPatchPoint: false
4520 maxCallFrameSize: 4294967295
4521 hasOpaqueSPAdjustment: false
4523 hasMustTailInVarArgFunc: false
4536 %3 = SLDo %0, killed %2, implicit-def $cr0
4537 ; CHECK: RLDICRo %0, 17, 46, implicit-def $cr0
4538 ; CHECK-LATE: rldicr. 5, 3, 17, 46
4539 %4 = COPY killed $cr0
4540 %5 = ISEL8 %1, %0, %4.sub_eq
4542 BLR8 implicit $lr8, implicit $rm, implicit $x3
4547 # CHECK-ALL: name: testSRD
4549 exposesReturnsTwice: false
4551 regBankSelected: false
4553 tracksRegLiveness: true
4555 - { id: 0, class: g8rc, preferred-register: '' }
4556 - { id: 1, class: g8rc, preferred-register: '' }
4557 - { id: 2, class: gprc, preferred-register: '' }
4558 - { id: 3, class: g8rc, preferred-register: '' }
4560 - { reg: '$x3', virtual-reg: '%0' }
4561 - { reg: '$x4', virtual-reg: '%1' }
4563 isFrameAddressTaken: false
4564 isReturnAddressTaken: false
4566 hasPatchPoint: false
4573 maxCallFrameSize: 4294967295
4574 hasOpaqueSPAdjustment: false
4576 hasMustTailInVarArgFunc: false
4589 %3 = SRD %0, killed %2
4590 ; CHECK: RLDICL %0, 60, 4
4591 ; CHECK-LATE: rldicl 3, 3, 60, 4
4593 BLR8 implicit $lr8, implicit $rm, implicit $x3
4598 # CHECK-ALL: name: testSRDo
4600 exposesReturnsTwice: false
4602 regBankSelected: false
4604 tracksRegLiveness: true
4606 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4607 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4608 - { id: 2, class: gprc, preferred-register: '' }
4609 - { id: 3, class: g8rc, preferred-register: '' }
4610 - { id: 4, class: crrc, preferred-register: '' }
4611 - { id: 5, class: g8rc, preferred-register: '' }
4613 - { reg: '$x3', virtual-reg: '%0' }
4614 - { reg: '$x4', virtual-reg: '%1' }
4616 isFrameAddressTaken: false
4617 isReturnAddressTaken: false
4619 hasPatchPoint: false
4626 maxCallFrameSize: 4294967295
4627 hasOpaqueSPAdjustment: false
4629 hasMustTailInVarArgFunc: false
4642 %3 = SRDo %0, killed %2, implicit-def $cr0
4643 ; CHECK: RLDICLo %0, 47, 17, implicit-def $cr0
4644 ; CHECK-LATE: rldicl. 5, 3, 47, 17
4645 %4 = COPY killed $cr0
4646 %5 = ISEL8 %1, %0, %4.sub_eq
4648 BLR8 implicit $lr8, implicit $rm, implicit $x3
4653 # CHECK-ALL: name: testSLW
4655 exposesReturnsTwice: false
4657 regBankSelected: false
4659 tracksRegLiveness: true
4661 - { id: 0, class: g8rc, preferred-register: '' }
4662 - { id: 1, class: g8rc, preferred-register: '' }
4663 - { id: 2, class: gprc, preferred-register: '' }
4664 - { id: 3, class: g8rc, preferred-register: '' }
4665 - { id: 4, class: g8rc, preferred-register: '' }
4666 - { id: 5, class: gprc, preferred-register: '' }
4667 - { id: 6, class: g8rc, preferred-register: '' }
4668 - { id: 7, class: g8rc, preferred-register: '' }
4669 - { id: 8, class: gprc, preferred-register: '' }
4671 - { reg: '$x3', virtual-reg: '%0' }
4672 - { reg: '$x4', virtual-reg: '%1' }
4674 isFrameAddressTaken: false
4675 isReturnAddressTaken: false
4677 hasPatchPoint: false
4684 maxCallFrameSize: 4294967295
4685 hasOpaqueSPAdjustment: false
4687 hasMustTailInVarArgFunc: false
4701 %8 = SLW killed %2, killed %5
4702 ; CHECK: RLWINM killed %2, 21, 0, 10
4703 ; CHECK-LATE: slwi 3, 4, 21
4704 $x3 = EXTSW_32_64 %8
4705 BLR8 implicit $lr8, implicit $rm, implicit $x3
4710 # CHECK-ALL: name: testSLWo
4712 exposesReturnsTwice: false
4714 regBankSelected: false
4716 tracksRegLiveness: true
4718 - { id: 0, class: g8rc, preferred-register: '' }
4719 - { id: 1, class: g8rc, preferred-register: '' }
4720 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4721 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4722 - { id: 4, class: gprc, preferred-register: '' }
4723 - { id: 5, class: crrc, preferred-register: '' }
4724 - { id: 6, class: gprc, preferred-register: '' }
4725 - { id: 7, class: g8rc, preferred-register: '' }
4726 - { id: 8, class: g8rc, preferred-register: '' }
4727 - { id: 9, class: g8rc, preferred-register: '' }
4729 - { reg: '$x3', virtual-reg: '%0' }
4730 - { reg: '$x4', virtual-reg: '%1' }
4732 isFrameAddressTaken: false
4733 isReturnAddressTaken: false
4735 hasPatchPoint: false
4742 maxCallFrameSize: 4294967295
4743 hasOpaqueSPAdjustment: false
4745 hasMustTailInVarArgFunc: false
4759 %4 = SLWo %3, %2, implicit-def $cr0
4760 ; CHECK: RLWINMo %3, 11, 0, 20, implicit-def $cr0
4761 ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20
4762 %5 = COPY killed $cr0
4763 %6 = ISEL %2, %3, %5.sub_eq
4765 %7 = INSERT_SUBREG %8, killed %6, 1
4766 %9 = RLDICL killed %7, 0, 32
4768 BLR8 implicit $lr8, implicit $rm, implicit $x3
4773 # CHECK-ALL: name: testSRW
4775 exposesReturnsTwice: false
4777 regBankSelected: false
4779 tracksRegLiveness: true
4781 - { id: 0, class: g8rc, preferred-register: '' }
4782 - { id: 1, class: g8rc, preferred-register: '' }
4783 - { id: 2, class: gprc, preferred-register: '' }
4784 - { id: 3, class: g8rc, preferred-register: '' }
4785 - { id: 4, class: g8rc, preferred-register: '' }
4786 - { id: 5, class: gprc, preferred-register: '' }
4787 - { id: 6, class: g8rc, preferred-register: '' }
4788 - { id: 7, class: g8rc, preferred-register: '' }
4789 - { id: 8, class: gprc, preferred-register: '' }
4791 - { reg: '$x3', virtual-reg: '%0' }
4792 - { reg: '$x4', virtual-reg: '%1' }
4794 isFrameAddressTaken: false
4795 isReturnAddressTaken: false
4797 hasPatchPoint: false
4804 maxCallFrameSize: 4294967295
4805 hasOpaqueSPAdjustment: false
4807 hasMustTailInVarArgFunc: false
4821 %8 = SRW killed %5, killed %2
4822 ; CHECK: RLWINM killed %5, 24, 8, 31
4823 ; CHECK-LATE: srwi 3, 3, 8
4824 $x3 = EXTSW_32_64 %8
4825 BLR8 implicit $lr8, implicit $rm, implicit $x3
4830 # CHECK-ALL: name: testSRWo
4832 exposesReturnsTwice: false
4834 regBankSelected: false
4836 tracksRegLiveness: true
4838 - { id: 0, class: g8rc, preferred-register: '' }
4839 - { id: 1, class: g8rc, preferred-register: '' }
4840 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4841 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4842 - { id: 4, class: gprc, preferred-register: '' }
4843 - { id: 5, class: crrc, preferred-register: '' }
4844 - { id: 6, class: gprc, preferred-register: '' }
4845 - { id: 7, class: g8rc, preferred-register: '' }
4846 - { id: 8, class: g8rc, preferred-register: '' }
4847 - { id: 9, class: g8rc, preferred-register: '' }
4849 - { reg: '$x3', virtual-reg: '%0' }
4850 - { reg: '$x4', virtual-reg: '%1' }
4852 isFrameAddressTaken: false
4853 isReturnAddressTaken: false
4855 hasPatchPoint: false
4862 maxCallFrameSize: 4294967295
4863 hasOpaqueSPAdjustment: false
4865 hasMustTailInVarArgFunc: false
4879 %4 = SRWo %3, %2, implicit-def $cr0
4880 ; CHECK: RLWINMo %3, 25, 7, 31
4881 ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31
4882 %5 = COPY killed $cr0
4883 %6 = ISEL %2, %3, %5.sub_eq
4885 %7 = INSERT_SUBREG %8, killed %6, 1
4886 %9 = RLDICL killed %7, 0, 32
4888 BLR8 implicit $lr8, implicit $rm, implicit $x3
4893 # CHECK-ALL: name: testSRAW
4895 exposesReturnsTwice: false
4897 regBankSelected: false
4899 tracksRegLiveness: true
4901 - { id: 0, class: g8rc, preferred-register: '' }
4902 - { id: 1, class: g8rc, preferred-register: '' }
4903 - { id: 2, class: gprc, preferred-register: '' }
4904 - { id: 3, class: gprc, preferred-register: '' }
4905 - { id: 4, class: gprc, preferred-register: '' }
4906 - { id: 5, class: g8rc, preferred-register: '' }
4908 - { reg: '$x3', virtual-reg: '%0' }
4909 - { reg: '$x4', virtual-reg: '%1' }
4911 isFrameAddressTaken: false
4912 isReturnAddressTaken: false
4914 hasPatchPoint: false
4921 maxCallFrameSize: 4294967295
4922 hasOpaqueSPAdjustment: false
4924 hasMustTailInVarArgFunc: false
4938 %4 = SRAW killed %3, killed %2, implicit-def dead $carry
4939 ; CHECK: SRAWI killed %3, 15, implicit-def dead $carry
4940 ; CHECK-LATE: srawi 3, 3, 15
4941 %5 = EXTSW_32_64 killed %4
4943 BLR8 implicit $lr8, implicit $rm, implicit $x3
4948 # CHECK-ALL: name: testSRAWo
4950 exposesReturnsTwice: false
4952 regBankSelected: false
4954 tracksRegLiveness: true
4956 - { id: 0, class: g8rc, preferred-register: '' }
4957 - { id: 1, class: g8rc, preferred-register: '' }
4958 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4959 - { id: 3, class: gprc, preferred-register: '' }
4960 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4961 - { id: 5, class: crrc, preferred-register: '' }
4962 - { id: 6, class: gprc, preferred-register: '' }
4963 - { id: 7, class: g8rc, preferred-register: '' }
4965 - { reg: '$x3', virtual-reg: '%0' }
4966 - { reg: '$x4', virtual-reg: '%1' }
4968 isFrameAddressTaken: false
4969 isReturnAddressTaken: false
4971 hasPatchPoint: false
4978 maxCallFrameSize: 4294967295
4979 hasOpaqueSPAdjustment: false
4981 hasMustTailInVarArgFunc: false
4995 %4 = SRAWo killed %3, %2, implicit-def dead $carry, implicit-def $cr0
4996 ; CHECK: SRAWIo killed %3, 8, implicit-def dead $carry, implicit-def $cr0
4997 ; CHECK-LATE: srawi. 3, 3, 8
4998 %5 = COPY killed $cr0
4999 %6 = ISEL %2, %4, %5.sub_eq
5000 %7 = EXTSW_32_64 killed %6
5002 BLR8 implicit $lr8, implicit $rm, implicit $x3
5007 # CHECK-ALL: name: testSRAD
5009 exposesReturnsTwice: false
5011 regBankSelected: false
5013 tracksRegLiveness: true
5015 - { id: 0, class: g8rc, preferred-register: '' }
5016 - { id: 1, class: g8rc, preferred-register: '' }
5017 - { id: 2, class: gprc, preferred-register: '' }
5018 - { id: 3, class: g8rc, preferred-register: '' }
5020 - { reg: '$x3', virtual-reg: '%0' }
5021 - { reg: '$x4', virtual-reg: '%1' }
5023 isFrameAddressTaken: false
5024 isReturnAddressTaken: false
5026 hasPatchPoint: false
5033 maxCallFrameSize: 4294967295
5034 hasOpaqueSPAdjustment: false
5036 hasMustTailInVarArgFunc: false
5049 %3 = SRAD %0, killed %2, implicit-def dead $carry
5050 ; CHECK: SRADI %0, 44, implicit-def dead $carry
5051 ; CHECK-LATE: sradi 3, 3, 44
5053 BLR8 implicit $lr8, implicit $rm, implicit $x3
5058 # CHECK-ALL: name: testSRADo
5060 exposesReturnsTwice: false
5062 regBankSelected: false
5064 tracksRegLiveness: true
5066 - { id: 0, class: g8rc, preferred-register: '' }
5067 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5068 - { id: 2, class: gprc, preferred-register: '' }
5069 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5070 - { id: 4, class: crrc, preferred-register: '' }
5071 - { id: 5, class: g8rc, preferred-register: '' }
5073 - { reg: '$x3', virtual-reg: '%0' }
5074 - { reg: '$x4', virtual-reg: '%1' }
5076 isFrameAddressTaken: false
5077 isReturnAddressTaken: false
5079 hasPatchPoint: false
5086 maxCallFrameSize: 4294967295
5087 hasOpaqueSPAdjustment: false
5089 hasMustTailInVarArgFunc: false
5102 %3 = SRADo %0, killed %2, implicit-def dead $carry, implicit-def $cr0
5103 ; CHECK: SRADIo %0, 61, implicit-def dead $carry, implicit-def $cr0
5104 ; CHECK-LATE: sradi. 3, 3, 61
5105 %4 = COPY killed $cr0
5106 %5 = ISEL8 %1, %3, %4.sub_eq
5108 BLR8 implicit $lr8, implicit $rm, implicit $x3
5113 # CHECK-ALL: name: testSTBUX
5115 exposesReturnsTwice: false
5117 regBankSelected: false
5119 tracksRegLiveness: true
5121 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5122 - { id: 1, class: g8rc, preferred-register: '' }
5123 - { id: 2, class: g8rc, preferred-register: '' }
5124 - { id: 3, class: gprc, preferred-register: '' }
5125 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5126 - { id: 5, class: gprc, preferred-register: '' }
5127 - { id: 6, class: g8rc, preferred-register: '' }
5128 - { id: 7, class: g8rc, preferred-register: '' }
5129 - { id: 8, class: g8rc, preferred-register: '' }
5130 - { id: 9, class: gprc, preferred-register: '' }
5131 - { id: 10, class: g8rc, preferred-register: '' }
5132 - { id: 11, class: g8rc, preferred-register: '' }
5133 - { id: 12, class: g8rc, preferred-register: '' }
5134 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5135 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5137 - { reg: '$x3', virtual-reg: '%0' }
5138 - { reg: '$x4', virtual-reg: '%1' }
5139 - { reg: '$x5', virtual-reg: '%2' }
5141 isFrameAddressTaken: false
5142 isReturnAddressTaken: false
5144 hasPatchPoint: false
5151 maxCallFrameSize: 4294967295
5152 hasOpaqueSPAdjustment: false
5154 hasMustTailInVarArgFunc: false
5162 liveins: $x3, $x4, $x5
5171 %6 = INSERT_SUBREG %7, killed %5, 1
5173 %13 = STBUX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
5174 ; CHECK: STBU %3, 966, %0
5175 ; CHECK-LATE: {{[0-9]+}}, 966({{[0-9]+}})
5178 %10 = INSERT_SUBREG %11, killed %9, 1
5180 %14 = STBUX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
5181 ; CHECK: STBU %3, 777, %0
5182 ; CHECK-LATE: {{[0-9]+}}, 777({{[0-9]+}})
5183 BLR8 implicit $lr8, implicit $rm
5188 # CHECK-ALL: name: testSTBX
5190 exposesReturnsTwice: false
5192 regBankSelected: false
5194 tracksRegLiveness: true
5196 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5197 - { id: 1, class: g8rc, preferred-register: '' }
5198 - { id: 2, class: g8rc, preferred-register: '' }
5199 - { id: 3, class: gprc, preferred-register: '' }
5200 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5201 - { id: 5, class: gprc, preferred-register: '' }
5202 - { id: 6, class: g8rc, preferred-register: '' }
5203 - { id: 7, class: g8rc, preferred-register: '' }
5204 - { id: 8, class: g8rc, preferred-register: '' }
5205 - { id: 9, class: gprc, preferred-register: '' }
5206 - { id: 10, class: g8rc, preferred-register: '' }
5207 - { id: 11, class: g8rc, preferred-register: '' }
5208 - { id: 12, class: g8rc, preferred-register: '' }
5210 - { reg: '$x3', virtual-reg: '%0' }
5211 - { reg: '$x4', virtual-reg: '%1' }
5212 - { reg: '$x5', virtual-reg: '%2' }
5214 isFrameAddressTaken: false
5215 isReturnAddressTaken: false
5217 hasPatchPoint: false
5224 maxCallFrameSize: 4294967295
5225 hasOpaqueSPAdjustment: false
5227 hasMustTailInVarArgFunc: false
5235 liveins: $x3, $x4, $x5
5244 %6 = INSERT_SUBREG %7, killed %5, 1
5245 %8 = RLDICL killed %6, 0, 32
5246 STBX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
5247 ; CHECK: STB %3, 975, killed %8
5248 ; CHECK-LATE: stb 4, 975(6)
5251 %10 = INSERT_SUBREG %11, killed %9, 1
5252 %12 = RLDICL killed %10, 0, 32
5253 STBX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
5254 ; CHECK: STB %3, 975, killed %12
5255 ; CHECK-LATE: stb 4, 975(5)
5256 BLR8 implicit $lr8, implicit $rm
5261 # CHECK-ALL: name: testSTHUX
5263 exposesReturnsTwice: false
5265 regBankSelected: false
5267 tracksRegLiveness: true
5269 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5270 - { id: 1, class: g8rc, preferred-register: '' }
5271 - { id: 2, class: g8rc, preferred-register: '' }
5272 - { id: 3, class: gprc, preferred-register: '' }
5273 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5274 - { id: 5, class: gprc, preferred-register: '' }
5275 - { id: 6, class: g8rc, preferred-register: '' }
5276 - { id: 7, class: g8rc, preferred-register: '' }
5277 - { id: 8, class: g8rc, preferred-register: '' }
5278 - { id: 9, class: gprc, preferred-register: '' }
5279 - { id: 10, class: g8rc, preferred-register: '' }
5280 - { id: 11, class: g8rc, preferred-register: '' }
5281 - { id: 12, class: g8rc, preferred-register: '' }
5282 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5283 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5285 - { reg: '$x3', virtual-reg: '%0' }
5286 - { reg: '$x4', virtual-reg: '%1' }
5287 - { reg: '$x5', virtual-reg: '%2' }
5289 isFrameAddressTaken: false
5290 isReturnAddressTaken: false
5292 hasPatchPoint: false
5299 maxCallFrameSize: 4294967295
5300 hasOpaqueSPAdjustment: false
5302 hasMustTailInVarArgFunc: false
5310 liveins: $x3, $x4, $x5
5319 %6 = INSERT_SUBREG %7, killed %5, 1
5321 %13 = STHUX %3, %0, killed %8 :: (store 2 into %ir.arrayidx, !tbaa !6)
5322 ; CHECK: STHU %3, 32000, %0
5323 ; CHECK-LATE: sthu {{[0-9]+}}, 32000({{[0-9]+}})
5326 %10 = INSERT_SUBREG %11, killed %9, 1
5328 %14 = STHUX %3, %0, killed %12 :: (store 2 into %ir.arrayidx3, !tbaa !6)
5329 ; CHECK: STHU %3, -761, %0
5330 ; CHECK-LATE: sthu {{[0-9]+}}, -761({{[0-9]+}})
5331 BLR8 implicit $lr8, implicit $rm
5336 # CHECK-ALL: name: testSTHX
5338 exposesReturnsTwice: false
5340 regBankSelected: false
5342 tracksRegLiveness: true
5344 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5345 - { id: 1, class: g8rc, preferred-register: '' }
5346 - { id: 2, class: g8rc, preferred-register: '' }
5347 - { id: 3, class: gprc, preferred-register: '' }
5348 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5349 - { id: 5, class: gprc, preferred-register: '' }
5350 - { id: 6, class: g8rc, preferred-register: '' }
5351 - { id: 7, class: g8rc, preferred-register: '' }
5352 - { id: 8, class: g8rc, preferred-register: '' }
5353 - { id: 9, class: gprc, preferred-register: '' }
5354 - { id: 10, class: g8rc, preferred-register: '' }
5355 - { id: 11, class: g8rc, preferred-register: '' }
5356 - { id: 12, class: g8rc, preferred-register: '' }
5358 - { reg: '$x3', virtual-reg: '%0' }
5359 - { reg: '$x4', virtual-reg: '%1' }
5360 - { reg: '$x5', virtual-reg: '%2' }
5362 isFrameAddressTaken: false
5363 isReturnAddressTaken: false
5365 hasPatchPoint: false
5372 maxCallFrameSize: 4294967295
5373 hasOpaqueSPAdjustment: false
5375 hasMustTailInVarArgFunc: false
5383 liveins: $x3, $x4, $x5
5392 %6 = INSERT_SUBREG %7, killed %5, 1
5394 STHX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
5395 ; CHECK: STH %3, 900, %0
5396 ; CHECK-LATE: sth {{[0-9]+}}, 900({{[0-9]+}})
5399 %10 = INSERT_SUBREG %11, killed %9, 1
5401 STHX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
5402 ; CHECK: STH %3, -900, %0
5403 ; CHECK-LATE: sth {{[0-9]+}}, -900({{[0-9]+}})
5404 BLR8 implicit $lr8, implicit $rm
5409 # CHECK-ALL: name: testSTWUX
5411 exposesReturnsTwice: false
5413 regBankSelected: false
5415 tracksRegLiveness: true
5417 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5418 - { id: 1, class: g8rc, preferred-register: '' }
5419 - { id: 2, class: g8rc, preferred-register: '' }
5420 - { id: 3, class: gprc, preferred-register: '' }
5421 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5422 - { id: 5, class: gprc, preferred-register: '' }
5423 - { id: 6, class: g8rc, preferred-register: '' }
5424 - { id: 7, class: g8rc, preferred-register: '' }
5425 - { id: 8, class: g8rc, preferred-register: '' }
5426 - { id: 9, class: gprc, preferred-register: '' }
5427 - { id: 10, class: g8rc, preferred-register: '' }
5428 - { id: 11, class: g8rc, preferred-register: '' }
5429 - { id: 12, class: g8rc, preferred-register: '' }
5430 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5431 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5433 - { reg: '$x3', virtual-reg: '%0' }
5434 - { reg: '$x4', virtual-reg: '%1' }
5435 - { reg: '$x5', virtual-reg: '%2' }
5437 isFrameAddressTaken: false
5438 isReturnAddressTaken: false
5440 hasPatchPoint: false
5447 maxCallFrameSize: 4294967295
5448 hasOpaqueSPAdjustment: false
5450 hasMustTailInVarArgFunc: false
5458 liveins: $x3, $x4, $x5
5467 %6 = INSERT_SUBREG %7, killed %5, 1
5469 %13 = STWUX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5470 ; CHECK: STWU %3, 111, %0
5471 ; CHECK-LATE: stwu {{[0-9]+}}, 111({{[0-9]+}})
5474 %10 = INSERT_SUBREG %11, killed %9, 1
5476 %14 = STWUX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5477 ; CHECK: STWU %3, 0, %0
5478 ; CHECK-LATE: stwu {{[0-9]+}}, 0({{[0-9]+}})
5479 BLR8 implicit $lr8, implicit $rm
5484 # CHECK-ALL: name: testSTWX
5486 exposesReturnsTwice: false
5488 regBankSelected: false
5490 tracksRegLiveness: true
5492 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5493 - { id: 1, class: g8rc, preferred-register: '' }
5494 - { id: 2, class: g8rc, preferred-register: '' }
5495 - { id: 3, class: gprc, preferred-register: '' }
5496 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5497 - { id: 5, class: gprc, preferred-register: '' }
5498 - { id: 6, class: g8rc, preferred-register: '' }
5499 - { id: 7, class: g8rc, preferred-register: '' }
5500 - { id: 8, class: g8rc, preferred-register: '' }
5501 - { id: 9, class: gprc, preferred-register: '' }
5502 - { id: 10, class: g8rc, preferred-register: '' }
5503 - { id: 11, class: g8rc, preferred-register: '' }
5504 - { id: 12, class: g8rc, preferred-register: '' }
5506 - { reg: '$x3', virtual-reg: '%0' }
5507 - { reg: '$x4', virtual-reg: '%1' }
5508 - { reg: '$x5', virtual-reg: '%2' }
5510 isFrameAddressTaken: false
5511 isReturnAddressTaken: false
5513 hasPatchPoint: false
5520 maxCallFrameSize: 4294967295
5521 hasOpaqueSPAdjustment: false
5523 hasMustTailInVarArgFunc: false
5531 liveins: $x3, $x4, $x5
5540 %6 = INSERT_SUBREG %7, killed %5, 1
5542 STWX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5543 ; CHECK: STW %3, 2, %0
5544 ; CHECK-LATE: stw 4, 2(3)
5547 %10 = INSERT_SUBREG %11, killed %9, 1
5549 STWX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5550 ; CHECK: STW %3, 99, %0
5551 ; CHECK-LATE: stw 4, 99(3)
5552 BLR8 implicit $lr8, implicit $rm
5557 # CHECK-ALL: name: testSTDUX
5559 exposesReturnsTwice: false
5561 regBankSelected: false
5563 tracksRegLiveness: true
5565 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5566 - { id: 1, class: g8rc, preferred-register: '' }
5567 - { id: 2, class: g8rc, preferred-register: '' }
5568 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5569 - { id: 4, class: gprc, preferred-register: '' }
5570 - { id: 5, class: g8rc, preferred-register: '' }
5571 - { id: 6, class: g8rc, preferred-register: '' }
5572 - { id: 7, class: g8rc, preferred-register: '' }
5573 - { id: 8, class: gprc, preferred-register: '' }
5574 - { id: 9, class: g8rc, preferred-register: '' }
5575 - { id: 10, class: g8rc, preferred-register: '' }
5576 - { id: 11, class: g8rc, preferred-register: '' }
5577 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5578 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5580 - { reg: '$x3', virtual-reg: '%0' }
5581 - { reg: '$x4', virtual-reg: '%1' }
5582 - { reg: '$x5', virtual-reg: '%2' }
5584 isFrameAddressTaken: false
5585 isReturnAddressTaken: false
5587 hasPatchPoint: false
5594 maxCallFrameSize: 4294967295
5595 hasOpaqueSPAdjustment: false
5597 hasMustTailInVarArgFunc: false
5605 liveins: $x3, $x4, $x5
5613 %5 = INSERT_SUBREG %6, killed %4, 1
5615 %12 = STDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5616 ; CHECK: STDU %1, 444, %0
5617 ; CHECK-LATE: stdu {{[0-9]+}}, 444({{[0-9]+}})
5620 %9 = INSERT_SUBREG %10, killed %8, 1
5622 %13 = STDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5623 ; CHECK: STDU %1, -8, %0
5624 ; CHECK-LATE: stdu {{[0-9]+}}, -8({{[0-9]+}})
5625 BLR8 implicit $lr8, implicit $rm
5630 # CHECK-ALL: name: testSTDX
5632 exposesReturnsTwice: false
5634 regBankSelected: false
5636 tracksRegLiveness: true
5638 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5639 - { id: 1, class: g8rc, preferred-register: '' }
5640 - { id: 2, class: g8rc, preferred-register: '' }
5641 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5642 - { id: 4, class: gprc, preferred-register: '' }
5643 - { id: 5, class: g8rc, preferred-register: '' }
5644 - { id: 6, class: g8rc, preferred-register: '' }
5645 - { id: 7, class: g8rc, preferred-register: '' }
5646 - { id: 8, class: gprc, preferred-register: '' }
5647 - { id: 9, class: g8rc, preferred-register: '' }
5648 - { id: 10, class: g8rc, preferred-register: '' }
5649 - { id: 11, class: g8rc, preferred-register: '' }
5651 - { reg: '$x3', virtual-reg: '%0' }
5652 - { reg: '$x4', virtual-reg: '%1' }
5653 - { reg: '$x5', virtual-reg: '%2' }
5655 isFrameAddressTaken: false
5656 isReturnAddressTaken: false
5658 hasPatchPoint: false
5665 maxCallFrameSize: 4294967295
5666 hasOpaqueSPAdjustment: false
5668 hasMustTailInVarArgFunc: false
5676 liveins: $x3, $x4, $x5
5684 %5 = INSERT_SUBREG %6, killed %4, 1
5686 STDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5687 ; CHECK: STD %1, 1000, killed %7
5688 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
5691 %9 = INSERT_SUBREG %10, killed %8, 1
5693 STDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5694 ; CHECK: STD %1, 1000, killed %11
5695 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}})
5696 BLR8 implicit $lr8, implicit $rm
5701 # CHECK-ALL: name: testSTFSX
5703 exposesReturnsTwice: false
5705 regBankSelected: false
5707 tracksRegLiveness: true
5709 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5710 - { id: 1, class: f4rc, preferred-register: '' }
5711 - { id: 2, class: g8rc, preferred-register: '' }
5712 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5713 - { id: 4, class: gprc, preferred-register: '' }
5714 - { id: 5, class: g8rc, preferred-register: '' }
5715 - { id: 6, class: g8rc, preferred-register: '' }
5716 - { id: 7, class: g8rc, preferred-register: '' }
5717 - { id: 8, class: gprc, preferred-register: '' }
5718 - { id: 9, class: g8rc, preferred-register: '' }
5719 - { id: 10, class: g8rc, preferred-register: '' }
5720 - { id: 11, class: g8rc, preferred-register: '' }
5722 - { reg: '$x3', virtual-reg: '%0' }
5723 - { reg: '$f1', virtual-reg: '%1' }
5724 - { reg: '$x5', virtual-reg: '%2' }
5726 isFrameAddressTaken: false
5727 isReturnAddressTaken: false
5729 hasPatchPoint: false
5736 maxCallFrameSize: 4294967295
5737 hasOpaqueSPAdjustment: false
5739 hasMustTailInVarArgFunc: false
5747 liveins: $x3, $f1, $x5
5755 %5 = INSERT_SUBREG %6, killed %4, 1
5757 STFSX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5758 ; CHECK: STFS %1, 400, %0
5759 ; CHECK-LATE: stfs 1, 400(3)
5762 %9 = INSERT_SUBREG %10, killed %8, 1
5764 STFSX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5765 ; CHECK: STFS %1, -401, %0
5766 ; CHECK-LATE: stfs 1, -401(3)
5767 BLR8 implicit $lr8, implicit $rm
5772 # CHECK-ALL: name: testSTFSUX
5774 exposesReturnsTwice: false
5776 regBankSelected: false
5778 tracksRegLiveness: true
5780 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5781 - { id: 1, class: f4rc, preferred-register: '' }
5782 - { id: 2, class: g8rc, preferred-register: '' }
5783 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5784 - { id: 4, class: gprc, preferred-register: '' }
5785 - { id: 5, class: g8rc, preferred-register: '' }
5786 - { id: 6, class: g8rc, preferred-register: '' }
5787 - { id: 7, class: g8rc, preferred-register: '' }
5788 - { id: 8, class: gprc, preferred-register: '' }
5789 - { id: 9, class: g8rc, preferred-register: '' }
5790 - { id: 10, class: g8rc, preferred-register: '' }
5791 - { id: 11, class: g8rc, preferred-register: '' }
5792 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5793 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5795 - { reg: '$x3', virtual-reg: '%0' }
5796 - { reg: '$f1', virtual-reg: '%1' }
5797 - { reg: '$x5', virtual-reg: '%2' }
5799 isFrameAddressTaken: false
5800 isReturnAddressTaken: false
5802 hasPatchPoint: false
5809 maxCallFrameSize: 4294967295
5810 hasOpaqueSPAdjustment: false
5812 hasMustTailInVarArgFunc: false
5820 liveins: $x3, $f1, $x5
5828 %5 = INSERT_SUBREG %6, killed %4, 1
5830 %12 = STFSUX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5831 ; CHECK: STFSU %1, 111, %0
5832 ; CHECK-LATE: stfsu {{[0-9]+}}, 111({{[0-9]+}})
5835 %9 = INSERT_SUBREG %10, killed %8, 1
5837 %13 = STFSUX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5838 ; CHECK: STFSU %1, 987, %0
5839 ; CHECK-LATE: stfsu {{[0-9]+}}, 987({{[0-9]+}})
5840 BLR8 implicit $lr8, implicit $rm
5845 # CHECK-ALL: name: testSTFDX
5847 exposesReturnsTwice: false
5849 regBankSelected: false
5851 tracksRegLiveness: true
5853 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5854 - { id: 1, class: f8rc, preferred-register: '' }
5855 - { id: 2, class: g8rc, preferred-register: '' }
5856 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5857 - { id: 4, class: gprc, preferred-register: '' }
5858 - { id: 5, class: g8rc, preferred-register: '' }
5859 - { id: 6, class: g8rc, preferred-register: '' }
5860 - { id: 7, class: g8rc, preferred-register: '' }
5861 - { id: 8, class: gprc, preferred-register: '' }
5862 - { id: 9, class: g8rc, preferred-register: '' }
5863 - { id: 10, class: g8rc, preferred-register: '' }
5864 - { id: 11, class: g8rc, preferred-register: '' }
5866 - { reg: '$x3', virtual-reg: '%0' }
5867 - { reg: '$f1', virtual-reg: '%1' }
5868 - { reg: '$x5', virtual-reg: '%2' }
5870 isFrameAddressTaken: false
5871 isReturnAddressTaken: false
5873 hasPatchPoint: false
5880 maxCallFrameSize: 4294967295
5881 hasOpaqueSPAdjustment: false
5883 hasMustTailInVarArgFunc: false
5891 liveins: $x3, $f1, $x5
5899 %5 = INSERT_SUBREG %6, killed %4, 1
5901 STFDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5902 ; CHECK: STFD %1, 876, %0
5903 ; CHECK-LATE: stfd 1, 876(3)
5906 %9 = INSERT_SUBREG %10, killed %8, 1
5908 STFDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5909 ; CHECK: STFD %1, -873, %0
5910 ; CHECK-LATE: stfd 1, -873(3)
5911 BLR8 implicit $lr8, implicit $rm
5916 # CHECK-ALL: name: testSTFDUX
5918 exposesReturnsTwice: false
5920 regBankSelected: false
5922 tracksRegLiveness: true
5924 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5925 - { id: 1, class: f8rc, preferred-register: '' }
5926 - { id: 2, class: g8rc, preferred-register: '' }
5927 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5928 - { id: 4, class: gprc, preferred-register: '' }
5929 - { id: 5, class: g8rc, preferred-register: '' }
5930 - { id: 6, class: g8rc, preferred-register: '' }
5931 - { id: 7, class: g8rc, preferred-register: '' }
5932 - { id: 8, class: gprc, preferred-register: '' }
5933 - { id: 9, class: g8rc, preferred-register: '' }
5934 - { id: 10, class: g8rc, preferred-register: '' }
5935 - { id: 11, class: g8rc, preferred-register: '' }
5936 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5937 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5939 - { reg: '$x3', virtual-reg: '%0' }
5940 - { reg: '$f1', virtual-reg: '%1' }
5941 - { reg: '$x5', virtual-reg: '%2' }
5943 isFrameAddressTaken: false
5944 isReturnAddressTaken: false
5946 hasPatchPoint: false
5953 maxCallFrameSize: 4294967295
5954 hasOpaqueSPAdjustment: false
5956 hasMustTailInVarArgFunc: false
5964 liveins: $x3, $f1, $x5
5972 %5 = INSERT_SUBREG %6, killed %4, 1
5974 %12 = STFDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5975 ; CHECK: STFDU %1, -9038, %0
5976 ; CHECK-LATE: stfdu {{[0-9]+}}, -9038({{[0-9]+}})
5979 %9 = INSERT_SUBREG %10, killed %8, 1
5981 %13 = STFDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5982 ; CHECK: STFDU %1, 6477, %0
5983 ; CHECK-LATE: stfdu {{[0-9]+}}, 6477({{[0-9]+}})
5984 BLR8 implicit $lr8, implicit $rm
5989 # CHECK-ALL: name: testSTXSSPX
5991 exposesReturnsTwice: false
5993 regBankSelected: false
5995 tracksRegLiveness: true
5997 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5998 - { id: 1, class: vssrc, preferred-register: '' }
5999 - { id: 2, class: g8rc, preferred-register: '' }
6000 - { id: 3, class: g8rc, preferred-register: '' }
6002 - { reg: '$x3', virtual-reg: '%0' }
6003 - { reg: '$f1', virtual-reg: '%1' }
6004 - { reg: '$x5', virtual-reg: '%2' }
6006 isFrameAddressTaken: false
6007 isReturnAddressTaken: false
6009 hasPatchPoint: false
6016 maxCallFrameSize: 4294967295
6017 hasOpaqueSPAdjustment: false
6019 hasMustTailInVarArgFunc: false
6027 liveins: $x3, $f1, $x5
6033 STXSSPX %1, %0, killed %3 :: (store 4 into %ir.arrayidx, !tbaa !14)
6034 ; CHECK: DFSTOREf32 %1, 444, %0
6035 ; CHECK-LATE: stfs 1, 444(3)
6036 BLR8 implicit $lr8, implicit $rm
6041 # CHECK-ALL: name: testSTXSDX
6043 exposesReturnsTwice: false
6045 regBankSelected: false
6047 tracksRegLiveness: true
6049 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
6050 - { id: 1, class: vsfrc, preferred-register: '' }
6051 - { id: 2, class: g8rc, preferred-register: '' }
6052 - { id: 3, class: g8rc, preferred-register: '' }
6054 - { reg: '$x3', virtual-reg: '%0' }
6055 - { reg: '$f1', virtual-reg: '%1' }
6056 - { reg: '$x5', virtual-reg: '%2' }
6058 isFrameAddressTaken: false
6059 isReturnAddressTaken: false
6061 hasPatchPoint: false
6068 maxCallFrameSize: 4294967295
6069 hasOpaqueSPAdjustment: false
6071 hasMustTailInVarArgFunc: false
6079 liveins: $x3, $f1, $x5
6085 STXSDX %1, %0, killed %3, implicit $rm :: (store 8 into %ir.arrayidx, !tbaa !12)
6086 ; CHECK: DFSTOREf64 %1, 4, %0
6087 ; CHECK-LATE: stfd 1, 4(3)
6088 BLR8 implicit $lr8, implicit $rm
6093 # CHECK-ALL: name: testSTXVX
6095 exposesReturnsTwice: false
6097 regBankSelected: false
6099 tracksRegLiveness: true
6101 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
6102 - { id: 1, class: vrrc, preferred-register: '' }
6103 - { id: 2, class: g8rc, preferred-register: '' }
6104 - { id: 3, class: g8rc, preferred-register: '' }
6106 - { reg: '$x3', virtual-reg: '%0' }
6107 - { reg: '$v2', virtual-reg: '%1' }
6108 - { reg: '$x7', virtual-reg: '%2' }
6110 isFrameAddressTaken: false
6111 isReturnAddressTaken: false
6113 hasPatchPoint: false
6120 maxCallFrameSize: 4294967295
6121 hasOpaqueSPAdjustment: false
6123 hasMustTailInVarArgFunc: false
6131 liveins: $x3, $v2, $x7
6136 %3 = RLDICR %2, 4, 59
6137 STXVX %1, %0, killed %3 :: (store 16 into %ir.arrayidx, !tbaa !3)
6138 ; CHECK: STXV %1, 16, killed %3
6139 ; CHECK-LATE: stxv 34, 16(4)
6140 BLR8 implicit $lr8, implicit $rm
6145 # CHECK-ALL: name: testSUBFC
6147 exposesReturnsTwice: false
6149 regBankSelected: false
6151 tracksRegLiveness: true
6153 - { id: 0, class: gprc, preferred-register: '' }
6154 - { id: 1, class: g8rc, preferred-register: '' }
6155 - { id: 2, class: g8rc, preferred-register: '' }
6156 - { id: 3, class: g8rc, preferred-register: '' }
6157 - { id: 4, class: gprc, preferred-register: '' }
6158 - { id: 5, class: gprc, preferred-register: '' }
6159 - { id: 6, class: gprc, preferred-register: '' }
6160 - { id: 7, class: gprc, preferred-register: '' }
6161 - { id: 8, class: gprc, preferred-register: '' }
6163 - { reg: '$x3', virtual-reg: '%0' }
6164 - { reg: '$x4', virtual-reg: '%1' }
6165 - { reg: '$x5', virtual-reg: '%2' }
6166 - { reg: '$x6', virtual-reg: '%3' }
6168 isFrameAddressTaken: false
6169 isReturnAddressTaken: false
6171 hasPatchPoint: false
6178 maxCallFrameSize: 4294967295
6179 hasOpaqueSPAdjustment: false
6181 hasMustTailInVarArgFunc: false
6189 liveins: $x3, $x4, $x5, $x6
6198 %4 = SUBFC %7, %0, implicit-def $carry
6199 ; CHECK: SUBFIC %7, 55
6200 ; CHECK-LATE: subfic 3, 5, 55
6201 %5 = SUBFE %6, %8, implicit-def dead $carry, implicit $carry
6202 $x3 = EXTSW_32_64 %4
6203 $x4 = EXTSW_32_64 %5
6204 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
6209 # CHECK-ALL: name: testSUBFC8
6211 exposesReturnsTwice: false
6213 regBankSelected: false
6215 tracksRegLiveness: true
6217 - { id: 0, class: g8rc, preferred-register: '' }
6218 - { id: 1, class: g8rc, preferred-register: '' }
6219 - { id: 2, class: g8rc, preferred-register: '' }
6220 - { id: 3, class: g8rc, preferred-register: '' }
6221 - { id: 4, class: g8rc, preferred-register: '' }
6222 - { id: 5, class: g8rc, preferred-register: '' }
6224 - { reg: '$x3', virtual-reg: '%0' }
6225 - { reg: '$x4', virtual-reg: '%1' }
6226 - { reg: '$x5', virtual-reg: '%2' }
6227 - { reg: '$x6', virtual-reg: '%3' }
6229 isFrameAddressTaken: false
6230 isReturnAddressTaken: false
6232 hasPatchPoint: false
6239 maxCallFrameSize: 4294967295
6240 hasOpaqueSPAdjustment: false
6242 hasMustTailInVarArgFunc: false
6250 liveins: $x3, $x4, $x5, $x6
6256 %4 = SUBFC8 %2, %0, implicit-def $carry
6257 ; CHECK: SUBFIC8 %2, 7635
6258 ; CHECK-LATE: subfic 3, 5, 7635
6259 %5 = SUBFE8 %3, %1, implicit-def dead $carry, implicit $carry
6262 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
6267 # CHECK-ALL: name: testXOR
6269 exposesReturnsTwice: false
6271 regBankSelected: false
6273 tracksRegLiveness: true
6275 - { id: 0, class: g8rc, preferred-register: '' }
6276 - { id: 1, class: gprc, preferred-register: '' }
6277 - { id: 2, class: gprc, preferred-register: '' }
6278 - { id: 3, class: gprc, preferred-register: '' }
6280 - { reg: '$x3', virtual-reg: '%0' }
6281 - { reg: '$x4', virtual-reg: '%1' }
6283 isFrameAddressTaken: false
6284 isReturnAddressTaken: false
6286 hasPatchPoint: false
6293 maxCallFrameSize: 4294967295
6294 hasOpaqueSPAdjustment: false
6296 hasMustTailInVarArgFunc: false
6310 ; CHECK: XORI %3, 10101
6311 ; CHECK-LATE: 3, 3, 10101
6312 $x3 = EXTSW_32_64 %2
6313 BLR8 implicit $lr8, implicit $rm, implicit $x3
6318 # CHECK-ALL: name: testXOR8
6320 exposesReturnsTwice: false
6322 regBankSelected: false
6324 tracksRegLiveness: true
6326 - { id: 0, class: g8rc, preferred-register: '' }
6327 - { id: 1, class: g8rc, preferred-register: '' }
6328 - { id: 2, class: g8rc, preferred-register: '' }
6330 - { reg: '$x3', virtual-reg: '%0' }
6331 - { reg: '$x4', virtual-reg: '%1' }
6333 isFrameAddressTaken: false
6334 isReturnAddressTaken: false
6336 hasPatchPoint: false
6343 maxCallFrameSize: 4294967295
6344 hasOpaqueSPAdjustment: false
6346 hasMustTailInVarArgFunc: false
6359 ; CHECK: XORI8 %1, 5535
6360 ; CHECK-LATE: xori 3, 4, 5535
6362 BLR8 implicit $lr8, implicit $rm, implicit $x3
6367 # CHECK-ALL: name: testXORI
6369 exposesReturnsTwice: false
6371 regBankSelected: false
6373 tracksRegLiveness: true
6375 - { id: 0, class: gprc, preferred-register: '' }
6376 - { id: 1, class: gprc, preferred-register: '' }
6378 - { reg: '$x3', virtual-reg: '%0' }
6380 isFrameAddressTaken: false
6381 isReturnAddressTaken: false
6383 hasPatchPoint: false
6390 maxCallFrameSize: 4294967295
6391 hasOpaqueSPAdjustment: false
6393 hasMustTailInVarArgFunc: false
6406 ; CHECK-LATE: li 3, 886
6407 $x3 = EXTSW_32_64 %1
6408 BLR8 implicit $lr8, implicit $rm, implicit $x3
6413 # CHECK-ALL: name: testXOR8I
6415 exposesReturnsTwice: false
6417 regBankSelected: false
6419 tracksRegLiveness: true
6421 - { id: 0, class: g8rc, preferred-register: '' }
6422 - { id: 1, class: g8rc, preferred-register: '' }
6424 - { reg: '$x3', virtual-reg: '%0' }
6426 isFrameAddressTaken: false
6427 isReturnAddressTaken: false
6429 hasPatchPoint: false
6436 maxCallFrameSize: 4294967295
6437 hasOpaqueSPAdjustment: false
6439 hasMustTailInVarArgFunc: false
6452 ; CHECK-LATE: li 3, 468
6454 BLR8 implicit $lr8, implicit $rm, implicit $x3