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
3
4--- |
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"
9
10  ; Function Attrs: norecurse nounwind readnone
11  define signext i32 @testADD4(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
12  entry:
13    %add = add nsw i32 %a, 33
14    %add1 = add nsw i32 %add, %b
15    ret i32 %add1
16  }
17
18  ; Function Attrs: norecurse nounwind readnone
19  define i64 @testADD8(i64 %a, i64 %b) local_unnamed_addr #0 {
20  entry:
21    %add = add nsw i64 %a, 33
22    %add1 = add nsw i64 %add, %b
23    ret i64 %add1
24  }
25
26  ; Function Attrs: norecurse nounwind readnone
27  define i128 @testADDC(i128 %a, i128 %b) local_unnamed_addr #0 {
28  entry:
29    %add = add nsw i128 %b, %a
30    ret i128 %add
31  }
32
33  ; Function Attrs: norecurse nounwind readnone
34  define i128 @testADDC8(i128 %a, i128 %b) local_unnamed_addr #0 {
35  entry:
36    %add = add nsw i128 %b, %a
37    ret i128 %add
38  }
39
40  ; Function Attrs: norecurse nounwind readnone
41  define i64 @testADDCo(i64 %a, i64 %b) local_unnamed_addr #0 {
42  entry:
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
47    ret i64 %retval.0
48  }
49
50  ; Function Attrs: norecurse nounwind readnone
51  define signext i32 @testADDI(i32 signext %a) local_unnamed_addr #0 {
52  entry:
53    %add = add nsw i32 %a, 44
54    ret i32 %add
55  }
56
57  ; Function Attrs: norecurse nounwind readnone
58  define signext i32 @testADDI8(i32 signext %a) local_unnamed_addr #0 {
59  entry:
60    %add = add nsw i32 %a, 44
61    ret i32 %add
62  }
63
64  ; Function Attrs: norecurse nounwind readnone
65  define signext i32 @testANDo(i64 %a, i64 %b) local_unnamed_addr #0 {
66  entry:
67    %and = and i64 %b, %a
68    %tobool = icmp eq i64 %and, 0
69    %cond = select i1 %tobool, i64 %b, i64 %a
70    %conv = trunc i64 %cond to i32
71    ret i32 %conv
72  }
73
74  ; Function Attrs: norecurse nounwind readnone
75  define i64 @testAND8o(i64 %a, i64 %b) local_unnamed_addr #0 {
76  entry:
77    %and = and i64 %b, %a
78    %tobool = icmp eq i64 %and, 0
79    %cond = select i1 %tobool, i64 %b, i64 %a
80    ret i64 %cond
81  }
82
83  ; Function Attrs: norecurse nounwind readnone
84  define i64 @testCMPD(i64 %a, i64 %b) local_unnamed_addr #0 {
85  entry:
86    %cmp = icmp sgt i64 %a, %b
87    %add = select i1 %cmp, i64 0, i64 %a
88    %cond = add nsw i64 %add, %b
89    ret i64 %cond
90  }
91
92  ; Function Attrs: norecurse nounwind readnone
93  define i64 @testCMPDI(i64 %a, i64 %b) local_unnamed_addr #0 {
94  entry:
95    %cmp = icmp sgt i64 %a, 87
96    %add = select i1 %cmp, i64 0, i64 %a
97    %cond = add nsw i64 %add, %b
98    ret i64 %cond
99  }
100
101  ; Function Attrs: norecurse nounwind readnone
102  define i64 @testCMPDI_F(i64 %a, i64 %b) local_unnamed_addr #0 {
103  entry:
104    %cmp = icmp sgt i64 %a, 87
105    %add = select i1 %cmp, i64 0, i64 %a
106    %cond = add nsw i64 %add, %b
107    ret i64 %cond
108  }
109
110  ; Function Attrs: norecurse nounwind readnone
111  define i64 @testCMPLD(i64 %a, i64 %b) local_unnamed_addr #0 {
112  entry:
113    %cmp = icmp ugt i64 %a, %b
114    %add = select i1 %cmp, i64 0, i64 %a
115    %cond = add i64 %add, %b
116    ret i64 %cond
117  }
118
119  ; Function Attrs: norecurse nounwind readnone
120  define i64 @testCMPLDI(i64 %a, i64 %b) local_unnamed_addr #0 {
121  entry:
122    %cmp = icmp ugt i64 %a, 87
123    %add = select i1 %cmp, i64 0, i64 %a
124    %cond = add i64 %add, %b
125    ret i64 %cond
126  }
127
128  ; Function Attrs: norecurse nounwind readnone
129  define signext i32 @testCMPW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
130  entry:
131    %cmp = icmp sgt i32 %a, %b
132    %add = select i1 %cmp, i32 0, i32 %a
133    %cond = add nsw i32 %add, %b
134    ret i32 %cond
135  }
136
137  ; Function Attrs: norecurse nounwind readnone
138  define signext i32 @testCMPWI(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
139  entry:
140    %cmp = icmp sgt i32 %a, 87
141    %add = select i1 %cmp, i32 0, i32 %a
142    %cond = add nsw i32 %add, %b
143    ret i32 %cond
144  }
145
146  ; Function Attrs: norecurse nounwind readnone
147  define zeroext i32 @testCMPLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
148  entry:
149    %cmp = icmp ugt i32 %a, %b
150    %add = select i1 %cmp, i32 0, i32 %a
151    %cond = add i32 %add, %b
152    ret i32 %cond
153  }
154
155  ; Function Attrs: norecurse nounwind readnone
156  define zeroext i32 @testCMPLWI(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
157  entry:
158    %cmp = icmp ugt i32 %a, 87
159    %add = select i1 %cmp, i32 0, i32 %a
160    %cond = add i32 %add, %b
161    ret i32 %cond
162  }
163
164  ; Function Attrs: norecurse nounwind readonly
165  define zeroext i8 @testLBZUX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
166  entry:
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
179    ret i8 %conv6
180  }
181
182  ; Function Attrs: norecurse nounwind readonly
183  define zeroext i8 @testLBZX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
184  entry:
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
197    ret i8 %conv6
198  }
199
200  ; Function Attrs: norecurse nounwind readonly
201  define zeroext i16 @testLHZUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
202  entry:
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
215    ret i16 %conv6
216  }
217
218  ; Function Attrs: norecurse nounwind readonly
219  define zeroext i16 @testLHZX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
220  entry:
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
233    ret i16 %conv6
234  }
235
236  ; Function Attrs: norecurse nounwind readonly
237  define signext i16 @testLHAUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
238  entry:
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
251    ret i16 %conv6
252  }
253
254  ; Function Attrs: norecurse nounwind readonly
255  define signext i16 @testLHAX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
256  entry:
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
269    ret i16 %conv6
270  }
271
272  ; Function Attrs: norecurse nounwind readonly
273  define zeroext i32 @testLWZUX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
274  entry:
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
284    ret i32 %add4
285  }
286
287  ; Function Attrs: norecurse nounwind readonly
288  define zeroext i32 @testLWZX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
289  entry:
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
299    ret i32 %add4
300  }
301
302  ; Function Attrs: norecurse nounwind readonly
303  define i64 @testLWAX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
304  entry:
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
316    ret i64 %add5
317  }
318
319  ; Function Attrs: norecurse nounwind readonly
320  define i64 @testLDUX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
321  entry:
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
331    ret i64 %add4
332  }
333
334  ; Function Attrs: norecurse nounwind readonly
335  define i64 @testLDX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
336  entry:
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
346    ret i64 %add4
347  }
348
349  ; Function Attrs: norecurse nounwind readonly
350  define double @testLFDUX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
351  entry:
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
361    ret double %add4
362  }
363
364  ; Function Attrs: norecurse nounwind readonly
365  define double @testLFDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
366  entry:
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
376    ret double %add4
377  }
378
379  ; Function Attrs: norecurse nounwind readonly
380  define <4 x float> @testLFSUX(float* nocapture readonly %ptr, i32 signext %idx) local_unnamed_addr #2 {
381  entry:
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>
406    ret <4 x float> %9
407  }
408
409  ; Function Attrs: norecurse nounwind readonly
410  define float @testLFSX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 {
411  entry:
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
421    ret float %add4
422  }
423
424  ; Function Attrs: norecurse nounwind readonly
425  define double @testLXSDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
426  entry:
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
436    ret double %add4
437  }
438
439  ; Function Attrs: norecurse nounwind readonly
440  define float @testLXSSPX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 {
441  entry:
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
451    ret float %add4
452  }
453
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 {
456  entry:
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
466    ret <4 x i32> %add4
467  }
468
469  ; Function Attrs: norecurse nounwind readnone
470  define signext i32 @testOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
471  entry:
472    %or = or i32 %b, %a
473    ret i32 %or
474  }
475
476  ; Function Attrs: norecurse nounwind readnone
477  define i64 @testOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
478  entry:
479    %or = or i64 %b, %a
480    ret i64 %or
481  }
482
483  ; Function Attrs: norecurse nounwind readnone
484  define signext i32 @testORI(i32 signext %a) local_unnamed_addr #0 {
485  entry:
486    %or = or i32 %a, 88
487    ret i32 %or
488  }
489
490  ; Function Attrs: norecurse nounwind readnone
491  define i64 @testORI8(i64 %a) local_unnamed_addr #0 {
492  entry:
493    %or = or i64 %a, 99
494    ret i64 %or
495  }
496
497  ; Function Attrs: norecurse nounwind readnone
498  define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 {
499  entry:
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
505    ret i64 %or
506  }
507
508  ; Function Attrs: norecurse nounwind readnone
509  define i64 @testRLDCLo(i64 %a, i64 %b) local_unnamed_addr #0 {
510  entry:
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
518    ret i64 %cond
519  }
520
521  ; Function Attrs: norecurse nounwind readnone
522  define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 {
523  entry:
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
529    ret i64 %or
530  }
531
532  ; Function Attrs: norecurse nounwind readnone
533  define i64 @testRLDCRo(i64 %a, i64 %b) local_unnamed_addr #0 {
534  entry:
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
542    ret i64 %cond
543  }
544
545  ; Function Attrs: norecurse nounwind readnone
546  define i64 @testRLDICL(i64 %a) local_unnamed_addr #0 {
547  entry:
548    %shr = lshr i64 %a, 11
549    %and = and i64 %shr, 16777215
550    ret i64 %and
551  }
552
553  ; Function Attrs: norecurse nounwind readnone
554  define i64 @testRLDICLo(i64 %a, i64 %b) local_unnamed_addr #0 {
555  entry:
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
560    ret i64 %cond
561  }
562
563  ; Function Attrs: norecurse nounwind readnone
564  define i64 @testRLDICLo2(i64 %a, i64 %b) local_unnamed_addr #0 {
565  entry:
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
570    ret i64 %cond
571  }
572
573  ; Function Attrs: norecurse nounwind readnone
574  define i64 @testRLDICLo3(i64 %a, i64 %b) local_unnamed_addr #0 {
575  entry:
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
580    ret i64 %cond
581  }
582
583  ; Function Attrs: norecurse nounwind readnone
584  define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
585  entry:
586    %shl = shl i32 %a, 4
587    %and = and i32 %shl, 4080
588    ret i32 %and
589  }
590
591  ; Function Attrs: norecurse nounwind readnone
592  define zeroext i32 @testRLWINMFullReg(i32 zeroext %a) local_unnamed_addr #0 {
593  entry:
594    %shl = shl i32 %a, 4
595    %and = and i32 %shl, 4080
596    ret i32 %and
597  }
598
599  ; Function Attrs: norecurse nounwind readnone
600  define zeroext i32 @testRLWINMFullRegOutOfRange(i32 zeroext %a) local_unnamed_addr #0 {
601  entry:
602    %shl = shl i32 %a, 4
603    %and = and i32 %shl, 4080
604    ret i32 %and
605  }
606
607  ; Function Attrs: norecurse nounwind readnone
608  define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
609  entry:
610    %shl = shl i64 %a, 4
611    %and = and i64 %shl, 4080
612    ret i64 %and
613  }
614
615  ; Function Attrs: norecurse nounwind readnone
616  define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
617  entry:
618    %and = and i32 %a, 255
619    %tobool = icmp eq i32 %and, 0
620    %cond = select i1 %tobool, i32 %b, i32 %a
621    ret i32 %cond
622  }
623
624  ; Function Attrs: norecurse nounwind readnone
625  define zeroext i32 @testRLWINMo2(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
626  entry:
627    %and = and i32 %a, 255
628    %tobool = icmp eq i32 %and, 0
629    %cond = select i1 %tobool, i32 %b, i32 %a
630    ret i32 %cond
631  }
632
633  ; Function Attrs: norecurse nounwind readnone
634  define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 {
635  entry:
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
642    ret i64 %cond
643  }
644
645  ; Function Attrs: norecurse nounwind readnone
646  define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
647  entry:
648    %shl = shl i64 %a, %b
649    ret i64 %shl
650  }
651
652  ; Function Attrs: norecurse nounwind readnone
653  define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 {
654  entry:
655    %shl = shl i64 %a, %b
656    %tobool = icmp eq i64 %shl, 0
657    %cond = select i1 %tobool, i64 %b, i64 %a
658    ret i64 %cond
659  }
660
661  ; Function Attrs: norecurse nounwind readnone
662  define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
663  entry:
664    %shr = lshr i64 %a, %b
665    ret i64 %shr
666  }
667
668  ; Function Attrs: norecurse nounwind readnone
669  define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 {
670  entry:
671    %shr = lshr i64 %a, %b
672    %tobool = icmp eq i64 %shr, 0
673    %cond = select i1 %tobool, i64 %b, i64 %a
674    ret i64 %cond
675  }
676
677  ; Function Attrs: norecurse nounwind readnone
678  define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
679  entry:
680    %shl = shl i32 %a, %b
681    ret i32 %shl
682  }
683
684  ; Function Attrs: norecurse nounwind readnone
685  define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
686  entry:
687    %shl = shl i32 %a, %b
688    %tobool = icmp eq i32 %shl, 0
689    %cond = select i1 %tobool, i32 %b, i32 %a
690    ret i32 %cond
691  }
692
693  ; Function Attrs: norecurse nounwind readnone
694  define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
695  entry:
696    %shr = lshr i32 %a, %b
697    ret i32 %shr
698  }
699
700  ; Function Attrs: norecurse nounwind readnone
701  define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
702  entry:
703    %shr = lshr i32 %a, %b
704    %tobool = icmp eq i32 %shr, 0
705    %cond = select i1 %tobool, i32 %b, i32 %a
706    ret i32 %cond
707  }
708
709  ; Function Attrs: norecurse nounwind readnone
710  define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
711  entry:
712    %shr = ashr i32 %a, %b
713    ret i32 %shr
714  }
715
716  ; Function Attrs: norecurse nounwind readnone
717  define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
718  entry:
719    %shr = ashr i32 %a, %b
720    %tobool = icmp eq i32 %shr, 0
721    %cond = select i1 %tobool, i32 %b, i32 %shr
722    ret i32 %cond
723  }
724
725  ; Function Attrs: norecurse nounwind readnone
726  define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
727  entry:
728    %shr = ashr i64 %a, %b
729    ret i64 %shr
730  }
731
732  ; Function Attrs: norecurse nounwind readnone
733  define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 {
734  entry:
735    %shr = ashr i64 %a, %b
736    %tobool = icmp eq i64 %shr, 0
737    %cond = select i1 %tobool, i64 %b, i64 %shr
738    ret i64 %cond
739  }
740
741  ; Function Attrs: norecurse nounwind
742  define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
743  entry:
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
752    ret void
753  }
754
755  ; Function Attrs: norecurse nounwind
756  define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
757  entry:
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
766    ret void
767  }
768
769  ; Function Attrs: norecurse nounwind
770  define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
771  entry:
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
780    ret void
781  }
782
783  ; Function Attrs: norecurse nounwind
784  define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
785  entry:
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
794    ret void
795  }
796
797  ; Function Attrs: norecurse nounwind
798  define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
799  entry:
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
808    ret void
809  }
810
811  ; Function Attrs: norecurse nounwind
812  define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
813  entry:
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
822    ret void
823  }
824
825  ; Function Attrs: norecurse nounwind
826  define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
827  entry:
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
836    ret void
837  }
838
839  ; Function Attrs: norecurse nounwind
840  define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
841  entry:
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
850    ret void
851  }
852
853  ; Function Attrs: norecurse nounwind readonly
854  define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
855  entry:
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
864    ret void
865  }
866
867  ; Function Attrs: norecurse nounwind readonly
868  define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
869  entry:
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
878    ret void
879  }
880
881  ; Function Attrs: norecurse nounwind readonly
882  define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
883  entry:
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
892    ret void
893  }
894
895  ; Function Attrs: norecurse nounwind readonly
896  define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
897  entry:
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
906    ret void
907  }
908
909  ; Function Attrs: norecurse nounwind
910  define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
911  entry:
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
915    ret void
916  }
917
918  ; Function Attrs: norecurse nounwind
919  define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
920  entry:
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
924    ret void
925  }
926
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 {
929  entry:
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
933    ret void
934  }
935
936  ; Function Attrs: norecurse nounwind readnone
937  define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
938  entry:
939    %sub = sub nsw i128 %a, %b
940    ret i128 %sub
941  }
942
943  ; Function Attrs: norecurse nounwind readnone
944  define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
945  entry:
946    %sub = sub nsw i128 %a, %b
947    ret i128 %sub
948  }
949
950  ; Function Attrs: norecurse nounwind readnone
951  define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
952  entry:
953    %xor = xor i32 %b, %a
954    ret i32 %xor
955  }
956
957  ; Function Attrs: norecurse nounwind readnone
958  define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
959  entry:
960    %xor = xor i64 %b, %a
961    ret i64 %xor
962  }
963
964  ; Function Attrs: norecurse nounwind readnone
965  define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
966  entry:
967    %xor = xor i32 %a, 17
968    ret i32 %xor
969  }
970
971  ; Function Attrs: norecurse nounwind readnone
972  define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
973  entry:
974    %xor = xor i64 %a, 17
975    ret i64 %xor
976  }
977
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" }
982
983  !llvm.module.flags = !{!0, !1}
984  !llvm.ident = !{!2}
985
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}
1002
1003...
1004---
1005name:            testADD4
1006# CHECK-ALL: name: testADD4
1007alignment:       4
1008exposesReturnsTwice: false
1009legalized:       false
1010regBankSelected: false
1011selected:        false
1012tracksRegLiveness: true
1013registers:
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: '' }
1021liveins:
1022  - { reg: '$x3', virtual-reg: '%0' }
1023  - { reg: '$x4', virtual-reg: '%1' }
1024frameInfo:
1025  isFrameAddressTaken: false
1026  isReturnAddressTaken: false
1027  hasStackMap:     false
1028  hasPatchPoint:   false
1029  stackSize:       0
1030  offsetAdjustment: 0
1031  maxAlignment:    0
1032  adjustsStack:    false
1033  hasCalls:        false
1034  stackProtector:  ''
1035  maxCallFrameSize: 4294967295
1036  hasOpaqueSPAdjustment: false
1037  hasVAStart:      false
1038  hasMustTailInVarArgFunc: false
1039  savePoint:       ''
1040  restorePoint:    ''
1041fixedStack:
1042stack:
1043constants:
1044body:             |
1045  bb.0.entry:
1046    liveins: $x3, $x4
1047
1048    %1 = COPY $x4
1049    %0 = COPY $x3
1050    %2 = LI 33
1051    %3 = COPY %0.sub_32
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
1059    $x3 = COPY %6
1060    BLR8 implicit $lr8, implicit $rm, implicit $x3
1061
1062...
1063---
1064name:            testADD8
1065# CHECK-ALL: name: testADD8
1066alignment:       4
1067exposesReturnsTwice: false
1068legalized:       false
1069regBankSelected: false
1070selected:        false
1071tracksRegLiveness: true
1072registers:
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: '' }
1077liveins:
1078  - { reg: '$x3', virtual-reg: '%0' }
1079  - { reg: '$x4', virtual-reg: '%1' }
1080frameInfo:
1081  isFrameAddressTaken: false
1082  isReturnAddressTaken: false
1083  hasStackMap:     false
1084  hasPatchPoint:   false
1085  stackSize:       0
1086  offsetAdjustment: 0
1087  maxAlignment:    0
1088  adjustsStack:    false
1089  hasCalls:        false
1090  stackProtector:  ''
1091  maxCallFrameSize: 4294967295
1092  hasOpaqueSPAdjustment: false
1093  hasVAStart:      false
1094  hasMustTailInVarArgFunc: false
1095  savePoint:       ''
1096  restorePoint:    ''
1097fixedStack:
1098stack:
1099constants:
1100body:             |
1101  bb.0.entry:
1102    liveins: $x3, $x4
1103
1104    %1 = LI8 33
1105    %0 = COPY $x3
1106    %2 = ADD8 %0, %1
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
1112    $x3 = COPY %3
1113    BLR8 implicit $lr8, implicit $rm, implicit $x3
1114
1115...
1116---
1117name:            testADDC
1118# CHECK-ALL: name: testADDC
1119alignment:       4
1120exposesReturnsTwice: false
1121legalized:       false
1122regBankSelected: false
1123selected:        false
1124tracksRegLiveness: true
1125registers:
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: '' }
1135liveins:
1136  - { reg: '$x3', virtual-reg: '%0' }
1137  - { reg: '$x4', virtual-reg: '%1' }
1138  - { reg: '$x5', virtual-reg: '%2' }
1139  - { reg: '$x6', virtual-reg: '%3' }
1140frameInfo:
1141  isFrameAddressTaken: false
1142  isReturnAddressTaken: false
1143  hasStackMap:     false
1144  hasPatchPoint:   false
1145  stackSize:       0
1146  offsetAdjustment: 0
1147  maxAlignment:    0
1148  adjustsStack:    false
1149  hasCalls:        false
1150  stackProtector:  ''
1151  maxCallFrameSize: 4294967295
1152  hasOpaqueSPAdjustment: false
1153  hasVAStart:      false
1154  hasMustTailInVarArgFunc: false
1155  savePoint:       ''
1156  restorePoint:    ''
1157fixedStack:
1158stack:
1159constants:
1160body:             |
1161  bb.0.entry:
1162    liveins: $x3, $x4, $x5, $x6
1163
1164    %3 = COPY $x6
1165    %2 = COPY $x5
1166    %1 = COPY $x4
1167    %0 = COPY $x3
1168    %4 = COPY %0.sub_32
1169    %5 = LI 55
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
1174    %8 = EXTSW_32_64 %6
1175    $x3 = COPY %8
1176    $x4 = COPY %7
1177    BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1178
1179...
1180---
1181name:            testADDC8
1182# CHECK-ALL: name: testADDC8
1183alignment:       4
1184exposesReturnsTwice: false
1185legalized:       false
1186regBankSelected: false
1187selected:        false
1188tracksRegLiveness: true
1189registers:
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: '' }
1196liveins:
1197  - { reg: '$x3', virtual-reg: '%0' }
1198  - { reg: '$x4', virtual-reg: '%1' }
1199  - { reg: '$x5', virtual-reg: '%2' }
1200  - { reg: '$x6', virtual-reg: '%3' }
1201frameInfo:
1202  isFrameAddressTaken: false
1203  isReturnAddressTaken: false
1204  hasStackMap:     false
1205  hasPatchPoint:   false
1206  stackSize:       0
1207  offsetAdjustment: 0
1208  maxAlignment:    0
1209  adjustsStack:    false
1210  hasCalls:        false
1211  stackProtector:  ''
1212  maxCallFrameSize: 4294967295
1213  hasOpaqueSPAdjustment: false
1214  hasVAStart:      false
1215  hasMustTailInVarArgFunc: false
1216  savePoint:       ''
1217  restorePoint:    ''
1218fixedStack:
1219stack:
1220constants:
1221body:             |
1222  bb.0.entry:
1223    liveins: $x3, $x4, $x5, $x6
1224
1225    %3 = COPY $x6
1226    %2 = COPY $x5
1227    %1 = COPY $x4
1228    %0 = LI8 777
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
1233    $x3 = COPY %4
1234    $x4 = COPY %5
1235    BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
1236
1237...
1238---
1239name:            testADDCo
1240# CHECK-ALL: name: testADDCo
1241alignment:       4
1242exposesReturnsTwice: false
1243legalized:       false
1244regBankSelected: false
1245selected:        false
1246tracksRegLiveness: true
1247registers:
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: '' }
1257liveins:
1258  - { reg: '$x3', virtual-reg: '%0' }
1259  - { reg: '$x4', virtual-reg: '%1' }
1260frameInfo:
1261  isFrameAddressTaken: false
1262  isReturnAddressTaken: false
1263  hasStackMap:     false
1264  hasPatchPoint:   false
1265  stackSize:       0
1266  offsetAdjustment: 0
1267  maxAlignment:    0
1268  adjustsStack:    false
1269  hasCalls:        false
1270  stackProtector:  ''
1271  maxCallFrameSize: 4294967295
1272  hasOpaqueSPAdjustment: false
1273  hasVAStart:      false
1274  hasMustTailInVarArgFunc: false
1275  savePoint:       ''
1276  restorePoint:    ''
1277fixedStack:
1278stack:
1279constants:
1280body:             |
1281  bb.0.entry:
1282    liveins: $x3, $x4
1283
1284    %1 = LI 433
1285    %0 = COPY $x3
1286    %2 = COPY %0.sub_32
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
1291    %5 = COPY %4.sub_eq
1292    %6 = LI8 0
1293    %7 = LI8 -1
1294    %8 = ISEL8 %7, %6, %5
1295    $x3 = COPY %8
1296    BLR8 implicit $lr8, implicit $rm, implicit $x3
1297
1298...
1299---
1300name:            testADDI
1301# CHECK-ALL: name: testADDI
1302alignment:       4
1303exposesReturnsTwice: false
1304legalized:       false
1305regBankSelected: false
1306selected:        false
1307tracksRegLiveness: true
1308registers:
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: '' }
1313liveins:
1314  - { reg: '$x3', virtual-reg: '%0' }
1315frameInfo:
1316  isFrameAddressTaken: false
1317  isReturnAddressTaken: false
1318  hasStackMap:     false
1319  hasPatchPoint:   false
1320  stackSize:       0
1321  offsetAdjustment: 0
1322  maxAlignment:    0
1323  adjustsStack:    false
1324  hasCalls:        false
1325  stackProtector:  ''
1326  maxCallFrameSize: 4294967295
1327  hasOpaqueSPAdjustment: false
1328  hasVAStart:      false
1329  hasMustTailInVarArgFunc: false
1330  savePoint:       ''
1331  restorePoint:    ''
1332fixedStack:
1333stack:
1334constants:
1335body:             |
1336  bb.0.entry:
1337    liveins: $x3
1338
1339    %0 = COPY $x3
1340    %1 = LI 77
1341    %2 = ADDI killed %1, 44
1342    %3 = EXTSW_32_64 killed %2
1343    ; CHECK: LI 121
1344    ; CHECK-LATE: li 3, 121
1345    $x3 = COPY %3
1346    BLR8 implicit $lr8, implicit $rm, implicit $x3
1347
1348...
1349---
1350name:            testADDI8
1351# CHECK-ALL: name: testADDI8
1352alignment:       4
1353exposesReturnsTwice: false
1354legalized:       false
1355regBankSelected: false
1356selected:        false
1357tracksRegLiveness: true
1358registers:
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: '' }
1363liveins:
1364  - { reg: '$x3', virtual-reg: '%0' }
1365frameInfo:
1366  isFrameAddressTaken: false
1367  isReturnAddressTaken: false
1368  hasStackMap:     false
1369  hasPatchPoint:   false
1370  stackSize:       0
1371  offsetAdjustment: 0
1372  maxAlignment:    0
1373  adjustsStack:    false
1374  hasCalls:        false
1375  stackProtector:  ''
1376  maxCallFrameSize: 4294967295
1377  hasOpaqueSPAdjustment: false
1378  hasVAStart:      false
1379  hasMustTailInVarArgFunc: false
1380  savePoint:       ''
1381  restorePoint:    ''
1382fixedStack:
1383stack:
1384constants:
1385body:             |
1386  bb.0.entry:
1387    liveins: $x3
1388
1389    %0 = COPY $x3
1390    %1 = LI8 333
1391    %2 = ADDI8 killed %1, 44
1392    ; CHECK: LI8 377
1393    ; CHECK-LATE: li 3, 377
1394    %3 = EXTSW killed %2
1395    $x3 = COPY %3
1396    BLR8 implicit $lr8, implicit $rm, implicit $x3
1397
1398...
1399---
1400name:            testANDo
1401# CHECK-ALL: name: testANDo
1402alignment:       4
1403exposesReturnsTwice: false
1404legalized:       false
1405regBankSelected: false
1406selected:        false
1407tracksRegLiveness: true
1408registers:
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: '' }
1416liveins:
1417  - { reg: '$x3', virtual-reg: '%0' }
1418  - { reg: '$x4', virtual-reg: '%1' }
1419frameInfo:
1420  isFrameAddressTaken: false
1421  isReturnAddressTaken: false
1422  hasStackMap:     false
1423  hasPatchPoint:   false
1424  stackSize:       0
1425  offsetAdjustment: 0
1426  maxAlignment:    0
1427  adjustsStack:    false
1428  hasCalls:        false
1429  stackProtector:  ''
1430  maxCallFrameSize: 4294967295
1431  hasOpaqueSPAdjustment: false
1432  hasVAStart:      false
1433  hasMustTailInVarArgFunc: false
1434  savePoint:       ''
1435  restorePoint:    ''
1436fixedStack:
1437stack:
1438constants:
1439body:             |
1440  bb.0.entry:
1441    liveins: $x3, $x4
1442
1443    %1 = LI 78
1444    %0 = COPY $x3
1445    %2 = COPY %0.sub_32
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
1452    $x3 = COPY %6
1453    BLR8 implicit $lr8, implicit $rm, implicit $x3
1454
1455...
1456---
1457name:            testAND8o
1458# CHECK-ALL: name: testAND8o
1459alignment:       4
1460exposesReturnsTwice: false
1461legalized:       false
1462regBankSelected: false
1463selected:        false
1464tracksRegLiveness: true
1465registers:
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: '' }
1471liveins:
1472  - { reg: '$x3', virtual-reg: '%0' }
1473  - { reg: '$x4', virtual-reg: '%1' }
1474frameInfo:
1475  isFrameAddressTaken: false
1476  isReturnAddressTaken: false
1477  hasStackMap:     false
1478  hasPatchPoint:   false
1479  stackSize:       0
1480  offsetAdjustment: 0
1481  maxAlignment:    0
1482  adjustsStack:    false
1483  hasCalls:        false
1484  stackProtector:  ''
1485  maxCallFrameSize: 4294967295
1486  hasOpaqueSPAdjustment: false
1487  hasVAStart:      false
1488  hasMustTailInVarArgFunc: false
1489  savePoint:       ''
1490  restorePoint:    ''
1491fixedStack:
1492stack:
1493constants:
1494body:             |
1495  bb.0.entry:
1496    liveins: $x3, $x4
1497
1498    %1 = LI8 321
1499    %0 = COPY $x3
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
1505    $x3 = COPY %4
1506    BLR8 implicit $lr8, implicit $rm, implicit $x3
1507
1508...
1509---
1510name:            testCMPD
1511# CHECK-ALL: name: testCMPD
1512alignment:       4
1513exposesReturnsTwice: false
1514legalized:       false
1515regBankSelected: false
1516selected:        false
1517tracksRegLiveness: true
1518registers:
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: '' }
1525liveins:
1526  - { reg: '$x3', virtual-reg: '%0' }
1527  - { reg: '$x4', virtual-reg: '%1' }
1528frameInfo:
1529  isFrameAddressTaken: false
1530  isReturnAddressTaken: false
1531  hasStackMap:     false
1532  hasPatchPoint:   false
1533  stackSize:       0
1534  offsetAdjustment: 0
1535  maxAlignment:    0
1536  adjustsStack:    false
1537  hasCalls:        false
1538  stackProtector:  ''
1539  maxCallFrameSize: 4294967295
1540  hasOpaqueSPAdjustment: false
1541  hasVAStart:      false
1542  hasMustTailInVarArgFunc: false
1543  savePoint:       ''
1544  restorePoint:    ''
1545fixedStack:
1546stack:
1547constants:
1548body:             |
1549  bb.0.entry:
1550    liveins: $x3, $x4
1551
1552    %1 = LI8 65533
1553    %0 = COPY $x3
1554    %2 = CMPD %0, %1
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
1559    $x3 = COPY %5
1560    BLR8 implicit $lr8, implicit $rm, implicit $x3
1561
1562...
1563---
1564name:            testCMPDI
1565# CHECK-ALL: name: testCMPDI
1566alignment:       4
1567exposesReturnsTwice: false
1568legalized:       false
1569regBankSelected: false
1570selected:        false
1571tracksRegLiveness: true
1572registers:
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: '' }
1579liveins:
1580  - { reg: '$x3', virtual-reg: '%0' }
1581  - { reg: '$x4', virtual-reg: '%1' }
1582frameInfo:
1583  isFrameAddressTaken: false
1584  isReturnAddressTaken: false
1585  hasStackMap:     false
1586  hasPatchPoint:   false
1587  stackSize:       0
1588  offsetAdjustment: 0
1589  maxAlignment:    0
1590  adjustsStack:    false
1591  hasCalls:        false
1592  stackProtector:  ''
1593  maxCallFrameSize: 4294967295
1594  hasOpaqueSPAdjustment: false
1595  hasVAStart:      false
1596  hasMustTailInVarArgFunc: false
1597  savePoint:       ''
1598  restorePoint:    ''
1599fixedStack:
1600stack:
1601constants:
1602body:             |
1603  bb.0.entry:
1604    liveins: $x3, $x4
1605
1606    %1 = COPY $x4
1607    %0 = LI8 89
1608    %2 = CMPDI %0, 87
1609    %4 = ISEL8 $zero8, %0, %2.sub_gt
1610    ; CHECK: LI8 0
1611    %5 = ADD8 killed %4, %1
1612    $x3 = COPY %5
1613    BLR8 implicit $lr8, implicit $rm, implicit $x3
1614
1615...
1616---
1617name:            testCMPDI_F
1618# CHECK-ALL: name: testCMPDI_F
1619alignment:       4
1620exposesReturnsTwice: false
1621legalized:       false
1622regBankSelected: false
1623selected:        false
1624tracksRegLiveness: true
1625registers:
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: '' }
1632liveins:
1633  - { reg: '$x3', virtual-reg: '%0' }
1634  - { reg: '$x4', virtual-reg: '%1' }
1635frameInfo:
1636  isFrameAddressTaken: false
1637  isReturnAddressTaken: false
1638  hasStackMap:     false
1639  hasPatchPoint:   false
1640  stackSize:       0
1641  offsetAdjustment: 0
1642  maxAlignment:    0
1643  adjustsStack:    false
1644  hasCalls:        false
1645  stackProtector:  ''
1646  maxCallFrameSize: 4294967295
1647  hasOpaqueSPAdjustment: false
1648  hasVAStart:      false
1649  hasMustTailInVarArgFunc: false
1650  savePoint:       ''
1651  restorePoint:    ''
1652fixedStack:
1653stack:
1654constants:
1655body:             |
1656  bb.0.entry:
1657    liveins: $x3, $x4
1658
1659    %1 = COPY $x4
1660    %0 = LI8 87
1661    %2 = CMPDI %0, 87
1662    %4 = ISEL8 $zero8, %0, %2.sub_gt
1663    ; CHECK: COPY %0
1664    %5 = ADD8 killed %4, %1
1665    $x3 = COPY %5
1666    BLR8 implicit $lr8, implicit $rm, implicit $x3
1667
1668...
1669---
1670name:            testCMPLD
1671# CHECK-ALL: name: testCMPLD
1672alignment:       4
1673exposesReturnsTwice: false
1674legalized:       false
1675regBankSelected: false
1676selected:        false
1677tracksRegLiveness: true
1678registers:
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: '' }
1685liveins:
1686  - { reg: '$x3', virtual-reg: '%0' }
1687  - { reg: '$x4', virtual-reg: '%1' }
1688frameInfo:
1689  isFrameAddressTaken: false
1690  isReturnAddressTaken: false
1691  hasStackMap:     false
1692  hasPatchPoint:   false
1693  stackSize:       0
1694  offsetAdjustment: 0
1695  maxAlignment:    0
1696  adjustsStack:    false
1697  hasCalls:        false
1698  stackProtector:  ''
1699  maxCallFrameSize: 4294967295
1700  hasOpaqueSPAdjustment: false
1701  hasVAStart:      false
1702  hasMustTailInVarArgFunc: false
1703  savePoint:       ''
1704  restorePoint:    ''
1705fixedStack:
1706stack:
1707constants:
1708body:             |
1709  bb.0.entry:
1710    liveins: $x3, $x4
1711
1712    %1 = LI8 99
1713    %0 = COPY $x3
1714    %2 = CMPLD %0, %1
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
1719    $x3 = COPY %5
1720    BLR8 implicit $lr8, implicit $rm, implicit $x3
1721
1722...
1723---
1724name:            testCMPLDI
1725# CHECK-ALL: name: testCMPLDI
1726alignment:       4
1727exposesReturnsTwice: false
1728legalized:       false
1729regBankSelected: false
1730selected:        false
1731tracksRegLiveness: true
1732registers:
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: '' }
1739liveins:
1740  - { reg: '$x3', virtual-reg: '%0' }
1741  - { reg: '$x4', virtual-reg: '%1' }
1742frameInfo:
1743  isFrameAddressTaken: false
1744  isReturnAddressTaken: false
1745  hasStackMap:     false
1746  hasPatchPoint:   false
1747  stackSize:       0
1748  offsetAdjustment: 0
1749  maxAlignment:    0
1750  adjustsStack:    false
1751  hasCalls:        false
1752  stackProtector:  ''
1753  maxCallFrameSize: 4294967295
1754  hasOpaqueSPAdjustment: false
1755  hasVAStart:      false
1756  hasMustTailInVarArgFunc: false
1757  savePoint:       ''
1758  restorePoint:    ''
1759fixedStack:
1760stack:
1761constants:
1762body:             |
1763  bb.0.entry:
1764    liveins: $x3, $x4
1765
1766    %1 = COPY $x4
1767    %0 = LI8 65534
1768    %2 = CMPLDI %0, 65535
1769    %4 = ISEL8 $zero8, %0, %2.sub_gt
1770    ; CHECK: COPY %0
1771    %5 = ADD8 killed %4, %1
1772    $x3 = COPY %5
1773    BLR8 implicit $lr8, implicit $rm, implicit $x3
1774
1775...
1776---
1777name:            testCMPW
1778# CHECK-ALL: name: testCMPW
1779alignment:       4
1780exposesReturnsTwice: false
1781legalized:       false
1782regBankSelected: false
1783selected:        false
1784tracksRegLiveness: true
1785registers:
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: '' }
1795liveins:
1796  - { reg: '$x3', virtual-reg: '%0' }
1797  - { reg: '$x4', virtual-reg: '%1' }
1798frameInfo:
1799  isFrameAddressTaken: false
1800  isReturnAddressTaken: false
1801  hasStackMap:     false
1802  hasPatchPoint:   false
1803  stackSize:       0
1804  offsetAdjustment: 0
1805  maxAlignment:    0
1806  adjustsStack:    false
1807  hasCalls:        false
1808  stackProtector:  ''
1809  maxCallFrameSize: 4294967295
1810  hasOpaqueSPAdjustment: false
1811  hasVAStart:      false
1812  hasMustTailInVarArgFunc: false
1813  savePoint:       ''
1814  restorePoint:    ''
1815fixedStack:
1816stack:
1817constants:
1818body:             |
1819  bb.0.entry:
1820    liveins: $x3, $x4
1821
1822    %1 = COPY $x4
1823    %0 = COPY $x3
1824    %2 = LI -1
1825    %3 = COPY %0.sub_32
1826    %4 = CMPW %3, %2
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
1831    $x3 = COPY %8
1832    BLR8 implicit $lr8, implicit $rm, implicit $x3
1833
1834...
1835---
1836name:            testCMPWI
1837# CHECK-ALL: name: testCMPWI
1838alignment:       4
1839exposesReturnsTwice: false
1840legalized:       false
1841regBankSelected: false
1842selected:        false
1843tracksRegLiveness: true
1844registers:
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: '' }
1854liveins:
1855  - { reg: '$x3', virtual-reg: '%0' }
1856  - { reg: '$x4', virtual-reg: '%1' }
1857frameInfo:
1858  isFrameAddressTaken: false
1859  isReturnAddressTaken: false
1860  hasStackMap:     false
1861  hasPatchPoint:   false
1862  stackSize:       0
1863  offsetAdjustment: 0
1864  maxAlignment:    0
1865  adjustsStack:    false
1866  hasCalls:        false
1867  stackProtector:  ''
1868  maxCallFrameSize: 4294967295
1869  hasOpaqueSPAdjustment: false
1870  hasVAStart:      false
1871  hasMustTailInVarArgFunc: false
1872  savePoint:       ''
1873  restorePoint:    ''
1874fixedStack:
1875stack:
1876constants:
1877body:             |
1878  bb.0.entry:
1879    liveins: $x3, $x4
1880
1881    %1 = COPY $x4
1882    %0 = COPY $x3
1883    %2 = COPY %1.sub_32
1884    %3 = LI -3
1885    %4 = CMPWI %3, 87
1886    %6 = ISEL $zero, %3, %4.sub_gt
1887    ; CHECK: COPY %3
1888    %7 = ADD4 killed %6, killed %2
1889    %8 = EXTSW_32_64 killed %7
1890    $x3 = COPY %8
1891    BLR8 implicit $lr8, implicit $rm, implicit $x3
1892
1893...
1894---
1895name:            testCMPLW
1896# CHECK-ALL: name: testCMPLW
1897alignment:       4
1898exposesReturnsTwice: false
1899legalized:       false
1900regBankSelected: false
1901selected:        false
1902tracksRegLiveness: true
1903registers:
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: '' }
1915liveins:
1916  - { reg: '$x3', virtual-reg: '%0' }
1917  - { reg: '$x4', virtual-reg: '%1' }
1918frameInfo:
1919  isFrameAddressTaken: false
1920  isReturnAddressTaken: false
1921  hasStackMap:     false
1922  hasPatchPoint:   false
1923  stackSize:       0
1924  offsetAdjustment: 0
1925  maxAlignment:    0
1926  adjustsStack:    false
1927  hasCalls:        false
1928  stackProtector:  ''
1929  maxCallFrameSize: 4294967295
1930  hasOpaqueSPAdjustment: false
1931  hasVAStart:      false
1932  hasMustTailInVarArgFunc: false
1933  savePoint:       ''
1934  restorePoint:    ''
1935fixedStack:
1936stack:
1937constants:
1938body:             |
1939  bb.0.entry:
1940    liveins: $x3, $x4
1941
1942    %1 = COPY $x4
1943    %0 = COPY $x3
1944    %2 = LI 32767
1945    %3 = COPY %0.sub_32
1946    %4 = CMPLW %3, %2
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
1951    %9 = IMPLICIT_DEF
1952    %8 = INSERT_SUBREG %9, killed %7, 1
1953    %10 = RLDICL killed %8, 0, 32
1954    $x3 = COPY %10
1955    BLR8 implicit $lr8, implicit $rm, implicit $x3
1956
1957...
1958---
1959name:            testCMPLWI
1960# CHECK-ALL: name: testCMPLWI
1961alignment:       4
1962exposesReturnsTwice: false
1963legalized:       false
1964regBankSelected: false
1965selected:        false
1966tracksRegLiveness: true
1967registers:
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: '' }
1979liveins:
1980  - { reg: '$x3', virtual-reg: '%0' }
1981  - { reg: '$x4', virtual-reg: '%1' }
1982frameInfo:
1983  isFrameAddressTaken: false
1984  isReturnAddressTaken: false
1985  hasStackMap:     false
1986  hasPatchPoint:   false
1987  stackSize:       0
1988  offsetAdjustment: 0
1989  maxAlignment:    0
1990  adjustsStack:    false
1991  hasCalls:        false
1992  stackProtector:  ''
1993  maxCallFrameSize: 4294967295
1994  hasOpaqueSPAdjustment: false
1995  hasVAStart:      false
1996  hasMustTailInVarArgFunc: false
1997  savePoint:       ''
1998  restorePoint:    ''
1999fixedStack:
2000stack:
2001constants:
2002body:             |
2003  bb.0.entry:
2004    liveins: $x3, $x4
2005
2006    %1 = COPY $x4
2007    %0 = COPY $x3
2008    %2 = COPY %1.sub_32
2009    %3 = LI -3
2010    %4 = CMPLWI %3, 87
2011    %6 = ISEL $zero, %3, %4.sub_gt
2012    ; CHECK: LI 0
2013    %7 = ADD4 killed %6, killed %2
2014    %9 = IMPLICIT_DEF
2015    %8 = INSERT_SUBREG %9, killed %7, 1
2016    %10 = RLDICL killed %8, 0, 32
2017    $x3 = COPY %10
2018    BLR8 implicit $lr8, implicit $rm, implicit $x3
2019
2020...
2021---
2022name:            testLBZUX
2023# CHECK-ALL: name: testLBZUX
2024alignment:       4
2025exposesReturnsTwice: false
2026legalized:       false
2027regBankSelected: false
2028selected:        false
2029tracksRegLiveness: true
2030registers:
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: '' }
2049liveins:
2050  - { reg: '$x3', virtual-reg: '%0' }
2051  - { reg: '$x4', virtual-reg: '%1' }
2052frameInfo:
2053  isFrameAddressTaken: false
2054  isReturnAddressTaken: false
2055  hasStackMap:     false
2056  hasPatchPoint:   false
2057  stackSize:       0
2058  offsetAdjustment: 0
2059  maxAlignment:    0
2060  adjustsStack:    false
2061  hasCalls:        false
2062  stackProtector:  ''
2063  maxCallFrameSize: 4294967295
2064  hasOpaqueSPAdjustment: false
2065  hasVAStart:      false
2066  hasMustTailInVarArgFunc: false
2067  savePoint:       ''
2068  restorePoint:    ''
2069fixedStack:
2070stack:
2071constants:
2072body:             |
2073  bb.0.entry:
2074    liveins: $x3, $x4
2075
2076    %1 = COPY $x4
2077    %0 = COPY $x3
2078    %2 = COPY %1.sub_32
2079    %3 = ADDI %2, 1
2080    %5 = IMPLICIT_DEF
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)
2084    %8 = ADDI %2, 2
2085    %10 = IMPLICIT_DEF
2086    %9 = INSERT_SUBREG %10, killed %8, 1
2087    %11 = LI8 -15
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
2092    %15 = IMPLICIT_DEF
2093    %14 = INSERT_SUBREG %15, killed %13, 1
2094    %16 = RLWINM8 killed %14, 0, 24, 31
2095    $x3 = COPY %16
2096    BLR8 implicit $lr8, implicit $rm, implicit $x3
2097
2098...
2099---
2100name:            testLBZX
2101# CHECK-ALL: name: testLBZX
2102alignment:       4
2103exposesReturnsTwice: false
2104legalized:       false
2105regBankSelected: false
2106selected:        false
2107tracksRegLiveness: true
2108registers:
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: '' }
2126liveins:
2127  - { reg: '$x3', virtual-reg: '%0' }
2128  - { reg: '$x4', virtual-reg: '%1' }
2129frameInfo:
2130  isFrameAddressTaken: false
2131  isReturnAddressTaken: false
2132  hasStackMap:     false
2133  hasPatchPoint:   false
2134  stackSize:       0
2135  offsetAdjustment: 0
2136  maxAlignment:    0
2137  adjustsStack:    false
2138  hasCalls:        false
2139  stackProtector:  ''
2140  maxCallFrameSize: 4294967295
2141  hasOpaqueSPAdjustment: false
2142  hasVAStart:      false
2143  hasMustTailInVarArgFunc: false
2144  savePoint:       ''
2145  restorePoint:    ''
2146fixedStack:
2147stack:
2148constants:
2149body:             |
2150  bb.0.entry:
2151    liveins: $x3, $x4
2152
2153    %1 = COPY $x4
2154    %0 = LI8 45
2155    %2 = COPY %1.sub_32
2156    %3 = ADDI %2, 1
2157    %5 = IMPLICIT_DEF
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)
2163    %8 = ADDI %2, 2
2164    %10 = IMPLICIT_DEF
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
2171    %15 = IMPLICIT_DEF
2172    %14 = INSERT_SUBREG %15, killed %13, 1
2173    %16 = RLWINM8 killed %14, 0, 24, 31
2174    $x3 = COPY %16
2175    BLR8 implicit $lr8, implicit $rm, implicit $x3
2176
2177...
2178---
2179name:            testLHZUX
2180# CHECK-ALL: name: testLHZUX
2181alignment:       4
2182exposesReturnsTwice: false
2183legalized:       false
2184regBankSelected: false
2185selected:        false
2186tracksRegLiveness: true
2187registers:
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: '' }
2206liveins:
2207  - { reg: '$x3', virtual-reg: '%0' }
2208  - { reg: '$x4', virtual-reg: '%1' }
2209frameInfo:
2210  isFrameAddressTaken: false
2211  isReturnAddressTaken: false
2212  hasStackMap:     false
2213  hasPatchPoint:   false
2214  stackSize:       0
2215  offsetAdjustment: 0
2216  maxAlignment:    0
2217  adjustsStack:    false
2218  hasCalls:        false
2219  stackProtector:  ''
2220  maxCallFrameSize: 4294967295
2221  hasOpaqueSPAdjustment: false
2222  hasVAStart:      false
2223  hasMustTailInVarArgFunc: false
2224  savePoint:       ''
2225  restorePoint:    ''
2226fixedStack:
2227stack:
2228constants:
2229body:             |
2230  bb.0.entry:
2231    liveins: $x3, $x4
2232
2233    %1 = COPY $x4
2234    %0 = COPY $x3
2235    %2 = COPY %1.sub_32
2236    %3 = ADDI %2, 1
2237    %5 = IMPLICIT_DEF
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)
2241    %8 = ADDI %2, 2
2242    %10 = IMPLICIT_DEF
2243    %9 = INSERT_SUBREG %10, killed %8, 1
2244    %11 = LI8 31440
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
2249    %15 = IMPLICIT_DEF
2250    %14 = INSERT_SUBREG %15, killed %13, 1
2251    %16 = RLWINM8 killed %14, 0, 16, 31
2252    $x3 = COPY %16
2253    BLR8 implicit $lr8, implicit $rm, implicit $x3
2254
2255...
2256---
2257name:            testLHZX
2258# CHECK-ALL: name: testLHZX
2259alignment:       4
2260exposesReturnsTwice: false
2261legalized:       false
2262regBankSelected: false
2263selected:        false
2264tracksRegLiveness: true
2265registers:
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: '' }
2283liveins:
2284  - { reg: '$x3', virtual-reg: '%0' }
2285  - { reg: '$x4', virtual-reg: '%1' }
2286frameInfo:
2287  isFrameAddressTaken: false
2288  isReturnAddressTaken: false
2289  hasStackMap:     false
2290  hasPatchPoint:   false
2291  stackSize:       0
2292  offsetAdjustment: 0
2293  maxAlignment:    0
2294  adjustsStack:    false
2295  hasCalls:        false
2296  stackProtector:  ''
2297  maxCallFrameSize: 4294967295
2298  hasOpaqueSPAdjustment: false
2299  hasVAStart:      false
2300  hasMustTailInVarArgFunc: false
2301  savePoint:       ''
2302  restorePoint:    ''
2303fixedStack:
2304stack:
2305constants:
2306body:             |
2307  bb.0.entry:
2308    liveins: $x3, $x4
2309
2310    %1 = COPY $x4
2311    %0 = COPY $x3
2312    %2 = COPY %1.sub_32
2313    %3 = ADDI %2, 1
2314    %5 = IMPLICIT_DEF
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)
2318    %8 = ADDI %2, 2
2319    %10 = IMPLICIT_DEF
2320    %9 = INSERT_SUBREG %10, killed %8, 1
2321    %11 = LI8 882
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
2326    %15 = IMPLICIT_DEF
2327    %14 = INSERT_SUBREG %15, killed %13, 1
2328    %16 = RLWINM8 killed %14, 0, 16, 31
2329    $x3 = COPY %16
2330    BLR8 implicit $lr8, implicit $rm, implicit $x3
2331
2332...
2333---
2334name:            testLHAUX
2335# CHECK-ALL: name: testLHAUX
2336alignment:       4
2337exposesReturnsTwice: false
2338legalized:       false
2339regBankSelected: false
2340selected:        false
2341tracksRegLiveness: true
2342registers:
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: '' }
2361liveins:
2362  - { reg: '$x3', virtual-reg: '%0' }
2363  - { reg: '$x4', virtual-reg: '%1' }
2364frameInfo:
2365  isFrameAddressTaken: false
2366  isReturnAddressTaken: false
2367  hasStackMap:     false
2368  hasPatchPoint:   false
2369  stackSize:       0
2370  offsetAdjustment: 0
2371  maxAlignment:    0
2372  adjustsStack:    false
2373  hasCalls:        false
2374  stackProtector:  ''
2375  maxCallFrameSize: 4294967295
2376  hasOpaqueSPAdjustment: false
2377  hasVAStart:      false
2378  hasMustTailInVarArgFunc: false
2379  savePoint:       ''
2380  restorePoint:    ''
2381fixedStack:
2382stack:
2383constants:
2384body:             |
2385  bb.0.entry:
2386    liveins: $x3, $x4
2387
2388    %1 = COPY $x4
2389    %0 = COPY $x3
2390    %2 = COPY %1.sub_32
2391    %3 = ADDI %2, 1
2392    %5 = IMPLICIT_DEF
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)
2396    %8 = ADDI %2, 2
2397    %10 = IMPLICIT_DEF
2398    %9 = INSERT_SUBREG %10, killed %8, 1
2399    %11 = LI8 400
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
2404    %15 = IMPLICIT_DEF
2405    %14 = INSERT_SUBREG %15, killed %13, 1
2406    %16 = EXTSH8 killed %14
2407    $x3 = COPY %16
2408    BLR8 implicit $lr8, implicit $rm, implicit $x3
2409
2410...
2411---
2412name:            testLHAX
2413# CHECK-ALL: name: testLHAX
2414alignment:       4
2415exposesReturnsTwice: false
2416legalized:       false
2417regBankSelected: false
2418selected:        false
2419tracksRegLiveness: true
2420registers:
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: '' }
2438liveins:
2439  - { reg: '$x3', virtual-reg: '%0' }
2440  - { reg: '$x4', virtual-reg: '%1' }
2441frameInfo:
2442  isFrameAddressTaken: false
2443  isReturnAddressTaken: false
2444  hasStackMap:     false
2445  hasPatchPoint:   false
2446  stackSize:       0
2447  offsetAdjustment: 0
2448  maxAlignment:    0
2449  adjustsStack:    false
2450  hasCalls:        false
2451  stackProtector:  ''
2452  maxCallFrameSize: 4294967295
2453  hasOpaqueSPAdjustment: false
2454  hasVAStart:      false
2455  hasMustTailInVarArgFunc: false
2456  savePoint:       ''
2457  restorePoint:    ''
2458fixedStack:
2459stack:
2460constants:
2461body:             |
2462  bb.0.entry:
2463    liveins: $x3, $x4
2464
2465    %1 = COPY $x4
2466    %0 = COPY $x3
2467    %2 = COPY %1.sub_32
2468    %3 = ADDI %2, 1
2469    %5 = IMPLICIT_DEF
2470    %4 = INSERT_SUBREG %5, killed %3, 1
2471    %6 = LI8 -999
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)
2475    %8 = ADDI %2, 2
2476    %10 = IMPLICIT_DEF
2477    %9 = INSERT_SUBREG %10, killed %8, 1
2478    %11 = LI8 999
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
2483    %15 = IMPLICIT_DEF
2484    %14 = INSERT_SUBREG %15, killed %13, 1
2485    %16 = EXTSH8 killed %14
2486    $x3 = COPY %16
2487    BLR8 implicit $lr8, implicit $rm, implicit $x3
2488
2489...
2490---
2491name:            testLWZUX
2492# CHECK-ALL: name: testLWZUX
2493alignment:       4
2494exposesReturnsTwice: false
2495legalized:       false
2496regBankSelected: false
2497selected:        false
2498tracksRegLiveness: true
2499registers:
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: '' }
2519liveins:
2520  - { reg: '$x3', virtual-reg: '%0' }
2521  - { reg: '$x4', virtual-reg: '%1' }
2522frameInfo:
2523  isFrameAddressTaken: false
2524  isReturnAddressTaken: false
2525  hasStackMap:     false
2526  hasPatchPoint:   false
2527  stackSize:       0
2528  offsetAdjustment: 0
2529  maxAlignment:    0
2530  adjustsStack:    false
2531  hasCalls:        false
2532  stackProtector:  ''
2533  maxCallFrameSize: 4294967295
2534  hasOpaqueSPAdjustment: false
2535  hasVAStart:      false
2536  hasMustTailInVarArgFunc: false
2537  savePoint:       ''
2538  restorePoint:    ''
2539fixedStack:
2540stack:
2541constants:
2542body:             |
2543  bb.0.entry:
2544    liveins: $x3, $x4
2545
2546    %1 = COPY $x4
2547    %0 = COPY $x3
2548    %2 = COPY %1.sub_32
2549    %3 = ADDI %2, 1
2550    %5 = IMPLICIT_DEF
2551    %4 = INSERT_SUBREG %5, killed %3, 1
2552    %6 = LI8 889
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]+}})
2556    %8 = ADDI %2, 2
2557    %10 = IMPLICIT_DEF
2558    %9 = INSERT_SUBREG %10, killed %8, 1
2559    %11 = LI8 -2
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
2564    %15 = IMPLICIT_DEF
2565    %14 = INSERT_SUBREG %15, killed %13, 1
2566    %16 = RLDICL killed %14, 0, 32
2567    $x3 = COPY %16
2568    BLR8 implicit $lr8, implicit $rm, implicit $x3
2569
2570...
2571---
2572name:            testLWZX
2573# CHECK-ALL: name: testLWZX
2574alignment:       4
2575exposesReturnsTwice: false
2576legalized:       false
2577regBankSelected: false
2578selected:        false
2579tracksRegLiveness: true
2580registers:
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: '' }
2598liveins:
2599  - { reg: '$x3', virtual-reg: '%0' }
2600  - { reg: '$x4', virtual-reg: '%1' }
2601frameInfo:
2602  isFrameAddressTaken: false
2603  isReturnAddressTaken: false
2604  hasStackMap:     false
2605  hasPatchPoint:   false
2606  stackSize:       0
2607  offsetAdjustment: 0
2608  maxAlignment:    0
2609  adjustsStack:    false
2610  hasCalls:        false
2611  stackProtector:  ''
2612  maxCallFrameSize: 4294967295
2613  hasOpaqueSPAdjustment: false
2614  hasVAStart:      false
2615  hasMustTailInVarArgFunc: false
2616  savePoint:       ''
2617  restorePoint:    ''
2618fixedStack:
2619stack:
2620constants:
2621body:             |
2622  bb.0.entry:
2623    liveins: $x3, $x4
2624
2625    %1 = COPY $x4
2626    %0 = LI8 1000
2627    %2 = COPY %1.sub_32
2628    %3 = ADDI %2, 1
2629    %5 = IMPLICIT_DEF
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)
2635    %8 = ADDI %2, 2
2636    %10 = IMPLICIT_DEF
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
2643    %15 = IMPLICIT_DEF
2644    %14 = INSERT_SUBREG %15, killed %13, 1
2645    %16 = RLDICL killed %14, 0, 32
2646    $x3 = COPY %16
2647    BLR8 implicit $lr8, implicit $rm, implicit $x3
2648
2649...
2650---
2651name:            testLWAX
2652# CHECK-ALL: name: testLWAX
2653alignment:       4
2654exposesReturnsTwice: false
2655legalized:       false
2656regBankSelected: false
2657selected:        false
2658tracksRegLiveness: true
2659registers:
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: '' }
2674liveins:
2675  - { reg: '$x3', virtual-reg: '%0' }
2676  - { reg: '$x4', virtual-reg: '%1' }
2677frameInfo:
2678  isFrameAddressTaken: false
2679  isReturnAddressTaken: false
2680  hasStackMap:     false
2681  hasPatchPoint:   false
2682  stackSize:       0
2683  offsetAdjustment: 0
2684  maxAlignment:    0
2685  adjustsStack:    false
2686  hasCalls:        false
2687  stackProtector:  ''
2688  maxCallFrameSize: 4294967295
2689  hasOpaqueSPAdjustment: false
2690  hasVAStart:      false
2691  hasMustTailInVarArgFunc: false
2692  savePoint:       ''
2693  restorePoint:    ''
2694fixedStack:
2695stack:
2696constants:
2697body:             |
2698  bb.0.entry:
2699    liveins: $x3, $x4
2700
2701    %1 = COPY $x4
2702    %0 = LI8 444
2703    %2 = COPY %1.sub_32
2704    %3 = ADDI %2, 1
2705    %5 = IMPLICIT_DEF
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)
2711    %8 = ADDI %2, 2
2712    %10 = IMPLICIT_DEF
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
2719    $x3 = COPY %13
2720    BLR8 implicit $lr8, implicit $rm, implicit $x3
2721
2722...
2723---
2724name:            testLDUX
2725# CHECK-ALL: name: testLDUX
2726alignment:       4
2727exposesReturnsTwice: false
2728legalized:       false
2729regBankSelected: false
2730selected:        false
2731tracksRegLiveness: true
2732registers:
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: '' }
2749liveins:
2750  - { reg: '$x3', virtual-reg: '%0' }
2751  - { reg: '$x4', virtual-reg: '%1' }
2752frameInfo:
2753  isFrameAddressTaken: false
2754  isReturnAddressTaken: false
2755  hasStackMap:     false
2756  hasPatchPoint:   false
2757  stackSize:       0
2758  offsetAdjustment: 0
2759  maxAlignment:    0
2760  adjustsStack:    false
2761  hasCalls:        false
2762  stackProtector:  ''
2763  maxCallFrameSize: 4294967295
2764  hasOpaqueSPAdjustment: false
2765  hasVAStart:      false
2766  hasMustTailInVarArgFunc: false
2767  savePoint:       ''
2768  restorePoint:    ''
2769fixedStack:
2770stack:
2771constants:
2772body:             |
2773  bb.0.entry:
2774    liveins: $x3, $x4
2775
2776    %1 = COPY $x4
2777    %0 = COPY $x3
2778    %2 = COPY %1.sub_32
2779    %3 = ADDI %2, 1
2780    %5 = IMPLICIT_DEF
2781    %4 = INSERT_SUBREG %5, killed %3, 1
2782    %6 = LI8 100
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]+}})
2786    %8 = ADDI %2, 2
2787    %10 = IMPLICIT_DEF
2788    %9 = INSERT_SUBREG %10, killed %8, 1
2789    %11 = LI8 200
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
2794    $x3 = COPY %13
2795    BLR8 implicit $lr8, implicit $rm, implicit $x3
2796
2797...
2798---
2799name:            testLDX
2800# CHECK-ALL: name: testLDX
2801alignment:       4
2802exposesReturnsTwice: false
2803legalized:       false
2804regBankSelected: false
2805selected:        false
2806tracksRegLiveness: true
2807registers:
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: '' }
2822liveins:
2823  - { reg: '$x3', virtual-reg: '%0' }
2824  - { reg: '$x4', virtual-reg: '%1' }
2825frameInfo:
2826  isFrameAddressTaken: false
2827  isReturnAddressTaken: false
2828  hasStackMap:     false
2829  hasPatchPoint:   false
2830  stackSize:       0
2831  offsetAdjustment: 0
2832  maxAlignment:    0
2833  adjustsStack:    false
2834  hasCalls:        false
2835  stackProtector:  ''
2836  maxCallFrameSize: 4294967295
2837  hasOpaqueSPAdjustment: false
2838  hasVAStart:      false
2839  hasMustTailInVarArgFunc: false
2840  savePoint:       ''
2841  restorePoint:    ''
2842fixedStack:
2843stack:
2844constants:
2845body:             |
2846  bb.0.entry:
2847    liveins: $x3, $x4
2848
2849    %1 = COPY $x4
2850    %0 = COPY $x3
2851    %2 = COPY %1.sub_32
2852    %3 = ADDI %2, 1
2853    %5 = IMPLICIT_DEF
2854    %4 = INSERT_SUBREG %5, killed %3, 1
2855    %6 = LI8 120
2856    %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2857    ; CHECK: LD 120, %0
2858    ; CHECK-LATE: ld 4, 120(3)
2859    %8 = ADDI %2, 2
2860    %10 = IMPLICIT_DEF
2861    %9 = INSERT_SUBREG %10, killed %8, 1
2862    %11 = LI8 280
2863    %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2864    ; CHECK: LD 280, %0
2865    ; CHECK-LATE: ld 3, 280(3)
2866    %13 = ADD8 killed %12, killed %7
2867    $x3 = COPY %13
2868    BLR8 implicit $lr8, implicit $rm, implicit $x3
2869
2870...
2871---
2872name:            testLFDUX
2873# CHECK-ALL: name: testLFDUX
2874alignment:       4
2875exposesReturnsTwice: false
2876legalized:       false
2877regBankSelected: false
2878selected:        false
2879tracksRegLiveness: true
2880registers:
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: '' }
2897liveins:
2898  - { reg: '$x3', virtual-reg: '%0' }
2899  - { reg: '$x4', virtual-reg: '%1' }
2900frameInfo:
2901  isFrameAddressTaken: false
2902  isReturnAddressTaken: false
2903  hasStackMap:     false
2904  hasPatchPoint:   false
2905  stackSize:       0
2906  offsetAdjustment: 0
2907  maxAlignment:    0
2908  adjustsStack:    false
2909  hasCalls:        false
2910  stackProtector:  ''
2911  maxCallFrameSize: 4294967295
2912  hasOpaqueSPAdjustment: false
2913  hasVAStart:      false
2914  hasMustTailInVarArgFunc: false
2915  savePoint:       ''
2916  restorePoint:    ''
2917fixedStack:
2918stack:
2919constants:
2920body:             |
2921  bb.0.entry:
2922    liveins: $x3, $x4
2923
2924    %1 = COPY $x4
2925    %0 = COPY $x3
2926    %2 = COPY %1.sub_32
2927    %3 = ADDI %2, 1
2928    %5 = IMPLICIT_DEF
2929    %4 = INSERT_SUBREG %5, killed %3, 1
2930    %6 = LI8 440
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]+}})
2934    %8 = ADDI %2, 2
2935    %10 = IMPLICIT_DEF
2936    %9 = INSERT_SUBREG %10, killed %8, 1
2937    %11 = LI8 16
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
2942    $f1 = COPY %13
2943    BLR8 implicit $lr8, implicit $rm, implicit $f1
2944
2945...
2946---
2947name:            testLFDX
2948# CHECK-ALL: name: testLFDX
2949alignment:       4
2950exposesReturnsTwice: false
2951legalized:       false
2952regBankSelected: false
2953selected:        false
2954tracksRegLiveness: true
2955registers:
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: '' }
2970liveins:
2971  - { reg: '$x3', virtual-reg: '%0' }
2972  - { reg: '$x4', virtual-reg: '%1' }
2973frameInfo:
2974  isFrameAddressTaken: false
2975  isReturnAddressTaken: false
2976  hasStackMap:     false
2977  hasPatchPoint:   false
2978  stackSize:       0
2979  offsetAdjustment: 0
2980  maxAlignment:    0
2981  adjustsStack:    false
2982  hasCalls:        false
2983  stackProtector:  ''
2984  maxCallFrameSize: 4294967295
2985  hasOpaqueSPAdjustment: false
2986  hasVAStart:      false
2987  hasMustTailInVarArgFunc: false
2988  savePoint:       ''
2989  restorePoint:    ''
2990fixedStack:
2991stack:
2992constants:
2993body:             |
2994  bb.0.entry:
2995    liveins: $x3, $x4
2996
2997    %1 = COPY $x4
2998    %0 = LI8 -20
2999    %2 = COPY %1.sub_32
3000    %3 = ADDI %2, 1
3001    %5 = IMPLICIT_DEF
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]+}})
3007    %8 = ADDI %2, 2
3008    %10 = IMPLICIT_DEF
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
3015    $f1 = COPY %13
3016    BLR8 implicit $lr8, implicit $rm, implicit $f1
3017
3018...
3019---
3020name:            testLFSUX
3021# CHECK-ALL: name: testLFSUX
3022alignment:       4
3023exposesReturnsTwice: false
3024legalized:       false
3025regBankSelected: false
3026selected:        false
3027tracksRegLiveness: true
3028registers:
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: '' }
3054liveins:
3055  - { reg: '$x3', virtual-reg: '%0' }
3056  - { reg: '$x4', virtual-reg: '%1' }
3057frameInfo:
3058  isFrameAddressTaken: false
3059  isReturnAddressTaken: false
3060  hasStackMap:     false
3061  hasPatchPoint:   false
3062  stackSize:       0
3063  offsetAdjustment: 0
3064  maxAlignment:    16
3065  adjustsStack:    false
3066  hasCalls:        false
3067  stackProtector:  ''
3068  maxCallFrameSize: 4294967295
3069  hasOpaqueSPAdjustment: false
3070  hasVAStart:      false
3071  hasMustTailInVarArgFunc: false
3072  savePoint:       ''
3073  restorePoint:    ''
3074fixedStack:
3075stack:
3076  - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16,
3077      stack-id: 0, 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: 0, 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: 0, 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: 0, 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: 0, callee-saved-register: '', callee-saved-restored: true,
3094      local-offset: -32, debug-info-variable: '', debug-info-expression: '',
3095      debug-info-location: '' }
3096constants:
3097body:             |
3098  bb.0.entry:
3099    liveins: $x3, $x4
3100
3101    %1 = COPY $x4
3102    %0 = COPY $x3
3103    %2 = LI8 72
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)
3132    $v2 = COPY %24
3133    BLR8 implicit $lr8, implicit $rm, implicit $v2
3134
3135...
3136---
3137name:            testLFSX
3138# CHECK-ALL: name: testLFSX
3139alignment:       4
3140exposesReturnsTwice: false
3141legalized:       false
3142regBankSelected: false
3143selected:        false
3144tracksRegLiveness: true
3145registers:
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: '' }
3160liveins:
3161  - { reg: '$x3', virtual-reg: '%0' }
3162  - { reg: '$x4', virtual-reg: '%1' }
3163frameInfo:
3164  isFrameAddressTaken: false
3165  isReturnAddressTaken: false
3166  hasStackMap:     false
3167  hasPatchPoint:   false
3168  stackSize:       0
3169  offsetAdjustment: 0
3170  maxAlignment:    0
3171  adjustsStack:    false
3172  hasCalls:        false
3173  stackProtector:  ''
3174  maxCallFrameSize: 4294967295
3175  hasOpaqueSPAdjustment: false
3176  hasVAStart:      false
3177  hasMustTailInVarArgFunc: false
3178  savePoint:       ''
3179  restorePoint:    ''
3180fixedStack:
3181stack:
3182constants:
3183body:             |
3184  bb.0.entry:
3185    liveins: $x3, $x4
3186
3187    %1 = COPY $x4
3188    %0 = COPY $x3
3189    %2 = COPY %1.sub_32
3190    %3 = ADDI %2, 1
3191    %5 = IMPLICIT_DEF
3192    %4 = INSERT_SUBREG %5, killed %3, 1
3193    %6 = LI8 88
3194    %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3195    ; CHECK: LFS 88, %0
3196    ; CHECK-LATE: lfs 0, 88(3)
3197    %8 = ADDI %2, 2
3198    %10 = IMPLICIT_DEF
3199    %9 = INSERT_SUBREG %10, killed %8, 1
3200    %11 = LI8 -88
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
3205    $f1 = COPY %13
3206    BLR8 implicit $lr8, implicit $rm, implicit $f1
3207
3208...
3209---
3210name:            testLXSDX
3211# CHECK-ALL: name: testLXSDX
3212alignment:       4
3213exposesReturnsTwice: false
3214legalized:       false
3215regBankSelected: false
3216selected:        false
3217tracksRegLiveness: true
3218registers:
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: '' }
3233liveins:
3234  - { reg: '$x3', virtual-reg: '%0' }
3235  - { reg: '$x4', virtual-reg: '%1' }
3236frameInfo:
3237  isFrameAddressTaken: false
3238  isReturnAddressTaken: false
3239  hasStackMap:     false
3240  hasPatchPoint:   false
3241  stackSize:       0
3242  offsetAdjustment: 0
3243  maxAlignment:    0
3244  adjustsStack:    false
3245  hasCalls:        false
3246  stackProtector:  ''
3247  maxCallFrameSize: 4294967295
3248  hasOpaqueSPAdjustment: false
3249  hasVAStart:      false
3250  hasMustTailInVarArgFunc: false
3251  savePoint:       ''
3252  restorePoint:    ''
3253fixedStack:
3254stack:
3255constants:
3256body:             |
3257  bb.0.entry:
3258    liveins: $x3, $x4
3259
3260    %1 = COPY $x4
3261    %0 = COPY $x3
3262    %2 = COPY %1.sub_32
3263    %3 = ADDI %2, 1
3264    %5 = IMPLICIT_DEF
3265    %4 = INSERT_SUBREG %5, killed %3, 1
3266    %6 = LI8 100
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)
3270    %8 = ADDI %2, 2
3271    %10 = IMPLICIT_DEF
3272    %9 = INSERT_SUBREG %10, killed %8, 1
3273    %11 = LI8 -120
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
3278    $f1 = COPY %13
3279    BLR8 implicit $lr8, implicit $rm, implicit $f1
3280
3281...
3282---
3283name:            testLXSSPX
3284# CHECK-ALL: name: testLXSSPX
3285alignment:       4
3286exposesReturnsTwice: false
3287legalized:       false
3288regBankSelected: false
3289selected:        false
3290tracksRegLiveness: true
3291registers:
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: '' }
3306liveins:
3307  - { reg: '$x3', virtual-reg: '%0' }
3308  - { reg: '$x4', virtual-reg: '%1' }
3309frameInfo:
3310  isFrameAddressTaken: false
3311  isReturnAddressTaken: false
3312  hasStackMap:     false
3313  hasPatchPoint:   false
3314  stackSize:       0
3315  offsetAdjustment: 0
3316  maxAlignment:    0
3317  adjustsStack:    false
3318  hasCalls:        false
3319  stackProtector:  ''
3320  maxCallFrameSize: 4294967295
3321  hasOpaqueSPAdjustment: false
3322  hasVAStart:      false
3323  hasMustTailInVarArgFunc: false
3324  savePoint:       ''
3325  restorePoint:    ''
3326fixedStack:
3327stack:
3328constants:
3329body:             |
3330  bb.0.entry:
3331    liveins: $x3, $x4
3332
3333    %1 = COPY $x4
3334    %0 = COPY $x3
3335    %2 = COPY %1.sub_32
3336    %3 = ADDI %2, 1
3337    %5 = IMPLICIT_DEF
3338    %4 = INSERT_SUBREG %5, killed %3, 1
3339    %6 = LI8 96
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)
3343    %8 = ADDI %2, 2
3344    %10 = IMPLICIT_DEF
3345    %9 = INSERT_SUBREG %10, killed %8, 1
3346    %11 = LI8 -92
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
3351    $f1 = COPY %13
3352    BLR8 implicit $lr8, implicit $rm, implicit $f1
3353
3354...
3355---
3356name:            testLXVX
3357# CHECK-ALL: name: testLXVX
3358alignment:       4
3359exposesReturnsTwice: false
3360legalized:       false
3361regBankSelected: false
3362selected:        false
3363tracksRegLiveness: true
3364registers:
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: '' }
3379liveins:
3380  - { reg: '$x3', virtual-reg: '%0' }
3381  - { reg: '$x4', virtual-reg: '%1' }
3382frameInfo:
3383  isFrameAddressTaken: false
3384  isReturnAddressTaken: false
3385  hasStackMap:     false
3386  hasPatchPoint:   false
3387  stackSize:       0
3388  offsetAdjustment: 0
3389  maxAlignment:    0
3390  adjustsStack:    false
3391  hasCalls:        false
3392  stackProtector:  ''
3393  maxCallFrameSize: 4294967295
3394  hasOpaqueSPAdjustment: false
3395  hasVAStart:      false
3396  hasMustTailInVarArgFunc: false
3397  savePoint:       ''
3398  restorePoint:    ''
3399fixedStack:
3400stack:
3401constants:
3402body:             |
3403  bb.0.entry:
3404    liveins: $x3, $x4
3405
3406    %1 = COPY $x4
3407    %0 = COPY $x3
3408    %2 = COPY %1.sub_32
3409    %3 = ADDI %2, 1
3410    %5 = IMPLICIT_DEF
3411    %4 = INSERT_SUBREG %5, killed %3, 1
3412    %6 = LI8 32
3413    %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3)
3414    ; CHECK: LXV 32, %0
3415    ; CHECK-LATE: lxv 34, 32(3)
3416    %8 = ADDI %2, 2
3417    %10 = IMPLICIT_DEF
3418    %9 = INSERT_SUBREG %10, killed %8, 1
3419    %11 = LI8 -16
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
3424    $v2 = COPY %13
3425    BLR8 implicit $lr8, implicit $rm, implicit $v2
3426
3427...
3428---
3429name:            testOR
3430# CHECK-ALL: name: testOR
3431alignment:       4
3432exposesReturnsTwice: false
3433legalized:       false
3434regBankSelected: false
3435selected:        false
3436tracksRegLiveness: true
3437registers:
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: '' }
3442liveins:
3443  - { reg: '$x3', virtual-reg: '%0' }
3444  - { reg: '$x4', virtual-reg: '%1' }
3445frameInfo:
3446  isFrameAddressTaken: false
3447  isReturnAddressTaken: false
3448  hasStackMap:     false
3449  hasPatchPoint:   false
3450  stackSize:       0
3451  offsetAdjustment: 0
3452  maxAlignment:    0
3453  adjustsStack:    false
3454  hasCalls:        false
3455  stackProtector:  ''
3456  maxCallFrameSize: 4294967295
3457  hasOpaqueSPAdjustment: false
3458  hasVAStart:      false
3459  hasMustTailInVarArgFunc: false
3460  savePoint:       ''
3461  restorePoint:    ''
3462fixedStack:
3463stack:
3464constants:
3465body:             |
3466  bb.0.entry:
3467    liveins: $x3, $x4
3468
3469    %1 = COPY $x4
3470    %0 = LI 99
3471    %3 = COPY %1.sub_32
3472    %2 = OR %0, %3
3473    ; CHECK: ORI %3, 99
3474    ; CHECK-LATE: ori 3, 4, 99
3475    $x3 = EXTSW_32_64 %2
3476    BLR8 implicit $lr8, implicit $rm, implicit $x3
3477
3478...
3479---
3480name:            testOR8
3481# CHECK-ALL: name: testOR8
3482alignment:       4
3483exposesReturnsTwice: false
3484legalized:       false
3485regBankSelected: false
3486selected:        false
3487tracksRegLiveness: true
3488registers:
3489  - { id: 0, class: g8rc, preferred-register: '' }
3490  - { id: 1, class: g8rc, preferred-register: '' }
3491  - { id: 2, class: g8rc, preferred-register: '' }
3492liveins:
3493  - { reg: '$x3', virtual-reg: '%0' }
3494  - { reg: '$x4', virtual-reg: '%1' }
3495frameInfo:
3496  isFrameAddressTaken: false
3497  isReturnAddressTaken: false
3498  hasStackMap:     false
3499  hasPatchPoint:   false
3500  stackSize:       0
3501  offsetAdjustment: 0
3502  maxAlignment:    0
3503  adjustsStack:    false
3504  hasCalls:        false
3505  stackProtector:  ''
3506  maxCallFrameSize: 4294967295
3507  hasOpaqueSPAdjustment: false
3508  hasVAStart:      false
3509  hasMustTailInVarArgFunc: false
3510  savePoint:       ''
3511  restorePoint:    ''
3512fixedStack:
3513stack:
3514constants:
3515body:             |
3516  bb.0.entry:
3517    liveins: $x3, $x4
3518
3519    %1 = COPY $x4
3520    %0 = LI8 777
3521    %2 = OR8 %1, %0
3522    ; CHECK: ORI8 %1, 777
3523    ; CHECK-LATE: ori 3, 4, 777
3524    $x3 = COPY %2
3525    BLR8 implicit $lr8, implicit $rm, implicit $x3
3526
3527...
3528---
3529name:            testORI
3530# CHECK-ALL: name: testORI
3531alignment:       4
3532exposesReturnsTwice: false
3533legalized:       false
3534regBankSelected: false
3535selected:        false
3536tracksRegLiveness: true
3537registers:
3538  - { id: 0, class: gprc, preferred-register: '' }
3539  - { id: 1, class: gprc, preferred-register: '' }
3540liveins:
3541  - { reg: '$x3', virtual-reg: '%0' }
3542frameInfo:
3543  isFrameAddressTaken: false
3544  isReturnAddressTaken: false
3545  hasStackMap:     false
3546  hasPatchPoint:   false
3547  stackSize:       0
3548  offsetAdjustment: 0
3549  maxAlignment:    0
3550  adjustsStack:    false
3551  hasCalls:        false
3552  stackProtector:  ''
3553  maxCallFrameSize: 4294967295
3554  hasOpaqueSPAdjustment: false
3555  hasVAStart:      false
3556  hasMustTailInVarArgFunc: false
3557  savePoint:       ''
3558  restorePoint:    ''
3559fixedStack:
3560stack:
3561constants:
3562body:             |
3563  bb.0.entry:
3564    liveins: $x3
3565
3566    %0 = LI 777
3567    %1 = ORI %0, 88
3568    ; CHECK: LI 857
3569    ; CHECK-LATE: li 3, 857
3570    $x3 = EXTSW_32_64 %1
3571    BLR8 implicit $lr8, implicit $rm, implicit $x3
3572
3573...
3574---
3575name:            testORI8
3576# CHECK-ALL: name: testORI8
3577alignment:       4
3578exposesReturnsTwice: false
3579legalized:       false
3580regBankSelected: false
3581selected:        false
3582tracksRegLiveness: true
3583registers:
3584  - { id: 0, class: g8rc, preferred-register: '' }
3585  - { id: 1, class: g8rc, preferred-register: '' }
3586liveins:
3587  - { reg: '$x3', virtual-reg: '%0' }
3588frameInfo:
3589  isFrameAddressTaken: false
3590  isReturnAddressTaken: false
3591  hasStackMap:     false
3592  hasPatchPoint:   false
3593  stackSize:       0
3594  offsetAdjustment: 0
3595  maxAlignment:    0
3596  adjustsStack:    false
3597  hasCalls:        false
3598  stackProtector:  ''
3599  maxCallFrameSize: 4294967295
3600  hasOpaqueSPAdjustment: false
3601  hasVAStart:      false
3602  hasMustTailInVarArgFunc: false
3603  savePoint:       ''
3604  restorePoint:    ''
3605fixedStack:
3606stack:
3607constants:
3608body:             |
3609  bb.0.entry:
3610    liveins: $x3
3611
3612    %0 = LI8 8721
3613    %1 = ORI8 %0, 99
3614    ; CHECK: LI8 8819
3615    ; CHECK-LATE: li 3, 8819
3616    $x3 = COPY %1
3617    BLR8 implicit $lr8, implicit $rm, implicit $x3
3618
3619...
3620---
3621name:            testRLDCL
3622# CHECK-ALL: name: testRLDCL
3623alignment:       4
3624exposesReturnsTwice: false
3625legalized:       false
3626regBankSelected: false
3627selected:        false
3628tracksRegLiveness: true
3629registers:
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: '' }
3635liveins:
3636  - { reg: '$x3', virtual-reg: '%0' }
3637  - { reg: '$x4', virtual-reg: '%1' }
3638frameInfo:
3639  isFrameAddressTaken: false
3640  isReturnAddressTaken: false
3641  hasStackMap:     false
3642  hasPatchPoint:   false
3643  stackSize:       0
3644  offsetAdjustment: 0
3645  maxAlignment:    0
3646  adjustsStack:    false
3647  hasCalls:        false
3648  stackProtector:  ''
3649  maxCallFrameSize: 4294967295
3650  hasOpaqueSPAdjustment: false
3651  hasVAStart:      false
3652  hasMustTailInVarArgFunc: false
3653  savePoint:       ''
3654  restorePoint:    ''
3655fixedStack:
3656stack:
3657constants:
3658body:             |
3659  bb.0.entry:
3660    liveins: $x3, $x4
3661
3662    %1 = COPY $x4
3663    %0 = COPY $x3
3664    %2 = COPY %1.sub_32
3665    %3 = LI 14
3666    %4 = RLDCL %0, killed %3, 0
3667    ; CHECK: RLDICL %0, 14, 0
3668    ; CHECK-LATE: rotldi 3, 3, 14
3669    $x3 = COPY %4
3670    BLR8 implicit $lr8, implicit $rm, implicit $x3
3671
3672...
3673---
3674name:            testRLDCLo
3675# CHECK-ALL: name: testRLDCLo
3676alignment:       4
3677exposesReturnsTwice: false
3678legalized:       false
3679regBankSelected: false
3680selected:        false
3681tracksRegLiveness: true
3682registers:
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: '' }
3690liveins:
3691  - { reg: '$x3', virtual-reg: '%0' }
3692  - { reg: '$x4', virtual-reg: '%1' }
3693frameInfo:
3694  isFrameAddressTaken: false
3695  isReturnAddressTaken: false
3696  hasStackMap:     false
3697  hasPatchPoint:   false
3698  stackSize:       0
3699  offsetAdjustment: 0
3700  maxAlignment:    0
3701  adjustsStack:    false
3702  hasCalls:        false
3703  stackProtector:  ''
3704  maxCallFrameSize: 4294967295
3705  hasOpaqueSPAdjustment: false
3706  hasVAStart:      false
3707  hasMustTailInVarArgFunc: false
3708  savePoint:       ''
3709  restorePoint:    ''
3710fixedStack:
3711stack:
3712constants:
3713body:             |
3714  bb.0.entry:
3715    liveins: $x3, $x4
3716
3717    %1 = COPY $x4
3718    %0 = COPY $x3
3719    %2 = RLDICL %1, 0, 58
3720    %3 = LI 37
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
3726    $x3 = COPY %6
3727    BLR8 implicit $lr8, implicit $rm, implicit $x3
3728
3729...
3730---
3731name:            testRLDCR
3732# CHECK-ALL: name: testRLDCR
3733alignment:       4
3734exposesReturnsTwice: false
3735legalized:       false
3736regBankSelected: false
3737selected:        false
3738tracksRegLiveness: true
3739registers:
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: '' }
3745liveins:
3746  - { reg: '$x3', virtual-reg: '%0' }
3747  - { reg: '$x4', virtual-reg: '%1' }
3748frameInfo:
3749  isFrameAddressTaken: false
3750  isReturnAddressTaken: false
3751  hasStackMap:     false
3752  hasPatchPoint:   false
3753  stackSize:       0
3754  offsetAdjustment: 0
3755  maxAlignment:    0
3756  adjustsStack:    false
3757  hasCalls:        false
3758  stackProtector:  ''
3759  maxCallFrameSize: 4294967295
3760  hasOpaqueSPAdjustment: false
3761  hasVAStart:      false
3762  hasMustTailInVarArgFunc: false
3763  savePoint:       ''
3764  restorePoint:    ''
3765fixedStack:
3766stack:
3767constants:
3768body:             |
3769  bb.0.entry:
3770    liveins: $x3, $x4
3771
3772    %1 = COPY $x4
3773    %0 = COPY $x3
3774    %2 = COPY %1.sub_32
3775    %3 = LI 0
3776    %4 = RLDCR %0, killed %3, 0
3777    ; CHECK: RLDICR %0, 0, 0
3778    ; CHECK-LATE: rldicr 3, 3, 0, 0
3779    $x3 = COPY %4
3780    BLR8 implicit $lr8, implicit $rm, implicit $x3
3781
3782...
3783---
3784name:            testRLDCRo
3785# CHECK-ALL: name: testRLDCRo
3786alignment:       4
3787exposesReturnsTwice: false
3788legalized:       false
3789regBankSelected: false
3790selected:        false
3791tracksRegLiveness: true
3792registers:
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: '' }
3800liveins:
3801  - { reg: '$x3', virtual-reg: '%0' }
3802  - { reg: '$x4', virtual-reg: '%1' }
3803frameInfo:
3804  isFrameAddressTaken: false
3805  isReturnAddressTaken: false
3806  hasStackMap:     false
3807  hasPatchPoint:   false
3808  stackSize:       0
3809  offsetAdjustment: 0
3810  maxAlignment:    0
3811  adjustsStack:    false
3812  hasCalls:        false
3813  stackProtector:  ''
3814  maxCallFrameSize: 4294967295
3815  hasOpaqueSPAdjustment: false
3816  hasVAStart:      false
3817  hasMustTailInVarArgFunc: false
3818  savePoint:       ''
3819  restorePoint:    ''
3820fixedStack:
3821stack:
3822constants:
3823body:             |
3824  bb.0.entry:
3825    liveins: $x3, $x4
3826
3827    %1 = COPY $x4
3828    %0 = COPY $x3
3829    %2 = RLDICL %1, 0, 58
3830    %3 = LI 18
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
3836    $x3 = COPY %6
3837    BLR8 implicit $lr8, implicit $rm, implicit $x3
3838
3839...
3840---
3841name:            testRLDICL
3842# CHECK-ALL: name: testRLDICL
3843alignment:       4
3844exposesReturnsTwice: false
3845legalized:       false
3846regBankSelected: false
3847selected:        false
3848tracksRegLiveness: true
3849registers:
3850  - { id: 0, class: g8rc, preferred-register: '' }
3851  - { id: 1, class: g8rc, preferred-register: '' }
3852liveins:
3853  - { reg: '$x3', virtual-reg: '%0' }
3854frameInfo:
3855  isFrameAddressTaken: false
3856  isReturnAddressTaken: false
3857  hasStackMap:     false
3858  hasPatchPoint:   false
3859  stackSize:       0
3860  offsetAdjustment: 0
3861  maxAlignment:    0
3862  adjustsStack:    false
3863  hasCalls:        false
3864  stackProtector:  ''
3865  maxCallFrameSize: 4294967295
3866  hasOpaqueSPAdjustment: false
3867  hasVAStart:      false
3868  hasMustTailInVarArgFunc: false
3869  savePoint:       ''
3870  restorePoint:    ''
3871fixedStack:
3872stack:
3873constants:
3874body:             |
3875  bb.0.entry:
3876    liveins: $x3
3877
3878    %0 = LI8 -1
3879    %1 = RLDICL %0, 53, 49
3880    ; CHECK: LI8 32767
3881    ; CHECK-LATE: li 3, 32767
3882    $x3 = COPY %1
3883    BLR8 implicit $lr8, implicit $rm, implicit $x3
3884
3885...
3886---
3887name:            testRLDICLo
3888# CHECK-ALL: name: testRLDICLo
3889alignment:       4
3890exposesReturnsTwice: false
3891legalized:       false
3892regBankSelected: false
3893selected:        false
3894tracksRegLiveness: true
3895registers:
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: '' }
3901liveins:
3902  - { reg: '$x3', virtual-reg: '%0' }
3903  - { reg: '$x4', virtual-reg: '%1' }
3904frameInfo:
3905  isFrameAddressTaken: false
3906  isReturnAddressTaken: false
3907  hasStackMap:     false
3908  hasPatchPoint:   false
3909  stackSize:       0
3910  offsetAdjustment: 0
3911  maxAlignment:    0
3912  adjustsStack:    false
3913  hasCalls:        false
3914  stackProtector:  ''
3915  maxCallFrameSize: 4294967295
3916  hasOpaqueSPAdjustment: false
3917  hasVAStart:      false
3918  hasMustTailInVarArgFunc: false
3919  savePoint:       ''
3920  restorePoint:    ''
3921fixedStack:
3922stack:
3923constants:
3924body:             |
3925  bb.0.entry:
3926    liveins: $x3, $x4
3927
3928    %1 = COPY $x4
3929    %0 = LI8 -1
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
3936    $x3 = COPY %4
3937    BLR8 implicit $lr8, implicit $rm, implicit $x3
3938
3939...
3940---
3941name:            testRLDICLo2
3942# CHECK-ALL: name: testRLDICLo2
3943alignment:       4
3944exposesReturnsTwice: false
3945legalized:       false
3946regBankSelected: false
3947selected:        false
3948tracksRegLiveness: true
3949registers:
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: '' }
3955liveins:
3956  - { reg: '$x3', virtual-reg: '%0' }
3957  - { reg: '$x4', virtual-reg: '%1' }
3958frameInfo:
3959  isFrameAddressTaken: false
3960  isReturnAddressTaken: false
3961  hasStackMap:     false
3962  hasPatchPoint:   false
3963  stackSize:       0
3964  offsetAdjustment: 0
3965  maxAlignment:    0
3966  adjustsStack:    false
3967  hasCalls:        false
3968  stackProtector:  ''
3969  maxCallFrameSize: 4294967295
3970  hasOpaqueSPAdjustment: false
3971  hasVAStart:      false
3972  hasMustTailInVarArgFunc: false
3973  savePoint:       ''
3974  restorePoint:    ''
3975fixedStack:
3976stack:
3977constants:
3978body:             |
3979  bb.0.entry:
3980    liveins: $x3, $x4
3981
3982    %1 = COPY $x4
3983    %0 = LI8 200
3984    %2 = RLDICLo %0, 61, 3, implicit-def $cr0
3985    ; CHECK: LI8 25
3986    ; CHECK: ANDIo8 %0, 25
3987    ; CHECK-LATE-NOT: andi.
3988    %3 = COPY killed $cr0
3989    %4 = ISEL8 %1, %2, %3.sub_eq
3990    $x3 = COPY %4
3991    BLR8 implicit $lr8, implicit $rm, implicit $x3
3992
3993...
3994---
3995name:            testRLDICLo3
3996# CHECK-ALL: name: testRLDICLo3
3997alignment:       4
3998exposesReturnsTwice: false
3999legalized:       false
4000regBankSelected: false
4001selected:        false
4002tracksRegLiveness: true
4003registers:
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: '' }
4009liveins:
4010  - { reg: '$x3', virtual-reg: '%0' }
4011  - { reg: '$x4', virtual-reg: '%1' }
4012frameInfo:
4013  isFrameAddressTaken: false
4014  isReturnAddressTaken: false
4015  hasStackMap:     false
4016  hasPatchPoint:   false
4017  stackSize:       0
4018  offsetAdjustment: 0
4019  maxAlignment:    0
4020  adjustsStack:    false
4021  hasCalls:        false
4022  stackProtector:  ''
4023  maxCallFrameSize: 4294967295
4024  hasOpaqueSPAdjustment: false
4025  hasVAStart:      false
4026  hasMustTailInVarArgFunc: false
4027  savePoint:       ''
4028  restorePoint:    ''
4029fixedStack:
4030stack:
4031constants:
4032body:             |
4033  bb.0.entry:
4034    liveins: $x3, $x4
4035
4036    %1 = COPY $x4
4037    %0 = LI8 2
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
4044    $x3 = COPY %4
4045    BLR8 implicit $lr8, implicit $rm, implicit $x3
4046
4047...
4048---
4049name:            testRLWINM
4050# CHECK-ALL: name: testRLWINM
4051alignment:       4
4052exposesReturnsTwice: false
4053legalized:       false
4054regBankSelected: false
4055selected:        false
4056tracksRegLiveness: true
4057registers:
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: '' }
4063liveins:
4064  - { reg: '$x3', virtual-reg: '%0' }
4065frameInfo:
4066  isFrameAddressTaken: false
4067  isReturnAddressTaken: false
4068  hasStackMap:     false
4069  hasPatchPoint:   false
4070  stackSize:       0
4071  offsetAdjustment: 0
4072  maxAlignment:    0
4073  adjustsStack:    false
4074  hasCalls:        false
4075  stackProtector:  ''
4076  maxCallFrameSize: 4294967295
4077  hasOpaqueSPAdjustment: false
4078  hasVAStart:      false
4079  hasMustTailInVarArgFunc: false
4080  savePoint:       ''
4081  restorePoint:    ''
4082fixedStack:
4083stack:
4084constants:
4085body:             |
4086  bb.0.entry:
4087    liveins: $x3
4088
4089    %0 = COPY $x3
4090    %1 = COPY %0.sub_32
4091    %3 = IMPLICIT_DEF
4092    %2 = LI 17
4093    %4 = RLWINM killed %2, 4, 20, 27
4094    ; CHECK: LI 272
4095    ; CHECK-LATE: li 3, 272
4096    $x3 = EXTSW_32_64 %4
4097    BLR8 implicit $lr8, implicit $rm, implicit $x3
4098
4099...
4100---
4101name:            testRLWINMFullReg
4102# CHECK-ALL: name: testRLWINMFullReg
4103alignment:       4
4104exposesReturnsTwice: false
4105legalized:       false
4106regBankSelected: false
4107selected:        false
4108tracksRegLiveness: true
4109registers:
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: '' }
4115liveins:
4116  - { reg: '$x3', virtual-reg: '%0' }
4117frameInfo:
4118  isFrameAddressTaken: false
4119  isReturnAddressTaken: false
4120  hasStackMap:     false
4121  hasPatchPoint:   false
4122  stackSize:       0
4123  offsetAdjustment: 0
4124  maxAlignment:    0
4125  adjustsStack:    false
4126  hasCalls:        false
4127  stackProtector:  ''
4128  maxCallFrameSize: 4294967295
4129  hasOpaqueSPAdjustment: false
4130  hasVAStart:      false
4131  hasMustTailInVarArgFunc: false
4132  savePoint:       ''
4133  restorePoint:    ''
4134fixedStack:
4135stack:
4136constants:
4137body:             |
4138  bb.0.entry:
4139    liveins: $x3
4140
4141    %0 = COPY $x3
4142    %1 = COPY %0.sub_32
4143    %3 = IMPLICIT_DEF
4144    %2 = LI 2
4145    %4 = RLWINM killed %2, 31, 0, 31
4146    ; CHECK: LI 1
4147    ; CHECK-LATE: li 3, 1
4148    $x3 = EXTSW_32_64 %4
4149    BLR8 implicit $lr8, implicit $rm, implicit $x3
4150
4151...
4152---
4153name:            testRLWINMFullRegOutOfRange
4154# CHECK-ALL: name: testRLWINMFullRegOutOfRange
4155alignment:       4
4156exposesReturnsTwice: false
4157legalized:       false
4158regBankSelected: false
4159selected:        false
4160tracksRegLiveness: true
4161registers:
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: '' }
4167liveins:
4168  - { reg: '$x3', virtual-reg: '%0' }
4169frameInfo:
4170  isFrameAddressTaken: false
4171  isReturnAddressTaken: false
4172  hasStackMap:     false
4173  hasPatchPoint:   false
4174  stackSize:       0
4175  offsetAdjustment: 0
4176  maxAlignment:    0
4177  adjustsStack:    false
4178  hasCalls:        false
4179  stackProtector:  ''
4180  maxCallFrameSize: 4294967295
4181  hasOpaqueSPAdjustment: false
4182  hasVAStart:      false
4183  hasMustTailInVarArgFunc: false
4184  savePoint:       ''
4185  restorePoint:    ''
4186fixedStack:
4187stack:
4188constants:
4189body:             |
4190  bb.0.entry:
4191    liveins: $x3
4192
4193    %0 = COPY $x3
4194    %1 = COPY %0.sub_32
4195    %3 = IMPLICIT_DEF
4196    %2 = LI 1
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
4202
4203...
4204---
4205name:            testRLWINM8
4206# CHECK-ALL: name: testRLWINM8
4207alignment:       4
4208exposesReturnsTwice: false
4209legalized:       false
4210regBankSelected: false
4211selected:        false
4212tracksRegLiveness: true
4213registers:
4214  - { id: 0, class: g8rc, preferred-register: '' }
4215  - { id: 1, class: g8rc, preferred-register: '' }
4216liveins:
4217  - { reg: '$x3', virtual-reg: '%0' }
4218frameInfo:
4219  isFrameAddressTaken: false
4220  isReturnAddressTaken: false
4221  hasStackMap:     false
4222  hasPatchPoint:   false
4223  stackSize:       0
4224  offsetAdjustment: 0
4225  maxAlignment:    0
4226  adjustsStack:    false
4227  hasCalls:        false
4228  stackProtector:  ''
4229  maxCallFrameSize: 4294967295
4230  hasOpaqueSPAdjustment: false
4231  hasVAStart:      false
4232  hasMustTailInVarArgFunc: false
4233  savePoint:       ''
4234  restorePoint:    ''
4235fixedStack:
4236stack:
4237constants:
4238body:             |
4239  bb.0.entry:
4240    liveins: $x3
4241
4242    %0 = LI8 234
4243    %1 = RLWINM8 %0, 4, 20, 27
4244    ; CHECK: LI8 3744
4245    ; CHECK-LATE: li 3, 3744
4246    $x3 = COPY %1
4247    BLR8 implicit $lr8, implicit $rm, implicit $x3
4248
4249...
4250---
4251name:            testRLWINMo
4252# CHECK-ALL: name: testRLWINMo
4253alignment:       4
4254exposesReturnsTwice: false
4255legalized:       false
4256regBankSelected: false
4257selected:        false
4258tracksRegLiveness: true
4259registers:
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: '' }
4270liveins:
4271  - { reg: '$x3', virtual-reg: '%0' }
4272  - { reg: '$x4', virtual-reg: '%1' }
4273frameInfo:
4274  isFrameAddressTaken: false
4275  isReturnAddressTaken: false
4276  hasStackMap:     false
4277  hasPatchPoint:   false
4278  stackSize:       0
4279  offsetAdjustment: 0
4280  maxAlignment:    0
4281  adjustsStack:    false
4282  hasCalls:        false
4283  stackProtector:  ''
4284  maxCallFrameSize: 4294967295
4285  hasOpaqueSPAdjustment: false
4286  hasVAStart:      false
4287  hasMustTailInVarArgFunc: false
4288  savePoint:       ''
4289  restorePoint:    ''
4290fixedStack:
4291stack:
4292constants:
4293body:             |
4294  bb.0.entry:
4295    liveins: $x3, $x4
4296
4297    %1 = COPY $x4
4298    %0 = COPY $x3
4299    %2 = COPY %1.sub_32
4300    %3 = LI -22
4301    %4 = RLWINMo %3, 0, 24, 31, implicit-def $cr0
4302    ; CHECK: LI -22
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
4308    %8 = IMPLICIT_DEF
4309    %7 = INSERT_SUBREG %8, killed %6, 1
4310    %9 = RLDICL killed %7, 0, 32
4311    $x3 = COPY %9
4312    BLR8 implicit $lr8, implicit $rm, implicit $x3
4313
4314...
4315---
4316name:            testRLWINMo2
4317# CHECK-ALL: name: testRLWINMo2
4318alignment:       4
4319exposesReturnsTwice: false
4320legalized:       false
4321regBankSelected: false
4322selected:        false
4323tracksRegLiveness: true
4324registers:
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: '' }
4335liveins:
4336  - { reg: '$x3', virtual-reg: '%0' }
4337  - { reg: '$x4', virtual-reg: '%1' }
4338frameInfo:
4339  isFrameAddressTaken: false
4340  isReturnAddressTaken: false
4341  hasStackMap:     false
4342  hasPatchPoint:   false
4343  stackSize:       0
4344  offsetAdjustment: 0
4345  maxAlignment:    0
4346  adjustsStack:    false
4347  hasCalls:        false
4348  stackProtector:  ''
4349  maxCallFrameSize: 4294967295
4350  hasOpaqueSPAdjustment: false
4351  hasVAStart:      false
4352  hasMustTailInVarArgFunc: false
4353  savePoint:       ''
4354  restorePoint:    ''
4355fixedStack:
4356stack:
4357constants:
4358body:             |
4359  bb.0.entry:
4360    liveins: $x3, $x4
4361
4362    %1 = COPY $x4
4363    %0 = COPY $x3
4364    %2 = COPY %1.sub_32
4365    %3 = LI -22
4366    %4 = RLWINMo %3, 5, 24, 31, implicit-def $cr0
4367    ; CHECK: LI -22
4368    ; CHECK-NOT: ANDIo8 %3, 65514
4369    ; CHECK-LATE-NOT: andi.
4370    %5 = COPY killed $cr0
4371    %6 = ISEL %2, %3, %5.sub_eq
4372    %8 = IMPLICIT_DEF
4373    %7 = INSERT_SUBREG %8, killed %6, 1
4374    %9 = RLDICL killed %7, 0, 32
4375    $x3 = COPY %9
4376    BLR8 implicit $lr8, implicit $rm, implicit $x3
4377
4378...
4379---
4380name:            testRLWINM8o
4381# CHECK-ALL: name: testRLWINM8o
4382alignment:       4
4383exposesReturnsTwice: false
4384legalized:       false
4385regBankSelected: false
4386selected:        false
4387tracksRegLiveness: true
4388registers:
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: '' }
4398liveins:
4399  - { reg: '$x3', virtual-reg: '%0' }
4400  - { reg: '$x4', virtual-reg: '%1' }
4401frameInfo:
4402  isFrameAddressTaken: false
4403  isReturnAddressTaken: false
4404  hasStackMap:     false
4405  hasPatchPoint:   false
4406  stackSize:       0
4407  offsetAdjustment: 0
4408  maxAlignment:    0
4409  adjustsStack:    false
4410  hasCalls:        false
4411  stackProtector:  ''
4412  maxCallFrameSize: 4294967295
4413  hasOpaqueSPAdjustment: false
4414  hasVAStart:      false
4415  hasMustTailInVarArgFunc: false
4416  savePoint:       ''
4417  restorePoint:    ''
4418fixedStack:
4419stack:
4420constants:
4421body:             |
4422  bb.0.entry:
4423    liveins: $x3, $x4
4424
4425    %1 = COPY $x4
4426    %0 = COPY $x3
4427    %2 = LI8 -18
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
4435    $x3 = COPY %8
4436    BLR8 implicit $lr8, implicit $rm, implicit $x3
4437
4438...
4439---
4440name:            testSLD
4441# CHECK-ALL: name: testSLD
4442alignment:       4
4443exposesReturnsTwice: false
4444legalized:       false
4445regBankSelected: false
4446selected:        false
4447tracksRegLiveness: true
4448registers:
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: '' }
4453liveins:
4454  - { reg: '$x3', virtual-reg: '%0' }
4455  - { reg: '$x4', virtual-reg: '%1' }
4456frameInfo:
4457  isFrameAddressTaken: false
4458  isReturnAddressTaken: false
4459  hasStackMap:     false
4460  hasPatchPoint:   false
4461  stackSize:       0
4462  offsetAdjustment: 0
4463  maxAlignment:    0
4464  adjustsStack:    false
4465  hasCalls:        false
4466  stackProtector:  ''
4467  maxCallFrameSize: 4294967295
4468  hasOpaqueSPAdjustment: false
4469  hasVAStart:      false
4470  hasMustTailInVarArgFunc: false
4471  savePoint:       ''
4472  restorePoint:    ''
4473fixedStack:
4474stack:
4475constants:
4476body:             |
4477  bb.0.entry:
4478    liveins: $x3, $x4
4479
4480    %1 = COPY $x4
4481    %0 = COPY $x3
4482    %2 = LI 13
4483    %3 = SLD %0, killed %2
4484    ; CHECK: RLDICR %0, 13, 50
4485    ; CHECK-LATE: sldi 3, 3, 13
4486    $x3 = COPY %3
4487    BLR8 implicit $lr8, implicit $rm, implicit $x3
4488
4489...
4490---
4491name:            testSLDo
4492# CHECK-ALL: name: testSLDo
4493alignment:       4
4494exposesReturnsTwice: false
4495legalized:       false
4496regBankSelected: false
4497selected:        false
4498tracksRegLiveness: true
4499registers:
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: '' }
4506liveins:
4507  - { reg: '$x3', virtual-reg: '%0' }
4508  - { reg: '$x4', virtual-reg: '%1' }
4509frameInfo:
4510  isFrameAddressTaken: false
4511  isReturnAddressTaken: false
4512  hasStackMap:     false
4513  hasPatchPoint:   false
4514  stackSize:       0
4515  offsetAdjustment: 0
4516  maxAlignment:    0
4517  adjustsStack:    false
4518  hasCalls:        false
4519  stackProtector:  ''
4520  maxCallFrameSize: 4294967295
4521  hasOpaqueSPAdjustment: false
4522  hasVAStart:      false
4523  hasMustTailInVarArgFunc: false
4524  savePoint:       ''
4525  restorePoint:    ''
4526fixedStack:
4527stack:
4528constants:
4529body:             |
4530  bb.0.entry:
4531    liveins: $x3, $x4
4532
4533    %1 = COPY $x4
4534    %0 = COPY $x3
4535    %2 = LI 17
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
4541    $x3 = COPY %5
4542    BLR8 implicit $lr8, implicit $rm, implicit $x3
4543
4544...
4545---
4546name:            testSRD
4547# CHECK-ALL: name: testSRD
4548alignment:       4
4549exposesReturnsTwice: false
4550legalized:       false
4551regBankSelected: false
4552selected:        false
4553tracksRegLiveness: true
4554registers:
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: '' }
4559liveins:
4560  - { reg: '$x3', virtual-reg: '%0' }
4561  - { reg: '$x4', virtual-reg: '%1' }
4562frameInfo:
4563  isFrameAddressTaken: false
4564  isReturnAddressTaken: false
4565  hasStackMap:     false
4566  hasPatchPoint:   false
4567  stackSize:       0
4568  offsetAdjustment: 0
4569  maxAlignment:    0
4570  adjustsStack:    false
4571  hasCalls:        false
4572  stackProtector:  ''
4573  maxCallFrameSize: 4294967295
4574  hasOpaqueSPAdjustment: false
4575  hasVAStart:      false
4576  hasMustTailInVarArgFunc: false
4577  savePoint:       ''
4578  restorePoint:    ''
4579fixedStack:
4580stack:
4581constants:
4582body:             |
4583  bb.0.entry:
4584    liveins: $x3, $x4
4585
4586    %1 = COPY $x4
4587    %0 = COPY $x3
4588    %2 = LI 4
4589    %3 = SRD %0, killed %2
4590    ; CHECK: RLDICL %0, 60, 4
4591    ; CHECK-LATE: rldicl 3, 3, 60, 4
4592    $x3 = COPY %3
4593    BLR8 implicit $lr8, implicit $rm, implicit $x3
4594
4595...
4596---
4597name:            testSRDo
4598# CHECK-ALL: name: testSRDo
4599alignment:       4
4600exposesReturnsTwice: false
4601legalized:       false
4602regBankSelected: false
4603selected:        false
4604tracksRegLiveness: true
4605registers:
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: '' }
4612liveins:
4613  - { reg: '$x3', virtual-reg: '%0' }
4614  - { reg: '$x4', virtual-reg: '%1' }
4615frameInfo:
4616  isFrameAddressTaken: false
4617  isReturnAddressTaken: false
4618  hasStackMap:     false
4619  hasPatchPoint:   false
4620  stackSize:       0
4621  offsetAdjustment: 0
4622  maxAlignment:    0
4623  adjustsStack:    false
4624  hasCalls:        false
4625  stackProtector:  ''
4626  maxCallFrameSize: 4294967295
4627  hasOpaqueSPAdjustment: false
4628  hasVAStart:      false
4629  hasMustTailInVarArgFunc: false
4630  savePoint:       ''
4631  restorePoint:    ''
4632fixedStack:
4633stack:
4634constants:
4635body:             |
4636  bb.0.entry:
4637    liveins: $x3, $x4
4638
4639    %1 = COPY $x4
4640    %0 = COPY $x3
4641    %2 = LI 17
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
4647    $x3 = COPY %5
4648    BLR8 implicit $lr8, implicit $rm, implicit $x3
4649
4650...
4651---
4652name:            testSLW
4653# CHECK-ALL: name: testSLW
4654alignment:       4
4655exposesReturnsTwice: false
4656legalized:       false
4657regBankSelected: false
4658selected:        false
4659tracksRegLiveness: true
4660registers:
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: '' }
4670liveins:
4671  - { reg: '$x3', virtual-reg: '%0' }
4672  - { reg: '$x4', virtual-reg: '%1' }
4673frameInfo:
4674  isFrameAddressTaken: false
4675  isReturnAddressTaken: false
4676  hasStackMap:     false
4677  hasPatchPoint:   false
4678  stackSize:       0
4679  offsetAdjustment: 0
4680  maxAlignment:    0
4681  adjustsStack:    false
4682  hasCalls:        false
4683  stackProtector:  ''
4684  maxCallFrameSize: 4294967295
4685  hasOpaqueSPAdjustment: false
4686  hasVAStart:      false
4687  hasMustTailInVarArgFunc: false
4688  savePoint:       ''
4689  restorePoint:    ''
4690fixedStack:
4691stack:
4692constants:
4693body:             |
4694  bb.0.entry:
4695    liveins: $x3, $x4
4696
4697    %1 = COPY $x4
4698    %0 = COPY $x3
4699    %2 = COPY %1.sub_32
4700    %5 = LI 21
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
4706
4707...
4708---
4709name:            testSLWo
4710# CHECK-ALL: name: testSLWo
4711alignment:       4
4712exposesReturnsTwice: false
4713legalized:       false
4714regBankSelected: false
4715selected:        false
4716tracksRegLiveness: true
4717registers:
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: '' }
4728liveins:
4729  - { reg: '$x3', virtual-reg: '%0' }
4730  - { reg: '$x4', virtual-reg: '%1' }
4731frameInfo:
4732  isFrameAddressTaken: false
4733  isReturnAddressTaken: false
4734  hasStackMap:     false
4735  hasPatchPoint:   false
4736  stackSize:       0
4737  offsetAdjustment: 0
4738  maxAlignment:    0
4739  adjustsStack:    false
4740  hasCalls:        false
4741  stackProtector:  ''
4742  maxCallFrameSize: 4294967295
4743  hasOpaqueSPAdjustment: false
4744  hasVAStart:      false
4745  hasMustTailInVarArgFunc: false
4746  savePoint:       ''
4747  restorePoint:    ''
4748fixedStack:
4749stack:
4750constants:
4751body:             |
4752  bb.0.entry:
4753    liveins: $x3, $x4
4754
4755    %1 = COPY $x4
4756    %0 = COPY $x3
4757    %2 = LI 11
4758    %3 = COPY %0.sub_32
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
4764    %8 = IMPLICIT_DEF
4765    %7 = INSERT_SUBREG %8, killed %6, 1
4766    %9 = RLDICL killed %7, 0, 32
4767    $x3 = COPY %9
4768    BLR8 implicit $lr8, implicit $rm, implicit $x3
4769
4770...
4771---
4772name:            testSRW
4773# CHECK-ALL: name: testSRW
4774alignment:       4
4775exposesReturnsTwice: false
4776legalized:       false
4777regBankSelected: false
4778selected:        false
4779tracksRegLiveness: true
4780registers:
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: '' }
4790liveins:
4791  - { reg: '$x3', virtual-reg: '%0' }
4792  - { reg: '$x4', virtual-reg: '%1' }
4793frameInfo:
4794  isFrameAddressTaken: false
4795  isReturnAddressTaken: false
4796  hasStackMap:     false
4797  hasPatchPoint:   false
4798  stackSize:       0
4799  offsetAdjustment: 0
4800  maxAlignment:    0
4801  adjustsStack:    false
4802  hasCalls:        false
4803  stackProtector:  ''
4804  maxCallFrameSize: 4294967295
4805  hasOpaqueSPAdjustment: false
4806  hasVAStart:      false
4807  hasMustTailInVarArgFunc: false
4808  savePoint:       ''
4809  restorePoint:    ''
4810fixedStack:
4811stack:
4812constants:
4813body:             |
4814  bb.0.entry:
4815    liveins: $x3, $x4
4816
4817    %1 = COPY $x4
4818    %0 = COPY $x3
4819    %2 = LI 8
4820    %5 = COPY %0.sub_32
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
4826
4827...
4828---
4829name:            testSRWo
4830# CHECK-ALL: name: testSRWo
4831alignment:       4
4832exposesReturnsTwice: false
4833legalized:       false
4834regBankSelected: false
4835selected:        false
4836tracksRegLiveness: true
4837registers:
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: '' }
4848liveins:
4849  - { reg: '$x3', virtual-reg: '%0' }
4850  - { reg: '$x4', virtual-reg: '%1' }
4851frameInfo:
4852  isFrameAddressTaken: false
4853  isReturnAddressTaken: false
4854  hasStackMap:     false
4855  hasPatchPoint:   false
4856  stackSize:       0
4857  offsetAdjustment: 0
4858  maxAlignment:    0
4859  adjustsStack:    false
4860  hasCalls:        false
4861  stackProtector:  ''
4862  maxCallFrameSize: 4294967295
4863  hasOpaqueSPAdjustment: false
4864  hasVAStart:      false
4865  hasMustTailInVarArgFunc: false
4866  savePoint:       ''
4867  restorePoint:    ''
4868fixedStack:
4869stack:
4870constants:
4871body:             |
4872  bb.0.entry:
4873    liveins: $x3, $x4
4874
4875    %1 = COPY $x4
4876    %0 = COPY $x3
4877    %2 = LI 7
4878    %3 = COPY %0.sub_32
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
4884    %8 = IMPLICIT_DEF
4885    %7 = INSERT_SUBREG %8, killed %6, 1
4886    %9 = RLDICL killed %7, 0, 32
4887    $x3 = COPY %9
4888    BLR8 implicit $lr8, implicit $rm, implicit $x3
4889
4890...
4891---
4892name:            testSRAW
4893# CHECK-ALL: name: testSRAW
4894alignment:       4
4895exposesReturnsTwice: false
4896legalized:       false
4897regBankSelected: false
4898selected:        false
4899tracksRegLiveness: true
4900registers:
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: '' }
4907liveins:
4908  - { reg: '$x3', virtual-reg: '%0' }
4909  - { reg: '$x4', virtual-reg: '%1' }
4910frameInfo:
4911  isFrameAddressTaken: false
4912  isReturnAddressTaken: false
4913  hasStackMap:     false
4914  hasPatchPoint:   false
4915  stackSize:       0
4916  offsetAdjustment: 0
4917  maxAlignment:    0
4918  adjustsStack:    false
4919  hasCalls:        false
4920  stackProtector:  ''
4921  maxCallFrameSize: 4294967295
4922  hasOpaqueSPAdjustment: false
4923  hasVAStart:      false
4924  hasMustTailInVarArgFunc: false
4925  savePoint:       ''
4926  restorePoint:    ''
4927fixedStack:
4928stack:
4929constants:
4930body:             |
4931  bb.0.entry:
4932    liveins: $x3, $x4
4933
4934    %1 = COPY $x4
4935    %0 = COPY $x3
4936    %2 = LI 15
4937    %3 = COPY %0.sub_32
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
4942    $x3 = COPY %5
4943    BLR8 implicit $lr8, implicit $rm, implicit $x3
4944
4945...
4946---
4947name:            testSRAWo
4948# CHECK-ALL: name: testSRAWo
4949alignment:       4
4950exposesReturnsTwice: false
4951legalized:       false
4952regBankSelected: false
4953selected:        false
4954tracksRegLiveness: true
4955registers:
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: '' }
4964liveins:
4965  - { reg: '$x3', virtual-reg: '%0' }
4966  - { reg: '$x4', virtual-reg: '%1' }
4967frameInfo:
4968  isFrameAddressTaken: false
4969  isReturnAddressTaken: false
4970  hasStackMap:     false
4971  hasPatchPoint:   false
4972  stackSize:       0
4973  offsetAdjustment: 0
4974  maxAlignment:    0
4975  adjustsStack:    false
4976  hasCalls:        false
4977  stackProtector:  ''
4978  maxCallFrameSize: 4294967295
4979  hasOpaqueSPAdjustment: false
4980  hasVAStart:      false
4981  hasMustTailInVarArgFunc: false
4982  savePoint:       ''
4983  restorePoint:    ''
4984fixedStack:
4985stack:
4986constants:
4987body:             |
4988  bb.0.entry:
4989    liveins: $x3, $x4
4990
4991    %1 = COPY $x4
4992    %0 = COPY $x3
4993    %2 = LI 8
4994    %3 = COPY %0.sub_32
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
5001    $x3 = COPY %7
5002    BLR8 implicit $lr8, implicit $rm, implicit $x3
5003
5004...
5005---
5006name:            testSRAD
5007# CHECK-ALL: name: testSRAD
5008alignment:       4
5009exposesReturnsTwice: false
5010legalized:       false
5011regBankSelected: false
5012selected:        false
5013tracksRegLiveness: true
5014registers:
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: '' }
5019liveins:
5020  - { reg: '$x3', virtual-reg: '%0' }
5021  - { reg: '$x4', virtual-reg: '%1' }
5022frameInfo:
5023  isFrameAddressTaken: false
5024  isReturnAddressTaken: false
5025  hasStackMap:     false
5026  hasPatchPoint:   false
5027  stackSize:       0
5028  offsetAdjustment: 0
5029  maxAlignment:    0
5030  adjustsStack:    false
5031  hasCalls:        false
5032  stackProtector:  ''
5033  maxCallFrameSize: 4294967295
5034  hasOpaqueSPAdjustment: false
5035  hasVAStart:      false
5036  hasMustTailInVarArgFunc: false
5037  savePoint:       ''
5038  restorePoint:    ''
5039fixedStack:
5040stack:
5041constants:
5042body:             |
5043  bb.0.entry:
5044    liveins: $x3, $x4
5045
5046    %1 = COPY $x4
5047    %0 = COPY $x3
5048    %2 = LI 44
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
5052    $x3 = COPY %3
5053    BLR8 implicit $lr8, implicit $rm, implicit $x3
5054
5055...
5056---
5057name:            testSRADo
5058# CHECK-ALL: name: testSRADo
5059alignment:       4
5060exposesReturnsTwice: false
5061legalized:       false
5062regBankSelected: false
5063selected:        false
5064tracksRegLiveness: true
5065registers:
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: '' }
5072liveins:
5073  - { reg: '$x3', virtual-reg: '%0' }
5074  - { reg: '$x4', virtual-reg: '%1' }
5075frameInfo:
5076  isFrameAddressTaken: false
5077  isReturnAddressTaken: false
5078  hasStackMap:     false
5079  hasPatchPoint:   false
5080  stackSize:       0
5081  offsetAdjustment: 0
5082  maxAlignment:    0
5083  adjustsStack:    false
5084  hasCalls:        false
5085  stackProtector:  ''
5086  maxCallFrameSize: 4294967295
5087  hasOpaqueSPAdjustment: false
5088  hasVAStart:      false
5089  hasMustTailInVarArgFunc: false
5090  savePoint:       ''
5091  restorePoint:    ''
5092fixedStack:
5093stack:
5094constants:
5095body:             |
5096  bb.0.entry:
5097    liveins: $x3, $x4
5098
5099    %1 = COPY $x4
5100    %0 = COPY $x3
5101    %2 = LI 61
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
5107    $x3 = COPY %5
5108    BLR8 implicit $lr8, implicit $rm, implicit $x3
5109
5110...
5111---
5112name:            testSTBUX
5113# CHECK-ALL: name: testSTBUX
5114alignment:       4
5115exposesReturnsTwice: false
5116legalized:       false
5117regBankSelected: false
5118selected:        false
5119tracksRegLiveness: true
5120registers:
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: '' }
5136liveins:
5137  - { reg: '$x3', virtual-reg: '%0' }
5138  - { reg: '$x4', virtual-reg: '%1' }
5139  - { reg: '$x5', virtual-reg: '%2' }
5140frameInfo:
5141  isFrameAddressTaken: false
5142  isReturnAddressTaken: false
5143  hasStackMap:     false
5144  hasPatchPoint:   false
5145  stackSize:       0
5146  offsetAdjustment: 0
5147  maxAlignment:    0
5148  adjustsStack:    false
5149  hasCalls:        false
5150  stackProtector:  ''
5151  maxCallFrameSize: 4294967295
5152  hasOpaqueSPAdjustment: false
5153  hasVAStart:      false
5154  hasMustTailInVarArgFunc: false
5155  savePoint:       ''
5156  restorePoint:    ''
5157fixedStack:
5158stack:
5159constants:
5160body:             |
5161  bb.0.entry:
5162    liveins: $x3, $x4, $x5
5163
5164    %2 = COPY $x5
5165    %1 = COPY $x4
5166    %0 = COPY $x3
5167    %3 = COPY %1.sub_32
5168    %4 = COPY %2.sub_32
5169    %5 = ADDI %4, 1
5170    %7 = IMPLICIT_DEF
5171    %6 = INSERT_SUBREG %7, killed %5, 1
5172    %8 = LI8 966
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]+}})
5176    %9 = ADDI %4, 2
5177    %11 = IMPLICIT_DEF
5178    %10 = INSERT_SUBREG %11, killed %9, 1
5179    %12 = LI8 777
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
5184
5185...
5186---
5187name:            testSTBX
5188# CHECK-ALL: name: testSTBX
5189alignment:       4
5190exposesReturnsTwice: false
5191legalized:       false
5192regBankSelected: false
5193selected:        false
5194tracksRegLiveness: true
5195registers:
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: '' }
5209liveins:
5210  - { reg: '$x3', virtual-reg: '%0' }
5211  - { reg: '$x4', virtual-reg: '%1' }
5212  - { reg: '$x5', virtual-reg: '%2' }
5213frameInfo:
5214  isFrameAddressTaken: false
5215  isReturnAddressTaken: false
5216  hasStackMap:     false
5217  hasPatchPoint:   false
5218  stackSize:       0
5219  offsetAdjustment: 0
5220  maxAlignment:    0
5221  adjustsStack:    false
5222  hasCalls:        false
5223  stackProtector:  ''
5224  maxCallFrameSize: 4294967295
5225  hasOpaqueSPAdjustment: false
5226  hasVAStart:      false
5227  hasMustTailInVarArgFunc: false
5228  savePoint:       ''
5229  restorePoint:    ''
5230fixedStack:
5231stack:
5232constants:
5233body:             |
5234  bb.0.entry:
5235    liveins: $x3, $x4, $x5
5236
5237    %2 = COPY $x5
5238    %1 = COPY $x4
5239    %0 = LI8 975
5240    %3 = COPY %1.sub_32
5241    %4 = COPY %2.sub_32
5242    %5 = ADDI %4, 1
5243    %7 = IMPLICIT_DEF
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)
5249    %9 = ADDI %4, 2
5250    %11 = IMPLICIT_DEF
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
5257
5258...
5259---
5260name:            testSTHUX
5261# CHECK-ALL: name: testSTHUX
5262alignment:       4
5263exposesReturnsTwice: false
5264legalized:       false
5265regBankSelected: false
5266selected:        false
5267tracksRegLiveness: true
5268registers:
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: '' }
5284liveins:
5285  - { reg: '$x3', virtual-reg: '%0' }
5286  - { reg: '$x4', virtual-reg: '%1' }
5287  - { reg: '$x5', virtual-reg: '%2' }
5288frameInfo:
5289  isFrameAddressTaken: false
5290  isReturnAddressTaken: false
5291  hasStackMap:     false
5292  hasPatchPoint:   false
5293  stackSize:       0
5294  offsetAdjustment: 0
5295  maxAlignment:    0
5296  adjustsStack:    false
5297  hasCalls:        false
5298  stackProtector:  ''
5299  maxCallFrameSize: 4294967295
5300  hasOpaqueSPAdjustment: false
5301  hasVAStart:      false
5302  hasMustTailInVarArgFunc: false
5303  savePoint:       ''
5304  restorePoint:    ''
5305fixedStack:
5306stack:
5307constants:
5308body:             |
5309  bb.0.entry:
5310    liveins: $x3, $x4, $x5
5311
5312    %2 = COPY $x5
5313    %1 = COPY $x4
5314    %0 = COPY $x3
5315    %3 = COPY %1.sub_32
5316    %4 = COPY %2.sub_32
5317    %5 = ADDI %4, 1
5318    %7 = IMPLICIT_DEF
5319    %6 = INSERT_SUBREG %7, killed %5, 1
5320    %8 = LI8 32000
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]+}})
5324    %9 = ADDI %4, 2
5325    %11 = IMPLICIT_DEF
5326    %10 = INSERT_SUBREG %11, killed %9, 1
5327    %12 = LI8 -761
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
5332
5333...
5334---
5335name:            testSTHX
5336# CHECK-ALL: name: testSTHX
5337alignment:       4
5338exposesReturnsTwice: false
5339legalized:       false
5340regBankSelected: false
5341selected:        false
5342tracksRegLiveness: true
5343registers:
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: '' }
5357liveins:
5358  - { reg: '$x3', virtual-reg: '%0' }
5359  - { reg: '$x4', virtual-reg: '%1' }
5360  - { reg: '$x5', virtual-reg: '%2' }
5361frameInfo:
5362  isFrameAddressTaken: false
5363  isReturnAddressTaken: false
5364  hasStackMap:     false
5365  hasPatchPoint:   false
5366  stackSize:       0
5367  offsetAdjustment: 0
5368  maxAlignment:    0
5369  adjustsStack:    false
5370  hasCalls:        false
5371  stackProtector:  ''
5372  maxCallFrameSize: 4294967295
5373  hasOpaqueSPAdjustment: false
5374  hasVAStart:      false
5375  hasMustTailInVarArgFunc: false
5376  savePoint:       ''
5377  restorePoint:    ''
5378fixedStack:
5379stack:
5380constants:
5381body:             |
5382  bb.0.entry:
5383    liveins: $x3, $x4, $x5
5384
5385    %2 = COPY $x5
5386    %1 = COPY $x4
5387    %0 = COPY $x3
5388    %3 = COPY %1.sub_32
5389    %4 = COPY %2.sub_32
5390    %5 = ADDI %4, 1
5391    %7 = IMPLICIT_DEF
5392    %6 = INSERT_SUBREG %7, killed %5, 1
5393    %8 = LI8 900
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]+}})
5397    %9 = ADDI %4, 2
5398    %11 = IMPLICIT_DEF
5399    %10 = INSERT_SUBREG %11, killed %9, 1
5400    %12 = LI8 -900
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
5405
5406...
5407---
5408name:            testSTWUX
5409# CHECK-ALL: name: testSTWUX
5410alignment:       4
5411exposesReturnsTwice: false
5412legalized:       false
5413regBankSelected: false
5414selected:        false
5415tracksRegLiveness: true
5416registers:
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: '' }
5432liveins:
5433  - { reg: '$x3', virtual-reg: '%0' }
5434  - { reg: '$x4', virtual-reg: '%1' }
5435  - { reg: '$x5', virtual-reg: '%2' }
5436frameInfo:
5437  isFrameAddressTaken: false
5438  isReturnAddressTaken: false
5439  hasStackMap:     false
5440  hasPatchPoint:   false
5441  stackSize:       0
5442  offsetAdjustment: 0
5443  maxAlignment:    0
5444  adjustsStack:    false
5445  hasCalls:        false
5446  stackProtector:  ''
5447  maxCallFrameSize: 4294967295
5448  hasOpaqueSPAdjustment: false
5449  hasVAStart:      false
5450  hasMustTailInVarArgFunc: false
5451  savePoint:       ''
5452  restorePoint:    ''
5453fixedStack:
5454stack:
5455constants:
5456body:             |
5457  bb.0.entry:
5458    liveins: $x3, $x4, $x5
5459
5460    %2 = COPY $x5
5461    %1 = COPY $x4
5462    %0 = COPY $x3
5463    %3 = COPY %1.sub_32
5464    %4 = COPY %2.sub_32
5465    %5 = ADDI %4, 1
5466    %7 = IMPLICIT_DEF
5467    %6 = INSERT_SUBREG %7, killed %5, 1
5468    %8 = LI8 111
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]+}})
5472    %9 = ADDI %4, 2
5473    %11 = IMPLICIT_DEF
5474    %10 = INSERT_SUBREG %11, killed %9, 1
5475    %12 = LI8 0
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
5480
5481...
5482---
5483name:            testSTWX
5484# CHECK-ALL: name: testSTWX
5485alignment:       4
5486exposesReturnsTwice: false
5487legalized:       false
5488regBankSelected: false
5489selected:        false
5490tracksRegLiveness: true
5491registers:
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: '' }
5505liveins:
5506  - { reg: '$x3', virtual-reg: '%0' }
5507  - { reg: '$x4', virtual-reg: '%1' }
5508  - { reg: '$x5', virtual-reg: '%2' }
5509frameInfo:
5510  isFrameAddressTaken: false
5511  isReturnAddressTaken: false
5512  hasStackMap:     false
5513  hasPatchPoint:   false
5514  stackSize:       0
5515  offsetAdjustment: 0
5516  maxAlignment:    0
5517  adjustsStack:    false
5518  hasCalls:        false
5519  stackProtector:  ''
5520  maxCallFrameSize: 4294967295
5521  hasOpaqueSPAdjustment: false
5522  hasVAStart:      false
5523  hasMustTailInVarArgFunc: false
5524  savePoint:       ''
5525  restorePoint:    ''
5526fixedStack:
5527stack:
5528constants:
5529body:             |
5530  bb.0.entry:
5531    liveins: $x3, $x4, $x5
5532
5533    %2 = COPY $x5
5534    %1 = COPY $x4
5535    %0 = COPY $x3
5536    %3 = COPY %1.sub_32
5537    %4 = COPY %2.sub_32
5538    %5 = ADDI %4, 1
5539    %7 = IMPLICIT_DEF
5540    %6 = INSERT_SUBREG %7, killed %5, 1
5541    %8 = LI8 2
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)
5545    %9 = ADDI %4, 2
5546    %11 = IMPLICIT_DEF
5547    %10 = INSERT_SUBREG %11, killed %9, 1
5548    %12 = LI8 99
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
5553
5554...
5555---
5556name:            testSTDUX
5557# CHECK-ALL: name: testSTDUX
5558alignment:       4
5559exposesReturnsTwice: false
5560legalized:       false
5561regBankSelected: false
5562selected:        false
5563tracksRegLiveness: true
5564registers:
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: '' }
5579liveins:
5580  - { reg: '$x3', virtual-reg: '%0' }
5581  - { reg: '$x4', virtual-reg: '%1' }
5582  - { reg: '$x5', virtual-reg: '%2' }
5583frameInfo:
5584  isFrameAddressTaken: false
5585  isReturnAddressTaken: false
5586  hasStackMap:     false
5587  hasPatchPoint:   false
5588  stackSize:       0
5589  offsetAdjustment: 0
5590  maxAlignment:    0
5591  adjustsStack:    false
5592  hasCalls:        false
5593  stackProtector:  ''
5594  maxCallFrameSize: 4294967295
5595  hasOpaqueSPAdjustment: false
5596  hasVAStart:      false
5597  hasMustTailInVarArgFunc: false
5598  savePoint:       ''
5599  restorePoint:    ''
5600fixedStack:
5601stack:
5602constants:
5603body:             |
5604  bb.0.entry:
5605    liveins: $x3, $x4, $x5
5606
5607    %2 = COPY $x5
5608    %1 = COPY $x4
5609    %0 = COPY $x3
5610    %3 = COPY %2.sub_32
5611    %4 = ADDI %3, 1
5612    %6 = IMPLICIT_DEF
5613    %5 = INSERT_SUBREG %6, killed %4, 1
5614    %7 = LI8 444
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]+}})
5618    %8 = ADDI %3, 2
5619    %10 = IMPLICIT_DEF
5620    %9 = INSERT_SUBREG %10, killed %8, 1
5621    %11 = LI8 -8
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
5626
5627...
5628---
5629name:            testSTDX
5630# CHECK-ALL: name: testSTDX
5631alignment:       4
5632exposesReturnsTwice: false
5633legalized:       false
5634regBankSelected: false
5635selected:        false
5636tracksRegLiveness: true
5637registers:
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: '' }
5650liveins:
5651  - { reg: '$x3', virtual-reg: '%0' }
5652  - { reg: '$x4', virtual-reg: '%1' }
5653  - { reg: '$x5', virtual-reg: '%2' }
5654frameInfo:
5655  isFrameAddressTaken: false
5656  isReturnAddressTaken: false
5657  hasStackMap:     false
5658  hasPatchPoint:   false
5659  stackSize:       0
5660  offsetAdjustment: 0
5661  maxAlignment:    0
5662  adjustsStack:    false
5663  hasCalls:        false
5664  stackProtector:  ''
5665  maxCallFrameSize: 4294967295
5666  hasOpaqueSPAdjustment: false
5667  hasVAStart:      false
5668  hasMustTailInVarArgFunc: false
5669  savePoint:       ''
5670  restorePoint:    ''
5671fixedStack:
5672stack:
5673constants:
5674body:             |
5675  bb.0.entry:
5676    liveins: $x3, $x4, $x5
5677
5678    %2 = COPY $x5
5679    %1 = COPY $x4
5680    %0 = LI8 1000
5681    %3 = COPY %2.sub_32
5682    %4 = ADDI %3, 1
5683    %6 = IMPLICIT_DEF
5684    %5 = INSERT_SUBREG %6, killed %4, 1
5685    %7 = LI8 900
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]+}})
5689    %8 = ADDI %3, 2
5690    %10 = IMPLICIT_DEF
5691    %9 = INSERT_SUBREG %10, killed %8, 1
5692    %11 = LI8 -900
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
5697
5698...
5699---
5700name:            testSTFSX
5701# CHECK-ALL: name: testSTFSX
5702alignment:       4
5703exposesReturnsTwice: false
5704legalized:       false
5705regBankSelected: false
5706selected:        false
5707tracksRegLiveness: true
5708registers:
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: '' }
5721liveins:
5722  - { reg: '$x3', virtual-reg: '%0' }
5723  - { reg: '$f1', virtual-reg: '%1' }
5724  - { reg: '$x5', virtual-reg: '%2' }
5725frameInfo:
5726  isFrameAddressTaken: false
5727  isReturnAddressTaken: false
5728  hasStackMap:     false
5729  hasPatchPoint:   false
5730  stackSize:       0
5731  offsetAdjustment: 0
5732  maxAlignment:    0
5733  adjustsStack:    false
5734  hasCalls:        false
5735  stackProtector:  ''
5736  maxCallFrameSize: 4294967295
5737  hasOpaqueSPAdjustment: false
5738  hasVAStart:      false
5739  hasMustTailInVarArgFunc: false
5740  savePoint:       ''
5741  restorePoint:    ''
5742fixedStack:
5743stack:
5744constants:
5745body:             |
5746  bb.0.entry:
5747    liveins: $x3, $f1, $x5
5748
5749    %2 = COPY $x5
5750    %1 = COPY $f1
5751    %0 = COPY $x3
5752    %3 = COPY %2.sub_32
5753    %4 = ADDI %3, 1
5754    %6 = IMPLICIT_DEF
5755    %5 = INSERT_SUBREG %6, killed %4, 1
5756    %7 = LI8 400
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)
5760    %8 = ADDI %3, 2
5761    %10 = IMPLICIT_DEF
5762    %9 = INSERT_SUBREG %10, killed %8, 1
5763    %11 = LI8 -401
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
5768
5769...
5770---
5771name:            testSTFSUX
5772# CHECK-ALL: name: testSTFSUX
5773alignment:       4
5774exposesReturnsTwice: false
5775legalized:       false
5776regBankSelected: false
5777selected:        false
5778tracksRegLiveness: true
5779registers:
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: '' }
5794liveins:
5795  - { reg: '$x3', virtual-reg: '%0' }
5796  - { reg: '$f1', virtual-reg: '%1' }
5797  - { reg: '$x5', virtual-reg: '%2' }
5798frameInfo:
5799  isFrameAddressTaken: false
5800  isReturnAddressTaken: false
5801  hasStackMap:     false
5802  hasPatchPoint:   false
5803  stackSize:       0
5804  offsetAdjustment: 0
5805  maxAlignment:    0
5806  adjustsStack:    false
5807  hasCalls:        false
5808  stackProtector:  ''
5809  maxCallFrameSize: 4294967295
5810  hasOpaqueSPAdjustment: false
5811  hasVAStart:      false
5812  hasMustTailInVarArgFunc: false
5813  savePoint:       ''
5814  restorePoint:    ''
5815fixedStack:
5816stack:
5817constants:
5818body:             |
5819  bb.0.entry:
5820    liveins: $x3, $f1, $x5
5821
5822    %2 = COPY $x5
5823    %1 = COPY $f1
5824    %0 = COPY $x3
5825    %3 = COPY %2.sub_32
5826    %4 = ADDI %3, 1
5827    %6 = IMPLICIT_DEF
5828    %5 = INSERT_SUBREG %6, killed %4, 1
5829    %7 = LI8 111
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]+}})
5833    %8 = ADDI %3, 2
5834    %10 = IMPLICIT_DEF
5835    %9 = INSERT_SUBREG %10, killed %8, 1
5836    %11 = LI8 987
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
5841
5842...
5843---
5844name:            testSTFDX
5845# CHECK-ALL: name: testSTFDX
5846alignment:       4
5847exposesReturnsTwice: false
5848legalized:       false
5849regBankSelected: false
5850selected:        false
5851tracksRegLiveness: true
5852registers:
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: '' }
5865liveins:
5866  - { reg: '$x3', virtual-reg: '%0' }
5867  - { reg: '$f1', virtual-reg: '%1' }
5868  - { reg: '$x5', virtual-reg: '%2' }
5869frameInfo:
5870  isFrameAddressTaken: false
5871  isReturnAddressTaken: false
5872  hasStackMap:     false
5873  hasPatchPoint:   false
5874  stackSize:       0
5875  offsetAdjustment: 0
5876  maxAlignment:    0
5877  adjustsStack:    false
5878  hasCalls:        false
5879  stackProtector:  ''
5880  maxCallFrameSize: 4294967295
5881  hasOpaqueSPAdjustment: false
5882  hasVAStart:      false
5883  hasMustTailInVarArgFunc: false
5884  savePoint:       ''
5885  restorePoint:    ''
5886fixedStack:
5887stack:
5888constants:
5889body:             |
5890  bb.0.entry:
5891    liveins: $x3, $f1, $x5
5892
5893    %2 = COPY $x5
5894    %1 = COPY $f1
5895    %0 = COPY $x3
5896    %3 = COPY %2.sub_32
5897    %4 = ADDI %3, 1
5898    %6 = IMPLICIT_DEF
5899    %5 = INSERT_SUBREG %6, killed %4, 1
5900    %7 = LI8 876
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)
5904    %8 = ADDI %3, 2
5905    %10 = IMPLICIT_DEF
5906    %9 = INSERT_SUBREG %10, killed %8, 1
5907    %11 = LI8 -873
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
5912
5913...
5914---
5915name:            testSTFDUX
5916# CHECK-ALL: name: testSTFDUX
5917alignment:       4
5918exposesReturnsTwice: false
5919legalized:       false
5920regBankSelected: false
5921selected:        false
5922tracksRegLiveness: true
5923registers:
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: '' }
5938liveins:
5939  - { reg: '$x3', virtual-reg: '%0' }
5940  - { reg: '$f1', virtual-reg: '%1' }
5941  - { reg: '$x5', virtual-reg: '%2' }
5942frameInfo:
5943  isFrameAddressTaken: false
5944  isReturnAddressTaken: false
5945  hasStackMap:     false
5946  hasPatchPoint:   false
5947  stackSize:       0
5948  offsetAdjustment: 0
5949  maxAlignment:    0
5950  adjustsStack:    false
5951  hasCalls:        false
5952  stackProtector:  ''
5953  maxCallFrameSize: 4294967295
5954  hasOpaqueSPAdjustment: false
5955  hasVAStart:      false
5956  hasMustTailInVarArgFunc: false
5957  savePoint:       ''
5958  restorePoint:    ''
5959fixedStack:
5960stack:
5961constants:
5962body:             |
5963  bb.0.entry:
5964    liveins: $x3, $f1, $x5
5965
5966    %2 = COPY $x5
5967    %1 = COPY $f1
5968    %0 = COPY $x3
5969    %3 = COPY %2.sub_32
5970    %4 = ADDI %3, 1
5971    %6 = IMPLICIT_DEF
5972    %5 = INSERT_SUBREG %6, killed %4, 1
5973    %7 = LI8 -9038
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]+}})
5977    %8 = ADDI %3, 2
5978    %10 = IMPLICIT_DEF
5979    %9 = INSERT_SUBREG %10, killed %8, 1
5980    %11 = LI8 6477
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
5985
5986...
5987---
5988name:            testSTXSSPX
5989# CHECK-ALL: name: testSTXSSPX
5990alignment:       4
5991exposesReturnsTwice: false
5992legalized:       false
5993regBankSelected: false
5994selected:        false
5995tracksRegLiveness: true
5996registers:
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: '' }
6001liveins:
6002  - { reg: '$x3', virtual-reg: '%0' }
6003  - { reg: '$f1', virtual-reg: '%1' }
6004  - { reg: '$x5', virtual-reg: '%2' }
6005frameInfo:
6006  isFrameAddressTaken: false
6007  isReturnAddressTaken: false
6008  hasStackMap:     false
6009  hasPatchPoint:   false
6010  stackSize:       0
6011  offsetAdjustment: 0
6012  maxAlignment:    0
6013  adjustsStack:    false
6014  hasCalls:        false
6015  stackProtector:  ''
6016  maxCallFrameSize: 4294967295
6017  hasOpaqueSPAdjustment: false
6018  hasVAStart:      false
6019  hasMustTailInVarArgFunc: false
6020  savePoint:       ''
6021  restorePoint:    ''
6022fixedStack:
6023stack:
6024constants:
6025body:             |
6026  bb.0.entry:
6027    liveins: $x3, $f1, $x5
6028
6029    %2 = COPY $x5
6030    %1 = COPY $f1
6031    %0 = COPY $x3
6032    %3 = LI8 444
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
6037
6038...
6039---
6040name:            testSTXSDX
6041# CHECK-ALL: name: testSTXSDX
6042alignment:       4
6043exposesReturnsTwice: false
6044legalized:       false
6045regBankSelected: false
6046selected:        false
6047tracksRegLiveness: true
6048registers:
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: '' }
6053liveins:
6054  - { reg: '$x3', virtual-reg: '%0' }
6055  - { reg: '$f1', virtual-reg: '%1' }
6056  - { reg: '$x5', virtual-reg: '%2' }
6057frameInfo:
6058  isFrameAddressTaken: false
6059  isReturnAddressTaken: false
6060  hasStackMap:     false
6061  hasPatchPoint:   false
6062  stackSize:       0
6063  offsetAdjustment: 0
6064  maxAlignment:    0
6065  adjustsStack:    false
6066  hasCalls:        false
6067  stackProtector:  ''
6068  maxCallFrameSize: 4294967295
6069  hasOpaqueSPAdjustment: false
6070  hasVAStart:      false
6071  hasMustTailInVarArgFunc: false
6072  savePoint:       ''
6073  restorePoint:    ''
6074fixedStack:
6075stack:
6076constants:
6077body:             |
6078  bb.0.entry:
6079    liveins: $x3, $f1, $x5
6080
6081    %2 = COPY $x5
6082    %1 = COPY $f1
6083    %0 = COPY $x3
6084    %3 = LI8 4
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
6089
6090...
6091---
6092name:            testSTXVX
6093# CHECK-ALL: name: testSTXVX
6094alignment:       4
6095exposesReturnsTwice: false
6096legalized:       false
6097regBankSelected: false
6098selected:        false
6099tracksRegLiveness: true
6100registers:
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: '' }
6105liveins:
6106  - { reg: '$x3', virtual-reg: '%0' }
6107  - { reg: '$v2', virtual-reg: '%1' }
6108  - { reg: '$x7', virtual-reg: '%2' }
6109frameInfo:
6110  isFrameAddressTaken: false
6111  isReturnAddressTaken: false
6112  hasStackMap:     false
6113  hasPatchPoint:   false
6114  stackSize:       0
6115  offsetAdjustment: 0
6116  maxAlignment:    0
6117  adjustsStack:    false
6118  hasCalls:        false
6119  stackProtector:  ''
6120  maxCallFrameSize: 4294967295
6121  hasOpaqueSPAdjustment: false
6122  hasVAStart:      false
6123  hasMustTailInVarArgFunc: false
6124  savePoint:       ''
6125  restorePoint:    ''
6126fixedStack:
6127stack:
6128constants:
6129body:             |
6130  bb.0.entry:
6131    liveins: $x3, $v2, $x7
6132
6133    %2 = COPY $x7
6134    %1 = COPY $v2
6135    %0 = LI8 16
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
6141
6142...
6143---
6144name:            testSUBFC
6145# CHECK-ALL: name: testSUBFC
6146alignment:       4
6147exposesReturnsTwice: false
6148legalized:       false
6149regBankSelected: false
6150selected:        false
6151tracksRegLiveness: true
6152registers:
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: '' }
6162liveins:
6163  - { reg: '$x3', virtual-reg: '%0' }
6164  - { reg: '$x4', virtual-reg: '%1' }
6165  - { reg: '$x5', virtual-reg: '%2' }
6166  - { reg: '$x6', virtual-reg: '%3' }
6167frameInfo:
6168  isFrameAddressTaken: false
6169  isReturnAddressTaken: false
6170  hasStackMap:     false
6171  hasPatchPoint:   false
6172  stackSize:       0
6173  offsetAdjustment: 0
6174  maxAlignment:    0
6175  adjustsStack:    false
6176  hasCalls:        false
6177  stackProtector:  ''
6178  maxCallFrameSize: 4294967295
6179  hasOpaqueSPAdjustment: false
6180  hasVAStart:      false
6181  hasMustTailInVarArgFunc: false
6182  savePoint:       ''
6183  restorePoint:    ''
6184fixedStack:
6185stack:
6186constants:
6187body:             |
6188  bb.0.entry:
6189    liveins: $x3, $x4, $x5, $x6
6190
6191    %3 = COPY $x6
6192    %2 = COPY $x5
6193    %1 = COPY $x4
6194    %6 = COPY %3.sub_32
6195    %7 = COPY %2.sub_32
6196    %8 = COPY %1.sub_32
6197    %0 = LI 55
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
6205
6206...
6207---
6208name:            testSUBFC8
6209# CHECK-ALL: name: testSUBFC8
6210alignment:       4
6211exposesReturnsTwice: false
6212legalized:       false
6213regBankSelected: false
6214selected:        false
6215tracksRegLiveness: true
6216registers:
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: '' }
6223liveins:
6224  - { reg: '$x3', virtual-reg: '%0' }
6225  - { reg: '$x4', virtual-reg: '%1' }
6226  - { reg: '$x5', virtual-reg: '%2' }
6227  - { reg: '$x6', virtual-reg: '%3' }
6228frameInfo:
6229  isFrameAddressTaken: false
6230  isReturnAddressTaken: false
6231  hasStackMap:     false
6232  hasPatchPoint:   false
6233  stackSize:       0
6234  offsetAdjustment: 0
6235  maxAlignment:    0
6236  adjustsStack:    false
6237  hasCalls:        false
6238  stackProtector:  ''
6239  maxCallFrameSize: 4294967295
6240  hasOpaqueSPAdjustment: false
6241  hasVAStart:      false
6242  hasMustTailInVarArgFunc: false
6243  savePoint:       ''
6244  restorePoint:    ''
6245fixedStack:
6246stack:
6247constants:
6248body:             |
6249  bb.0.entry:
6250    liveins: $x3, $x4, $x5, $x6
6251
6252    %3 = COPY $x6
6253    %2 = COPY $x5
6254    %1 = COPY $x4
6255    %0 = LI8 7635
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
6260    $x3 = COPY %4
6261    $x4 = COPY %5
6262    BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4
6263
6264...
6265---
6266name:            testXOR
6267# CHECK-ALL: name: testXOR
6268alignment:       4
6269exposesReturnsTwice: false
6270legalized:       false
6271regBankSelected: false
6272selected:        false
6273tracksRegLiveness: true
6274registers:
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: '' }
6279liveins:
6280  - { reg: '$x3', virtual-reg: '%0' }
6281  - { reg: '$x4', virtual-reg: '%1' }
6282frameInfo:
6283  isFrameAddressTaken: false
6284  isReturnAddressTaken: false
6285  hasStackMap:     false
6286  hasPatchPoint:   false
6287  stackSize:       0
6288  offsetAdjustment: 0
6289  maxAlignment:    0
6290  adjustsStack:    false
6291  hasCalls:        false
6292  stackProtector:  ''
6293  maxCallFrameSize: 4294967295
6294  hasOpaqueSPAdjustment: false
6295  hasVAStart:      false
6296  hasMustTailInVarArgFunc: false
6297  savePoint:       ''
6298  restorePoint:    ''
6299fixedStack:
6300stack:
6301constants:
6302body:             |
6303  bb.0.entry:
6304    liveins: $x3, $x4
6305
6306    %1 = LI 10101
6307    %0 = COPY $x3
6308    %3 = COPY %0.sub_32
6309    %2 = XOR %1, %3
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
6314
6315...
6316---
6317name:            testXOR8
6318# CHECK-ALL: name: testXOR8
6319alignment:       4
6320exposesReturnsTwice: false
6321legalized:       false
6322regBankSelected: false
6323selected:        false
6324tracksRegLiveness: true
6325registers:
6326  - { id: 0, class: g8rc, preferred-register: '' }
6327  - { id: 1, class: g8rc, preferred-register: '' }
6328  - { id: 2, class: g8rc, preferred-register: '' }
6329liveins:
6330  - { reg: '$x3', virtual-reg: '%0' }
6331  - { reg: '$x4', virtual-reg: '%1' }
6332frameInfo:
6333  isFrameAddressTaken: false
6334  isReturnAddressTaken: false
6335  hasStackMap:     false
6336  hasPatchPoint:   false
6337  stackSize:       0
6338  offsetAdjustment: 0
6339  maxAlignment:    0
6340  adjustsStack:    false
6341  hasCalls:        false
6342  stackProtector:  ''
6343  maxCallFrameSize: 4294967295
6344  hasOpaqueSPAdjustment: false
6345  hasVAStart:      false
6346  hasMustTailInVarArgFunc: false
6347  savePoint:       ''
6348  restorePoint:    ''
6349fixedStack:
6350stack:
6351constants:
6352body:             |
6353  bb.0.entry:
6354    liveins: $x3, $x4
6355
6356    %1 = COPY $x4
6357    %0 = LI8 5535
6358    %2 = XOR8 %1, %0
6359    ; CHECK: XORI8 %1, 5535
6360    ; CHECK-LATE: xori 3, 4, 5535
6361    $x3 = COPY %2
6362    BLR8 implicit $lr8, implicit $rm, implicit $x3
6363
6364...
6365---
6366name:            testXORI
6367# CHECK-ALL: name: testXORI
6368alignment:       4
6369exposesReturnsTwice: false
6370legalized:       false
6371regBankSelected: false
6372selected:        false
6373tracksRegLiveness: true
6374registers:
6375  - { id: 0, class: gprc, preferred-register: '' }
6376  - { id: 1, class: gprc, preferred-register: '' }
6377liveins:
6378  - { reg: '$x3', virtual-reg: '%0' }
6379frameInfo:
6380  isFrameAddressTaken: false
6381  isReturnAddressTaken: false
6382  hasStackMap:     false
6383  hasPatchPoint:   false
6384  stackSize:       0
6385  offsetAdjustment: 0
6386  maxAlignment:    0
6387  adjustsStack:    false
6388  hasCalls:        false
6389  stackProtector:  ''
6390  maxCallFrameSize: 4294967295
6391  hasOpaqueSPAdjustment: false
6392  hasVAStart:      false
6393  hasMustTailInVarArgFunc: false
6394  savePoint:       ''
6395  restorePoint:    ''
6396fixedStack:
6397stack:
6398constants:
6399body:             |
6400  bb.0.entry:
6401    liveins: $x3
6402
6403    %0 = LI 871
6404    %1 = XORI %0, 17
6405    ; CHECK: LI 886
6406    ; CHECK-LATE: li 3, 886
6407    $x3 = EXTSW_32_64 %1
6408    BLR8 implicit $lr8, implicit $rm, implicit $x3
6409
6410...
6411---
6412name:            testXOR8I
6413# CHECK-ALL: name: testXOR8I
6414alignment:       4
6415exposesReturnsTwice: false
6416legalized:       false
6417regBankSelected: false
6418selected:        false
6419tracksRegLiveness: true
6420registers:
6421  - { id: 0, class: g8rc, preferred-register: '' }
6422  - { id: 1, class: g8rc, preferred-register: '' }
6423liveins:
6424  - { reg: '$x3', virtual-reg: '%0' }
6425frameInfo:
6426  isFrameAddressTaken: false
6427  isReturnAddressTaken: false
6428  hasStackMap:     false
6429  hasPatchPoint:   false
6430  stackSize:       0
6431  offsetAdjustment: 0
6432  maxAlignment:    0
6433  adjustsStack:    false
6434  hasCalls:        false
6435  stackProtector:  ''
6436  maxCallFrameSize: 4294967295
6437  hasOpaqueSPAdjustment: false
6438  hasVAStart:      false
6439  hasMustTailInVarArgFunc: false
6440  savePoint:       ''
6441  restorePoint:    ''
6442fixedStack:
6443stack:
6444constants:
6445body:             |
6446  bb.0.entry:
6447    liveins: $x3
6448
6449    %0 = LI8 453
6450    %1 = XORI8 %0, 17
6451    ; CHECK: LI8 468
6452    ; CHECK-LATE: li 3, 468
6453    $x3 = COPY %1
6454    BLR8 implicit $lr8, implicit $rm, implicit $x3
6455
6456...
6457