[PowerPC] Convert r+r instructions to r+i (pre and post RA)
[llvm-core.git] / test / CodeGen / PowerPC / convert-rr-to-ri-instrs.mir
blobc4783de4a18febee8dff4869c85199660c48bb99
1 # RUN: llc -run-pass ppc-mi-peepholes -ppc-convert-rr-to-ri %s -o - | FileCheck %s
2 # RUN: llc -start-after ppc-mi-peepholes -ppc-late-peephole %s -o - | FileCheck %s --check-prefix=CHECK-LATE
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 zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 {
565   entry:
566     %shl = shl i32 %a, 4
567     %and = and i32 %shl, 4080
568     ret i32 %and
569   }
570   
571   ; Function Attrs: norecurse nounwind readnone
572   define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 {
573   entry:
574     %shl = shl i64 %a, 4
575     %and = and i64 %shl, 4080
576     ret i64 %and
577   }
578   
579   ; Function Attrs: norecurse nounwind readnone
580   define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
581   entry:
582     %and = and i32 %a, 255
583     %tobool = icmp eq i32 %and, 0
584     %cond = select i1 %tobool, i32 %b, i32 %a
585     ret i32 %cond
586   }
587   
588   ; Function Attrs: norecurse nounwind readnone
589   define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 {
590   entry:
591     %a.tr = trunc i64 %a to i32
592     %0 = shl i32 %a.tr, 4
593     %conv = and i32 %0, 4080
594     %tobool = icmp eq i32 %conv, 0
595     %conv1 = zext i32 %conv to i64
596     %cond = select i1 %tobool, i64 %b, i64 %conv1
597     ret i64 %cond
598   }
599   
600   ; Function Attrs: norecurse nounwind readnone
601   define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
602   entry:
603     %shl = shl i64 %a, %b
604     ret i64 %shl
605   }
606   
607   ; Function Attrs: norecurse nounwind readnone
608   define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 {
609   entry:
610     %shl = shl i64 %a, %b
611     %tobool = icmp eq i64 %shl, 0
612     %cond = select i1 %tobool, i64 %b, i64 %a
613     ret i64 %cond
614   }
615   
616   ; Function Attrs: norecurse nounwind readnone
617   define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
618   entry:
619     %shr = lshr i64 %a, %b
620     ret i64 %shr
621   }
622   
623   ; Function Attrs: norecurse nounwind readnone
624   define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 {
625   entry:
626     %shr = lshr i64 %a, %b
627     %tobool = icmp eq i64 %shr, 0
628     %cond = select i1 %tobool, i64 %b, i64 %a
629     ret i64 %cond
630   }
631   
632   ; Function Attrs: norecurse nounwind readnone
633   define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
634   entry:
635     %shl = shl i32 %a, %b
636     ret i32 %shl
637   }
638   
639   ; Function Attrs: norecurse nounwind readnone
640   define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
641   entry:
642     %shl = shl i32 %a, %b
643     %tobool = icmp eq i32 %shl, 0
644     %cond = select i1 %tobool, i32 %b, i32 %a
645     ret i32 %cond
646   }
647   
648   ; Function Attrs: norecurse nounwind readnone
649   define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
650   entry:
651     %shr = lshr i32 %a, %b
652     ret i32 %shr
653   }
654   
655   ; Function Attrs: norecurse nounwind readnone
656   define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
657   entry:
658     %shr = lshr i32 %a, %b
659     %tobool = icmp eq i32 %shr, 0
660     %cond = select i1 %tobool, i32 %b, i32 %a
661     ret i32 %cond
662   }
663   
664   ; Function Attrs: norecurse nounwind readnone
665   define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
666   entry:
667     %shr = ashr i32 %a, %b
668     ret i32 %shr
669   }
670   
671   ; Function Attrs: norecurse nounwind readnone
672   define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
673   entry:
674     %shr = ashr i32 %a, %b
675     %tobool = icmp eq i32 %shr, 0
676     %cond = select i1 %tobool, i32 %b, i32 %shr
677     ret i32 %cond
678   }
679   
680   ; Function Attrs: norecurse nounwind readnone
681   define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
682   entry:
683     %shr = ashr i64 %a, %b
684     ret i64 %shr
685   }
686   
687   ; Function Attrs: norecurse nounwind readnone
688   define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 {
689   entry:
690     %shr = ashr i64 %a, %b
691     %tobool = icmp eq i64 %shr, 0
692     %cond = select i1 %tobool, i64 %b, i64 %shr
693     ret i64 %cond
694   }
695   
696   ; Function Attrs: norecurse nounwind
697   define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
698   entry:
699     %add = add i32 %idx, 1
700     %idxprom = zext i32 %add to i64
701     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
702     store i8 %a, i8* %arrayidx, align 1, !tbaa !3
703     %add1 = add i32 %idx, 2
704     %idxprom2 = zext i32 %add1 to i64
705     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
706     store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
707     ret void
708   }
709   
710   ; Function Attrs: norecurse nounwind
711   define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
712   entry:
713     %add = add i32 %idx, 1
714     %idxprom = zext i32 %add to i64
715     %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom
716     store i8 %a, i8* %arrayidx, align 1, !tbaa !3
717     %add1 = add i32 %idx, 2
718     %idxprom2 = zext i32 %add1 to i64
719     %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2
720     store i8 %a, i8* %arrayidx3, align 1, !tbaa !3
721     ret void
722   }
723   
724   ; Function Attrs: norecurse nounwind
725   define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
726   entry:
727     %add = add i32 %idx, 1
728     %idxprom = zext i32 %add to i64
729     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
730     store i16 %a, i16* %arrayidx, align 2, !tbaa !6
731     %add1 = add i32 %idx, 2
732     %idxprom2 = zext i32 %add1 to i64
733     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
734     store i16 %a, i16* %arrayidx3, align 2, !tbaa !6
735     ret void
736   }
737   
738   ; Function Attrs: norecurse nounwind
739   define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
740   entry:
741     %add = add i32 %idx, 1
742     %idxprom = zext i32 %add to i64
743     %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom
744     store i16 %a, i16* %arrayidx, align 1, !tbaa !3
745     %add1 = add i32 %idx, 2
746     %idxprom2 = zext i32 %add1 to i64
747     %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2
748     store i16 %a, i16* %arrayidx3, align 1, !tbaa !3
749     ret void
750   }
751   
752   ; Function Attrs: norecurse nounwind
753   define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
754   entry:
755     %add = add i32 %idx, 1
756     %idxprom = zext i32 %add to i64
757     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
758     store i32 %a, i32* %arrayidx, align 4, !tbaa !8
759     %add1 = add i32 %idx, 2
760     %idxprom2 = zext i32 %add1 to i64
761     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
762     store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
763     ret void
764   }
765   
766   ; Function Attrs: norecurse nounwind
767   define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 {
768   entry:
769     %add = add i32 %idx, 1
770     %idxprom = zext i32 %add to i64
771     %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom
772     store i32 %a, i32* %arrayidx, align 4, !tbaa !8
773     %add1 = add i32 %idx, 2
774     %idxprom2 = zext i32 %add1 to i64
775     %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2
776     store i32 %a, i32* %arrayidx3, align 4, !tbaa !8
777     ret void
778   }
779   
780   ; Function Attrs: norecurse nounwind
781   define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
782   entry:
783     %add = add i32 %idx, 1
784     %idxprom = zext i32 %add to i64
785     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
786     store i64 %a, i64* %arrayidx, align 8, !tbaa !10
787     %add1 = add i32 %idx, 2
788     %idxprom2 = zext i32 %add1 to i64
789     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
790     store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
791     ret void
792   }
793   
794   ; Function Attrs: norecurse nounwind
795   define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 {
796   entry:
797     %add = add i32 %idx, 1
798     %idxprom = zext i32 %add to i64
799     %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom
800     store i64 %a, i64* %arrayidx, align 8, !tbaa !10
801     %add1 = add i32 %idx, 2
802     %idxprom2 = zext i32 %add1 to i64
803     %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2
804     store i64 %a, i64* %arrayidx3, align 8, !tbaa !10
805     ret void
806   }
807   
808   ; Function Attrs: norecurse nounwind readonly
809   define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
810   entry:
811     %add = add i32 %idx, 1
812     %idxprom = zext i32 %add to i64
813     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
814     store float %a, float* %arrayidx, align 4, !tbaa !14
815     %add1 = add i32 %idx, 2
816     %idxprom2 = zext i32 %add1 to i64
817     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
818     store float %a, float* %arrayidx3, align 4, !tbaa !14
819     ret void
820   }
821   
822   ; Function Attrs: norecurse nounwind readonly
823   define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 {
824   entry:
825     %add = add i32 %idx, 1
826     %idxprom = zext i32 %add to i64
827     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
828     store float %a, float* %arrayidx, align 4, !tbaa !14
829     %add1 = add i32 %idx, 2
830     %idxprom2 = zext i32 %add1 to i64
831     %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2
832     store float %a, float* %arrayidx3, align 4, !tbaa !14
833     ret void
834   }
835   
836   ; Function Attrs: norecurse nounwind readonly
837   define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
838   entry:
839     %add = add i32 %idx, 1
840     %idxprom = zext i32 %add to i64
841     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
842     store double %a, double* %arrayidx, align 8, !tbaa !12
843     %add1 = add i32 %idx, 2
844     %idxprom2 = zext i32 %add1 to i64
845     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
846     store double %a, double* %arrayidx3, align 8, !tbaa !12
847     ret void
848   }
849   
850   ; Function Attrs: norecurse nounwind readonly
851   define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 {
852   entry:
853     %add = add i32 %idx, 1
854     %idxprom = zext i32 %add to i64
855     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
856     store double %a, double* %arrayidx, align 8, !tbaa !12
857     %add1 = add i32 %idx, 2
858     %idxprom2 = zext i32 %add1 to i64
859     %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2
860     store double %a, double* %arrayidx3, align 8, !tbaa !12
861     ret void
862   }
863   
864   ; Function Attrs: norecurse nounwind
865   define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 {
866   entry:
867     %idxprom = zext i32 %idx to i64
868     %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom
869     store float %a, float* %arrayidx, align 4, !tbaa !14
870     ret void
871   }
872   
873   ; Function Attrs: norecurse nounwind
874   define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 {
875   entry:
876     %idxprom = zext i32 %idx to i64
877     %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom
878     store double %a, double* %arrayidx, align 8, !tbaa !12
879     ret void
880   }
881   
882   ; Function Attrs: norecurse nounwind
883   define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 {
884   entry:
885     %idxprom = zext i32 %idx to i64
886     %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom
887     store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3
888     ret void
889   }
890   
891   ; Function Attrs: norecurse nounwind readnone
892   define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 {
893   entry:
894     %sub = sub nsw i128 %a, %b
895     ret i128 %sub
896   }
897   
898   ; Function Attrs: norecurse nounwind readnone
899   define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 {
900   entry:
901     %sub = sub nsw i128 %a, %b
902     ret i128 %sub
903   }
904   
905   ; Function Attrs: norecurse nounwind readnone
906   define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
907   entry:
908     %xor = xor i32 %b, %a
909     ret i32 %xor
910   }
911   
912   ; Function Attrs: norecurse nounwind readnone
913   define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 {
914   entry:
915     %xor = xor i64 %b, %a
916     ret i64 %xor
917   }
918   
919   ; Function Attrs: norecurse nounwind readnone
920   define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 {
921   entry:
922     %xor = xor i32 %a, 17
923     ret i32 %xor
924   }
925   
926   ; Function Attrs: norecurse nounwind readnone
927   define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 {
928   entry:
929     %xor = xor i64 %a, 17
930     ret i64 %xor
931   }
932   
933   attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
934   attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
935   attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,-vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
936   attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" }
937   
938   !llvm.module.flags = !{!0, !1}
939   !llvm.ident = !{!2}
940   
941   !0 = !{i32 1, !"wchar_size", i32 4}
942   !1 = !{i32 7, !"PIC Level", i32 2}
943   !2 = !{!"clang version 6.0.0 (trunk 316067)"}
944   !3 = !{!4, !4, i64 0}
945   !4 = !{!"omnipotent char", !5, i64 0}
946   !5 = !{!"Simple C/C++ TBAA"}
947   !6 = !{!7, !7, i64 0}
948   !7 = !{!"short", !4, i64 0}
949   !8 = !{!9, !9, i64 0}
950   !9 = !{!"int", !4, i64 0}
951   !10 = !{!11, !11, i64 0}
952   !11 = !{!"long long", !4, i64 0}
953   !12 = !{!13, !13, i64 0}
954   !13 = !{!"double", !4, i64 0}
955   !14 = !{!15, !15, i64 0}
956   !15 = !{!"float", !4, i64 0}
960 name:            testADD4
961 # CHECK-ALL: name: testADD4
962 alignment:       4
963 exposesReturnsTwice: false
964 legalized:       false
965 regBankSelected: false
966 selected:        false
967 tracksRegLiveness: true
968 registers:       
969   - { id: 0, class: g8rc, preferred-register: '' }
970   - { id: 1, class: g8rc, preferred-register: '' }
971   - { id: 2, class: gprc, preferred-register: '' }
972   - { id: 3, class: gprc, preferred-register: '' }
973   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
974   - { id: 5, class: gprc, preferred-register: '' }
975   - { id: 6, class: g8rc, preferred-register: '' }
976 liveins:         
977   - { reg: '%x3', virtual-reg: '%0' }
978   - { reg: '%x4', virtual-reg: '%1' }
979 frameInfo:       
980   isFrameAddressTaken: false
981   isReturnAddressTaken: false
982   hasStackMap:     false
983   hasPatchPoint:   false
984   stackSize:       0
985   offsetAdjustment: 0
986   maxAlignment:    0
987   adjustsStack:    false
988   hasCalls:        false
989   stackProtector:  ''
990   maxCallFrameSize: 4294967295
991   hasOpaqueSPAdjustment: false
992   hasVAStart:      false
993   hasMustTailInVarArgFunc: false
994   savePoint:       ''
995   restorePoint:    ''
996 fixedStack:      
997 stack:           
998 constants:       
999 body:             |
1000   bb.0.entry:
1001     liveins: %x3, %x4
1002   
1003     %1 = COPY %x4
1004     %0 = COPY %x3
1005     %2 = LI 33
1006     %3 = COPY %0.sub_32
1007     %4 = ADD4 killed %3, %2
1008     %5 = ADD4 killed %2, killed %4
1009     ; CHECK: ADDI killed %3, 33
1010     ; CHECK: ADDI killed %4, 33
1011     ; CHECK-LATE: addi 3, 3, 33
1012     ; CHECK-LATE: addi 3, 3, 33
1013     %6 = EXTSW_32_64 killed %5
1014     %x3 = COPY %6
1015     BLR8 implicit %lr8, implicit %rm, implicit %x3
1019 name:            testADD8
1020 # CHECK-ALL: name: testADD8
1021 alignment:       4
1022 exposesReturnsTwice: false
1023 legalized:       false
1024 regBankSelected: false
1025 selected:        false
1026 tracksRegLiveness: true
1027 registers:       
1028   - { id: 0, class: g8rc, preferred-register: '' }
1029   - { id: 1, class: g8rc, preferred-register: '' }
1030   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1031   - { id: 3, class: g8rc, preferred-register: '' }
1032 liveins:         
1033   - { reg: '%x3', virtual-reg: '%0' }
1034   - { reg: '%x4', virtual-reg: '%1' }
1035 frameInfo:       
1036   isFrameAddressTaken: false
1037   isReturnAddressTaken: false
1038   hasStackMap:     false
1039   hasPatchPoint:   false
1040   stackSize:       0
1041   offsetAdjustment: 0
1042   maxAlignment:    0
1043   adjustsStack:    false
1044   hasCalls:        false
1045   stackProtector:  ''
1046   maxCallFrameSize: 4294967295
1047   hasOpaqueSPAdjustment: false
1048   hasVAStart:      false
1049   hasMustTailInVarArgFunc: false
1050   savePoint:       ''
1051   restorePoint:    ''
1052 fixedStack:      
1053 stack:           
1054 constants:       
1055 body:             |
1056   bb.0.entry:
1057     liveins: %x3, %x4
1058   
1059     %1 = LI8 33
1060     %0 = COPY %x3
1061     %2 = ADD8 %0, %1
1062     %3 = ADD8 killed %1, killed %2
1063     ; CHECK: ADDI8 %0, 33
1064     ; CHECK: ADDI8 killed %2, 33
1065     ; CHECK-LATE: addi 3, 3, 33
1066     ; CHECK-LATE: addi 3, 3, 33
1067     %x3 = COPY %3
1068     BLR8 implicit %lr8, implicit %rm, implicit %x3
1072 name:            testADDC
1073 # CHECK-ALL: name: testADDC
1074 alignment:       4
1075 exposesReturnsTwice: false
1076 legalized:       false
1077 regBankSelected: false
1078 selected:        false
1079 tracksRegLiveness: true
1080 registers:       
1081   - { id: 0, class: g8rc, preferred-register: '' }
1082   - { id: 1, class: g8rc, preferred-register: '' }
1083   - { id: 2, class: g8rc, preferred-register: '' }
1084   - { id: 3, class: g8rc, preferred-register: '' }
1085   - { id: 4, class: gprc, preferred-register: '' }
1086   - { id: 5, class: gprc, preferred-register: '' }
1087   - { id: 6, class: gprc, preferred-register: '' }
1088   - { id: 7, class: g8rc, preferred-register: '' }
1089   - { id: 8, class: g8rc, preferred-register: '' }
1090 liveins:         
1091   - { reg: '%x3', virtual-reg: '%0' }
1092   - { reg: '%x4', virtual-reg: '%1' }
1093   - { reg: '%x5', virtual-reg: '%2' }
1094   - { reg: '%x6', virtual-reg: '%3' }
1095 frameInfo:       
1096   isFrameAddressTaken: false
1097   isReturnAddressTaken: false
1098   hasStackMap:     false
1099   hasPatchPoint:   false
1100   stackSize:       0
1101   offsetAdjustment: 0
1102   maxAlignment:    0
1103   adjustsStack:    false
1104   hasCalls:        false
1105   stackProtector:  ''
1106   maxCallFrameSize: 4294967295
1107   hasOpaqueSPAdjustment: false
1108   hasVAStart:      false
1109   hasMustTailInVarArgFunc: false
1110   savePoint:       ''
1111   restorePoint:    ''
1112 fixedStack:      
1113 stack:           
1114 constants:       
1115 body:             |
1116   bb.0.entry:
1117     liveins: %x3, %x4, %x5, %x6
1118   
1119     %3 = COPY %x6
1120     %2 = COPY %x5
1121     %1 = COPY %x4
1122     %0 = COPY %x3
1123     %4 = COPY %0.sub_32
1124     %5 = LI 55
1125     %6 = ADDC %5, %4, implicit-def %carry
1126     ; CHECK: ADDIC %4, 55, implicit-def %carry
1127     ; CHECK-LATE: addic 3, 3, 55
1128     %7 = ADDE8 %3, %1, implicit-def dead %carry, implicit %carry
1129     %8 = EXTSW_32_64 %6
1130     %x3 = COPY %8
1131     %x4 = COPY %7
1132     BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
1136 name:            testADDC8
1137 # CHECK-ALL: name: testADDC8
1138 alignment:       4
1139 exposesReturnsTwice: false
1140 legalized:       false
1141 regBankSelected: false
1142 selected:        false
1143 tracksRegLiveness: true
1144 registers:       
1145   - { id: 0, class: g8rc, preferred-register: '' }
1146   - { id: 1, class: g8rc, preferred-register: '' }
1147   - { id: 2, class: g8rc, preferred-register: '' }
1148   - { id: 3, class: g8rc, preferred-register: '' }
1149   - { id: 4, class: g8rc, preferred-register: '' }
1150   - { id: 5, class: g8rc, preferred-register: '' }
1151 liveins:         
1152   - { reg: '%x3', virtual-reg: '%0' }
1153   - { reg: '%x4', virtual-reg: '%1' }
1154   - { reg: '%x5', virtual-reg: '%2' }
1155   - { reg: '%x6', virtual-reg: '%3' }
1156 frameInfo:       
1157   isFrameAddressTaken: false
1158   isReturnAddressTaken: false
1159   hasStackMap:     false
1160   hasPatchPoint:   false
1161   stackSize:       0
1162   offsetAdjustment: 0
1163   maxAlignment:    0
1164   adjustsStack:    false
1165   hasCalls:        false
1166   stackProtector:  ''
1167   maxCallFrameSize: 4294967295
1168   hasOpaqueSPAdjustment: false
1169   hasVAStart:      false
1170   hasMustTailInVarArgFunc: false
1171   savePoint:       ''
1172   restorePoint:    ''
1173 fixedStack:      
1174 stack:           
1175 constants:       
1176 body:             |
1177   bb.0.entry:
1178     liveins: %x3, %x4, %x5, %x6
1179   
1180     %3 = COPY %x6
1181     %2 = COPY %x5
1182     %1 = COPY %x4
1183     %0 = LI8 777
1184     %4 = ADDC8 %2, %0, implicit-def %carry
1185     ; CHECK: ADDIC8 %2, 777, implicit-def %carry
1186     ; CHECK-LATE: addic 3, 5, 777
1187     %5 = ADDE8 %3, %1, implicit-def dead %carry, implicit %carry
1188     %x3 = COPY %4
1189     %x4 = COPY %5
1190     BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
1194 name:            testADDCo
1195 # CHECK-ALL: name: testADDCo
1196 alignment:       4
1197 exposesReturnsTwice: false
1198 legalized:       false
1199 regBankSelected: false
1200 selected:        false
1201 tracksRegLiveness: true
1202 registers:       
1203   - { id: 0, class: g8rc, preferred-register: '' }
1204   - { id: 1, class: gprc, preferred-register: '' }
1205   - { id: 2, class: gprc, preferred-register: '' }
1206   - { id: 3, class: gprc, preferred-register: '' }
1207   - { id: 4, class: crrc, preferred-register: '' }
1208   - { id: 5, class: crbitrc, preferred-register: '' }
1209   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1210   - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1211   - { id: 8, class: g8rc, preferred-register: '' }
1212 liveins:         
1213   - { reg: '%x3', virtual-reg: '%0' }
1214   - { reg: '%x4', virtual-reg: '%1' }
1215 frameInfo:       
1216   isFrameAddressTaken: false
1217   isReturnAddressTaken: false
1218   hasStackMap:     false
1219   hasPatchPoint:   false
1220   stackSize:       0
1221   offsetAdjustment: 0
1222   maxAlignment:    0
1223   adjustsStack:    false
1224   hasCalls:        false
1225   stackProtector:  ''
1226   maxCallFrameSize: 4294967295
1227   hasOpaqueSPAdjustment: false
1228   hasVAStart:      false
1229   hasMustTailInVarArgFunc: false
1230   savePoint:       ''
1231   restorePoint:    ''
1232 fixedStack:      
1233 stack:           
1234 constants:       
1235 body:             |
1236   bb.0.entry:
1237     liveins: %x3, %x4
1238   
1239     %1 = LI 433
1240     %0 = COPY %x3
1241     %2 = COPY %0.sub_32
1242     %3 = ADDCo %1, %2, implicit-def %cr0, implicit-def %carry
1243     ; CHECK: ADDICo %2, 433, implicit-def %cr0, implicit-def %carry
1244     ; CHECK-LATE: addic. 3, 3, 433
1245     %4 = COPY killed %cr0
1246     %5 = COPY %4.sub_eq
1247     %6 = LI8 0
1248     %7 = LI8 -1
1249     %8 = ISEL8 %7, %6, %5
1250     %x3 = COPY %8
1251     BLR8 implicit %lr8, implicit %rm, implicit %x3
1255 name:            testADDI
1256 # CHECK-ALL: name: testADDI
1257 alignment:       4
1258 exposesReturnsTwice: false
1259 legalized:       false
1260 regBankSelected: false
1261 selected:        false
1262 tracksRegLiveness: true
1263 registers:       
1264   - { id: 0, class: g8rc, preferred-register: '' }
1265   - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' }
1266   - { id: 2, class: gprc, preferred-register: '' }
1267   - { id: 3, class: g8rc, preferred-register: '' }
1268 liveins:         
1269   - { reg: '%x3', virtual-reg: '%0' }
1270 frameInfo:       
1271   isFrameAddressTaken: false
1272   isReturnAddressTaken: false
1273   hasStackMap:     false
1274   hasPatchPoint:   false
1275   stackSize:       0
1276   offsetAdjustment: 0
1277   maxAlignment:    0
1278   adjustsStack:    false
1279   hasCalls:        false
1280   stackProtector:  ''
1281   maxCallFrameSize: 4294967295
1282   hasOpaqueSPAdjustment: false
1283   hasVAStart:      false
1284   hasMustTailInVarArgFunc: false
1285   savePoint:       ''
1286   restorePoint:    ''
1287 fixedStack:      
1288 stack:           
1289 constants:       
1290 body:             |
1291   bb.0.entry:
1292     liveins: %x3
1293   
1294     %0 = COPY %x3
1295     %1 = LI 77
1296     %2 = ADDI killed %1, 44
1297     %3 = EXTSW_32_64 killed %2
1298     ; CHECK: LI 121
1299     ; CHECK-LATE: li 3, 121
1300     %x3 = COPY %3
1301     BLR8 implicit %lr8, implicit %rm, implicit %x3
1305 name:            testADDI8
1306 # CHECK-ALL: name: testADDI8
1307 alignment:       4
1308 exposesReturnsTwice: false
1309 legalized:       false
1310 regBankSelected: false
1311 selected:        false
1312 tracksRegLiveness: true
1313 registers:       
1314   - { id: 0, class: g8rc, preferred-register: '' }
1315   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1316   - { id: 2, class: g8rc, preferred-register: '' }
1317   - { id: 3, class: g8rc, preferred-register: '' }
1318 liveins:         
1319   - { reg: '%x3', virtual-reg: '%0' }
1320 frameInfo:       
1321   isFrameAddressTaken: false
1322   isReturnAddressTaken: false
1323   hasStackMap:     false
1324   hasPatchPoint:   false
1325   stackSize:       0
1326   offsetAdjustment: 0
1327   maxAlignment:    0
1328   adjustsStack:    false
1329   hasCalls:        false
1330   stackProtector:  ''
1331   maxCallFrameSize: 4294967295
1332   hasOpaqueSPAdjustment: false
1333   hasVAStart:      false
1334   hasMustTailInVarArgFunc: false
1335   savePoint:       ''
1336   restorePoint:    ''
1337 fixedStack:      
1338 stack:           
1339 constants:       
1340 body:             |
1341   bb.0.entry:
1342     liveins: %x3
1343   
1344     %0 = COPY %x3
1345     %1 = LI8 333
1346     %2 = ADDI8 killed %1, 44
1347     ; CHECK: LI8 377
1348     ; CHECK-LATE: li 3, 377
1349     %3 = EXTSW killed %2
1350     %x3 = COPY %3
1351     BLR8 implicit %lr8, implicit %rm, implicit %x3
1355 name:            testANDo
1356 # CHECK-ALL: name: testANDo
1357 alignment:       4
1358 exposesReturnsTwice: false
1359 legalized:       false
1360 regBankSelected: false
1361 selected:        false
1362 tracksRegLiveness: true
1363 registers:       
1364   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1365   - { id: 1, class: gprc, preferred-register: '' }
1366   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1367   - { id: 3, class: gprc, preferred-register: '' }
1368   - { id: 4, class: crrc, preferred-register: '' }
1369   - { id: 5, class: gprc, preferred-register: '' }
1370   - { id: 6, class: g8rc, preferred-register: '' }
1371 liveins:         
1372   - { reg: '%x3', virtual-reg: '%0' }
1373   - { reg: '%x4', virtual-reg: '%1' }
1374 frameInfo:       
1375   isFrameAddressTaken: false
1376   isReturnAddressTaken: false
1377   hasStackMap:     false
1378   hasPatchPoint:   false
1379   stackSize:       0
1380   offsetAdjustment: 0
1381   maxAlignment:    0
1382   adjustsStack:    false
1383   hasCalls:        false
1384   stackProtector:  ''
1385   maxCallFrameSize: 4294967295
1386   hasOpaqueSPAdjustment: false
1387   hasVAStart:      false
1388   hasMustTailInVarArgFunc: false
1389   savePoint:       ''
1390   restorePoint:    ''
1391 fixedStack:      
1392 stack:           
1393 constants:       
1394 body:             |
1395   bb.0.entry:
1396     liveins: %x3, %x4
1397   
1398     %1 = LI 78
1399     %0 = COPY %x3
1400     %2 = COPY %0.sub_32
1401     %3 = ANDo %1, %2, implicit-def %cr0
1402     ; CHECK: ANDIo %2, 78, implicit-def %cr0
1403     ; CHECK-LATE: andi. 5, 3, 78
1404     %4 = COPY killed %cr0
1405     %5 = ISEL %2, %1, %4.sub_eq
1406     %6 = EXTSW_32_64 killed %5
1407     %x3 = COPY %6
1408     BLR8 implicit %lr8, implicit %rm, implicit %x3
1412 name:            testAND8o
1413 # CHECK-ALL: name: testAND8o
1414 alignment:       4
1415 exposesReturnsTwice: false
1416 legalized:       false
1417 regBankSelected: false
1418 selected:        false
1419 tracksRegLiveness: true
1420 registers:       
1421   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1422   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1423   - { id: 2, class: g8rc, preferred-register: '' }
1424   - { id: 3, class: crrc, preferred-register: '' }
1425   - { id: 4, class: g8rc, preferred-register: '' }
1426 liveins:         
1427   - { reg: '%x3', virtual-reg: '%0' }
1428   - { reg: '%x4', virtual-reg: '%1' }
1429 frameInfo:       
1430   isFrameAddressTaken: false
1431   isReturnAddressTaken: false
1432   hasStackMap:     false
1433   hasPatchPoint:   false
1434   stackSize:       0
1435   offsetAdjustment: 0
1436   maxAlignment:    0
1437   adjustsStack:    false
1438   hasCalls:        false
1439   stackProtector:  ''
1440   maxCallFrameSize: 4294967295
1441   hasOpaqueSPAdjustment: false
1442   hasVAStart:      false
1443   hasMustTailInVarArgFunc: false
1444   savePoint:       ''
1445   restorePoint:    ''
1446 fixedStack:      
1447 stack:           
1448 constants:       
1449 body:             |
1450   bb.0.entry:
1451     liveins: %x3, %x4
1452   
1453     %1 = LI8 321
1454     %0 = COPY %x3
1455     %2 = AND8o %1, %0, implicit-def %cr0
1456     ; CHECK: ANDIo8 %0, 321, implicit-def %cr0
1457     ; CHECK-LATE: andi. 5, 3, 321
1458     %3 = COPY killed %cr0
1459     %4 = ISEL8 %1, %0, %3.sub_eq
1460     %x3 = COPY %4
1461     BLR8 implicit %lr8, implicit %rm, implicit %x3
1465 name:            testCMPD
1466 # CHECK-ALL: name: testCMPD
1467 alignment:       4
1468 exposesReturnsTwice: false
1469 legalized:       false
1470 regBankSelected: false
1471 selected:        false
1472 tracksRegLiveness: true
1473 registers:       
1474   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1475   - { id: 1, class: g8rc, preferred-register: '' }
1476   - { id: 2, class: crrc, preferred-register: '' }
1477   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1478   - { id: 4, class: g8rc, preferred-register: '' }
1479   - { id: 5, class: g8rc, preferred-register: '' }
1480 liveins:         
1481   - { reg: '%x3', virtual-reg: '%0' }
1482   - { reg: '%x4', virtual-reg: '%1' }
1483 frameInfo:       
1484   isFrameAddressTaken: false
1485   isReturnAddressTaken: false
1486   hasStackMap:     false
1487   hasPatchPoint:   false
1488   stackSize:       0
1489   offsetAdjustment: 0
1490   maxAlignment:    0
1491   adjustsStack:    false
1492   hasCalls:        false
1493   stackProtector:  ''
1494   maxCallFrameSize: 4294967295
1495   hasOpaqueSPAdjustment: false
1496   hasVAStart:      false
1497   hasMustTailInVarArgFunc: false
1498   savePoint:       ''
1499   restorePoint:    ''
1500 fixedStack:      
1501 stack:           
1502 constants:       
1503 body:             |
1504   bb.0.entry:
1505     liveins: %x3, %x4
1506   
1507     %1 = LI8 65533
1508     %0 = COPY %x3
1509     %2 = CMPD %0, %1
1510     ; CHECK: CMPDI %0, -3
1511     ; CHECK-LATE: cmpdi 3, -3
1512     %4 = ISEL8 %zero8, %0, %2.sub_gt
1513     %5 = ADD8 killed %4, %1
1514     %x3 = COPY %5
1515     BLR8 implicit %lr8, implicit %rm, implicit %x3
1519 name:            testCMPDI
1520 # CHECK-ALL: name: testCMPDI
1521 alignment:       4
1522 exposesReturnsTwice: false
1523 legalized:       false
1524 regBankSelected: false
1525 selected:        false
1526 tracksRegLiveness: true
1527 registers:       
1528   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1529   - { id: 1, class: g8rc, preferred-register: '' }
1530   - { id: 2, class: crrc, preferred-register: '' }
1531   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1532   - { id: 4, class: g8rc, preferred-register: '' }
1533   - { id: 5, class: g8rc, preferred-register: '' }
1534 liveins:         
1535   - { reg: '%x3', virtual-reg: '%0' }
1536   - { reg: '%x4', virtual-reg: '%1' }
1537 frameInfo:       
1538   isFrameAddressTaken: false
1539   isReturnAddressTaken: false
1540   hasStackMap:     false
1541   hasPatchPoint:   false
1542   stackSize:       0
1543   offsetAdjustment: 0
1544   maxAlignment:    0
1545   adjustsStack:    false
1546   hasCalls:        false
1547   stackProtector:  ''
1548   maxCallFrameSize: 4294967295
1549   hasOpaqueSPAdjustment: false
1550   hasVAStart:      false
1551   hasMustTailInVarArgFunc: false
1552   savePoint:       ''
1553   restorePoint:    ''
1554 fixedStack:      
1555 stack:           
1556 constants:       
1557 body:             |
1558   bb.0.entry:
1559     liveins: %x3, %x4
1560   
1561     %1 = COPY %x4
1562     %0 = LI8 89
1563     %2 = CMPDI %0, 87
1564     %4 = ISEL8 %zero8, %0, %2.sub_gt
1565     ; CHECK: LI8 0
1566     %5 = ADD8 killed %4, %1
1567     %x3 = COPY %5
1568     BLR8 implicit %lr8, implicit %rm, implicit %x3
1572 name:            testCMPDI_F
1573 # CHECK-ALL: name: testCMPDI_F
1574 alignment:       4
1575 exposesReturnsTwice: false
1576 legalized:       false
1577 regBankSelected: false
1578 selected:        false
1579 tracksRegLiveness: true
1580 registers:       
1581   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1582   - { id: 1, class: g8rc, preferred-register: '' }
1583   - { id: 2, class: crrc, preferred-register: '' }
1584   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1585   - { id: 4, class: g8rc, preferred-register: '' }
1586   - { id: 5, class: g8rc, preferred-register: '' }
1587 liveins:         
1588   - { reg: '%x3', virtual-reg: '%0' }
1589   - { reg: '%x4', virtual-reg: '%1' }
1590 frameInfo:       
1591   isFrameAddressTaken: false
1592   isReturnAddressTaken: false
1593   hasStackMap:     false
1594   hasPatchPoint:   false
1595   stackSize:       0
1596   offsetAdjustment: 0
1597   maxAlignment:    0
1598   adjustsStack:    false
1599   hasCalls:        false
1600   stackProtector:  ''
1601   maxCallFrameSize: 4294967295
1602   hasOpaqueSPAdjustment: false
1603   hasVAStart:      false
1604   hasMustTailInVarArgFunc: false
1605   savePoint:       ''
1606   restorePoint:    ''
1607 fixedStack:      
1608 stack:           
1609 constants:       
1610 body:             |
1611   bb.0.entry:
1612     liveins: %x3, %x4
1613   
1614     %1 = COPY %x4
1615     %0 = LI8 87
1616     %2 = CMPDI %0, 87
1617     %4 = ISEL8 %zero8, %0, %2.sub_gt
1618     ; CHECK: COPY %0
1619     %5 = ADD8 killed %4, %1
1620     %x3 = COPY %5
1621     BLR8 implicit %lr8, implicit %rm, implicit %x3
1625 name:            testCMPLD
1626 # CHECK-ALL: name: testCMPLD
1627 alignment:       4
1628 exposesReturnsTwice: false
1629 legalized:       false
1630 regBankSelected: false
1631 selected:        false
1632 tracksRegLiveness: true
1633 registers:       
1634   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1635   - { id: 1, class: g8rc, preferred-register: '' }
1636   - { id: 2, class: crrc, preferred-register: '' }
1637   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1638   - { id: 4, class: g8rc, preferred-register: '' }
1639   - { id: 5, class: g8rc, preferred-register: '' }
1640 liveins:         
1641   - { reg: '%x3', virtual-reg: '%0' }
1642   - { reg: '%x4', virtual-reg: '%1' }
1643 frameInfo:       
1644   isFrameAddressTaken: false
1645   isReturnAddressTaken: false
1646   hasStackMap:     false
1647   hasPatchPoint:   false
1648   stackSize:       0
1649   offsetAdjustment: 0
1650   maxAlignment:    0
1651   adjustsStack:    false
1652   hasCalls:        false
1653   stackProtector:  ''
1654   maxCallFrameSize: 4294967295
1655   hasOpaqueSPAdjustment: false
1656   hasVAStart:      false
1657   hasMustTailInVarArgFunc: false
1658   savePoint:       ''
1659   restorePoint:    ''
1660 fixedStack:      
1661 stack:           
1662 constants:       
1663 body:             |
1664   bb.0.entry:
1665     liveins: %x3, %x4
1666   
1667     %1 = LI8 99
1668     %0 = COPY %x3
1669     %2 = CMPLD %0, %1
1670     ; CHECK: CMPLDI %0, 99
1671     ; CHECK-LATE: cmpldi 3, 99
1672     %4 = ISEL8 %zero8, %0, %2.sub_gt
1673     %5 = ADD8 killed %4, %1
1674     %x3 = COPY %5
1675     BLR8 implicit %lr8, implicit %rm, implicit %x3
1679 name:            testCMPLDI
1680 # CHECK-ALL: name: testCMPLDI
1681 alignment:       4
1682 exposesReturnsTwice: false
1683 legalized:       false
1684 regBankSelected: false
1685 selected:        false
1686 tracksRegLiveness: true
1687 registers:       
1688   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1689   - { id: 1, class: g8rc, preferred-register: '' }
1690   - { id: 2, class: crrc, preferred-register: '' }
1691   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1692   - { id: 4, class: g8rc, preferred-register: '' }
1693   - { id: 5, class: g8rc, preferred-register: '' }
1694 liveins:         
1695   - { reg: '%x3', virtual-reg: '%0' }
1696   - { reg: '%x4', virtual-reg: '%1' }
1697 frameInfo:       
1698   isFrameAddressTaken: false
1699   isReturnAddressTaken: false
1700   hasStackMap:     false
1701   hasPatchPoint:   false
1702   stackSize:       0
1703   offsetAdjustment: 0
1704   maxAlignment:    0
1705   adjustsStack:    false
1706   hasCalls:        false
1707   stackProtector:  ''
1708   maxCallFrameSize: 4294967295
1709   hasOpaqueSPAdjustment: false
1710   hasVAStart:      false
1711   hasMustTailInVarArgFunc: false
1712   savePoint:       ''
1713   restorePoint:    ''
1714 fixedStack:      
1715 stack:           
1716 constants:       
1717 body:             |
1718   bb.0.entry:
1719     liveins: %x3, %x4
1720   
1721     %1 = COPY %x4
1722     %0 = LI8 65534
1723     %2 = CMPLDI %0, 65535
1724     %4 = ISEL8 %zero8, %0, %2.sub_gt
1725     ; CHECK: COPY %0
1726     %5 = ADD8 killed %4, %1
1727     %x3 = COPY %5
1728     BLR8 implicit %lr8, implicit %rm, implicit %x3
1732 name:            testCMPW
1733 # CHECK-ALL: name: testCMPW
1734 alignment:       4
1735 exposesReturnsTwice: false
1736 legalized:       false
1737 regBankSelected: false
1738 selected:        false
1739 tracksRegLiveness: true
1740 registers:       
1741   - { id: 0, class: g8rc, preferred-register: '' }
1742   - { id: 1, class: g8rc, preferred-register: '' }
1743   - { id: 2, class: gprc, preferred-register: '' }
1744   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1745   - { id: 4, class: crrc, preferred-register: '' }
1746   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1747   - { id: 6, class: gprc, preferred-register: '' }
1748   - { id: 7, class: gprc, preferred-register: '' }
1749   - { id: 8, class: g8rc, preferred-register: '' }
1750 liveins:         
1751   - { reg: '%x3', virtual-reg: '%0' }
1752   - { reg: '%x4', virtual-reg: '%1' }
1753 frameInfo:       
1754   isFrameAddressTaken: false
1755   isReturnAddressTaken: false
1756   hasStackMap:     false
1757   hasPatchPoint:   false
1758   stackSize:       0
1759   offsetAdjustment: 0
1760   maxAlignment:    0
1761   adjustsStack:    false
1762   hasCalls:        false
1763   stackProtector:  ''
1764   maxCallFrameSize: 4294967295
1765   hasOpaqueSPAdjustment: false
1766   hasVAStart:      false
1767   hasMustTailInVarArgFunc: false
1768   savePoint:       ''
1769   restorePoint:    ''
1770 fixedStack:      
1771 stack:           
1772 constants:       
1773 body:             |
1774   bb.0.entry:
1775     liveins: %x3, %x4
1776   
1777     %1 = COPY %x4
1778     %0 = COPY %x3
1779     %2 = LI -1
1780     %3 = COPY %0.sub_32
1781     %4 = CMPW %3, %2
1782     ; CHECK: CMPWI %3, -1
1783     %6 = ISEL %zero, %3, %4.sub_gt
1784     %7 = ADD4 killed %6, %2
1785     %8 = EXTSW_32_64 killed %7
1786     %x3 = COPY %8
1787     BLR8 implicit %lr8, implicit %rm, implicit %x3
1791 name:            testCMPWI
1792 # CHECK-ALL: name: testCMPWI
1793 alignment:       4
1794 exposesReturnsTwice: false
1795 legalized:       false
1796 regBankSelected: false
1797 selected:        false
1798 tracksRegLiveness: true
1799 registers:       
1800   - { id: 0, class: g8rc, preferred-register: '' }
1801   - { id: 1, class: g8rc, preferred-register: '' }
1802   - { id: 2, class: gprc, preferred-register: '' }
1803   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1804   - { id: 4, class: crrc, preferred-register: '' }
1805   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1806   - { id: 6, class: gprc, preferred-register: '' }
1807   - { id: 7, class: gprc, preferred-register: '' }
1808   - { id: 8, class: g8rc, preferred-register: '' }
1809 liveins:         
1810   - { reg: '%x3', virtual-reg: '%0' }
1811   - { reg: '%x4', virtual-reg: '%1' }
1812 frameInfo:       
1813   isFrameAddressTaken: false
1814   isReturnAddressTaken: false
1815   hasStackMap:     false
1816   hasPatchPoint:   false
1817   stackSize:       0
1818   offsetAdjustment: 0
1819   maxAlignment:    0
1820   adjustsStack:    false
1821   hasCalls:        false
1822   stackProtector:  ''
1823   maxCallFrameSize: 4294967295
1824   hasOpaqueSPAdjustment: false
1825   hasVAStart:      false
1826   hasMustTailInVarArgFunc: false
1827   savePoint:       ''
1828   restorePoint:    ''
1829 fixedStack:      
1830 stack:           
1831 constants:       
1832 body:             |
1833   bb.0.entry:
1834     liveins: %x3, %x4
1835   
1836     %1 = COPY %x4
1837     %0 = COPY %x3
1838     %2 = COPY %1.sub_32
1839     %3 = LI -3
1840     %4 = CMPWI %3, 87
1841     %6 = ISEL %zero, %3, %4.sub_gt
1842     ; CHECK: COPY %3
1843     %7 = ADD4 killed %6, killed %2
1844     %8 = EXTSW_32_64 killed %7
1845     %x3 = COPY %8
1846     BLR8 implicit %lr8, implicit %rm, implicit %x3
1850 name:            testCMPLW
1851 # CHECK-ALL: name: testCMPLW
1852 alignment:       4
1853 exposesReturnsTwice: false
1854 legalized:       false
1855 regBankSelected: false
1856 selected:        false
1857 tracksRegLiveness: true
1858 registers:       
1859   - { id: 0, class: g8rc, preferred-register: '' }
1860   - { id: 1, class: g8rc, preferred-register: '' }
1861   - { id: 2, class: gprc, preferred-register: '' }
1862   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1863   - { id: 4, class: crrc, preferred-register: '' }
1864   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1865   - { id: 6, class: gprc, preferred-register: '' }
1866   - { id: 7, class: gprc, preferred-register: '' }
1867   - { id: 8, class: g8rc, preferred-register: '' }
1868   - { id: 9, class: g8rc, preferred-register: '' }
1869   - { id: 10, class: g8rc, preferred-register: '' }
1870 liveins:         
1871   - { reg: '%x3', virtual-reg: '%0' }
1872   - { reg: '%x4', virtual-reg: '%1' }
1873 frameInfo:       
1874   isFrameAddressTaken: false
1875   isReturnAddressTaken: false
1876   hasStackMap:     false
1877   hasPatchPoint:   false
1878   stackSize:       0
1879   offsetAdjustment: 0
1880   maxAlignment:    0
1881   adjustsStack:    false
1882   hasCalls:        false
1883   stackProtector:  ''
1884   maxCallFrameSize: 4294967295
1885   hasOpaqueSPAdjustment: false
1886   hasVAStart:      false
1887   hasMustTailInVarArgFunc: false
1888   savePoint:       ''
1889   restorePoint:    ''
1890 fixedStack:      
1891 stack:           
1892 constants:       
1893 body:             |
1894   bb.0.entry:
1895     liveins: %x3, %x4
1896   
1897     %1 = COPY %x4
1898     %0 = COPY %x3
1899     %2 = LI 32767
1900     %3 = COPY %0.sub_32
1901     %4 = CMPLW %3, %2
1902     ; CHECK: CMPLWI %3, 32767
1903     ; CHECK-LATE: cmplwi 3, 32767
1904     %6 = ISEL %zero, %3, %4.sub_gt
1905     %7 = ADD4 killed %6, %2
1906     %9 = IMPLICIT_DEF
1907     %8 = INSERT_SUBREG %9, killed %7, 1
1908     %10 = RLDICL killed %8, 0, 32
1909     %x3 = COPY %10
1910     BLR8 implicit %lr8, implicit %rm, implicit %x3
1914 name:            testCMPLWI
1915 # CHECK-ALL: name: testCMPLWI
1916 alignment:       4
1917 exposesReturnsTwice: false
1918 legalized:       false
1919 regBankSelected: false
1920 selected:        false
1921 tracksRegLiveness: true
1922 registers:       
1923   - { id: 0, class: g8rc, preferred-register: '' }
1924   - { id: 1, class: g8rc, preferred-register: '' }
1925   - { id: 2, class: gprc, preferred-register: '' }
1926   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
1927   - { id: 4, class: crrc, preferred-register: '' }
1928   - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' }
1929   - { id: 6, class: gprc, preferred-register: '' }
1930   - { id: 7, class: gprc, preferred-register: '' }
1931   - { id: 8, class: g8rc, preferred-register: '' }
1932   - { id: 9, class: g8rc, preferred-register: '' }
1933   - { id: 10, class: g8rc, preferred-register: '' }
1934 liveins:         
1935   - { reg: '%x3', virtual-reg: '%0' }
1936   - { reg: '%x4', virtual-reg: '%1' }
1937 frameInfo:       
1938   isFrameAddressTaken: false
1939   isReturnAddressTaken: false
1940   hasStackMap:     false
1941   hasPatchPoint:   false
1942   stackSize:       0
1943   offsetAdjustment: 0
1944   maxAlignment:    0
1945   adjustsStack:    false
1946   hasCalls:        false
1947   stackProtector:  ''
1948   maxCallFrameSize: 4294967295
1949   hasOpaqueSPAdjustment: false
1950   hasVAStart:      false
1951   hasMustTailInVarArgFunc: false
1952   savePoint:       ''
1953   restorePoint:    ''
1954 fixedStack:      
1955 stack:           
1956 constants:       
1957 body:             |
1958   bb.0.entry:
1959     liveins: %x3, %x4
1960   
1961     %1 = COPY %x4
1962     %0 = COPY %x3
1963     %2 = COPY %1.sub_32
1964     %3 = LI -3
1965     %4 = CMPLWI %3, 87
1966     %6 = ISEL %zero, %3, %4.sub_gt
1967     ; CHECK: LI 0
1968     %7 = ADD4 killed %6, killed %2
1969     %9 = IMPLICIT_DEF
1970     %8 = INSERT_SUBREG %9, killed %7, 1
1971     %10 = RLDICL killed %8, 0, 32
1972     %x3 = COPY %10
1973     BLR8 implicit %lr8, implicit %rm, implicit %x3
1977 name:            testLBZUX
1978 # CHECK-ALL: name: testLBZUX
1979 alignment:       4
1980 exposesReturnsTwice: false
1981 legalized:       false
1982 regBankSelected: false
1983 selected:        false
1984 tracksRegLiveness: true
1985 registers:       
1986   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1987   - { id: 1, class: g8rc, preferred-register: '' }
1988   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
1989   - { id: 3, class: gprc, preferred-register: '' }
1990   - { id: 4, class: g8rc, preferred-register: '' }
1991   - { id: 5, class: g8rc, preferred-register: '' }
1992   - { id: 6, class: g8rc, preferred-register: '' }
1993   - { id: 7, class: gprc, preferred-register: '' }
1994   - { id: 8, class: gprc, preferred-register: '' }
1995   - { id: 9, class: g8rc, preferred-register: '' }
1996   - { id: 10, class: g8rc, preferred-register: '' }
1997   - { id: 11, class: g8rc, preferred-register: '' }
1998   - { id: 12, class: gprc, preferred-register: '' }
1999   - { id: 13, class: gprc, preferred-register: '' }
2000   - { id: 14, class: g8rc, preferred-register: '' }
2001   - { id: 15, class: g8rc, preferred-register: '' }
2002   - { id: 16, class: g8rc, preferred-register: '' }
2003   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2004 liveins:         
2005   - { reg: '%x3', virtual-reg: '%0' }
2006   - { reg: '%x4', virtual-reg: '%1' }
2007 frameInfo:       
2008   isFrameAddressTaken: false
2009   isReturnAddressTaken: false
2010   hasStackMap:     false
2011   hasPatchPoint:   false
2012   stackSize:       0
2013   offsetAdjustment: 0
2014   maxAlignment:    0
2015   adjustsStack:    false
2016   hasCalls:        false
2017   stackProtector:  ''
2018   maxCallFrameSize: 4294967295
2019   hasOpaqueSPAdjustment: false
2020   hasVAStart:      false
2021   hasMustTailInVarArgFunc: false
2022   savePoint:       ''
2023   restorePoint:    ''
2024 fixedStack:      
2025 stack:           
2026 constants:       
2027 body:             |
2028   bb.0.entry:
2029     liveins: %x3, %x4
2030   
2031     %1 = COPY %x4
2032     %0 = COPY %x3
2033     %2 = COPY %1.sub_32
2034     %3 = ADDI %2, 1
2035     %5 = IMPLICIT_DEF
2036     %4 = INSERT_SUBREG %5, killed %3, 1
2037     %6 = RLDICL killed %4, 0, 32
2038     %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2039     %8 = ADDI %2, 2
2040     %10 = IMPLICIT_DEF
2041     %9 = INSERT_SUBREG %10, killed %8, 1
2042     %11 = LI8 -15
2043     %12,%17 = LBZUX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2044     ; CHECK: LBZU -15, %0
2045     ; CHECK-LATE: lbzu 5, -15(3)
2046     %13 = ADD4 killed %12, killed %7
2047     %15 = IMPLICIT_DEF
2048     %14 = INSERT_SUBREG %15, killed %13, 1
2049     %16 = RLWINM8 killed %14, 0, 24, 31
2050     %x3 = COPY %16
2051     BLR8 implicit %lr8, implicit %rm, implicit %x3
2055 name:            testLBZX
2056 # CHECK-ALL: name: testLBZX
2057 alignment:       4
2058 exposesReturnsTwice: false
2059 legalized:       false
2060 regBankSelected: false
2061 selected:        false
2062 tracksRegLiveness: true
2063 registers:       
2064   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2065   - { id: 1, class: g8rc, preferred-register: '' }
2066   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2067   - { id: 3, class: gprc, preferred-register: '' }
2068   - { id: 4, class: g8rc, preferred-register: '' }
2069   - { id: 5, class: g8rc, preferred-register: '' }
2070   - { id: 6, class: g8rc, preferred-register: '' }
2071   - { id: 7, class: gprc, preferred-register: '' }
2072   - { id: 8, class: gprc, preferred-register: '' }
2073   - { id: 9, class: g8rc, preferred-register: '' }
2074   - { id: 10, class: g8rc, preferred-register: '' }
2075   - { id: 11, class: g8rc, preferred-register: '' }
2076   - { id: 12, class: gprc, preferred-register: '' }
2077   - { id: 13, class: gprc, preferred-register: '' }
2078   - { id: 14, class: g8rc, preferred-register: '' }
2079   - { id: 15, class: g8rc, preferred-register: '' }
2080   - { id: 16, class: g8rc, preferred-register: '' }
2081 liveins:         
2082   - { reg: '%x3', virtual-reg: '%0' }
2083   - { reg: '%x4', virtual-reg: '%1' }
2084 frameInfo:       
2085   isFrameAddressTaken: false
2086   isReturnAddressTaken: false
2087   hasStackMap:     false
2088   hasPatchPoint:   false
2089   stackSize:       0
2090   offsetAdjustment: 0
2091   maxAlignment:    0
2092   adjustsStack:    false
2093   hasCalls:        false
2094   stackProtector:  ''
2095   maxCallFrameSize: 4294967295
2096   hasOpaqueSPAdjustment: false
2097   hasVAStart:      false
2098   hasMustTailInVarArgFunc: false
2099   savePoint:       ''
2100   restorePoint:    ''
2101 fixedStack:      
2102 stack:           
2103 constants:       
2104 body:             |
2105   bb.0.entry:
2106     liveins: %x3, %x4
2107   
2108     %1 = COPY %x4
2109     %0 = LI8 45
2110     %2 = COPY %1.sub_32
2111     %3 = ADDI %2, 1
2112     %5 = IMPLICIT_DEF
2113     %4 = INSERT_SUBREG %5, killed %3, 1
2114     %6 = RLDICL killed %4, 0, 32
2115     %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3)
2116     ; CHECK: LBZ 45, killed %6
2117     ; CHECK-LATE: lbz 5, 45(5)
2118     %8 = ADDI %2, 2
2119     %10 = IMPLICIT_DEF
2120     %9 = INSERT_SUBREG %10, killed %8, 1
2121     %11 = RLDICL killed %9, 0, 32
2122     %12 = LBZX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3)
2123     ; CHECK: LBZ 45, killed %11
2124     ; CHECK-LATE: lbz 3, 45(4)
2125     %13 = ADD4 killed %12, killed %7
2126     %15 = IMPLICIT_DEF
2127     %14 = INSERT_SUBREG %15, killed %13, 1
2128     %16 = RLWINM8 killed %14, 0, 24, 31
2129     %x3 = COPY %16
2130     BLR8 implicit %lr8, implicit %rm, implicit %x3
2134 name:            testLHZUX
2135 # CHECK-ALL: name: testLHZUX
2136 alignment:       4
2137 exposesReturnsTwice: false
2138 legalized:       false
2139 regBankSelected: false
2140 selected:        false
2141 tracksRegLiveness: true
2142 registers:       
2143   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2144   - { id: 1, class: g8rc, preferred-register: '' }
2145   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2146   - { id: 3, class: gprc, preferred-register: '' }
2147   - { id: 4, class: g8rc, preferred-register: '' }
2148   - { id: 5, class: g8rc, preferred-register: '' }
2149   - { id: 6, class: g8rc, preferred-register: '' }
2150   - { id: 7, class: gprc, preferred-register: '' }
2151   - { id: 8, class: gprc, preferred-register: '' }
2152   - { id: 9, class: g8rc, preferred-register: '' }
2153   - { id: 10, class: g8rc, preferred-register: '' }
2154   - { id: 11, class: g8rc, preferred-register: '' }
2155   - { id: 12, class: gprc, preferred-register: '' }
2156   - { id: 13, class: gprc, preferred-register: '' }
2157   - { id: 14, class: g8rc, preferred-register: '' }
2158   - { id: 15, class: g8rc, preferred-register: '' }
2159   - { id: 16, class: g8rc, preferred-register: '' }
2160   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2161 liveins:         
2162   - { reg: '%x3', virtual-reg: '%0' }
2163   - { reg: '%x4', virtual-reg: '%1' }
2164 frameInfo:       
2165   isFrameAddressTaken: false
2166   isReturnAddressTaken: false
2167   hasStackMap:     false
2168   hasPatchPoint:   false
2169   stackSize:       0
2170   offsetAdjustment: 0
2171   maxAlignment:    0
2172   adjustsStack:    false
2173   hasCalls:        false
2174   stackProtector:  ''
2175   maxCallFrameSize: 4294967295
2176   hasOpaqueSPAdjustment: false
2177   hasVAStart:      false
2178   hasMustTailInVarArgFunc: false
2179   savePoint:       ''
2180   restorePoint:    ''
2181 fixedStack:      
2182 stack:           
2183 constants:       
2184 body:             |
2185   bb.0.entry:
2186     liveins: %x3, %x4
2187   
2188     %1 = COPY %x4
2189     %0 = COPY %x3
2190     %2 = COPY %1.sub_32
2191     %3 = ADDI %2, 1
2192     %5 = IMPLICIT_DEF
2193     %4 = INSERT_SUBREG %5, killed %3, 1
2194     %6 = RLDIC killed %4, 1, 31
2195     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2196     %8 = ADDI %2, 2
2197     %10 = IMPLICIT_DEF
2198     %9 = INSERT_SUBREG %10, killed %8, 1
2199     %11 = LI8 31440
2200     %12,%17 = LHZUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2201     ; CHECK: LHZU 31440, %0
2202     ; CHECK-LATE: lhzu 5, 31440(3)
2203     %13 = ADD4 killed %12, killed %7
2204     %15 = IMPLICIT_DEF
2205     %14 = INSERT_SUBREG %15, killed %13, 1
2206     %16 = RLWINM8 killed %14, 0, 16, 31
2207     %x3 = COPY %16
2208     BLR8 implicit %lr8, implicit %rm, implicit %x3
2212 name:            testLHZX
2213 # CHECK-ALL: name: testLHZX
2214 alignment:       4
2215 exposesReturnsTwice: false
2216 legalized:       false
2217 regBankSelected: false
2218 selected:        false
2219 tracksRegLiveness: true
2220 registers:       
2221   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2222   - { id: 1, class: g8rc, preferred-register: '' }
2223   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2224   - { id: 3, class: gprc, preferred-register: '' }
2225   - { id: 4, class: g8rc, preferred-register: '' }
2226   - { id: 5, class: g8rc, preferred-register: '' }
2227   - { id: 6, class: g8rc, preferred-register: '' }
2228   - { id: 7, class: gprc, preferred-register: '' }
2229   - { id: 8, class: gprc, preferred-register: '' }
2230   - { id: 9, class: g8rc, preferred-register: '' }
2231   - { id: 10, class: g8rc, preferred-register: '' }
2232   - { id: 11, class: g8rc, preferred-register: '' }
2233   - { id: 12, class: gprc, preferred-register: '' }
2234   - { id: 13, class: gprc, preferred-register: '' }
2235   - { id: 14, class: g8rc, preferred-register: '' }
2236   - { id: 15, class: g8rc, preferred-register: '' }
2237   - { id: 16, class: g8rc, preferred-register: '' }
2238 liveins:         
2239   - { reg: '%x3', virtual-reg: '%0' }
2240   - { reg: '%x4', virtual-reg: '%1' }
2241 frameInfo:       
2242   isFrameAddressTaken: false
2243   isReturnAddressTaken: false
2244   hasStackMap:     false
2245   hasPatchPoint:   false
2246   stackSize:       0
2247   offsetAdjustment: 0
2248   maxAlignment:    0
2249   adjustsStack:    false
2250   hasCalls:        false
2251   stackProtector:  ''
2252   maxCallFrameSize: 4294967295
2253   hasOpaqueSPAdjustment: false
2254   hasVAStart:      false
2255   hasMustTailInVarArgFunc: false
2256   savePoint:       ''
2257   restorePoint:    ''
2258 fixedStack:      
2259 stack:           
2260 constants:       
2261 body:             |
2262   bb.0.entry:
2263     liveins: %x3, %x4
2264   
2265     %1 = COPY %x4
2266     %0 = COPY %x3
2267     %2 = COPY %1.sub_32
2268     %3 = ADDI %2, 1
2269     %5 = IMPLICIT_DEF
2270     %4 = INSERT_SUBREG %5, killed %3, 1
2271     %6 = RLDIC killed %4, 1, 31
2272     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2273     %8 = ADDI %2, 2
2274     %10 = IMPLICIT_DEF
2275     %9 = INSERT_SUBREG %10, killed %8, 1
2276     %11 = LI8 882
2277     %12 = LHZX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2278     ; CHECK: LHZ 882, %0
2279     ; CHECK-LATE: lhz 3, 882(3)
2280     %13 = ADD4 killed %12, killed %7
2281     %15 = IMPLICIT_DEF
2282     %14 = INSERT_SUBREG %15, killed %13, 1
2283     %16 = RLWINM8 killed %14, 0, 16, 31
2284     %x3 = COPY %16
2285     BLR8 implicit %lr8, implicit %rm, implicit %x3
2289 name:            testLHAUX
2290 # CHECK-ALL: name: testLHAUX
2291 alignment:       4
2292 exposesReturnsTwice: false
2293 legalized:       false
2294 regBankSelected: false
2295 selected:        false
2296 tracksRegLiveness: true
2297 registers:       
2298   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2299   - { id: 1, class: g8rc, preferred-register: '' }
2300   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2301   - { id: 3, class: gprc, preferred-register: '' }
2302   - { id: 4, class: g8rc, preferred-register: '' }
2303   - { id: 5, class: g8rc, preferred-register: '' }
2304   - { id: 6, class: g8rc, preferred-register: '' }
2305   - { id: 7, class: gprc, preferred-register: '' }
2306   - { id: 8, class: gprc, preferred-register: '' }
2307   - { id: 9, class: g8rc, preferred-register: '' }
2308   - { id: 10, class: g8rc, preferred-register: '' }
2309   - { id: 11, class: g8rc, preferred-register: '' }
2310   - { id: 12, class: gprc, preferred-register: '' }
2311   - { id: 13, class: gprc, preferred-register: '' }
2312   - { id: 14, class: g8rc, preferred-register: '' }
2313   - { id: 15, class: g8rc, preferred-register: '' }
2314   - { id: 16, class: g8rc, preferred-register: '' }
2315   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2316 liveins:         
2317   - { reg: '%x3', virtual-reg: '%0' }
2318   - { reg: '%x4', virtual-reg: '%1' }
2319 frameInfo:       
2320   isFrameAddressTaken: false
2321   isReturnAddressTaken: false
2322   hasStackMap:     false
2323   hasPatchPoint:   false
2324   stackSize:       0
2325   offsetAdjustment: 0
2326   maxAlignment:    0
2327   adjustsStack:    false
2328   hasCalls:        false
2329   stackProtector:  ''
2330   maxCallFrameSize: 4294967295
2331   hasOpaqueSPAdjustment: false
2332   hasVAStart:      false
2333   hasMustTailInVarArgFunc: false
2334   savePoint:       ''
2335   restorePoint:    ''
2336 fixedStack:      
2337 stack:           
2338 constants:       
2339 body:             |
2340   bb.0.entry:
2341     liveins: %x3, %x4
2342   
2343     %1 = COPY %x4
2344     %0 = COPY %x3
2345     %2 = COPY %1.sub_32
2346     %3 = ADDI %2, 1
2347     %5 = IMPLICIT_DEF
2348     %4 = INSERT_SUBREG %5, killed %3, 1
2349     %6 = RLDIC %4, 1, 31
2350     %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2351     %8 = ADDI %2, 2
2352     %10 = IMPLICIT_DEF
2353     %9 = INSERT_SUBREG %10, killed %8, 1
2354     %11 = LI8 400
2355     %12,%17 = LHAUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2356     ; CHECK: LHAU 400, %0
2357     ; CHECK-LATE: lhau 5, 400(3)
2358     %13 = ADD4 killed %12, killed %7
2359     %15 = IMPLICIT_DEF
2360     %14 = INSERT_SUBREG %15, killed %13, 1
2361     %16 = EXTSH8 killed %14
2362     %x3 = COPY %16
2363     BLR8 implicit %lr8, implicit %rm, implicit %x3
2367 name:            testLHAX
2368 # CHECK-ALL: name: testLHAX
2369 alignment:       4
2370 exposesReturnsTwice: false
2371 legalized:       false
2372 regBankSelected: false
2373 selected:        false
2374 tracksRegLiveness: true
2375 registers:       
2376   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2377   - { id: 1, class: g8rc, preferred-register: '' }
2378   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2379   - { id: 3, class: gprc, preferred-register: '' }
2380   - { id: 4, class: g8rc, preferred-register: '' }
2381   - { id: 5, class: g8rc, preferred-register: '' }
2382   - { id: 6, class: g8rc, preferred-register: '' }
2383   - { id: 7, class: gprc, preferred-register: '' }
2384   - { id: 8, class: gprc, preferred-register: '' }
2385   - { id: 9, class: g8rc, preferred-register: '' }
2386   - { id: 10, class: g8rc, preferred-register: '' }
2387   - { id: 11, class: g8rc, preferred-register: '' }
2388   - { id: 12, class: gprc, preferred-register: '' }
2389   - { id: 13, class: gprc, preferred-register: '' }
2390   - { id: 14, class: g8rc, preferred-register: '' }
2391   - { id: 15, class: g8rc, preferred-register: '' }
2392   - { id: 16, class: g8rc, preferred-register: '' }
2393 liveins:         
2394   - { reg: '%x3', virtual-reg: '%0' }
2395   - { reg: '%x4', virtual-reg: '%1' }
2396 frameInfo:       
2397   isFrameAddressTaken: false
2398   isReturnAddressTaken: false
2399   hasStackMap:     false
2400   hasPatchPoint:   false
2401   stackSize:       0
2402   offsetAdjustment: 0
2403   maxAlignment:    0
2404   adjustsStack:    false
2405   hasCalls:        false
2406   stackProtector:  ''
2407   maxCallFrameSize: 4294967295
2408   hasOpaqueSPAdjustment: false
2409   hasVAStart:      false
2410   hasMustTailInVarArgFunc: false
2411   savePoint:       ''
2412   restorePoint:    ''
2413 fixedStack:      
2414 stack:           
2415 constants:       
2416 body:             |
2417   bb.0.entry:
2418     liveins: %x3, %x4
2419   
2420     %1 = COPY %x4
2421     %0 = COPY %x3
2422     %2 = COPY %1.sub_32
2423     %3 = ADDI %2, 1
2424     %5 = IMPLICIT_DEF
2425     %4 = INSERT_SUBREG %5, killed %3, 1
2426     %6 = LI8 -999
2427     %7 = LHAX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6)
2428     ; CHECK: LHA -999, %0
2429     ; CHECK-LATE: lha 4, -999(3)
2430     %8 = ADDI %2, 2
2431     %10 = IMPLICIT_DEF
2432     %9 = INSERT_SUBREG %10, killed %8, 1
2433     %11 = LI8 999
2434     %12 = LHAX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6)
2435     ; CHECK: LHA 999, %0 
2436     ; CHECK-LATE: lha 3, 999(3)
2437     %13 = ADD4 killed %12, killed %7
2438     %15 = IMPLICIT_DEF
2439     %14 = INSERT_SUBREG %15, killed %13, 1
2440     %16 = EXTSH8 killed %14
2441     %x3 = COPY %16
2442     BLR8 implicit %lr8, implicit %rm, implicit %x3
2446 name:            testLWZUX
2447 # CHECK-ALL: name: testLWZUX
2448 alignment:       4
2449 exposesReturnsTwice: false
2450 legalized:       false
2451 regBankSelected: false
2452 selected:        false
2453 tracksRegLiveness: true
2454 registers:       
2455   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2456   - { id: 1, class: g8rc, preferred-register: '' }
2457   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2458   - { id: 3, class: gprc, preferred-register: '' }
2459   - { id: 4, class: g8rc, preferred-register: '' }
2460   - { id: 5, class: g8rc, preferred-register: '' }
2461   - { id: 6, class: g8rc, preferred-register: '' }
2462   - { id: 7, class: gprc, preferred-register: '' }
2463   - { id: 8, class: gprc, preferred-register: '' }
2464   - { id: 9, class: g8rc, preferred-register: '' }
2465   - { id: 10, class: g8rc, preferred-register: '' }
2466   - { id: 11, class: g8rc, preferred-register: '' }
2467   - { id: 12, class: gprc, preferred-register: '' }
2468   - { id: 13, class: gprc, preferred-register: '' }
2469   - { id: 14, class: g8rc, preferred-register: '' }
2470   - { id: 15, class: g8rc, preferred-register: '' }
2471   - { id: 16, class: g8rc, preferred-register: '' }
2472   - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2473   - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2474 liveins:         
2475   - { reg: '%x3', virtual-reg: '%0' }
2476   - { reg: '%x4', virtual-reg: '%1' }
2477 frameInfo:       
2478   isFrameAddressTaken: false
2479   isReturnAddressTaken: false
2480   hasStackMap:     false
2481   hasPatchPoint:   false
2482   stackSize:       0
2483   offsetAdjustment: 0
2484   maxAlignment:    0
2485   adjustsStack:    false
2486   hasCalls:        false
2487   stackProtector:  ''
2488   maxCallFrameSize: 4294967295
2489   hasOpaqueSPAdjustment: false
2490   hasVAStart:      false
2491   hasMustTailInVarArgFunc: false
2492   savePoint:       ''
2493   restorePoint:    ''
2494 fixedStack:      
2495 stack:           
2496 constants:       
2497 body:             |
2498   bb.0.entry:
2499     liveins: %x3, %x4
2500   
2501     %1 = COPY %x4
2502     %0 = COPY %x3
2503     %2 = COPY %1.sub_32
2504     %3 = ADDI %2, 1
2505     %5 = IMPLICIT_DEF
2506     %4 = INSERT_SUBREG %5, killed %3, 1
2507     %6 = LI8 889
2508     %7,%17 = LWZUX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2509     ; CHECK: LWZU 889, %0
2510     ; CHECK-LATE: lwzu 5, 889(4)
2511     %8 = ADDI %2, 2
2512     %10 = IMPLICIT_DEF
2513     %9 = INSERT_SUBREG %10, killed %8, 1
2514     %11 = LI8 -2
2515     %12,%18 = LWZUX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2516     ; CHECK: LWZU -2, %0
2517     ; CHECK-LATE: lwzu 4, -2(3)
2518     %13 = ADD4 killed %12, killed %7
2519     %15 = IMPLICIT_DEF
2520     %14 = INSERT_SUBREG %15, killed %13, 1
2521     %16 = RLDICL killed %14, 0, 32
2522     %x3 = COPY %16
2523     BLR8 implicit %lr8, implicit %rm, implicit %x3
2527 name:            testLWZX
2528 # CHECK-ALL: name: testLWZX
2529 alignment:       4
2530 exposesReturnsTwice: false
2531 legalized:       false
2532 regBankSelected: false
2533 selected:        false
2534 tracksRegLiveness: true
2535 registers:       
2536   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2537   - { id: 1, class: g8rc, preferred-register: '' }
2538   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2539   - { id: 3, class: gprc, preferred-register: '' }
2540   - { id: 4, class: g8rc, preferred-register: '' }
2541   - { id: 5, class: g8rc, preferred-register: '' }
2542   - { id: 6, class: g8rc, preferred-register: '' }
2543   - { id: 7, class: gprc, preferred-register: '' }
2544   - { id: 8, class: gprc, preferred-register: '' }
2545   - { id: 9, class: g8rc, preferred-register: '' }
2546   - { id: 10, class: g8rc, preferred-register: '' }
2547   - { id: 11, class: g8rc, preferred-register: '' }
2548   - { id: 12, class: gprc, preferred-register: '' }
2549   - { id: 13, class: gprc, preferred-register: '' }
2550   - { id: 14, class: g8rc, preferred-register: '' }
2551   - { id: 15, class: g8rc, preferred-register: '' }
2552   - { id: 16, class: g8rc, preferred-register: '' }
2553 liveins:         
2554   - { reg: '%x3', virtual-reg: '%0' }
2555   - { reg: '%x4', virtual-reg: '%1' }
2556 frameInfo:       
2557   isFrameAddressTaken: false
2558   isReturnAddressTaken: false
2559   hasStackMap:     false
2560   hasPatchPoint:   false
2561   stackSize:       0
2562   offsetAdjustment: 0
2563   maxAlignment:    0
2564   adjustsStack:    false
2565   hasCalls:        false
2566   stackProtector:  ''
2567   maxCallFrameSize: 4294967295
2568   hasOpaqueSPAdjustment: false
2569   hasVAStart:      false
2570   hasMustTailInVarArgFunc: false
2571   savePoint:       ''
2572   restorePoint:    ''
2573 fixedStack:      
2574 stack:           
2575 constants:       
2576 body:             |
2577   bb.0.entry:
2578     liveins: %x3, %x4
2579   
2580     %1 = COPY %x4
2581     %0 = LI8 1000
2582     %2 = COPY %1.sub_32
2583     %3 = ADDI %2, 1
2584     %5 = IMPLICIT_DEF
2585     %4 = INSERT_SUBREG %5, killed %3, 1
2586     %6 = RLDIC %4, 2, 30
2587     %7 = LWZX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2588     ; CHECK: LWZ 1000, killed %6
2589     ; CHECK-LATE: lwz 5, 1000(5)
2590     %8 = ADDI %2, 2
2591     %10 = IMPLICIT_DEF
2592     %9 = INSERT_SUBREG %10, killed %8, 1
2593     %11 = RLDIC %9, 2, 30
2594     %12 = LWZX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2595     ; CHECK: LWZ 1000, killed %11
2596     ; CHECK-LATE: lwz 3, 1000(4)
2597     %13 = ADD4 killed %12, killed %7
2598     %15 = IMPLICIT_DEF
2599     %14 = INSERT_SUBREG %15, killed %13, 1
2600     %16 = RLDICL killed %14, 0, 32
2601     %x3 = COPY %16
2602     BLR8 implicit %lr8, implicit %rm, implicit %x3
2606 name:            testLWAX
2607 # CHECK-ALL: name: testLWAX
2608 alignment:       4
2609 exposesReturnsTwice: false
2610 legalized:       false
2611 regBankSelected: false
2612 selected:        false
2613 tracksRegLiveness: true
2614 registers:       
2615   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2616   - { id: 1, class: g8rc, preferred-register: '' }
2617   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2618   - { id: 3, class: gprc, preferred-register: '' }
2619   - { id: 4, class: g8rc, preferred-register: '' }
2620   - { id: 5, class: g8rc, preferred-register: '' }
2621   - { id: 6, class: g8rc, preferred-register: '' }
2622   - { id: 7, class: g8rc, preferred-register: '' }
2623   - { id: 8, class: gprc, preferred-register: '' }
2624   - { id: 9, class: g8rc, preferred-register: '' }
2625   - { id: 10, class: g8rc, preferred-register: '' }
2626   - { id: 11, class: g8rc, preferred-register: '' }
2627   - { id: 12, class: g8rc, preferred-register: '' }
2628   - { id: 13, class: g8rc, preferred-register: '' }
2629 liveins:         
2630   - { reg: '%x3', virtual-reg: '%0' }
2631   - { reg: '%x4', virtual-reg: '%1' }
2632 frameInfo:       
2633   isFrameAddressTaken: false
2634   isReturnAddressTaken: false
2635   hasStackMap:     false
2636   hasPatchPoint:   false
2637   stackSize:       0
2638   offsetAdjustment: 0
2639   maxAlignment:    0
2640   adjustsStack:    false
2641   hasCalls:        false
2642   stackProtector:  ''
2643   maxCallFrameSize: 4294967295
2644   hasOpaqueSPAdjustment: false
2645   hasVAStart:      false
2646   hasMustTailInVarArgFunc: false
2647   savePoint:       ''
2648   restorePoint:    ''
2649 fixedStack:      
2650 stack:           
2651 constants:       
2652 body:             |
2653   bb.0.entry:
2654     liveins: %x3, %x4
2655   
2656     %1 = COPY %x4
2657     %0 = LI8 444
2658     %2 = COPY %1.sub_32
2659     %3 = ADDI %2, 1
2660     %5 = IMPLICIT_DEF
2661     %4 = INSERT_SUBREG %5, killed %3, 1
2662     %6 = RLDIC %4, 2, 30
2663     %7 = LWAX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8)
2664     ; CHECK: LWA 444, killed %6
2665     ; CHECK-LATE: lwa 5, 444(5)
2666     %8 = ADDI %2, 2
2667     %10 = IMPLICIT_DEF
2668     %9 = INSERT_SUBREG %10, killed %8, 1
2669     %11 = RLDIC %9, 2, 30
2670     %12 = LWAX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8)
2671     ; CHECK: LWA 444, killed %11
2672     ; CHECK-LATE: lwa 3, 444(4)
2673     %13 = ADD8 killed %12, killed %7
2674     %x3 = COPY %13
2675     BLR8 implicit %lr8, implicit %rm, implicit %x3
2679 name:            testLDUX
2680 # CHECK-ALL: name: testLDUX
2681 alignment:       4
2682 exposesReturnsTwice: false
2683 legalized:       false
2684 regBankSelected: false
2685 selected:        false
2686 tracksRegLiveness: true
2687 registers:       
2688   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2689   - { id: 1, class: g8rc, preferred-register: '' }
2690   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2691   - { id: 3, class: gprc, preferred-register: '' }
2692   - { id: 4, class: g8rc, preferred-register: '' }
2693   - { id: 5, class: g8rc, preferred-register: '' }
2694   - { id: 6, class: g8rc, preferred-register: '' }
2695   - { id: 7, class: g8rc, preferred-register: '' }
2696   - { id: 8, class: gprc, preferred-register: '' }
2697   - { id: 9, class: g8rc, preferred-register: '' }
2698   - { id: 10, class: g8rc, preferred-register: '' }
2699   - { id: 11, class: g8rc, preferred-register: '' }
2700   - { id: 12, class: g8rc, preferred-register: '' }
2701   - { id: 13, class: g8rc, preferred-register: '' }
2702   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2703   - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2704 liveins:         
2705   - { reg: '%x3', virtual-reg: '%0' }
2706   - { reg: '%x4', virtual-reg: '%1' }
2707 frameInfo:       
2708   isFrameAddressTaken: false
2709   isReturnAddressTaken: false
2710   hasStackMap:     false
2711   hasPatchPoint:   false
2712   stackSize:       0
2713   offsetAdjustment: 0
2714   maxAlignment:    0
2715   adjustsStack:    false
2716   hasCalls:        false
2717   stackProtector:  ''
2718   maxCallFrameSize: 4294967295
2719   hasOpaqueSPAdjustment: false
2720   hasVAStart:      false
2721   hasMustTailInVarArgFunc: false
2722   savePoint:       ''
2723   restorePoint:    ''
2724 fixedStack:      
2725 stack:           
2726 constants:       
2727 body:             |
2728   bb.0.entry:
2729     liveins: %x3, %x4
2730   
2731     %1 = COPY %x4
2732     %0 = COPY %x3
2733     %2 = COPY %1.sub_32
2734     %3 = ADDI %2, 1
2735     %5 = IMPLICIT_DEF
2736     %4 = INSERT_SUBREG %5, killed %3, 1
2737     %6 = LI8 100
2738     %7,%14 = LDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2739     ; CHECK: LDU 100, %0
2740     ; CHECK-LATE: ldu 5, 100(4)
2741     %8 = ADDI %2, 2
2742     %10 = IMPLICIT_DEF
2743     %9 = INSERT_SUBREG %10, killed %8, 1
2744     %11 = LI8 200
2745     %12,%15 = LDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2746     ; CHECK: LDU 200, %0
2747     ; CHECK-LATE: ldu 4, 200(3)
2748     %13 = ADD8 killed %12, killed %7
2749     %x3 = COPY %13
2750     BLR8 implicit %lr8, implicit %rm, implicit %x3
2754 name:            testLDX
2755 # CHECK-ALL: name: testLDX
2756 alignment:       4
2757 exposesReturnsTwice: false
2758 legalized:       false
2759 regBankSelected: false
2760 selected:        false
2761 tracksRegLiveness: true
2762 registers:       
2763   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2764   - { id: 1, class: g8rc, preferred-register: '' }
2765   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2766   - { id: 3, class: gprc, preferred-register: '' }
2767   - { id: 4, class: g8rc, preferred-register: '' }
2768   - { id: 5, class: g8rc, preferred-register: '' }
2769   - { id: 6, class: g8rc, preferred-register: '' }
2770   - { id: 7, class: g8rc, preferred-register: '' }
2771   - { id: 8, class: gprc, preferred-register: '' }
2772   - { id: 9, class: g8rc, preferred-register: '' }
2773   - { id: 10, class: g8rc, preferred-register: '' }
2774   - { id: 11, class: g8rc, preferred-register: '' }
2775   - { id: 12, class: g8rc, preferred-register: '' }
2776   - { id: 13, class: g8rc, preferred-register: '' }
2777 liveins:         
2778   - { reg: '%x3', virtual-reg: '%0' }
2779   - { reg: '%x4', virtual-reg: '%1' }
2780 frameInfo:       
2781   isFrameAddressTaken: false
2782   isReturnAddressTaken: false
2783   hasStackMap:     false
2784   hasPatchPoint:   false
2785   stackSize:       0
2786   offsetAdjustment: 0
2787   maxAlignment:    0
2788   adjustsStack:    false
2789   hasCalls:        false
2790   stackProtector:  ''
2791   maxCallFrameSize: 4294967295
2792   hasOpaqueSPAdjustment: false
2793   hasVAStart:      false
2794   hasMustTailInVarArgFunc: false
2795   savePoint:       ''
2796   restorePoint:    ''
2797 fixedStack:      
2798 stack:           
2799 constants:       
2800 body:             |
2801   bb.0.entry:
2802     liveins: %x3, %x4
2803   
2804     %1 = COPY %x4
2805     %0 = COPY %x3
2806     %2 = COPY %1.sub_32
2807     %3 = ADDI %2, 1
2808     %5 = IMPLICIT_DEF
2809     %4 = INSERT_SUBREG %5, killed %3, 1
2810     %6 = LI8 120
2811     %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10)
2812     ; CHECK: LD 120, %0
2813     ; CHECK-LATE: ld 4, 120(3)
2814     %8 = ADDI %2, 2
2815     %10 = IMPLICIT_DEF
2816     %9 = INSERT_SUBREG %10, killed %8, 1
2817     %11 = LI8 280
2818     %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10)
2819     ; CHECK: LD 280, %0
2820     ; CHECK-LATE: ld 12, 280(3)
2821     %13 = ADD8 killed %12, killed %7
2822     %x3 = COPY %13
2823     BLR8 implicit %lr8, implicit %rm, implicit %x3
2827 name:            testLFDUX
2828 # CHECK-ALL: name: testLFDUX
2829 alignment:       4
2830 exposesReturnsTwice: false
2831 legalized:       false
2832 regBankSelected: false
2833 selected:        false
2834 tracksRegLiveness: true
2835 registers:       
2836   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2837   - { id: 1, class: g8rc, preferred-register: '' }
2838   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2839   - { id: 3, class: gprc, preferred-register: '' }
2840   - { id: 4, class: g8rc, preferred-register: '' }
2841   - { id: 5, class: g8rc, preferred-register: '' }
2842   - { id: 6, class: g8rc, preferred-register: '' }
2843   - { id: 7, class: f8rc, preferred-register: '' }
2844   - { id: 8, class: gprc, preferred-register: '' }
2845   - { id: 9, class: g8rc, preferred-register: '' }
2846   - { id: 10, class: g8rc, preferred-register: '' }
2847   - { id: 11, class: g8rc, preferred-register: '' }
2848   - { id: 12, class: f8rc, preferred-register: '' }
2849   - { id: 13, class: f8rc, preferred-register: '' }
2850   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2851   - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2852 liveins:         
2853   - { reg: '%x3', virtual-reg: '%0' }
2854   - { reg: '%x4', virtual-reg: '%1' }
2855 frameInfo:       
2856   isFrameAddressTaken: false
2857   isReturnAddressTaken: false
2858   hasStackMap:     false
2859   hasPatchPoint:   false
2860   stackSize:       0
2861   offsetAdjustment: 0
2862   maxAlignment:    0
2863   adjustsStack:    false
2864   hasCalls:        false
2865   stackProtector:  ''
2866   maxCallFrameSize: 4294967295
2867   hasOpaqueSPAdjustment: false
2868   hasVAStart:      false
2869   hasMustTailInVarArgFunc: false
2870   savePoint:       ''
2871   restorePoint:    ''
2872 fixedStack:      
2873 stack:           
2874 constants:       
2875 body:             |
2876   bb.0.entry:
2877     liveins: %x3, %x4
2878   
2879     %1 = COPY %x4
2880     %0 = COPY %x3
2881     %2 = COPY %1.sub_32
2882     %3 = ADDI %2, 1
2883     %5 = IMPLICIT_DEF
2884     %4 = INSERT_SUBREG %5, killed %3, 1
2885     %6 = LI8 440
2886     %7,%14 = LFDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
2887     ; CHECK: LFDU 440, %0
2888     ; CHECK-LATE: lfdu 0, 440(4)
2889     %8 = ADDI %2, 2
2890     %10 = IMPLICIT_DEF
2891     %9 = INSERT_SUBREG %10, killed %8, 1
2892     %11 = LI8 16
2893     %12,%15 = LFDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
2894     ; CHECK: LFDU 16, %0
2895     ; CHECK-LATE: lfdu 1, 16(3)
2896     %13 = FADD killed %7, killed %12, implicit %rm
2897     %f1 = COPY %13
2898     BLR8 implicit %lr8, implicit %rm, implicit %f1
2902 name:            testLFDX
2903 # CHECK-ALL: name: testLFDX
2904 alignment:       4
2905 exposesReturnsTwice: false
2906 legalized:       false
2907 regBankSelected: false
2908 selected:        false
2909 tracksRegLiveness: true
2910 registers:       
2911   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2912   - { id: 1, class: g8rc, preferred-register: '' }
2913   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
2914   - { id: 3, class: gprc, preferred-register: '' }
2915   - { id: 4, class: g8rc, preferred-register: '' }
2916   - { id: 5, class: g8rc, preferred-register: '' }
2917   - { id: 6, class: g8rc, preferred-register: '' }
2918   - { id: 7, class: f8rc, preferred-register: '' }
2919   - { id: 8, class: gprc, preferred-register: '' }
2920   - { id: 9, class: g8rc, preferred-register: '' }
2921   - { id: 10, class: g8rc, preferred-register: '' }
2922   - { id: 11, class: g8rc, preferred-register: '' }
2923   - { id: 12, class: f8rc, preferred-register: '' }
2924   - { id: 13, class: f8rc, preferred-register: '' }
2925 liveins:         
2926   - { reg: '%x3', virtual-reg: '%0' }
2927   - { reg: '%x4', virtual-reg: '%1' }
2928 frameInfo:       
2929   isFrameAddressTaken: false
2930   isReturnAddressTaken: false
2931   hasStackMap:     false
2932   hasPatchPoint:   false
2933   stackSize:       0
2934   offsetAdjustment: 0
2935   maxAlignment:    0
2936   adjustsStack:    false
2937   hasCalls:        false
2938   stackProtector:  ''
2939   maxCallFrameSize: 4294967295
2940   hasOpaqueSPAdjustment: false
2941   hasVAStart:      false
2942   hasMustTailInVarArgFunc: false
2943   savePoint:       ''
2944   restorePoint:    ''
2945 fixedStack:      
2946 stack:           
2947 constants:       
2948 body:             |
2949   bb.0.entry:
2950     liveins: %x3, %x4
2951   
2952     %1 = COPY %x4
2953     %0 = LI8 -20
2954     %2 = COPY %1.sub_32
2955     %3 = ADDI %2, 1
2956     %5 = IMPLICIT_DEF
2957     %4 = INSERT_SUBREG %5, killed %3, 1
2958     %6 = RLDIC %4, 3, 29
2959     %7 = LFDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12)
2960     ; CHECK: LFD -20, killed %6
2961     ; CHECK-LATE: lfd 0, -20(5)
2962     %8 = ADDI %2, 2
2963     %10 = IMPLICIT_DEF
2964     %9 = INSERT_SUBREG %10, killed %8, 1
2965     %11 = RLDIC %9, 3, 29
2966     %12 = LFDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12)
2967     ; CHECK: LFD -20, killed %11
2968     ; CHECK-LATE: lfd 1, -20(4)
2969     %13 = FADD killed %7, killed %12, implicit %rm
2970     %f1 = COPY %13
2971     BLR8 implicit %lr8, implicit %rm, implicit %f1
2975 name:            testLFSUX
2976 # CHECK-ALL: name: testLFSUX
2977 alignment:       4
2978 exposesReturnsTwice: false
2979 legalized:       false
2980 regBankSelected: false
2981 selected:        false
2982 tracksRegLiveness: true
2983 registers:       
2984   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2985   - { id: 1, class: g8rc, preferred-register: '' }
2986   - { id: 2, class: g8rc, preferred-register: '' }
2987   - { id: 3, class: f8rc, preferred-register: '' }
2988   - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' }
2989   - { id: 5, class: f8rc, preferred-register: '' }
2990   - { id: 6, class: g8rc, preferred-register: '' }
2991   - { id: 7, class: gprc, preferred-register: '' }
2992   - { id: 8, class: f8rc, preferred-register: '' }
2993   - { id: 9, class: f8rc, preferred-register: '' }
2994   - { id: 10, class: f8rc, preferred-register: '' }
2995   - { id: 11, class: g8rc, preferred-register: '' }
2996   - { id: 12, class: gprc, preferred-register: '' }
2997   - { id: 13, class: f8rc, preferred-register: '' }
2998   - { id: 14, class: f8rc, preferred-register: '' }
2999   - { id: 15, class: f8rc, preferred-register: '' }
3000   - { id: 16, class: g8rc, preferred-register: '' }
3001   - { id: 17, class: gprc, preferred-register: '' }
3002   - { id: 18, class: f8rc, preferred-register: '' }
3003   - { id: 19, class: f8rc, preferred-register: '' }
3004   - { id: 20, class: f8rc, preferred-register: '' }
3005   - { id: 21, class: g8rc, preferred-register: '' }
3006   - { id: 22, class: gprc, preferred-register: '' }
3007   - { id: 23, class: g8rc, preferred-register: '' }
3008   - { id: 24, class: vrrc, preferred-register: '' }
3009 liveins:         
3010   - { reg: '%x3', virtual-reg: '%0' }
3011   - { reg: '%x4', virtual-reg: '%1' }
3012 frameInfo:       
3013   isFrameAddressTaken: false
3014   isReturnAddressTaken: false
3015   hasStackMap:     false
3016   hasPatchPoint:   false
3017   stackSize:       0
3018   offsetAdjustment: 0
3019   maxAlignment:    16
3020   adjustsStack:    false
3021   hasCalls:        false
3022   stackProtector:  ''
3023   maxCallFrameSize: 4294967295
3024   hasOpaqueSPAdjustment: false
3025   hasVAStart:      false
3026   hasMustTailInVarArgFunc: false
3027   savePoint:       ''
3028   restorePoint:    ''
3029 fixedStack:      
3030 stack:           
3031   - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16, 
3032       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
3033       local-offset: -16, di-variable: '', di-expression: '', di-location: '' }
3034   - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4, 
3035       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
3036       local-offset: -20, di-variable: '', di-expression: '', di-location: '' }
3037   - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4, 
3038       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
3039       local-offset: -24, di-variable: '', di-expression: '', di-location: '' }
3040   - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4, 
3041       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
3042       local-offset: -28, di-variable: '', di-expression: '', di-location: '' }
3043   - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4, 
3044       stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 
3045       local-offset: -32, di-variable: '', di-expression: '', di-location: '' }
3046 constants:       
3047 body:             |
3048   bb.0.entry:
3049     liveins: %x3, %x4
3050   
3051     %1 = COPY %x4
3052     %0 = COPY %x3
3053     %2 = LI8 72
3054     %3, %4 = LFSUX %0, killed %2 :: (load 4 from %ir.arrayidx, !tbaa !14)
3055     ; CHECK: LFSU 72, %0
3056     ; CHECK-LATE: lfsu 0, 72(3)
3057     %5 = FCTIWUZ killed %3, implicit %rm
3058     %6 = ADDI8 %stack.4, 0
3059     STFIWX killed %5, %zero8, killed %6
3060     %7 = LWZ 0, %stack.4 :: (load 4 from %stack.4)
3061     %8 = LFS 4, %4 :: (load 4 from %ir.3, !tbaa !14)
3062     %10 = FCTIWUZ %8, implicit %rm
3063     %11 = ADDI8 %stack.1, 0
3064     STFIWX killed %10, %zero8, killed %11
3065     %12 = LWZ 0, %stack.1 :: (load 4 from %stack.1)
3066     %13 = LFS 8, %4 :: (load 4 from %ir.5, !tbaa !14)
3067     %15 = FCTIWUZ %13, implicit %rm
3068     %16 = ADDI8 %stack.2, 0
3069     STFIWX killed %15, %zero8, killed %16
3070     %17 = LWZ 0, %stack.2 :: (load 4 from %stack.2)
3071     %18 = LFS 12, %4 :: (load 4 from %ir.7, !tbaa !14)
3072     %20 = FCTIWUZ %18, implicit %rm
3073     %21 = ADDI8 %stack.3, 0
3074     STFIWX killed %20, %zero8, killed %21
3075     %22 = LWZ 0, %stack.3 :: (load 4 from %stack.3)
3076     STW killed %7, 0, %stack.0 :: (store 4 into %stack.0, align 16)
3077     STW killed %22, 12, %stack.0 :: (store 4 into %stack.0 + 12)
3078     STW killed %17, 8, %stack.0 :: (store 4 into %stack.0 + 8, align 8)
3079     STW killed %12, 4, %stack.0 :: (store 4 into %stack.0 + 4)
3080     %23 = ADDI8 %stack.0, 0
3081     %24 = LVX %zero8, killed %23 :: (load 16 from %stack.0)
3082     %v2 = COPY %24
3083     BLR8 implicit %lr8, implicit %rm, implicit %v2
3087 name:            testLFSX
3088 # CHECK-ALL: name: testLFSX
3089 alignment:       4
3090 exposesReturnsTwice: false
3091 legalized:       false
3092 regBankSelected: false
3093 selected:        false
3094 tracksRegLiveness: true
3095 registers:       
3096   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3097   - { id: 1, class: g8rc, preferred-register: '' }
3098   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3099   - { id: 3, class: gprc, preferred-register: '' }
3100   - { id: 4, class: g8rc, preferred-register: '' }
3101   - { id: 5, class: g8rc, preferred-register: '' }
3102   - { id: 6, class: g8rc, preferred-register: '' }
3103   - { id: 7, class: f4rc, preferred-register: '' }
3104   - { id: 8, class: gprc, preferred-register: '' }
3105   - { id: 9, class: g8rc, preferred-register: '' }
3106   - { id: 10, class: g8rc, preferred-register: '' }
3107   - { id: 11, class: g8rc, preferred-register: '' }
3108   - { id: 12, class: f4rc, preferred-register: '' }
3109   - { id: 13, class: f4rc, preferred-register: '' }
3110 liveins:         
3111   - { reg: '%x3', virtual-reg: '%0' }
3112   - { reg: '%x4', virtual-reg: '%1' }
3113 frameInfo:       
3114   isFrameAddressTaken: false
3115   isReturnAddressTaken: false
3116   hasStackMap:     false
3117   hasPatchPoint:   false
3118   stackSize:       0
3119   offsetAdjustment: 0
3120   maxAlignment:    0
3121   adjustsStack:    false
3122   hasCalls:        false
3123   stackProtector:  ''
3124   maxCallFrameSize: 4294967295
3125   hasOpaqueSPAdjustment: false
3126   hasVAStart:      false
3127   hasMustTailInVarArgFunc: false
3128   savePoint:       ''
3129   restorePoint:    ''
3130 fixedStack:      
3131 stack:           
3132 constants:       
3133 body:             |
3134   bb.0.entry:
3135     liveins: %x3, %x4
3136   
3137     %1 = COPY %x4
3138     %0 = COPY %x3
3139     %2 = COPY %1.sub_32
3140     %3 = ADDI %2, 1
3141     %5 = IMPLICIT_DEF
3142     %4 = INSERT_SUBREG %5, killed %3, 1
3143     %6 = LI8 88
3144     %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3145     ; CHECK: LFS 88, %0
3146     ; CHECK-LATE: lfs 0, 88(3)
3147     %8 = ADDI %2, 2
3148     %10 = IMPLICIT_DEF
3149     %9 = INSERT_SUBREG %10, killed %8, 1
3150     %11 = LI8 -88
3151     %12 = LFSX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3152     ; CHECK: LFS -88, %0
3153     ; CHECK-LATE: lfs 1, -88(3)
3154     %13 = FADDS killed %7, killed %12, implicit %rm
3155     %f1 = COPY %13
3156     BLR8 implicit %lr8, implicit %rm, implicit %f1
3160 name:            testLXSDX
3161 # CHECK-ALL: name: testLXSDX
3162 alignment:       4
3163 exposesReturnsTwice: false
3164 legalized:       false
3165 regBankSelected: false
3166 selected:        false
3167 tracksRegLiveness: true
3168 registers:       
3169   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3170   - { id: 1, class: g8rc, preferred-register: '' }
3171   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3172   - { id: 3, class: gprc, preferred-register: '' }
3173   - { id: 4, class: g8rc, preferred-register: '' }
3174   - { id: 5, class: g8rc, preferred-register: '' }
3175   - { id: 6, class: g8rc, preferred-register: '' }
3176   - { id: 7, class: vsfrc, preferred-register: '' }
3177   - { id: 8, class: gprc, preferred-register: '' }
3178   - { id: 9, class: g8rc, preferred-register: '' }
3179   - { id: 10, class: g8rc, preferred-register: '' }
3180   - { id: 11, class: g8rc, preferred-register: '' }
3181   - { id: 12, class: vsfrc, preferred-register: '' }
3182   - { id: 13, class: vsfrc, preferred-register: '' }
3183 liveins:         
3184   - { reg: '%x3', virtual-reg: '%0' }
3185   - { reg: '%x4', virtual-reg: '%1' }
3186 frameInfo:       
3187   isFrameAddressTaken: false
3188   isReturnAddressTaken: false
3189   hasStackMap:     false
3190   hasPatchPoint:   false
3191   stackSize:       0
3192   offsetAdjustment: 0
3193   maxAlignment:    0
3194   adjustsStack:    false
3195   hasCalls:        false
3196   stackProtector:  ''
3197   maxCallFrameSize: 4294967295
3198   hasOpaqueSPAdjustment: false
3199   hasVAStart:      false
3200   hasMustTailInVarArgFunc: false
3201   savePoint:       ''
3202   restorePoint:    ''
3203 fixedStack:      
3204 stack:           
3205 constants:       
3206 body:             |
3207   bb.0.entry:
3208     liveins: %x3, %x4
3209   
3210     %1 = COPY %x4
3211     %0 = COPY %x3
3212     %2 = COPY %1.sub_32
3213     %3 = ADDI %2, 1
3214     %5 = IMPLICIT_DEF
3215     %4 = INSERT_SUBREG %5, killed %3, 1
3216     %6 = LI8 100
3217     %7 = LXSDX %0, killed %6, implicit %rm :: (load 8 from %ir.arrayidx, !tbaa !12)
3218     ; CHECK: LXSD 100, %0
3219     ; CHECK-LATE: lxsd 0, 100(3)
3220     %8 = ADDI %2, 2
3221     %10 = IMPLICIT_DEF
3222     %9 = INSERT_SUBREG %10, killed %8, 1
3223     %11 = LI8 -120
3224     %12 = LXSDX %0, killed %11, implicit %rm :: (load 8 from %ir.arrayidx3, !tbaa !12)
3225     ; CHECK: LXSD -120, %0
3226     ; CHECK-LATE: lxsd 1, -120(3)
3227     %13 = XSADDDP killed %7, killed %12, implicit %rm
3228     %f1 = COPY %13
3229     BLR8 implicit %lr8, implicit %rm, implicit %f1
3233 name:            testLXSSPX
3234 # CHECK-ALL: name: testLXSSPX
3235 alignment:       4
3236 exposesReturnsTwice: false
3237 legalized:       false
3238 regBankSelected: false
3239 selected:        false
3240 tracksRegLiveness: true
3241 registers:       
3242   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3243   - { id: 1, class: g8rc, preferred-register: '' }
3244   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3245   - { id: 3, class: gprc, preferred-register: '' }
3246   - { id: 4, class: g8rc, preferred-register: '' }
3247   - { id: 5, class: g8rc, preferred-register: '' }
3248   - { id: 6, class: g8rc, preferred-register: '' }
3249   - { id: 7, class: vssrc, preferred-register: '' }
3250   - { id: 8, class: gprc, preferred-register: '' }
3251   - { id: 9, class: g8rc, preferred-register: '' }
3252   - { id: 10, class: g8rc, preferred-register: '' }
3253   - { id: 11, class: g8rc, preferred-register: '' }
3254   - { id: 12, class: vssrc, preferred-register: '' }
3255   - { id: 13, class: vssrc, preferred-register: '' }
3256 liveins:         
3257   - { reg: '%x3', virtual-reg: '%0' }
3258   - { reg: '%x4', virtual-reg: '%1' }
3259 frameInfo:       
3260   isFrameAddressTaken: false
3261   isReturnAddressTaken: false
3262   hasStackMap:     false
3263   hasPatchPoint:   false
3264   stackSize:       0
3265   offsetAdjustment: 0
3266   maxAlignment:    0
3267   adjustsStack:    false
3268   hasCalls:        false
3269   stackProtector:  ''
3270   maxCallFrameSize: 4294967295
3271   hasOpaqueSPAdjustment: false
3272   hasVAStart:      false
3273   hasMustTailInVarArgFunc: false
3274   savePoint:       ''
3275   restorePoint:    ''
3276 fixedStack:      
3277 stack:           
3278 constants:       
3279 body:             |
3280   bb.0.entry:
3281     liveins: %x3, %x4
3282   
3283     %1 = COPY %x4
3284     %0 = COPY %x3
3285     %2 = COPY %1.sub_32
3286     %3 = ADDI %2, 1
3287     %5 = IMPLICIT_DEF
3288     %4 = INSERT_SUBREG %5, killed %3, 1
3289     %6 = LI8 96
3290     %7 = LXSSPX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14)
3291     ; CHECK: LXSSP 96, %0
3292     ; CHECK-LATE: lxssp 0, 96(3)
3293     %8 = ADDI %2, 2
3294     %10 = IMPLICIT_DEF
3295     %9 = INSERT_SUBREG %10, killed %8, 1
3296     %11 = LI8 -92
3297     %12 = LXSSPX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14)
3298     ; CHECK: LXSSP -92, %0
3299     ; CHECK-LATE: lxssp 1, -92(3)
3300     %13 = XSADDSP killed %7, killed %12
3301     %f1 = COPY %13
3302     BLR8 implicit %lr8, implicit %rm, implicit %f1
3306 name:            testLXVX
3307 # CHECK-ALL: name: testLXVX
3308 alignment:       4
3309 exposesReturnsTwice: false
3310 legalized:       false
3311 regBankSelected: false
3312 selected:        false
3313 tracksRegLiveness: true
3314 registers:       
3315   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3316   - { id: 1, class: g8rc, preferred-register: '' }
3317   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
3318   - { id: 3, class: gprc, preferred-register: '' }
3319   - { id: 4, class: g8rc, preferred-register: '' }
3320   - { id: 5, class: g8rc, preferred-register: '' }
3321   - { id: 6, class: g8rc, preferred-register: '' }
3322   - { id: 7, class: vrrc, preferred-register: '' }
3323   - { id: 8, class: gprc, preferred-register: '' }
3324   - { id: 9, class: g8rc, preferred-register: '' }
3325   - { id: 10, class: g8rc, preferred-register: '' }
3326   - { id: 11, class: g8rc, preferred-register: '' }
3327   - { id: 12, class: vrrc, preferred-register: '' }
3328   - { id: 13, class: vrrc, preferred-register: '' }
3329 liveins:         
3330   - { reg: '%x3', virtual-reg: '%0' }
3331   - { reg: '%x4', virtual-reg: '%1' }
3332 frameInfo:       
3333   isFrameAddressTaken: false
3334   isReturnAddressTaken: false
3335   hasStackMap:     false
3336   hasPatchPoint:   false
3337   stackSize:       0
3338   offsetAdjustment: 0
3339   maxAlignment:    0
3340   adjustsStack:    false
3341   hasCalls:        false
3342   stackProtector:  ''
3343   maxCallFrameSize: 4294967295
3344   hasOpaqueSPAdjustment: false
3345   hasVAStart:      false
3346   hasMustTailInVarArgFunc: false
3347   savePoint:       ''
3348   restorePoint:    ''
3349 fixedStack:      
3350 stack:           
3351 constants:       
3352 body:             |
3353   bb.0.entry:
3354     liveins: %x3, %x4
3355   
3356     %1 = COPY %x4
3357     %0 = COPY %x3
3358     %2 = COPY %1.sub_32
3359     %3 = ADDI %2, 1
3360     %5 = IMPLICIT_DEF
3361     %4 = INSERT_SUBREG %5, killed %3, 1
3362     %6 = LI8 32
3363     %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3)
3364     ; CHECK: LXV 32, %0
3365     ; CHECK-LATE: lxv 34, 32(3)
3366     %8 = ADDI %2, 2
3367     %10 = IMPLICIT_DEF
3368     %9 = INSERT_SUBREG %10, killed %8, 1
3369     %11 = LI8 -16
3370     %12 = LXVX %0, killed %11 :: (load 16 from %ir.arrayidx3, !tbaa !3)
3371     ; CHECK: LXV -16, %0
3372     ; CHECK-LATE: lxv 35, -16(3)
3373     %13 = VADDUWM killed %12, killed %7
3374     %v2 = COPY %13
3375     BLR8 implicit %lr8, implicit %rm, implicit %v2
3379 name:            testOR
3380 # CHECK-ALL: name: testOR
3381 alignment:       4
3382 exposesReturnsTwice: false
3383 legalized:       false
3384 regBankSelected: false
3385 selected:        false
3386 tracksRegLiveness: true
3387 registers:       
3388   - { id: 0, class: gprc, preferred-register: '' }
3389   - { id: 1, class: g8rc, preferred-register: '' }
3390   - { id: 2, class: gprc, preferred-register: '' }
3391   - { id: 3, class: gprc, preferred-register: '' }
3392 liveins:         
3393   - { reg: '%x3', virtual-reg: '%0' }
3394   - { reg: '%x4', virtual-reg: '%1' }
3395 frameInfo:       
3396   isFrameAddressTaken: false
3397   isReturnAddressTaken: false
3398   hasStackMap:     false
3399   hasPatchPoint:   false
3400   stackSize:       0
3401   offsetAdjustment: 0
3402   maxAlignment:    0
3403   adjustsStack:    false
3404   hasCalls:        false
3405   stackProtector:  ''
3406   maxCallFrameSize: 4294967295
3407   hasOpaqueSPAdjustment: false
3408   hasVAStart:      false
3409   hasMustTailInVarArgFunc: false
3410   savePoint:       ''
3411   restorePoint:    ''
3412 fixedStack:      
3413 stack:           
3414 constants:       
3415 body:             |
3416   bb.0.entry:
3417     liveins: %x3, %x4
3418   
3419     %1 = COPY %x4
3420     %0 = LI 99
3421     %3 = COPY %1.sub_32
3422     %2 = OR %0, %3
3423     ; CHECK: ORI %3, 99
3424     ; CHECK-LATE: ori 3, 4, 99
3425     %x3 = EXTSW_32_64 %2
3426     BLR8 implicit %lr8, implicit %rm, implicit %x3
3430 name:            testOR8
3431 # CHECK-ALL: name: testOR8
3432 alignment:       4
3433 exposesReturnsTwice: false
3434 legalized:       false
3435 regBankSelected: false
3436 selected:        false
3437 tracksRegLiveness: true
3438 registers:       
3439   - { id: 0, class: g8rc, preferred-register: '' }
3440   - { id: 1, class: g8rc, preferred-register: '' }
3441   - { id: 2, class: g8rc, preferred-register: '' }
3442 liveins:         
3443   - { reg: '%x3', virtual-reg: '%0' }
3444   - { reg: '%x4', virtual-reg: '%1' }
3445 frameInfo:       
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:    ''
3462 fixedStack:      
3463 stack:           
3464 constants:       
3465 body:             |
3466   bb.0.entry:
3467     liveins: %x3, %x4
3468   
3469     %1 = COPY %x4
3470     %0 = LI8 777
3471     %2 = OR8 %1, %0
3472     ; CHECK: ORI8 %1, 777
3473     ; CHECK-LATE: ori 3, 4, 777
3474     %x3 = COPY %2
3475     BLR8 implicit %lr8, implicit %rm, implicit %x3
3479 name:            testORI
3480 # CHECK-ALL: name: testORI
3481 alignment:       4
3482 exposesReturnsTwice: false
3483 legalized:       false
3484 regBankSelected: false
3485 selected:        false
3486 tracksRegLiveness: true
3487 registers:       
3488   - { id: 0, class: gprc, preferred-register: '' }
3489   - { id: 1, class: gprc, preferred-register: '' }
3490 liveins:         
3491   - { reg: '%x3', virtual-reg: '%0' }
3492 frameInfo:       
3493   isFrameAddressTaken: false
3494   isReturnAddressTaken: false
3495   hasStackMap:     false
3496   hasPatchPoint:   false
3497   stackSize:       0
3498   offsetAdjustment: 0
3499   maxAlignment:    0
3500   adjustsStack:    false
3501   hasCalls:        false
3502   stackProtector:  ''
3503   maxCallFrameSize: 4294967295
3504   hasOpaqueSPAdjustment: false
3505   hasVAStart:      false
3506   hasMustTailInVarArgFunc: false
3507   savePoint:       ''
3508   restorePoint:    ''
3509 fixedStack:      
3510 stack:           
3511 constants:       
3512 body:             |
3513   bb.0.entry:
3514     liveins: %x3
3515   
3516     %0 = LI 777
3517     %1 = ORI %0, 88
3518     ; CHECK: LI 857
3519     ; CHECK-LATE: li 3, 857
3520     %x3 = EXTSW_32_64 %1
3521     BLR8 implicit %lr8, implicit %rm, implicit %x3
3525 name:            testORI8
3526 # CHECK-ALL: name: testORI8
3527 alignment:       4
3528 exposesReturnsTwice: false
3529 legalized:       false
3530 regBankSelected: false
3531 selected:        false
3532 tracksRegLiveness: true
3533 registers:       
3534   - { id: 0, class: g8rc, preferred-register: '' }
3535   - { id: 1, class: g8rc, preferred-register: '' }
3536 liveins:         
3537   - { reg: '%x3', virtual-reg: '%0' }
3538 frameInfo:       
3539   isFrameAddressTaken: false
3540   isReturnAddressTaken: false
3541   hasStackMap:     false
3542   hasPatchPoint:   false
3543   stackSize:       0
3544   offsetAdjustment: 0
3545   maxAlignment:    0
3546   adjustsStack:    false
3547   hasCalls:        false
3548   stackProtector:  ''
3549   maxCallFrameSize: 4294967295
3550   hasOpaqueSPAdjustment: false
3551   hasVAStart:      false
3552   hasMustTailInVarArgFunc: false
3553   savePoint:       ''
3554   restorePoint:    ''
3555 fixedStack:      
3556 stack:           
3557 constants:       
3558 body:             |
3559   bb.0.entry:
3560     liveins: %x3
3561   
3562     %0 = LI8 8721
3563     %1 = ORI8 %0, 99
3564     ; CHECK: LI8 8819
3565     ; CHECK-LATE: li 3, 8819
3566     %x3 = COPY %1
3567     BLR8 implicit %lr8, implicit %rm, implicit %x3
3571 name:            testRLDCL
3572 # CHECK-ALL: name: testRLDCL
3573 alignment:       4
3574 exposesReturnsTwice: false
3575 legalized:       false
3576 regBankSelected: false
3577 selected:        false
3578 tracksRegLiveness: true
3579 registers:       
3580   - { id: 0, class: g8rc, preferred-register: '' }
3581   - { id: 1, class: g8rc, preferred-register: '' }
3582   - { id: 2, class: gprc, preferred-register: '' }
3583   - { id: 3, class: gprc, preferred-register: '' }
3584   - { id: 4, class: g8rc, preferred-register: '' }
3585 liveins:         
3586   - { reg: '%x3', virtual-reg: '%0' }
3587   - { reg: '%x4', virtual-reg: '%1' }
3588 frameInfo:       
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:    ''
3605 fixedStack:      
3606 stack:           
3607 constants:       
3608 body:             |
3609   bb.0.entry:
3610     liveins: %x3, %x4
3611   
3612     %1 = COPY %x4
3613     %0 = COPY %x3
3614     %2 = COPY %1.sub_32
3615     %3 = LI 14
3616     %4 = RLDCL %0, killed %3, 0
3617     ; CHECK: RLDICL %0, 14, 0
3618     ; CHECK-LATE: rotldi 3, 3, 14
3619     %x3 = COPY %4
3620     BLR8 implicit %lr8, implicit %rm, implicit %x3
3624 name:            testRLDCLo
3625 # CHECK-ALL: name: testRLDCLo
3626 alignment:       4
3627 exposesReturnsTwice: false
3628 legalized:       false
3629 regBankSelected: false
3630 selected:        false
3631 tracksRegLiveness: true
3632 registers:       
3633   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3634   - { id: 1, class: g8rc, preferred-register: '' }
3635   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3636   - { id: 3, class: gprc, preferred-register: '' }
3637   - { id: 4, class: g8rc, preferred-register: '' }
3638   - { id: 5, class: crrc, preferred-register: '' }
3639   - { id: 6, class: g8rc, preferred-register: '' }
3640 liveins:         
3641   - { reg: '%x3', virtual-reg: '%0' }
3642   - { reg: '%x4', virtual-reg: '%1' }
3643 frameInfo:       
3644   isFrameAddressTaken: false
3645   isReturnAddressTaken: false
3646   hasStackMap:     false
3647   hasPatchPoint:   false
3648   stackSize:       0
3649   offsetAdjustment: 0
3650   maxAlignment:    0
3651   adjustsStack:    false
3652   hasCalls:        false
3653   stackProtector:  ''
3654   maxCallFrameSize: 4294967295
3655   hasOpaqueSPAdjustment: false
3656   hasVAStart:      false
3657   hasMustTailInVarArgFunc: false
3658   savePoint:       ''
3659   restorePoint:    ''
3660 fixedStack:      
3661 stack:           
3662 constants:       
3663 body:             |
3664   bb.0.entry:
3665     liveins: %x3, %x4
3666   
3667     %1 = COPY %x4
3668     %0 = COPY %x3
3669     %2 = RLDICL %1, 0, 58
3670     %3 = LI 37
3671     %4 = RLDCLo %0, killed %3, 0, implicit-def %cr0
3672     ; CHECK: RLDICLo %0, 37, 0, implicit-def %cr0
3673     ; CHECK-LATE: rldicl. 5, 3, 37, 0
3674     %5 = COPY killed %cr0
3675     %6 = ISEL8 %2, %0, %5.sub_eq
3676     %x3 = COPY %6
3677     BLR8 implicit %lr8, implicit %rm, implicit %x3
3681 name:            testRLDCR
3682 # CHECK-ALL: name: testRLDCR
3683 alignment:       4
3684 exposesReturnsTwice: false
3685 legalized:       false
3686 regBankSelected: false
3687 selected:        false
3688 tracksRegLiveness: true
3689 registers:       
3690   - { id: 0, class: g8rc, preferred-register: '' }
3691   - { id: 1, class: g8rc, preferred-register: '' }
3692   - { id: 2, class: gprc, preferred-register: '' }
3693   - { id: 3, class: gprc, preferred-register: '' }
3694   - { id: 4, class: g8rc, preferred-register: '' }
3695 liveins:         
3696   - { reg: '%x3', virtual-reg: '%0' }
3697   - { reg: '%x4', virtual-reg: '%1' }
3698 frameInfo:       
3699   isFrameAddressTaken: false
3700   isReturnAddressTaken: false
3701   hasStackMap:     false
3702   hasPatchPoint:   false
3703   stackSize:       0
3704   offsetAdjustment: 0
3705   maxAlignment:    0
3706   adjustsStack:    false
3707   hasCalls:        false
3708   stackProtector:  ''
3709   maxCallFrameSize: 4294967295
3710   hasOpaqueSPAdjustment: false
3711   hasVAStart:      false
3712   hasMustTailInVarArgFunc: false
3713   savePoint:       ''
3714   restorePoint:    ''
3715 fixedStack:      
3716 stack:           
3717 constants:       
3718 body:             |
3719   bb.0.entry:
3720     liveins: %x3, %x4
3721   
3722     %1 = COPY %x4
3723     %0 = COPY %x3
3724     %2 = COPY %1.sub_32
3725     %3 = LI 0
3726     %4 = RLDCR %0, killed %3, 0
3727     ; CHECK: RLDICR %0, 0, 0
3728     ; CHECK-LATE: rldicr 3, 3, 0, 0
3729     %x3 = COPY %4
3730     BLR8 implicit %lr8, implicit %rm, implicit %x3
3734 name:            testRLDCRo
3735 # CHECK-ALL: name: testRLDCRo
3736 alignment:       4
3737 exposesReturnsTwice: false
3738 legalized:       false
3739 regBankSelected: false
3740 selected:        false
3741 tracksRegLiveness: true
3742 registers:       
3743   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3744   - { id: 1, class: g8rc, preferred-register: '' }
3745   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3746   - { id: 3, class: gprc, preferred-register: '' }
3747   - { id: 4, class: g8rc, preferred-register: '' }
3748   - { id: 5, class: crrc, preferred-register: '' }
3749   - { id: 6, class: g8rc, preferred-register: '' }
3750 liveins:         
3751   - { reg: '%x3', virtual-reg: '%0' }
3752   - { reg: '%x4', virtual-reg: '%1' }
3753 frameInfo:       
3754   isFrameAddressTaken: false
3755   isReturnAddressTaken: false
3756   hasStackMap:     false
3757   hasPatchPoint:   false
3758   stackSize:       0
3759   offsetAdjustment: 0
3760   maxAlignment:    0
3761   adjustsStack:    false
3762   hasCalls:        false
3763   stackProtector:  ''
3764   maxCallFrameSize: 4294967295
3765   hasOpaqueSPAdjustment: false
3766   hasVAStart:      false
3767   hasMustTailInVarArgFunc: false
3768   savePoint:       ''
3769   restorePoint:    ''
3770 fixedStack:      
3771 stack:           
3772 constants:       
3773 body:             |
3774   bb.0.entry:
3775     liveins: %x3, %x4
3776   
3777     %1 = COPY %x4
3778     %0 = COPY %x3
3779     %2 = RLDICL %1, 0, 58
3780     %3 = LI 18
3781     %4 = RLDCRo %0, killed %3, 0, implicit-def %cr0
3782     ; CHECK: RLDICRo %0, 18, 0, implicit-def %cr0
3783     ; CHECK-LATE: rldicr. 5, 3, 18, 0
3784     %5 = COPY killed %cr0
3785     %6 = ISEL8 %2, %0, %5.sub_eq
3786     %x3 = COPY %6
3787     BLR8 implicit %lr8, implicit %rm, implicit %x3
3791 name:            testRLDICL
3792 # CHECK-ALL: name: testRLDICL
3793 alignment:       4
3794 exposesReturnsTwice: false
3795 legalized:       false
3796 regBankSelected: false
3797 selected:        false
3798 tracksRegLiveness: true
3799 registers:       
3800   - { id: 0, class: g8rc, preferred-register: '' }
3801   - { id: 1, class: g8rc, preferred-register: '' }
3802 liveins:         
3803   - { reg: '%x3', virtual-reg: '%0' }
3804 frameInfo:       
3805   isFrameAddressTaken: false
3806   isReturnAddressTaken: false
3807   hasStackMap:     false
3808   hasPatchPoint:   false
3809   stackSize:       0
3810   offsetAdjustment: 0
3811   maxAlignment:    0
3812   adjustsStack:    false
3813   hasCalls:        false
3814   stackProtector:  ''
3815   maxCallFrameSize: 4294967295
3816   hasOpaqueSPAdjustment: false
3817   hasVAStart:      false
3818   hasMustTailInVarArgFunc: false
3819   savePoint:       ''
3820   restorePoint:    ''
3821 fixedStack:      
3822 stack:           
3823 constants:       
3824 body:             |
3825   bb.0.entry:
3826     liveins: %x3
3827   
3828     %0 = LI8 -1
3829     %1 = RLDICL %0, 53, 49
3830     ; CHECK: LI8 32767
3831     ; CHECK-LATE: li 3, 32767
3832     %x3 = COPY %1
3833     BLR8 implicit %lr8, implicit %rm, implicit %x3
3837 name:            testRLDICLo
3838 # CHECK-ALL: name: testRLDICLo
3839 alignment:       4
3840 exposesReturnsTwice: false
3841 legalized:       false
3842 regBankSelected: false
3843 selected:        false
3844 tracksRegLiveness: true
3845 registers:       
3846   - { id: 0, class: g8rc, preferred-register: '' }
3847   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3848   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
3849   - { id: 3, class: crrc, preferred-register: '' }
3850   - { id: 4, class: g8rc, preferred-register: '' }
3851 liveins:         
3852   - { reg: '%x3', virtual-reg: '%0' }
3853   - { reg: '%x4', virtual-reg: '%1' }
3854 frameInfo:       
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:    ''
3871 fixedStack:      
3872 stack:           
3873 constants:       
3874 body:             |
3875   bb.0.entry:
3876     liveins: %x3, %x4
3877   
3878     %1 = COPY %x4
3879     %0 = LI8 -1
3880     %2 = RLDICLo %0, 53, 48, implicit-def %cr0
3881     ; CHECK: ANDIo8 %0, 65535
3882     ; CHECK-LATE: li 3, -1
3883     ; CHECK-LATE: andi. 3, 3, 65535
3884     %3 = COPY killed %cr0
3885     %4 = ISEL8 %1, %2, %3.sub_eq
3886     %x3 = COPY %4
3887     BLR8 implicit %lr8, implicit %rm, implicit %x3
3891 name:            testRLWINM
3892 # CHECK-ALL: name: testRLWINM
3893 alignment:       4
3894 exposesReturnsTwice: false
3895 legalized:       false
3896 regBankSelected: false
3897 selected:        false
3898 tracksRegLiveness: true
3899 registers:       
3900   - { id: 0, class: g8rc, preferred-register: '' }
3901   - { id: 1, class: gprc, preferred-register: '' }
3902   - { id: 2, class: gprc, preferred-register: '' }
3903   - { id: 3, class: g8rc, preferred-register: '' }
3904   - { id: 4, class: gprc, preferred-register: '' }
3905 liveins:         
3906   - { reg: '%x3', virtual-reg: '%0' }
3907 frameInfo:       
3908   isFrameAddressTaken: false
3909   isReturnAddressTaken: false
3910   hasStackMap:     false
3911   hasPatchPoint:   false
3912   stackSize:       0
3913   offsetAdjustment: 0
3914   maxAlignment:    0
3915   adjustsStack:    false
3916   hasCalls:        false
3917   stackProtector:  ''
3918   maxCallFrameSize: 4294967295
3919   hasOpaqueSPAdjustment: false
3920   hasVAStart:      false
3921   hasMustTailInVarArgFunc: false
3922   savePoint:       ''
3923   restorePoint:    ''
3924 fixedStack:      
3925 stack:           
3926 constants:       
3927 body:             |
3928   bb.0.entry:
3929     liveins: %x3
3930   
3931     %0 = COPY %x3
3932     %1 = COPY %0.sub_32
3933     %3 = IMPLICIT_DEF
3934     %2 = LI 17
3935     %4 = RLWINM killed %2, 4, 20, 27
3936     ; CHECK: LI 272
3937     ; CHECK-LATE: li 3, 272
3938     %x3 = EXTSW_32_64 %4
3939     BLR8 implicit %lr8, implicit %rm, implicit %x3
3943 name:            testRLWINM8
3944 # CHECK-ALL: name: testRLWINM8
3945 alignment:       4
3946 exposesReturnsTwice: false
3947 legalized:       false
3948 regBankSelected: false
3949 selected:        false
3950 tracksRegLiveness: true
3951 registers:       
3952   - { id: 0, class: g8rc, preferred-register: '' }
3953   - { id: 1, class: g8rc, preferred-register: '' }
3954 liveins:         
3955   - { reg: '%x3', virtual-reg: '%0' }
3956 frameInfo:       
3957   isFrameAddressTaken: false
3958   isReturnAddressTaken: false
3959   hasStackMap:     false
3960   hasPatchPoint:   false
3961   stackSize:       0
3962   offsetAdjustment: 0
3963   maxAlignment:    0
3964   adjustsStack:    false
3965   hasCalls:        false
3966   stackProtector:  ''
3967   maxCallFrameSize: 4294967295
3968   hasOpaqueSPAdjustment: false
3969   hasVAStart:      false
3970   hasMustTailInVarArgFunc: false
3971   savePoint:       ''
3972   restorePoint:    ''
3973 fixedStack:      
3974 stack:           
3975 constants:       
3976 body:             |
3977   bb.0.entry:
3978     liveins: %x3
3979   
3980     %0 = LI8 234
3981     %1 = RLWINM8 %0, 4, 20, 27
3982     ; CHECK: LI8 3744
3983     ; CHECK-LATE: li 3, 3744
3984     %x3 = COPY %1
3985     BLR8 implicit %lr8, implicit %rm, implicit %x3
3989 name:            testRLWINMo
3990 # CHECK-ALL: name: testRLWINMo
3991 alignment:       4
3992 exposesReturnsTwice: false
3993 legalized:       false
3994 regBankSelected: false
3995 selected:        false
3996 tracksRegLiveness: true
3997 registers:       
3998   - { id: 0, class: g8rc, preferred-register: '' }
3999   - { id: 1, class: g8rc, preferred-register: '' }
4000   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4001   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4002   - { id: 4, class: gprc, preferred-register: '' }
4003   - { id: 5, class: crrc, preferred-register: '' }
4004   - { id: 6, class: gprc, preferred-register: '' }
4005   - { id: 7, class: g8rc, preferred-register: '' }
4006   - { id: 8, class: g8rc, preferred-register: '' }
4007   - { id: 9, class: g8rc, preferred-register: '' }
4008 liveins:         
4009   - { reg: '%x3', virtual-reg: '%0' }
4010   - { reg: '%x4', virtual-reg: '%1' }
4011 frameInfo:       
4012   isFrameAddressTaken: false
4013   isReturnAddressTaken: false
4014   hasStackMap:     false
4015   hasPatchPoint:   false
4016   stackSize:       0
4017   offsetAdjustment: 0
4018   maxAlignment:    0
4019   adjustsStack:    false
4020   hasCalls:        false
4021   stackProtector:  ''
4022   maxCallFrameSize: 4294967295
4023   hasOpaqueSPAdjustment: false
4024   hasVAStart:      false
4025   hasMustTailInVarArgFunc: false
4026   savePoint:       ''
4027   restorePoint:    ''
4028 fixedStack:      
4029 stack:           
4030 constants:       
4031 body:             |
4032   bb.0.entry:
4033     liveins: %x3, %x4
4034   
4035     %1 = COPY %x4
4036     %0 = COPY %x3
4037     %2 = COPY %1.sub_32
4038     %3 = LI -22
4039     %4 = RLWINMo %3, 0, 24, 31, implicit-def %cr0
4040     ; CHECK: ANDIo %3, 234
4041     ; CHECK-LATE: li 3, -22
4042     ; CHECK-LATE: andi. 5, 3, 234
4043     %5 = COPY killed %cr0
4044     %6 = ISEL %2, %3, %5.sub_eq
4045     %8 = IMPLICIT_DEF
4046     %7 = INSERT_SUBREG %8, killed %6, 1
4047     %9 = RLDICL killed %7, 0, 32
4048     %x3 = COPY %9
4049     BLR8 implicit %lr8, implicit %rm, implicit %x3
4053 name:            testRLWINM8o
4054 # CHECK-ALL: name: testRLWINM8o
4055 alignment:       4
4056 exposesReturnsTwice: false
4057 legalized:       false
4058 regBankSelected: false
4059 selected:        false
4060 tracksRegLiveness: true
4061 registers:       
4062   - { id: 0, class: g8rc, preferred-register: '' }
4063   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4064   - { id: 2, class: g8rc, preferred-register: '' }
4065   - { id: 3, class: g8rc, preferred-register: '' }
4066   - { id: 4, class: g8rc, preferred-register: '' }
4067   - { id: 5, class: g8rc, preferred-register: '' }
4068   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4069   - { id: 7, class: crrc, preferred-register: '' }
4070   - { id: 8, class: g8rc, preferred-register: '' }
4071 liveins:         
4072   - { reg: '%x3', virtual-reg: '%0' }
4073   - { reg: '%x4', virtual-reg: '%1' }
4074 frameInfo:       
4075   isFrameAddressTaken: false
4076   isReturnAddressTaken: false
4077   hasStackMap:     false
4078   hasPatchPoint:   false
4079   stackSize:       0
4080   offsetAdjustment: 0
4081   maxAlignment:    0
4082   adjustsStack:    false
4083   hasCalls:        false
4084   stackProtector:  ''
4085   maxCallFrameSize: 4294967295
4086   hasOpaqueSPAdjustment: false
4087   hasVAStart:      false
4088   hasMustTailInVarArgFunc: false
4089   savePoint:       ''
4090   restorePoint:    ''
4091 fixedStack:      
4092 stack:           
4093 constants:       
4094 body:             |
4095   bb.0.entry:
4096     liveins: %x3, %x4
4097   
4098     %1 = COPY %x4
4099     %0 = COPY %x3
4100     %2 = LI8 -18
4101     %3 = RLWINM8o %2, 4, 20, 27, implicit-def %cr0
4102     ; CHECK: ANDIo8 %2, 3808
4103     ; CHECK-LATE: li 3, -18
4104     ; CHECK-LATE: andi. 3, 3, 3808
4105     %7 = COPY killed %cr0
4106     %6 = RLDICL killed %3, 0, 32
4107     %8 = ISEL8 %1, %6, %7.sub_eq
4108     %x3 = COPY %8
4109     BLR8 implicit %lr8, implicit %rm, implicit %x3
4113 name:            testSLD
4114 # CHECK-ALL: name: testSLD
4115 alignment:       4
4116 exposesReturnsTwice: false
4117 legalized:       false
4118 regBankSelected: false
4119 selected:        false
4120 tracksRegLiveness: true
4121 registers:       
4122   - { id: 0, class: g8rc, preferred-register: '' }
4123   - { id: 1, class: g8rc, preferred-register: '' }
4124   - { id: 2, class: gprc, preferred-register: '' }
4125   - { id: 3, class: g8rc, preferred-register: '' }
4126 liveins:         
4127   - { reg: '%x3', virtual-reg: '%0' }
4128   - { reg: '%x4', virtual-reg: '%1' }
4129 frameInfo:       
4130   isFrameAddressTaken: false
4131   isReturnAddressTaken: false
4132   hasStackMap:     false
4133   hasPatchPoint:   false
4134   stackSize:       0
4135   offsetAdjustment: 0
4136   maxAlignment:    0
4137   adjustsStack:    false
4138   hasCalls:        false
4139   stackProtector:  ''
4140   maxCallFrameSize: 4294967295
4141   hasOpaqueSPAdjustment: false
4142   hasVAStart:      false
4143   hasMustTailInVarArgFunc: false
4144   savePoint:       ''
4145   restorePoint:    ''
4146 fixedStack:      
4147 stack:           
4148 constants:       
4149 body:             |
4150   bb.0.entry:
4151     liveins: %x3, %x4
4152   
4153     %1 = COPY %x4
4154     %0 = COPY %x3
4155     %2 = LI 13
4156     %3 = SLD %0, killed %2
4157     ; CHECK: RLDICR %0, 13, 50
4158     ; CHECK-LATE: sldi 3, 3, 13
4159     %x3 = COPY %3
4160     BLR8 implicit %lr8, implicit %rm, implicit %x3
4164 name:            testSLDo
4165 # CHECK-ALL: name: testSLDo
4166 alignment:       4
4167 exposesReturnsTwice: false
4168 legalized:       false
4169 regBankSelected: false
4170 selected:        false
4171 tracksRegLiveness: true
4172 registers:       
4173   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4174   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4175   - { id: 2, class: gprc, preferred-register: '' }
4176   - { id: 3, class: g8rc, preferred-register: '' }
4177   - { id: 4, class: crrc, preferred-register: '' }
4178   - { id: 5, class: g8rc, preferred-register: '' }
4179 liveins:         
4180   - { reg: '%x3', virtual-reg: '%0' }
4181   - { reg: '%x4', virtual-reg: '%1' }
4182 frameInfo:       
4183   isFrameAddressTaken: false
4184   isReturnAddressTaken: false
4185   hasStackMap:     false
4186   hasPatchPoint:   false
4187   stackSize:       0
4188   offsetAdjustment: 0
4189   maxAlignment:    0
4190   adjustsStack:    false
4191   hasCalls:        false
4192   stackProtector:  ''
4193   maxCallFrameSize: 4294967295
4194   hasOpaqueSPAdjustment: false
4195   hasVAStart:      false
4196   hasMustTailInVarArgFunc: false
4197   savePoint:       ''
4198   restorePoint:    ''
4199 fixedStack:      
4200 stack:           
4201 constants:       
4202 body:             |
4203   bb.0.entry:
4204     liveins: %x3, %x4
4205   
4206     %1 = COPY %x4
4207     %0 = COPY %x3
4208     %2 = LI 17
4209     %3 = SLDo %0, killed %2, implicit-def %cr0
4210     ; CHECK: RLDICRo %0, 17, 46, implicit-def %cr0
4211     ; CHECK-LATE: rldicr. 5, 3, 17, 46
4212     %4 = COPY killed %cr0
4213     %5 = ISEL8 %1, %0, %4.sub_eq
4214     %x3 = COPY %5
4215     BLR8 implicit %lr8, implicit %rm, implicit %x3
4219 name:            testSRD
4220 # CHECK-ALL: name: testSRD
4221 alignment:       4
4222 exposesReturnsTwice: false
4223 legalized:       false
4224 regBankSelected: false
4225 selected:        false
4226 tracksRegLiveness: true
4227 registers:       
4228   - { id: 0, class: g8rc, preferred-register: '' }
4229   - { id: 1, class: g8rc, preferred-register: '' }
4230   - { id: 2, class: gprc, preferred-register: '' }
4231   - { id: 3, class: g8rc, preferred-register: '' }
4232 liveins:         
4233   - { reg: '%x3', virtual-reg: '%0' }
4234   - { reg: '%x4', virtual-reg: '%1' }
4235 frameInfo:       
4236   isFrameAddressTaken: false
4237   isReturnAddressTaken: false
4238   hasStackMap:     false
4239   hasPatchPoint:   false
4240   stackSize:       0
4241   offsetAdjustment: 0
4242   maxAlignment:    0
4243   adjustsStack:    false
4244   hasCalls:        false
4245   stackProtector:  ''
4246   maxCallFrameSize: 4294967295
4247   hasOpaqueSPAdjustment: false
4248   hasVAStart:      false
4249   hasMustTailInVarArgFunc: false
4250   savePoint:       ''
4251   restorePoint:    ''
4252 fixedStack:      
4253 stack:           
4254 constants:       
4255 body:             |
4256   bb.0.entry:
4257     liveins: %x3, %x4
4258   
4259     %1 = COPY %x4
4260     %0 = COPY %x3
4261     %2 = LI 4
4262     %3 = SRD %0, killed %2
4263     ; CHECK: RLDICL %0, 60, 4
4264     ; CHECK-LATE: rldicl 3, 3, 60, 4
4265     %x3 = COPY %3
4266     BLR8 implicit %lr8, implicit %rm, implicit %x3
4270 name:            testSRDo
4271 # CHECK-ALL: name: testSRDo
4272 alignment:       4
4273 exposesReturnsTwice: false
4274 legalized:       false
4275 regBankSelected: false
4276 selected:        false
4277 tracksRegLiveness: true
4278 registers:       
4279   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4280   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4281   - { id: 2, class: gprc, preferred-register: '' }
4282   - { id: 3, class: g8rc, preferred-register: '' }
4283   - { id: 4, class: crrc, preferred-register: '' }
4284   - { id: 5, class: g8rc, preferred-register: '' }
4285 liveins:         
4286   - { reg: '%x3', virtual-reg: '%0' }
4287   - { reg: '%x4', virtual-reg: '%1' }
4288 frameInfo:       
4289   isFrameAddressTaken: false
4290   isReturnAddressTaken: false
4291   hasStackMap:     false
4292   hasPatchPoint:   false
4293   stackSize:       0
4294   offsetAdjustment: 0
4295   maxAlignment:    0
4296   adjustsStack:    false
4297   hasCalls:        false
4298   stackProtector:  ''
4299   maxCallFrameSize: 4294967295
4300   hasOpaqueSPAdjustment: false
4301   hasVAStart:      false
4302   hasMustTailInVarArgFunc: false
4303   savePoint:       ''
4304   restorePoint:    ''
4305 fixedStack:      
4306 stack:           
4307 constants:       
4308 body:             |
4309   bb.0.entry:
4310     liveins: %x3, %x4
4311   
4312     %1 = COPY %x4
4313     %0 = COPY %x3
4314     %2 = LI 17
4315     %3 = SRDo %0, killed %2, implicit-def %cr0
4316     ; CHECK: RLDICLo %0, 47, 17, implicit-def %cr0
4317     ; CHECK-LATE: rldicl. 5, 3, 47, 17
4318     %4 = COPY killed %cr0
4319     %5 = ISEL8 %1, %0, %4.sub_eq
4320     %x3 = COPY %5
4321     BLR8 implicit %lr8, implicit %rm, implicit %x3
4325 name:            testSLW
4326 # CHECK-ALL: name: testSLW
4327 alignment:       4
4328 exposesReturnsTwice: false
4329 legalized:       false
4330 regBankSelected: false
4331 selected:        false
4332 tracksRegLiveness: true
4333 registers:       
4334   - { id: 0, class: g8rc, preferred-register: '' }
4335   - { id: 1, class: g8rc, preferred-register: '' }
4336   - { id: 2, class: gprc, preferred-register: '' }
4337   - { id: 3, class: g8rc, preferred-register: '' }
4338   - { id: 4, class: g8rc, preferred-register: '' }
4339   - { id: 5, class: gprc, preferred-register: '' }
4340   - { id: 6, class: g8rc, preferred-register: '' }
4341   - { id: 7, class: g8rc, preferred-register: '' }
4342   - { id: 8, class: gprc, preferred-register: '' }
4343 liveins:         
4344   - { reg: '%x3', virtual-reg: '%0' }
4345   - { reg: '%x4', virtual-reg: '%1' }
4346 frameInfo:       
4347   isFrameAddressTaken: false
4348   isReturnAddressTaken: false
4349   hasStackMap:     false
4350   hasPatchPoint:   false
4351   stackSize:       0
4352   offsetAdjustment: 0
4353   maxAlignment:    0
4354   adjustsStack:    false
4355   hasCalls:        false
4356   stackProtector:  ''
4357   maxCallFrameSize: 4294967295
4358   hasOpaqueSPAdjustment: false
4359   hasVAStart:      false
4360   hasMustTailInVarArgFunc: false
4361   savePoint:       ''
4362   restorePoint:    ''
4363 fixedStack:      
4364 stack:           
4365 constants:       
4366 body:             |
4367   bb.0.entry:
4368     liveins: %x3, %x4
4369   
4370     %1 = COPY %x4
4371     %0 = COPY %x3
4372     %2 = COPY %1.sub_32
4373     %5 = LI 21
4374     %8 = SLW killed %2, killed %5
4375     ; CHECK: RLWINM killed %2, 21, 0, 10
4376     ; CHECK-LATE: slwi 3, 4, 21
4377     %x3 = EXTSW_32_64 %8
4378     BLR8 implicit %lr8, implicit %rm, implicit %x3
4382 name:            testSLWo
4383 # CHECK-ALL: name: testSLWo
4384 alignment:       4
4385 exposesReturnsTwice: false
4386 legalized:       false
4387 regBankSelected: false
4388 selected:        false
4389 tracksRegLiveness: true
4390 registers:       
4391   - { id: 0, class: g8rc, preferred-register: '' }
4392   - { id: 1, class: g8rc, preferred-register: '' }
4393   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4394   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4395   - { id: 4, class: gprc, preferred-register: '' }
4396   - { id: 5, class: crrc, preferred-register: '' }
4397   - { id: 6, class: gprc, preferred-register: '' }
4398   - { id: 7, class: g8rc, preferred-register: '' }
4399   - { id: 8, class: g8rc, preferred-register: '' }
4400   - { id: 9, class: g8rc, preferred-register: '' }
4401 liveins:         
4402   - { reg: '%x3', virtual-reg: '%0' }
4403   - { reg: '%x4', virtual-reg: '%1' }
4404 frameInfo:       
4405   isFrameAddressTaken: false
4406   isReturnAddressTaken: false
4407   hasStackMap:     false
4408   hasPatchPoint:   false
4409   stackSize:       0
4410   offsetAdjustment: 0
4411   maxAlignment:    0
4412   adjustsStack:    false
4413   hasCalls:        false
4414   stackProtector:  ''
4415   maxCallFrameSize: 4294967295
4416   hasOpaqueSPAdjustment: false
4417   hasVAStart:      false
4418   hasMustTailInVarArgFunc: false
4419   savePoint:       ''
4420   restorePoint:    ''
4421 fixedStack:      
4422 stack:           
4423 constants:       
4424 body:             |
4425   bb.0.entry:
4426     liveins: %x3, %x4
4427   
4428     %1 = COPY %x4
4429     %0 = COPY %x3
4430     %2 = LI 11
4431     %3 = COPY %0.sub_32
4432     %4 = SLWo %3, %2, implicit-def %cr0
4433     ; CHECK: RLWINMo %3, 11, 0, 20, implicit-def %cr0
4434     ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20
4435     %5 = COPY killed %cr0
4436     %6 = ISEL %2, %3, %5.sub_eq
4437     %8 = IMPLICIT_DEF
4438     %7 = INSERT_SUBREG %8, killed %6, 1
4439     %9 = RLDICL killed %7, 0, 32
4440     %x3 = COPY %9
4441     BLR8 implicit %lr8, implicit %rm, implicit %x3
4445 name:            testSRW
4446 # CHECK-ALL: name: testSRW
4447 alignment:       4
4448 exposesReturnsTwice: false
4449 legalized:       false
4450 regBankSelected: false
4451 selected:        false
4452 tracksRegLiveness: true
4453 registers:       
4454   - { id: 0, class: g8rc, preferred-register: '' }
4455   - { id: 1, class: g8rc, preferred-register: '' }
4456   - { id: 2, class: gprc, preferred-register: '' }
4457   - { id: 3, class: g8rc, preferred-register: '' }
4458   - { id: 4, class: g8rc, preferred-register: '' }
4459   - { id: 5, class: gprc, preferred-register: '' }
4460   - { id: 6, class: g8rc, preferred-register: '' }
4461   - { id: 7, class: g8rc, preferred-register: '' }
4462   - { id: 8, class: gprc, preferred-register: '' }
4463 liveins:         
4464   - { reg: '%x3', virtual-reg: '%0' }
4465   - { reg: '%x4', virtual-reg: '%1' }
4466 frameInfo:       
4467   isFrameAddressTaken: false
4468   isReturnAddressTaken: false
4469   hasStackMap:     false
4470   hasPatchPoint:   false
4471   stackSize:       0
4472   offsetAdjustment: 0
4473   maxAlignment:    0
4474   adjustsStack:    false
4475   hasCalls:        false
4476   stackProtector:  ''
4477   maxCallFrameSize: 4294967295
4478   hasOpaqueSPAdjustment: false
4479   hasVAStart:      false
4480   hasMustTailInVarArgFunc: false
4481   savePoint:       ''
4482   restorePoint:    ''
4483 fixedStack:      
4484 stack:           
4485 constants:       
4486 body:             |
4487   bb.0.entry:
4488     liveins: %x3, %x4
4489   
4490     %1 = COPY %x4
4491     %0 = COPY %x3
4492     %2 = LI 8
4493     %5 = COPY %0.sub_32
4494     %8 = SRW killed %5, killed %2
4495     ; CHECK: RLWINM killed %5, 24, 8, 31
4496     ; CHECK-LATE: srwi 3, 3, 8
4497     %x3 = EXTSW_32_64 %8
4498     BLR8 implicit %lr8, implicit %rm, implicit %x3
4502 name:            testSRWo
4503 # CHECK-ALL: name: testSRWo
4504 alignment:       4
4505 exposesReturnsTwice: false
4506 legalized:       false
4507 regBankSelected: false
4508 selected:        false
4509 tracksRegLiveness: true
4510 registers:       
4511   - { id: 0, class: g8rc, preferred-register: '' }
4512   - { id: 1, class: g8rc, preferred-register: '' }
4513   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4514   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
4515   - { id: 4, class: gprc, preferred-register: '' }
4516   - { id: 5, class: crrc, preferred-register: '' }
4517   - { id: 6, class: gprc, preferred-register: '' }
4518   - { id: 7, class: g8rc, preferred-register: '' }
4519   - { id: 8, class: g8rc, preferred-register: '' }
4520   - { id: 9, class: g8rc, preferred-register: '' }
4521 liveins:         
4522   - { reg: '%x3', virtual-reg: '%0' }
4523   - { reg: '%x4', virtual-reg: '%1' }
4524 frameInfo:       
4525   isFrameAddressTaken: false
4526   isReturnAddressTaken: false
4527   hasStackMap:     false
4528   hasPatchPoint:   false
4529   stackSize:       0
4530   offsetAdjustment: 0
4531   maxAlignment:    0
4532   adjustsStack:    false
4533   hasCalls:        false
4534   stackProtector:  ''
4535   maxCallFrameSize: 4294967295
4536   hasOpaqueSPAdjustment: false
4537   hasVAStart:      false
4538   hasMustTailInVarArgFunc: false
4539   savePoint:       ''
4540   restorePoint:    ''
4541 fixedStack:      
4542 stack:           
4543 constants:       
4544 body:             |
4545   bb.0.entry:
4546     liveins: %x3, %x4
4547   
4548     %1 = COPY %x4
4549     %0 = COPY %x3
4550     %2 = LI 7
4551     %3 = COPY %0.sub_32
4552     %4 = SRWo %3, %2, implicit-def %cr0
4553     ; CHECK: RLWINMo %3, 25, 7, 31
4554     ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31
4555     %5 = COPY killed %cr0
4556     %6 = ISEL %2, %3, %5.sub_eq
4557     %8 = IMPLICIT_DEF
4558     %7 = INSERT_SUBREG %8, killed %6, 1
4559     %9 = RLDICL killed %7, 0, 32
4560     %x3 = COPY %9
4561     BLR8 implicit %lr8, implicit %rm, implicit %x3
4565 name:            testSRAW
4566 # CHECK-ALL: name: testSRAW
4567 alignment:       4
4568 exposesReturnsTwice: false
4569 legalized:       false
4570 regBankSelected: false
4571 selected:        false
4572 tracksRegLiveness: true
4573 registers:       
4574   - { id: 0, class: g8rc, preferred-register: '' }
4575   - { id: 1, class: g8rc, preferred-register: '' }
4576   - { id: 2, class: gprc, preferred-register: '' }
4577   - { id: 3, class: gprc, preferred-register: '' }
4578   - { id: 4, class: gprc, preferred-register: '' }
4579   - { id: 5, class: g8rc, preferred-register: '' }
4580 liveins:         
4581   - { reg: '%x3', virtual-reg: '%0' }
4582   - { reg: '%x4', virtual-reg: '%1' }
4583 frameInfo:       
4584   isFrameAddressTaken: false
4585   isReturnAddressTaken: false
4586   hasStackMap:     false
4587   hasPatchPoint:   false
4588   stackSize:       0
4589   offsetAdjustment: 0
4590   maxAlignment:    0
4591   adjustsStack:    false
4592   hasCalls:        false
4593   stackProtector:  ''
4594   maxCallFrameSize: 4294967295
4595   hasOpaqueSPAdjustment: false
4596   hasVAStart:      false
4597   hasMustTailInVarArgFunc: false
4598   savePoint:       ''
4599   restorePoint:    ''
4600 fixedStack:      
4601 stack:           
4602 constants:       
4603 body:             |
4604   bb.0.entry:
4605     liveins: %x3, %x4
4606   
4607     %1 = COPY %x4
4608     %0 = COPY %x3
4609     %2 = LI 15
4610     %3 = COPY %0.sub_32
4611     %4 = SRAW killed %3, killed %2, implicit-def dead %carry
4612     ; CHECK: SRAWI killed %3, 15, implicit-def dead %carry
4613     ; CHECK-LATE: srawi 3, 3, 15
4614     %5 = EXTSW_32_64 killed %4
4615     %x3 = COPY %5
4616     BLR8 implicit %lr8, implicit %rm, implicit %x3
4620 name:            testSRAWo
4621 # CHECK-ALL: name: testSRAWo
4622 alignment:       4
4623 exposesReturnsTwice: false
4624 legalized:       false
4625 regBankSelected: false
4626 selected:        false
4627 tracksRegLiveness: true
4628 registers:       
4629   - { id: 0, class: g8rc, preferred-register: '' }
4630   - { id: 1, class: g8rc, preferred-register: '' }
4631   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
4632   - { id: 3, class: gprc, preferred-register: '' }
4633   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4634   - { id: 5, class: crrc, preferred-register: '' }
4635   - { id: 6, class: gprc, preferred-register: '' }
4636   - { id: 7, class: g8rc, preferred-register: '' }
4637 liveins:         
4638   - { reg: '%x3', virtual-reg: '%0' }
4639   - { reg: '%x4', virtual-reg: '%1' }
4640 frameInfo:       
4641   isFrameAddressTaken: false
4642   isReturnAddressTaken: false
4643   hasStackMap:     false
4644   hasPatchPoint:   false
4645   stackSize:       0
4646   offsetAdjustment: 0
4647   maxAlignment:    0
4648   adjustsStack:    false
4649   hasCalls:        false
4650   stackProtector:  ''
4651   maxCallFrameSize: 4294967295
4652   hasOpaqueSPAdjustment: false
4653   hasVAStart:      false
4654   hasMustTailInVarArgFunc: false
4655   savePoint:       ''
4656   restorePoint:    ''
4657 fixedStack:      
4658 stack:           
4659 constants:       
4660 body:             |
4661   bb.0.entry:
4662     liveins: %x3, %x4
4663   
4664     %1 = COPY %x4
4665     %0 = COPY %x3
4666     %2 = LI 8
4667     %3 = COPY %0.sub_32
4668     %4 = SRAWo killed %3, %2, implicit-def dead %carry, implicit-def %cr0
4669     ; CHECK: SRAWIo killed %3, 8, implicit-def dead %carry, implicit-def %cr0
4670     ; CHECK-LATE: srawi. 3, 3, 8
4671     %5 = COPY killed %cr0
4672     %6 = ISEL %2, %4, %5.sub_eq
4673     %7 = EXTSW_32_64 killed %6
4674     %x3 = COPY %7
4675     BLR8 implicit %lr8, implicit %rm, implicit %x3
4679 name:            testSRAD
4680 # CHECK-ALL: name: testSRAD
4681 alignment:       4
4682 exposesReturnsTwice: false
4683 legalized:       false
4684 regBankSelected: false
4685 selected:        false
4686 tracksRegLiveness: true
4687 registers:       
4688   - { id: 0, class: g8rc, preferred-register: '' }
4689   - { id: 1, class: g8rc, preferred-register: '' }
4690   - { id: 2, class: gprc, preferred-register: '' }
4691   - { id: 3, class: g8rc, preferred-register: '' }
4692 liveins:         
4693   - { reg: '%x3', virtual-reg: '%0' }
4694   - { reg: '%x4', virtual-reg: '%1' }
4695 frameInfo:       
4696   isFrameAddressTaken: false
4697   isReturnAddressTaken: false
4698   hasStackMap:     false
4699   hasPatchPoint:   false
4700   stackSize:       0
4701   offsetAdjustment: 0
4702   maxAlignment:    0
4703   adjustsStack:    false
4704   hasCalls:        false
4705   stackProtector:  ''
4706   maxCallFrameSize: 4294967295
4707   hasOpaqueSPAdjustment: false
4708   hasVAStart:      false
4709   hasMustTailInVarArgFunc: false
4710   savePoint:       ''
4711   restorePoint:    ''
4712 fixedStack:      
4713 stack:           
4714 constants:       
4715 body:             |
4716   bb.0.entry:
4717     liveins: %x3, %x4
4718   
4719     %1 = COPY %x4
4720     %0 = COPY %x3
4721     %2 = LI 44
4722     %3 = SRAD %0, killed %2, implicit-def dead %carry
4723     ; CHECK: SRADI %0, 44, implicit-def dead %carry
4724     ; CHECK-LATE: sradi 3, 3, 44
4725     %x3 = COPY %3
4726     BLR8 implicit %lr8, implicit %rm, implicit %x3
4730 name:            testSRADo
4731 # CHECK-ALL: name: testSRADo
4732 alignment:       4
4733 exposesReturnsTwice: false
4734 legalized:       false
4735 regBankSelected: false
4736 selected:        false
4737 tracksRegLiveness: true
4738 registers:       
4739   - { id: 0, class: g8rc, preferred-register: '' }
4740   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4741   - { id: 2, class: gprc, preferred-register: '' }
4742   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4743   - { id: 4, class: crrc, preferred-register: '' }
4744   - { id: 5, class: g8rc, preferred-register: '' }
4745 liveins:         
4746   - { reg: '%x3', virtual-reg: '%0' }
4747   - { reg: '%x4', virtual-reg: '%1' }
4748 frameInfo:       
4749   isFrameAddressTaken: false
4750   isReturnAddressTaken: false
4751   hasStackMap:     false
4752   hasPatchPoint:   false
4753   stackSize:       0
4754   offsetAdjustment: 0
4755   maxAlignment:    0
4756   adjustsStack:    false
4757   hasCalls:        false
4758   stackProtector:  ''
4759   maxCallFrameSize: 4294967295
4760   hasOpaqueSPAdjustment: false
4761   hasVAStart:      false
4762   hasMustTailInVarArgFunc: false
4763   savePoint:       ''
4764   restorePoint:    ''
4765 fixedStack:      
4766 stack:           
4767 constants:       
4768 body:             |
4769   bb.0.entry:
4770     liveins: %x3, %x4
4771   
4772     %1 = COPY %x4
4773     %0 = COPY %x3
4774     %2 = LI 61
4775     %3 = SRADo %0, killed %2, implicit-def dead %carry, implicit-def %cr0
4776     ; CHECK: SRADIo %0, 61, implicit-def dead %carry, implicit-def %cr0
4777     ; CHECK-LATE: sradi. 3, 3, 61
4778     %4 = COPY killed %cr0
4779     %5 = ISEL8 %1, %3, %4.sub_eq
4780     %x3 = COPY %5
4781     BLR8 implicit %lr8, implicit %rm, implicit %x3
4785 name:            testSTBUX
4786 # CHECK-ALL: name: testSTBUX
4787 alignment:       4
4788 exposesReturnsTwice: false
4789 legalized:       false
4790 regBankSelected: false
4791 selected:        false
4792 tracksRegLiveness: true
4793 registers:       
4794   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4795   - { id: 1, class: g8rc, preferred-register: '' }
4796   - { id: 2, class: g8rc, preferred-register: '' }
4797   - { id: 3, class: gprc, preferred-register: '' }
4798   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4799   - { id: 5, class: gprc, preferred-register: '' }
4800   - { id: 6, class: g8rc, preferred-register: '' }
4801   - { id: 7, class: g8rc, preferred-register: '' }
4802   - { id: 8, class: g8rc, preferred-register: '' }
4803   - { id: 9, class: gprc, preferred-register: '' }
4804   - { id: 10, class: g8rc, preferred-register: '' }
4805   - { id: 11, class: g8rc, preferred-register: '' }
4806   - { id: 12, class: g8rc, preferred-register: '' }
4807   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4808   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4809 liveins:         
4810   - { reg: '%x3', virtual-reg: '%0' }
4811   - { reg: '%x4', virtual-reg: '%1' }
4812   - { reg: '%x5', virtual-reg: '%2' }
4813 frameInfo:       
4814   isFrameAddressTaken: false
4815   isReturnAddressTaken: false
4816   hasStackMap:     false
4817   hasPatchPoint:   false
4818   stackSize:       0
4819   offsetAdjustment: 0
4820   maxAlignment:    0
4821   adjustsStack:    false
4822   hasCalls:        false
4823   stackProtector:  ''
4824   maxCallFrameSize: 4294967295
4825   hasOpaqueSPAdjustment: false
4826   hasVAStart:      false
4827   hasMustTailInVarArgFunc: false
4828   savePoint:       ''
4829   restorePoint:    ''
4830 fixedStack:      
4831 stack:           
4832 constants:       
4833 body:             |
4834   bb.0.entry:
4835     liveins: %x3, %x4, %x5
4836   
4837     %2 = COPY %x5
4838     %1 = COPY %x4
4839     %0 = COPY %x3
4840     %3 = COPY %1.sub_32
4841     %4 = COPY %2.sub_32
4842     %5 = ADDI %4, 1
4843     %7 = IMPLICIT_DEF
4844     %6 = INSERT_SUBREG %7, killed %5, 1
4845     %8 = LI8 966
4846     %13 = STBUX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
4847     ; CHECK: STBU %3, 966, %0
4848     ; CHECK-LATE: 4, 966(5)
4849     %9 = ADDI %4, 2
4850     %11 = IMPLICIT_DEF
4851     %10 = INSERT_SUBREG %11, killed %9, 1
4852     %12 = LI8 777
4853     %14 = STBUX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
4854     ; CHECK: STBU %3, 777, %0
4855     ; CHECK-LATE: 4, 777(3)
4856     BLR8 implicit %lr8, implicit %rm
4860 name:            testSTBX
4861 # CHECK-ALL: name: testSTBX
4862 alignment:       4
4863 exposesReturnsTwice: false
4864 legalized:       false
4865 regBankSelected: false
4866 selected:        false
4867 tracksRegLiveness: true
4868 registers:       
4869   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4870   - { id: 1, class: g8rc, preferred-register: '' }
4871   - { id: 2, class: g8rc, preferred-register: '' }
4872   - { id: 3, class: gprc, preferred-register: '' }
4873   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4874   - { id: 5, class: gprc, preferred-register: '' }
4875   - { id: 6, class: g8rc, preferred-register: '' }
4876   - { id: 7, class: g8rc, preferred-register: '' }
4877   - { id: 8, class: g8rc, preferred-register: '' }
4878   - { id: 9, class: gprc, preferred-register: '' }
4879   - { id: 10, class: g8rc, preferred-register: '' }
4880   - { id: 11, class: g8rc, preferred-register: '' }
4881   - { id: 12, class: g8rc, preferred-register: '' }
4882 liveins:         
4883   - { reg: '%x3', virtual-reg: '%0' }
4884   - { reg: '%x4', virtual-reg: '%1' }
4885   - { reg: '%x5', virtual-reg: '%2' }
4886 frameInfo:       
4887   isFrameAddressTaken: false
4888   isReturnAddressTaken: false
4889   hasStackMap:     false
4890   hasPatchPoint:   false
4891   stackSize:       0
4892   offsetAdjustment: 0
4893   maxAlignment:    0
4894   adjustsStack:    false
4895   hasCalls:        false
4896   stackProtector:  ''
4897   maxCallFrameSize: 4294967295
4898   hasOpaqueSPAdjustment: false
4899   hasVAStart:      false
4900   hasMustTailInVarArgFunc: false
4901   savePoint:       ''
4902   restorePoint:    ''
4903 fixedStack:      
4904 stack:           
4905 constants:       
4906 body:             |
4907   bb.0.entry:
4908     liveins: %x3, %x4, %x5
4909   
4910     %2 = COPY %x5
4911     %1 = COPY %x4
4912     %0 = LI8 975
4913     %3 = COPY %1.sub_32
4914     %4 = COPY %2.sub_32
4915     %5 = ADDI %4, 1
4916     %7 = IMPLICIT_DEF
4917     %6 = INSERT_SUBREG %7, killed %5, 1
4918     %8 = RLDICL killed %6, 0, 32
4919     STBX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
4920     ; CHECK: STB %3, 975, killed %8
4921     ; CHECK-LATE: stb 4, 975(6)
4922     %9 = ADDI %4, 2
4923     %11 = IMPLICIT_DEF
4924     %10 = INSERT_SUBREG %11, killed %9, 1
4925     %12 = RLDICL killed %10, 0, 32
4926     STBX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
4927     ; CHECK: STB %3, 975, killed %12
4928     ; CHECK-LATE: stb 4, 975(5)
4929     BLR8 implicit %lr8, implicit %rm
4933 name:            testSTHUX
4934 # CHECK-ALL: name: testSTHUX
4935 alignment:       4
4936 exposesReturnsTwice: false
4937 legalized:       false
4938 regBankSelected: false
4939 selected:        false
4940 tracksRegLiveness: true
4941 registers:       
4942   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4943   - { id: 1, class: g8rc, preferred-register: '' }
4944   - { id: 2, class: g8rc, preferred-register: '' }
4945   - { id: 3, class: gprc, preferred-register: '' }
4946   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
4947   - { id: 5, class: gprc, preferred-register: '' }
4948   - { id: 6, class: g8rc, preferred-register: '' }
4949   - { id: 7, class: g8rc, preferred-register: '' }
4950   - { id: 8, class: g8rc, preferred-register: '' }
4951   - { id: 9, class: gprc, preferred-register: '' }
4952   - { id: 10, class: g8rc, preferred-register: '' }
4953   - { id: 11, class: g8rc, preferred-register: '' }
4954   - { id: 12, class: g8rc, preferred-register: '' }
4955   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4956   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
4957 liveins:         
4958   - { reg: '%x3', virtual-reg: '%0' }
4959   - { reg: '%x4', virtual-reg: '%1' }
4960   - { reg: '%x5', virtual-reg: '%2' }
4961 frameInfo:       
4962   isFrameAddressTaken: false
4963   isReturnAddressTaken: false
4964   hasStackMap:     false
4965   hasPatchPoint:   false
4966   stackSize:       0
4967   offsetAdjustment: 0
4968   maxAlignment:    0
4969   adjustsStack:    false
4970   hasCalls:        false
4971   stackProtector:  ''
4972   maxCallFrameSize: 4294967295
4973   hasOpaqueSPAdjustment: false
4974   hasVAStart:      false
4975   hasMustTailInVarArgFunc: false
4976   savePoint:       ''
4977   restorePoint:    ''
4978 fixedStack:      
4979 stack:           
4980 constants:       
4981 body:             |
4982   bb.0.entry:
4983     liveins: %x3, %x4, %x5
4984   
4985     %2 = COPY %x5
4986     %1 = COPY %x4
4987     %0 = COPY %x3
4988     %3 = COPY %1.sub_32
4989     %4 = COPY %2.sub_32
4990     %5 = ADDI %4, 1
4991     %7 = IMPLICIT_DEF
4992     %6 = INSERT_SUBREG %7, killed %5, 1
4993     %8 = LI8 32000
4994     %13 = STHUX %3, %0, killed %8 :: (store 2 into %ir.arrayidx, !tbaa !6)
4995     ; CHECK: STHU %3, 32000, %0
4996     ; CHECK-LATE: sthu 4, 32000(5)
4997     %9 = ADDI %4, 2
4998     %11 = IMPLICIT_DEF
4999     %10 = INSERT_SUBREG %11, killed %9, 1
5000     %12 = LI8 -761
5001     %14 = STHUX %3, %0, killed %12 :: (store 2 into %ir.arrayidx3, !tbaa !6)
5002     ; CHECK: STHU %3, -761, %0
5003     ; CHECK-LATE: sthu 4, -761(3)
5004     BLR8 implicit %lr8, implicit %rm
5008 name:            testSTHX
5009 # CHECK-ALL: name: testSTHX
5010 alignment:       4
5011 exposesReturnsTwice: false
5012 legalized:       false
5013 regBankSelected: false
5014 selected:        false
5015 tracksRegLiveness: true
5016 registers:       
5017   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5018   - { id: 1, class: g8rc, preferred-register: '' }
5019   - { id: 2, class: g8rc, preferred-register: '' }
5020   - { id: 3, class: gprc, preferred-register: '' }
5021   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5022   - { id: 5, class: gprc, preferred-register: '' }
5023   - { id: 6, class: g8rc, preferred-register: '' }
5024   - { id: 7, class: g8rc, preferred-register: '' }
5025   - { id: 8, class: g8rc, preferred-register: '' }
5026   - { id: 9, class: gprc, preferred-register: '' }
5027   - { id: 10, class: g8rc, preferred-register: '' }
5028   - { id: 11, class: g8rc, preferred-register: '' }
5029   - { id: 12, class: g8rc, preferred-register: '' }
5030 liveins:         
5031   - { reg: '%x3', virtual-reg: '%0' }
5032   - { reg: '%x4', virtual-reg: '%1' }
5033   - { reg: '%x5', virtual-reg: '%2' }
5034 frameInfo:       
5035   isFrameAddressTaken: false
5036   isReturnAddressTaken: false
5037   hasStackMap:     false
5038   hasPatchPoint:   false
5039   stackSize:       0
5040   offsetAdjustment: 0
5041   maxAlignment:    0
5042   adjustsStack:    false
5043   hasCalls:        false
5044   stackProtector:  ''
5045   maxCallFrameSize: 4294967295
5046   hasOpaqueSPAdjustment: false
5047   hasVAStart:      false
5048   hasMustTailInVarArgFunc: false
5049   savePoint:       ''
5050   restorePoint:    ''
5051 fixedStack:      
5052 stack:           
5053 constants:       
5054 body:             |
5055   bb.0.entry:
5056     liveins: %x3, %x4, %x5
5057   
5058     %2 = COPY %x5
5059     %1 = COPY %x4
5060     %0 = COPY %x3
5061     %3 = COPY %1.sub_32
5062     %4 = COPY %2.sub_32
5063     %5 = ADDI %4, 1
5064     %7 = IMPLICIT_DEF
5065     %6 = INSERT_SUBREG %7, killed %5, 1
5066     %8 = LI8 900
5067     STHX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3)
5068     ; CHECK: STH %3, 900, %0
5069     ; CHECK-LATE: sth 4, 900(3)
5070     %9 = ADDI %4, 2
5071     %11 = IMPLICIT_DEF
5072     %10 = INSERT_SUBREG %11, killed %9, 1
5073     %12 = LI8 -900
5074     STHX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3)
5075     ; CHECK: STH %3, -900, %0
5076     ; CHECK-LATE: sth 4, -900(3)
5077     BLR8 implicit %lr8, implicit %rm
5081 name:            testSTWUX
5082 # CHECK-ALL: name: testSTWUX
5083 alignment:       4
5084 exposesReturnsTwice: false
5085 legalized:       false
5086 regBankSelected: false
5087 selected:        false
5088 tracksRegLiveness: true
5089 registers:       
5090   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5091   - { id: 1, class: g8rc, preferred-register: '' }
5092   - { id: 2, class: g8rc, preferred-register: '' }
5093   - { id: 3, class: gprc, preferred-register: '' }
5094   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5095   - { id: 5, class: gprc, preferred-register: '' }
5096   - { id: 6, class: g8rc, preferred-register: '' }
5097   - { id: 7, class: g8rc, preferred-register: '' }
5098   - { id: 8, class: g8rc, preferred-register: '' }
5099   - { id: 9, class: gprc, preferred-register: '' }
5100   - { id: 10, class: g8rc, preferred-register: '' }
5101   - { id: 11, class: g8rc, preferred-register: '' }
5102   - { id: 12, class: g8rc, preferred-register: '' }
5103   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5104   - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5105 liveins:         
5106   - { reg: '%x3', virtual-reg: '%0' }
5107   - { reg: '%x4', virtual-reg: '%1' }
5108   - { reg: '%x5', virtual-reg: '%2' }
5109 frameInfo:       
5110   isFrameAddressTaken: false
5111   isReturnAddressTaken: false
5112   hasStackMap:     false
5113   hasPatchPoint:   false
5114   stackSize:       0
5115   offsetAdjustment: 0
5116   maxAlignment:    0
5117   adjustsStack:    false
5118   hasCalls:        false
5119   stackProtector:  ''
5120   maxCallFrameSize: 4294967295
5121   hasOpaqueSPAdjustment: false
5122   hasVAStart:      false
5123   hasMustTailInVarArgFunc: false
5124   savePoint:       ''
5125   restorePoint:    ''
5126 fixedStack:      
5127 stack:           
5128 constants:       
5129 body:             |
5130   bb.0.entry:
5131     liveins: %x3, %x4, %x5
5132   
5133     %2 = COPY %x5
5134     %1 = COPY %x4
5135     %0 = COPY %x3
5136     %3 = COPY %1.sub_32
5137     %4 = COPY %2.sub_32
5138     %5 = ADDI %4, 1
5139     %7 = IMPLICIT_DEF
5140     %6 = INSERT_SUBREG %7, killed %5, 1
5141     %8 = LI8 111
5142     %13 = STWUX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5143     ; CHECK: STWU %3, 111, %0
5144     ; CHECK-LATE: stwu 4, 111(5)
5145     %9 = ADDI %4, 2
5146     %11 = IMPLICIT_DEF
5147     %10 = INSERT_SUBREG %11, killed %9, 1
5148     %12 = LI8 0
5149     %14 = STWUX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5150     ; CHECK: STWU %3, 0, %0
5151     ; CHECK-LATE: stwu 4, 0(3)
5152     BLR8 implicit %lr8, implicit %rm
5156 name:            testSTWX
5157 # CHECK-ALL: name: testSTWX
5158 alignment:       4
5159 exposesReturnsTwice: false
5160 legalized:       false
5161 regBankSelected: false
5162 selected:        false
5163 tracksRegLiveness: true
5164 registers:       
5165   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5166   - { id: 1, class: g8rc, preferred-register: '' }
5167   - { id: 2, class: g8rc, preferred-register: '' }
5168   - { id: 3, class: gprc, preferred-register: '' }
5169   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
5170   - { id: 5, class: gprc, preferred-register: '' }
5171   - { id: 6, class: g8rc, preferred-register: '' }
5172   - { id: 7, class: g8rc, preferred-register: '' }
5173   - { id: 8, class: g8rc, preferred-register: '' }
5174   - { id: 9, class: gprc, preferred-register: '' }
5175   - { id: 10, class: g8rc, preferred-register: '' }
5176   - { id: 11, class: g8rc, preferred-register: '' }
5177   - { id: 12, class: g8rc, preferred-register: '' }
5178 liveins:         
5179   - { reg: '%x3', virtual-reg: '%0' }
5180   - { reg: '%x4', virtual-reg: '%1' }
5181   - { reg: '%x5', virtual-reg: '%2' }
5182 frameInfo:       
5183   isFrameAddressTaken: false
5184   isReturnAddressTaken: false
5185   hasStackMap:     false
5186   hasPatchPoint:   false
5187   stackSize:       0
5188   offsetAdjustment: 0
5189   maxAlignment:    0
5190   adjustsStack:    false
5191   hasCalls:        false
5192   stackProtector:  ''
5193   maxCallFrameSize: 4294967295
5194   hasOpaqueSPAdjustment: false
5195   hasVAStart:      false
5196   hasMustTailInVarArgFunc: false
5197   savePoint:       ''
5198   restorePoint:    ''
5199 fixedStack:      
5200 stack:           
5201 constants:       
5202 body:             |
5203   bb.0.entry:
5204     liveins: %x3, %x4, %x5
5205   
5206     %2 = COPY %x5
5207     %1 = COPY %x4
5208     %0 = COPY %x3
5209     %3 = COPY %1.sub_32
5210     %4 = COPY %2.sub_32
5211     %5 = ADDI %4, 1
5212     %7 = IMPLICIT_DEF
5213     %6 = INSERT_SUBREG %7, killed %5, 1
5214     %8 = LI8 2
5215     STWX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8)
5216     ; CHECK: STW %3, 2, %0
5217     ; CHECK-LATE: stw 4, 2(3)
5218     %9 = ADDI %4, 2
5219     %11 = IMPLICIT_DEF
5220     %10 = INSERT_SUBREG %11, killed %9, 1
5221     %12 = LI8 99
5222     STWX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8)
5223     ; CHECK: STW %3, 99, %0
5224     ; CHECK-LATE: stw 4, 99(3)
5225     BLR8 implicit %lr8, implicit %rm
5229 name:            testSTDUX
5230 # CHECK-ALL: name: testSTDUX
5231 alignment:       4
5232 exposesReturnsTwice: false
5233 legalized:       false
5234 regBankSelected: false
5235 selected:        false
5236 tracksRegLiveness: true
5237 registers:       
5238   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5239   - { id: 1, class: g8rc, preferred-register: '' }
5240   - { id: 2, class: g8rc, preferred-register: '' }
5241   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5242   - { id: 4, class: gprc, preferred-register: '' }
5243   - { id: 5, class: g8rc, preferred-register: '' }
5244   - { id: 6, class: g8rc, preferred-register: '' }
5245   - { id: 7, class: g8rc, preferred-register: '' }
5246   - { id: 8, class: gprc, preferred-register: '' }
5247   - { id: 9, class: g8rc, preferred-register: '' }
5248   - { id: 10, class: g8rc, preferred-register: '' }
5249   - { id: 11, class: g8rc, preferred-register: '' }
5250   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5251   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5252 liveins:         
5253   - { reg: '%x3', virtual-reg: '%0' }
5254   - { reg: '%x4', virtual-reg: '%1' }
5255   - { reg: '%x5', virtual-reg: '%2' }
5256 frameInfo:       
5257   isFrameAddressTaken: false
5258   isReturnAddressTaken: false
5259   hasStackMap:     false
5260   hasPatchPoint:   false
5261   stackSize:       0
5262   offsetAdjustment: 0
5263   maxAlignment:    0
5264   adjustsStack:    false
5265   hasCalls:        false
5266   stackProtector:  ''
5267   maxCallFrameSize: 4294967295
5268   hasOpaqueSPAdjustment: false
5269   hasVAStart:      false
5270   hasMustTailInVarArgFunc: false
5271   savePoint:       ''
5272   restorePoint:    ''
5273 fixedStack:      
5274 stack:           
5275 constants:       
5276 body:             |
5277   bb.0.entry:
5278     liveins: %x3, %x4, %x5
5279   
5280     %2 = COPY %x5
5281     %1 = COPY %x4
5282     %0 = COPY %x3
5283     %3 = COPY %2.sub_32
5284     %4 = ADDI %3, 1
5285     %6 = IMPLICIT_DEF
5286     %5 = INSERT_SUBREG %6, killed %4, 1
5287     %7 = LI8 444
5288     %12 = STDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5289     ; CHECK: STDU %1, 444, %0
5290     ; CHECK-LATE: stdu 4, 444(5)
5291     %8 = ADDI %3, 2
5292     %10 = IMPLICIT_DEF
5293     %9 = INSERT_SUBREG %10, killed %8, 1
5294     %11 = LI8 -8
5295     %13 = STDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5296     ; CHECK: STDU %1, -8, %0
5297     ; CHECK-LATE: stdu 4, -8(3)
5298     BLR8 implicit %lr8, implicit %rm
5302 name:            testSTDX
5303 # CHECK-ALL: name: testSTDX
5304 alignment:       4
5305 exposesReturnsTwice: false
5306 legalized:       false
5307 regBankSelected: false
5308 selected:        false
5309 tracksRegLiveness: true
5310 registers:       
5311   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5312   - { id: 1, class: g8rc, preferred-register: '' }
5313   - { id: 2, class: g8rc, preferred-register: '' }
5314   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5315   - { id: 4, class: gprc, preferred-register: '' }
5316   - { id: 5, class: g8rc, preferred-register: '' }
5317   - { id: 6, class: g8rc, preferred-register: '' }
5318   - { id: 7, class: g8rc, preferred-register: '' }
5319   - { id: 8, class: gprc, preferred-register: '' }
5320   - { id: 9, class: g8rc, preferred-register: '' }
5321   - { id: 10, class: g8rc, preferred-register: '' }
5322   - { id: 11, class: g8rc, preferred-register: '' }
5323 liveins:         
5324   - { reg: '%x3', virtual-reg: '%0' }
5325   - { reg: '%x4', virtual-reg: '%1' }
5326   - { reg: '%x5', virtual-reg: '%2' }
5327 frameInfo:       
5328   isFrameAddressTaken: false
5329   isReturnAddressTaken: false
5330   hasStackMap:     false
5331   hasPatchPoint:   false
5332   stackSize:       0
5333   offsetAdjustment: 0
5334   maxAlignment:    0
5335   adjustsStack:    false
5336   hasCalls:        false
5337   stackProtector:  ''
5338   maxCallFrameSize: 4294967295
5339   hasOpaqueSPAdjustment: false
5340   hasVAStart:      false
5341   hasMustTailInVarArgFunc: false
5342   savePoint:       ''
5343   restorePoint:    ''
5344 fixedStack:      
5345 stack:           
5346 constants:       
5347 body:             |
5348   bb.0.entry:
5349     liveins: %x3, %x4, %x5
5350   
5351     %2 = COPY %x5
5352     %1 = COPY %x4
5353     %0 = LI8 1000
5354     %3 = COPY %2.sub_32
5355     %4 = ADDI %3, 1
5356     %6 = IMPLICIT_DEF
5357     %5 = INSERT_SUBREG %6, killed %4, 1
5358     %7 = LI8 900
5359     STDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10)
5360     ; CHECK: STD %1, 1000, killed %7
5361     ; CHECK-LATE: 4, 1000(5)
5362     %8 = ADDI %3, 2
5363     %10 = IMPLICIT_DEF
5364     %9 = INSERT_SUBREG %10, killed %8, 1
5365     %11 = LI8 -900
5366     STDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10)
5367     ; CHECK: STD %1, 1000, killed %11
5368     ; CHECK-LATE: 4, 1000(6)
5369     BLR8 implicit %lr8, implicit %rm
5373 name:            testSTFSX
5374 # CHECK-ALL: name: testSTFSX
5375 alignment:       4
5376 exposesReturnsTwice: false
5377 legalized:       false
5378 regBankSelected: false
5379 selected:        false
5380 tracksRegLiveness: true
5381 registers:       
5382   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5383   - { id: 1, class: f4rc, preferred-register: '' }
5384   - { id: 2, class: g8rc, preferred-register: '' }
5385   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5386   - { id: 4, class: gprc, preferred-register: '' }
5387   - { id: 5, class: g8rc, preferred-register: '' }
5388   - { id: 6, class: g8rc, preferred-register: '' }
5389   - { id: 7, class: g8rc, preferred-register: '' }
5390   - { id: 8, class: gprc, preferred-register: '' }
5391   - { id: 9, class: g8rc, preferred-register: '' }
5392   - { id: 10, class: g8rc, preferred-register: '' }
5393   - { id: 11, class: g8rc, preferred-register: '' }
5394 liveins:         
5395   - { reg: '%x3', virtual-reg: '%0' }
5396   - { reg: '%f1', virtual-reg: '%1' }
5397   - { reg: '%x5', virtual-reg: '%2' }
5398 frameInfo:       
5399   isFrameAddressTaken: false
5400   isReturnAddressTaken: false
5401   hasStackMap:     false
5402   hasPatchPoint:   false
5403   stackSize:       0
5404   offsetAdjustment: 0
5405   maxAlignment:    0
5406   adjustsStack:    false
5407   hasCalls:        false
5408   stackProtector:  ''
5409   maxCallFrameSize: 4294967295
5410   hasOpaqueSPAdjustment: false
5411   hasVAStart:      false
5412   hasMustTailInVarArgFunc: false
5413   savePoint:       ''
5414   restorePoint:    ''
5415 fixedStack:      
5416 stack:           
5417 constants:       
5418 body:             |
5419   bb.0.entry:
5420     liveins: %x3, %f1, %x5
5421   
5422     %2 = COPY %x5
5423     %1 = COPY %f1
5424     %0 = COPY %x3
5425     %3 = COPY %2.sub_32
5426     %4 = ADDI %3, 1
5427     %6 = IMPLICIT_DEF
5428     %5 = INSERT_SUBREG %6, killed %4, 1
5429     %7 = LI8 400
5430     STFSX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5431     ; CHECK: STFS %1, 400, %0
5432     ; CHECK-LATE: stfs 1, 400(3)
5433     %8 = ADDI %3, 2
5434     %10 = IMPLICIT_DEF
5435     %9 = INSERT_SUBREG %10, killed %8, 1
5436     %11 = LI8 -401
5437     STFSX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5438     ; CHECK: STFS %1, -401, %0
5439     ; CHECK-LATE: stfs 1, -401(3)
5440     BLR8 implicit %lr8, implicit %rm
5444 name:            testSTFSUX
5445 # CHECK-ALL: name: testSTFSUX
5446 alignment:       4
5447 exposesReturnsTwice: false
5448 legalized:       false
5449 regBankSelected: false
5450 selected:        false
5451 tracksRegLiveness: true
5452 registers:       
5453   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5454   - { id: 1, class: f4rc, preferred-register: '' }
5455   - { id: 2, class: g8rc, preferred-register: '' }
5456   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5457   - { id: 4, class: gprc, preferred-register: '' }
5458   - { id: 5, class: g8rc, preferred-register: '' }
5459   - { id: 6, class: g8rc, preferred-register: '' }
5460   - { id: 7, class: g8rc, preferred-register: '' }
5461   - { id: 8, class: gprc, preferred-register: '' }
5462   - { id: 9, class: g8rc, preferred-register: '' }
5463   - { id: 10, class: g8rc, preferred-register: '' }
5464   - { id: 11, class: g8rc, preferred-register: '' }
5465   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5466   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5467 liveins:         
5468   - { reg: '%x3', virtual-reg: '%0' }
5469   - { reg: '%f1', virtual-reg: '%1' }
5470   - { reg: '%x5', virtual-reg: '%2' }
5471 frameInfo:       
5472   isFrameAddressTaken: false
5473   isReturnAddressTaken: false
5474   hasStackMap:     false
5475   hasPatchPoint:   false
5476   stackSize:       0
5477   offsetAdjustment: 0
5478   maxAlignment:    0
5479   adjustsStack:    false
5480   hasCalls:        false
5481   stackProtector:  ''
5482   maxCallFrameSize: 4294967295
5483   hasOpaqueSPAdjustment: false
5484   hasVAStart:      false
5485   hasMustTailInVarArgFunc: false
5486   savePoint:       ''
5487   restorePoint:    ''
5488 fixedStack:      
5489 stack:           
5490 constants:       
5491 body:             |
5492   bb.0.entry:
5493     liveins: %x3, %f1, %x5
5494   
5495     %2 = COPY %x5
5496     %1 = COPY %f1
5497     %0 = COPY %x3
5498     %3 = COPY %2.sub_32
5499     %4 = ADDI %3, 1
5500     %6 = IMPLICIT_DEF
5501     %5 = INSERT_SUBREG %6, killed %4, 1
5502     %7 = LI8 111
5503     %12 = STFSUX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14)
5504     ; CHECK: STFSU %1, 111, %0
5505     ; CHECK-LATE: stfsu 1, 111(4)
5506     %8 = ADDI %3, 2
5507     %10 = IMPLICIT_DEF
5508     %9 = INSERT_SUBREG %10, killed %8, 1
5509     %11 = LI8 987
5510     %13 = STFSUX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14)
5511     ; CHECK: STFSU %1, 987, %0
5512     ; CHECK-LATE: stfsu 1, 987(3)
5513     BLR8 implicit %lr8, implicit %rm
5517 name:            testSTFDX
5518 # CHECK-ALL: name: testSTFDX
5519 alignment:       4
5520 exposesReturnsTwice: false
5521 legalized:       false
5522 regBankSelected: false
5523 selected:        false
5524 tracksRegLiveness: true
5525 registers:       
5526   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5527   - { id: 1, class: f8rc, preferred-register: '' }
5528   - { id: 2, class: g8rc, preferred-register: '' }
5529   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5530   - { id: 4, class: gprc, preferred-register: '' }
5531   - { id: 5, class: g8rc, preferred-register: '' }
5532   - { id: 6, class: g8rc, preferred-register: '' }
5533   - { id: 7, class: g8rc, preferred-register: '' }
5534   - { id: 8, class: gprc, preferred-register: '' }
5535   - { id: 9, class: g8rc, preferred-register: '' }
5536   - { id: 10, class: g8rc, preferred-register: '' }
5537   - { id: 11, class: g8rc, preferred-register: '' }
5538 liveins:         
5539   - { reg: '%x3', virtual-reg: '%0' }
5540   - { reg: '%f1', virtual-reg: '%1' }
5541   - { reg: '%x5', virtual-reg: '%2' }
5542 frameInfo:       
5543   isFrameAddressTaken: false
5544   isReturnAddressTaken: false
5545   hasStackMap:     false
5546   hasPatchPoint:   false
5547   stackSize:       0
5548   offsetAdjustment: 0
5549   maxAlignment:    0
5550   adjustsStack:    false
5551   hasCalls:        false
5552   stackProtector:  ''
5553   maxCallFrameSize: 4294967295
5554   hasOpaqueSPAdjustment: false
5555   hasVAStart:      false
5556   hasMustTailInVarArgFunc: false
5557   savePoint:       ''
5558   restorePoint:    ''
5559 fixedStack:      
5560 stack:           
5561 constants:       
5562 body:             |
5563   bb.0.entry:
5564     liveins: %x3, %f1, %x5
5565   
5566     %2 = COPY %x5
5567     %1 = COPY %f1
5568     %0 = COPY %x3
5569     %3 = COPY %2.sub_32
5570     %4 = ADDI %3, 1
5571     %6 = IMPLICIT_DEF
5572     %5 = INSERT_SUBREG %6, killed %4, 1
5573     %7 = LI8 876
5574     STFDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5575     ; CHECK: STFD %1, 876, %0
5576     ; CHECK-LATE: stfd 1, 876(3)
5577     %8 = ADDI %3, 2
5578     %10 = IMPLICIT_DEF
5579     %9 = INSERT_SUBREG %10, killed %8, 1
5580     %11 = LI8 -873
5581     STFDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5582     ; CHECK: STFD %1, -873, %0
5583     ; CHECK-LATE: stfd 1, -873(3)
5584     BLR8 implicit %lr8, implicit %rm
5588 name:            testSTFDUX
5589 # CHECK-ALL: name: testSTFDUX
5590 alignment:       4
5591 exposesReturnsTwice: false
5592 legalized:       false
5593 regBankSelected: false
5594 selected:        false
5595 tracksRegLiveness: true
5596 registers:       
5597   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5598   - { id: 1, class: f8rc, preferred-register: '' }
5599   - { id: 2, class: g8rc, preferred-register: '' }
5600   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
5601   - { id: 4, class: gprc, preferred-register: '' }
5602   - { id: 5, class: g8rc, preferred-register: '' }
5603   - { id: 6, class: g8rc, preferred-register: '' }
5604   - { id: 7, class: g8rc, preferred-register: '' }
5605   - { id: 8, class: gprc, preferred-register: '' }
5606   - { id: 9, class: g8rc, preferred-register: '' }
5607   - { id: 10, class: g8rc, preferred-register: '' }
5608   - { id: 11, class: g8rc, preferred-register: '' }
5609   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5610   - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5611 liveins:         
5612   - { reg: '%x3', virtual-reg: '%0' }
5613   - { reg: '%f1', virtual-reg: '%1' }
5614   - { reg: '%x5', virtual-reg: '%2' }
5615 frameInfo:       
5616   isFrameAddressTaken: false
5617   isReturnAddressTaken: false
5618   hasStackMap:     false
5619   hasPatchPoint:   false
5620   stackSize:       0
5621   offsetAdjustment: 0
5622   maxAlignment:    0
5623   adjustsStack:    false
5624   hasCalls:        false
5625   stackProtector:  ''
5626   maxCallFrameSize: 4294967295
5627   hasOpaqueSPAdjustment: false
5628   hasVAStart:      false
5629   hasMustTailInVarArgFunc: false
5630   savePoint:       ''
5631   restorePoint:    ''
5632 fixedStack:      
5633 stack:           
5634 constants:       
5635 body:             |
5636   bb.0.entry:
5637     liveins: %x3, %f1, %x5
5638   
5639     %2 = COPY %x5
5640     %1 = COPY %f1
5641     %0 = COPY %x3
5642     %3 = COPY %2.sub_32
5643     %4 = ADDI %3, 1
5644     %6 = IMPLICIT_DEF
5645     %5 = INSERT_SUBREG %6, killed %4, 1
5646     %7 = LI8 -9038
5647     %12 = STFDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12)
5648     ; CHECK: STFDU %1, -9038, %0
5649     ; CHECK-LATE: stfdu 1, -9038(4)
5650     %8 = ADDI %3, 2
5651     %10 = IMPLICIT_DEF
5652     %9 = INSERT_SUBREG %10, killed %8, 1
5653     %11 = LI8 6477
5654     %13 = STFDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12)
5655     ; CHECK: STFDU %1, 6477, %0
5656     ; CHECK-LATE: stfdu 1, 6477(3)
5657     BLR8 implicit %lr8, implicit %rm
5661 name:            testSTXSSPX
5662 # CHECK-ALL: name: testSTXSSPX
5663 alignment:       4
5664 exposesReturnsTwice: false
5665 legalized:       false
5666 regBankSelected: false
5667 selected:        false
5668 tracksRegLiveness: true
5669 registers:       
5670   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5671   - { id: 1, class: vssrc, preferred-register: '' }
5672   - { id: 2, class: g8rc, preferred-register: '' }
5673   - { id: 3, class: g8rc, preferred-register: '' }
5674 liveins:         
5675   - { reg: '%x3', virtual-reg: '%0' }
5676   - { reg: '%f1', virtual-reg: '%1' }
5677   - { reg: '%x5', virtual-reg: '%2' }
5678 frameInfo:       
5679   isFrameAddressTaken: false
5680   isReturnAddressTaken: false
5681   hasStackMap:     false
5682   hasPatchPoint:   false
5683   stackSize:       0
5684   offsetAdjustment: 0
5685   maxAlignment:    0
5686   adjustsStack:    false
5687   hasCalls:        false
5688   stackProtector:  ''
5689   maxCallFrameSize: 4294967295
5690   hasOpaqueSPAdjustment: false
5691   hasVAStart:      false
5692   hasMustTailInVarArgFunc: false
5693   savePoint:       ''
5694   restorePoint:    ''
5695 fixedStack:      
5696 stack:           
5697 constants:       
5698 body:             |
5699   bb.0.entry:
5700     liveins: %x3, %f1, %x5
5701   
5702     %2 = COPY %x5
5703     %1 = COPY %f1
5704     %0 = COPY %x3
5705     %3 = LI8 444
5706     STXSSPX %1, %0, killed %3 :: (store 4 into %ir.arrayidx, !tbaa !14)
5707     ; CHECK: STXSSP %1, 444, %0
5708     ; CHECK-LATE: stxssp 1, 444(3)
5709     BLR8 implicit %lr8, implicit %rm
5713 name:            testSTXSDX
5714 # CHECK-ALL: name: testSTXSDX
5715 alignment:       4
5716 exposesReturnsTwice: false
5717 legalized:       false
5718 regBankSelected: false
5719 selected:        false
5720 tracksRegLiveness: true
5721 registers:       
5722   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5723   - { id: 1, class: vsfrc, preferred-register: '' }
5724   - { id: 2, class: g8rc, preferred-register: '' }
5725   - { id: 3, class: g8rc, preferred-register: '' }
5726 liveins:         
5727   - { reg: '%x3', virtual-reg: '%0' }
5728   - { reg: '%f1', virtual-reg: '%1' }
5729   - { reg: '%x5', virtual-reg: '%2' }
5730 frameInfo:       
5731   isFrameAddressTaken: false
5732   isReturnAddressTaken: false
5733   hasStackMap:     false
5734   hasPatchPoint:   false
5735   stackSize:       0
5736   offsetAdjustment: 0
5737   maxAlignment:    0
5738   adjustsStack:    false
5739   hasCalls:        false
5740   stackProtector:  ''
5741   maxCallFrameSize: 4294967295
5742   hasOpaqueSPAdjustment: false
5743   hasVAStart:      false
5744   hasMustTailInVarArgFunc: false
5745   savePoint:       ''
5746   restorePoint:    ''
5747 fixedStack:      
5748 stack:           
5749 constants:       
5750 body:             |
5751   bb.0.entry:
5752     liveins: %x3, %f1, %x5
5753   
5754     %2 = COPY %x5
5755     %1 = COPY %f1
5756     %0 = COPY %x3
5757     %3 = LI8 4
5758     STXSDX %1, %0, killed %3, implicit %rm :: (store 8 into %ir.arrayidx, !tbaa !12)
5759     ; CHECK: STXSD %1, 4, %0
5760     ; CHECK-LATE: stxsd 1, 4(3)
5761     BLR8 implicit %lr8, implicit %rm
5765 name:            testSTXVX
5766 # CHECK-ALL: name: testSTXVX
5767 alignment:       4
5768 exposesReturnsTwice: false
5769 legalized:       false
5770 regBankSelected: false
5771 selected:        false
5772 tracksRegLiveness: true
5773 registers:       
5774   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
5775   - { id: 1, class: vrrc, preferred-register: '' }
5776   - { id: 2, class: g8rc, preferred-register: '' }
5777   - { id: 3, class: g8rc, preferred-register: '' }
5778 liveins:         
5779   - { reg: '%x3', virtual-reg: '%0' }
5780   - { reg: '%v2', virtual-reg: '%1' }
5781   - { reg: '%x7', virtual-reg: '%2' }
5782 frameInfo:       
5783   isFrameAddressTaken: false
5784   isReturnAddressTaken: false
5785   hasStackMap:     false
5786   hasPatchPoint:   false
5787   stackSize:       0
5788   offsetAdjustment: 0
5789   maxAlignment:    0
5790   adjustsStack:    false
5791   hasCalls:        false
5792   stackProtector:  ''
5793   maxCallFrameSize: 4294967295
5794   hasOpaqueSPAdjustment: false
5795   hasVAStart:      false
5796   hasMustTailInVarArgFunc: false
5797   savePoint:       ''
5798   restorePoint:    ''
5799 fixedStack:      
5800 stack:           
5801 constants:       
5802 body:             |
5803   bb.0.entry:
5804     liveins: %x3, %v2, %x7
5805   
5806     %2 = COPY %x7
5807     %1 = COPY %v2
5808     %0 = LI8 16
5809     %3 = RLDICR %2, 4, 59
5810     STXVX %1, %0, killed %3 :: (store 16 into %ir.arrayidx, !tbaa !3)
5811     ; CHECK: STXV %1, 16, killed %3
5812     ; CHECK-LATE: stxv 34, 16(4)
5813     BLR8 implicit %lr8, implicit %rm
5817 name:            testSUBFC
5818 # CHECK-ALL: name: testSUBFC
5819 alignment:       4
5820 exposesReturnsTwice: false
5821 legalized:       false
5822 regBankSelected: false
5823 selected:        false
5824 tracksRegLiveness: true
5825 registers:       
5826   - { id: 0, class: gprc, preferred-register: '' }
5827   - { id: 1, class: g8rc, preferred-register: '' }
5828   - { id: 2, class: g8rc, preferred-register: '' }
5829   - { id: 3, class: g8rc, preferred-register: '' }
5830   - { id: 4, class: gprc, preferred-register: '' }
5831   - { id: 5, class: gprc, preferred-register: '' }
5832   - { id: 6, class: gprc, preferred-register: '' }
5833   - { id: 7, class: gprc, preferred-register: '' }
5834   - { id: 8, class: gprc, preferred-register: '' }
5835 liveins:         
5836   - { reg: '%x3', virtual-reg: '%0' }
5837   - { reg: '%x4', virtual-reg: '%1' }
5838   - { reg: '%x5', virtual-reg: '%2' }
5839   - { reg: '%x6', virtual-reg: '%3' }
5840 frameInfo:       
5841   isFrameAddressTaken: false
5842   isReturnAddressTaken: false
5843   hasStackMap:     false
5844   hasPatchPoint:   false
5845   stackSize:       0
5846   offsetAdjustment: 0
5847   maxAlignment:    0
5848   adjustsStack:    false
5849   hasCalls:        false
5850   stackProtector:  ''
5851   maxCallFrameSize: 4294967295
5852   hasOpaqueSPAdjustment: false
5853   hasVAStart:      false
5854   hasMustTailInVarArgFunc: false
5855   savePoint:       ''
5856   restorePoint:    ''
5857 fixedStack:      
5858 stack:           
5859 constants:       
5860 body:             |
5861   bb.0.entry:
5862     liveins: %x3, %x4, %x5, %x6
5863   
5864     %3 = COPY %x6
5865     %2 = COPY %x5
5866     %1 = COPY %x4
5867     %6 = COPY %3.sub_32
5868     %7 = COPY %2.sub_32
5869     %8 = COPY %1.sub_32
5870     %0 = LI 55
5871     %4 = SUBFC %7, %0, implicit-def %carry
5872     ; CHECK: SUBFIC %7, 55
5873     ; CHECK-LATE: subfic 3, 5, 55
5874     %5 = SUBFE %6, %8, implicit-def dead %carry, implicit %carry
5875     %x3 = EXTSW_32_64 %4
5876     %x4 = EXTSW_32_64 %5
5877     BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
5881 name:            testSUBFC8
5882 # CHECK-ALL: name: testSUBFC8
5883 alignment:       4
5884 exposesReturnsTwice: false
5885 legalized:       false
5886 regBankSelected: false
5887 selected:        false
5888 tracksRegLiveness: true
5889 registers:       
5890   - { id: 0, class: g8rc, preferred-register: '' }
5891   - { id: 1, class: g8rc, preferred-register: '' }
5892   - { id: 2, class: g8rc, preferred-register: '' }
5893   - { id: 3, class: g8rc, preferred-register: '' }
5894   - { id: 4, class: g8rc, preferred-register: '' }
5895   - { id: 5, class: g8rc, preferred-register: '' }
5896 liveins:         
5897   - { reg: '%x3', virtual-reg: '%0' }
5898   - { reg: '%x4', virtual-reg: '%1' }
5899   - { reg: '%x5', virtual-reg: '%2' }
5900   - { reg: '%x6', virtual-reg: '%3' }
5901 frameInfo:       
5902   isFrameAddressTaken: false
5903   isReturnAddressTaken: false
5904   hasStackMap:     false
5905   hasPatchPoint:   false
5906   stackSize:       0
5907   offsetAdjustment: 0
5908   maxAlignment:    0
5909   adjustsStack:    false
5910   hasCalls:        false
5911   stackProtector:  ''
5912   maxCallFrameSize: 4294967295
5913   hasOpaqueSPAdjustment: false
5914   hasVAStart:      false
5915   hasMustTailInVarArgFunc: false
5916   savePoint:       ''
5917   restorePoint:    ''
5918 fixedStack:      
5919 stack:           
5920 constants:       
5921 body:             |
5922   bb.0.entry:
5923     liveins: %x3, %x4, %x5, %x6
5924   
5925     %3 = COPY %x6
5926     %2 = COPY %x5
5927     %1 = COPY %x4
5928     %0 = LI8 7635
5929     %4 = SUBFC8 %2, %0, implicit-def %carry
5930     ; CHECK: SUBFIC8 %2, 7635
5931     ; CHECK-LATE: subfic 3, 5, 7635
5932     %5 = SUBFE8 %3, %1, implicit-def dead %carry, implicit %carry
5933     %x3 = COPY %4
5934     %x4 = COPY %5
5935     BLR8 implicit %lr8, implicit %rm, implicit %x3, implicit %x4
5939 name:            testXOR
5940 # CHECK-ALL: name: testXOR
5941 alignment:       4
5942 exposesReturnsTwice: false
5943 legalized:       false
5944 regBankSelected: false
5945 selected:        false
5946 tracksRegLiveness: true
5947 registers:       
5948   - { id: 0, class: g8rc, preferred-register: '' }
5949   - { id: 1, class: gprc, preferred-register: '' }
5950   - { id: 2, class: gprc, preferred-register: '' }
5951   - { id: 3, class: gprc, preferred-register: '' }
5952 liveins:         
5953   - { reg: '%x3', virtual-reg: '%0' }
5954   - { reg: '%x4', virtual-reg: '%1' }
5955 frameInfo:       
5956   isFrameAddressTaken: false
5957   isReturnAddressTaken: false
5958   hasStackMap:     false
5959   hasPatchPoint:   false
5960   stackSize:       0
5961   offsetAdjustment: 0
5962   maxAlignment:    0
5963   adjustsStack:    false
5964   hasCalls:        false
5965   stackProtector:  ''
5966   maxCallFrameSize: 4294967295
5967   hasOpaqueSPAdjustment: false
5968   hasVAStart:      false
5969   hasMustTailInVarArgFunc: false
5970   savePoint:       ''
5971   restorePoint:    ''
5972 fixedStack:      
5973 stack:           
5974 constants:       
5975 body:             |
5976   bb.0.entry:
5977     liveins: %x3, %x4
5978   
5979     %1 = LI 10101
5980     %0 = COPY %x3
5981     %3 = COPY %0.sub_32
5982     %2 = XOR %1, %3
5983     ; CHECK: XORI %3, 10101
5984     ; CHECK-LATE: 3, 3, 10101
5985     %x3 = EXTSW_32_64 %2
5986     BLR8 implicit %lr8, implicit %rm, implicit %x3
5990 name:            testXOR8
5991 # CHECK-ALL: name: testXOR8
5992 alignment:       4
5993 exposesReturnsTwice: false
5994 legalized:       false
5995 regBankSelected: false
5996 selected:        false
5997 tracksRegLiveness: true
5998 registers:       
5999   - { id: 0, class: g8rc, preferred-register: '' }
6000   - { id: 1, class: g8rc, preferred-register: '' }
6001   - { id: 2, class: g8rc, preferred-register: '' }
6002 liveins:         
6003   - { reg: '%x3', virtual-reg: '%0' }
6004   - { reg: '%x4', virtual-reg: '%1' }
6005 frameInfo:       
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:    ''
6022 fixedStack:      
6023 stack:           
6024 constants:       
6025 body:             |
6026   bb.0.entry:
6027     liveins: %x3, %x4
6028   
6029     %1 = COPY %x4
6030     %0 = LI8 5535
6031     %2 = XOR8 %1, %0
6032     ; CHECK: XORI8 %1, 5535
6033     ; CHECK-LATE: xori 3, 4, 5535
6034     %x3 = COPY %2
6035     BLR8 implicit %lr8, implicit %rm, implicit %x3
6039 name:            testXORI
6040 # CHECK-ALL: name: testXORI
6041 alignment:       4
6042 exposesReturnsTwice: false
6043 legalized:       false
6044 regBankSelected: false
6045 selected:        false
6046 tracksRegLiveness: true
6047 registers:       
6048   - { id: 0, class: gprc, preferred-register: '' }
6049   - { id: 1, class: gprc, preferred-register: '' }
6050 liveins:         
6051   - { reg: '%x3', virtual-reg: '%0' }
6052 frameInfo:       
6053   isFrameAddressTaken: false
6054   isReturnAddressTaken: false
6055   hasStackMap:     false
6056   hasPatchPoint:   false
6057   stackSize:       0
6058   offsetAdjustment: 0
6059   maxAlignment:    0
6060   adjustsStack:    false
6061   hasCalls:        false
6062   stackProtector:  ''
6063   maxCallFrameSize: 4294967295
6064   hasOpaqueSPAdjustment: false
6065   hasVAStart:      false
6066   hasMustTailInVarArgFunc: false
6067   savePoint:       ''
6068   restorePoint:    ''
6069 fixedStack:      
6070 stack:           
6071 constants:       
6072 body:             |
6073   bb.0.entry:
6074     liveins: %x3
6075   
6076     %0 = LI 871
6077     %1 = XORI %0, 17
6078     ; CHECK: LI 886
6079     ; CHECK-LATE: li 3, 886
6080     %x3 = EXTSW_32_64 %1
6081     BLR8 implicit %lr8, implicit %rm, implicit %x3
6085 name:            testXOR8I
6086 # CHECK-ALL: name: testXOR8I
6087 alignment:       4
6088 exposesReturnsTwice: false
6089 legalized:       false
6090 regBankSelected: false
6091 selected:        false
6092 tracksRegLiveness: true
6093 registers:       
6094   - { id: 0, class: g8rc, preferred-register: '' }
6095   - { id: 1, class: g8rc, preferred-register: '' }
6096 liveins:         
6097   - { reg: '%x3', virtual-reg: '%0' }
6098 frameInfo:       
6099   isFrameAddressTaken: false
6100   isReturnAddressTaken: false
6101   hasStackMap:     false
6102   hasPatchPoint:   false
6103   stackSize:       0
6104   offsetAdjustment: 0
6105   maxAlignment:    0
6106   adjustsStack:    false
6107   hasCalls:        false
6108   stackProtector:  ''
6109   maxCallFrameSize: 4294967295
6110   hasOpaqueSPAdjustment: false
6111   hasVAStart:      false
6112   hasMustTailInVarArgFunc: false
6113   savePoint:       ''
6114   restorePoint:    ''
6115 fixedStack:      
6116 stack:           
6117 constants:       
6118 body:             |
6119   bb.0.entry:
6120     liveins: %x3
6121   
6122     %0 = LI8 453
6123     %1 = XORI8 %0, 17
6124     ; CHECK: LI8 468
6125     ; CHECK-LATE: li 3, 468
6126     %x3 = COPY %1
6127     BLR8 implicit %lr8, implicit %rm, implicit %x3