[RISCV][VLOPT] Add vector narrowing integer right shift instructions to isSupportedIn...
[llvm-project.git] / llvm / test / CodeGen / PowerPC / convert-rr-to-ri-instrs-out-of-range.mir
blobcdd6be56b46d582000d77dbbbdff8321ac50a201
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 zeroext i32 @testRLWNM(i32 zeroext %a) local_unnamed_addr #0 {
12   entry:
13     %shl = shl i32 %a, 4
14     %and = and i32 %shl, 4080
15     ret i32 %and
16   }
17   
18   ; Function Attrs: norecurse nounwind readnone
19   define i64 @testRLWNM8(i64 %a) local_unnamed_addr #0 {
20   entry:
21     %shl = shl i64 %a, 4
22     %and = and i64 %shl, 4080
23     ret i64 %and
24   }
25   
26   ; Function Attrs: norecurse nounwind readnone
27   define zeroext i32 @testRLWNM_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
28   entry:
29     %and = and i32 %a, 255
30     %tobool = icmp eq i32 %and, 0
31     %cond = select i1 %tobool, i32 %b, i32 %a
32     ret i32 %cond
33   }
34   
35   ; Function Attrs: norecurse nounwind readnone
36   define i64 @testRLWNM8_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
37   entry:
38     %a.tr = trunc i64 %a to i32
39     %0 = shl i32 %a.tr, 4
40     %conv = and i32 %0, 4080
41     %tobool = icmp eq i32 %conv, 0
42     %conv1 = zext i32 %conv to i64
43     %cond = select i1 %tobool, i64 %b, i64 %conv1
44     ret i64 %cond
45   }
46   
47   ; Function Attrs: norecurse nounwind readnone
48   define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
49   entry:
50     %shl = shl i32 %a, %b
51     ret i32 %shl
52   }
53   
54   ; Function Attrs: norecurse nounwind readnone
55   define zeroext i32 @testSLW_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
56   entry:
57     %shl = shl i32 %a, %b
58     %tobool = icmp eq i32 %shl, 0
59     %cond = select i1 %tobool, i32 %b, i32 %a
60     ret i32 %cond
61   }
62   
63   ; Function Attrs: norecurse nounwind readnone
64   define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
65   entry:
66     %shr = lshr i32 %a, %b
67     ret i32 %shr
68   }
69   
70   ; Function Attrs: norecurse nounwind readnone
71   define zeroext i32 @testSRW_rec(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 {
72   entry:
73     %shr = lshr i32 %a, %b
74     %tobool = icmp eq i32 %shr, 0
75     %cond = select i1 %tobool, i32 %b, i32 %a
76     ret i32 %cond
77   }
78   
79   ; Function Attrs: norecurse nounwind readnone
80   define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
81   entry:
82     %shr = ashr i32 %a, %b
83     ret i32 %shr
84   }
85   
86   ; Function Attrs: norecurse nounwind readnone
87   define signext i32 @testSRAW_rec(i32 signext %a, i32 signext %b) local_unnamed_addr #0 {
88   entry:
89     %shr = ashr i32 %a, %b
90     %tobool = icmp eq i32 %shr, 0
91     %cond = select i1 %tobool, i32 %b, i32 %shr
92     ret i32 %cond
93   }
94   
95   ; Function Attrs: norecurse nounwind readnone
96   define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 {
97   entry:
98     %and = and i64 %b, 63
99     %shl = shl i64 %a, %and
100     %sub = sub nsw i64 64, %and
101     %shr = lshr i64 %a, %sub
102     %or = or i64 %shr, %shl
103     ret i64 %or
104   }
105   
106   ; Function Attrs: norecurse nounwind readnone
107   define i64 @testRLDCL_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
108   entry:
109     %and = and i64 %b, 63
110     %shl = shl i64 %a, %and
111     %sub = sub nsw i64 64, %and
112     %shr = lshr i64 %a, %sub
113     %or = or i64 %shr, %shl
114     %tobool = icmp eq i64 %or, 0
115     %cond = select i1 %tobool, i64 %and, i64 %a
116     ret i64 %cond
117   }
118   
119   ; Function Attrs: norecurse nounwind readnone
120   define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 {
121   entry:
122     %and = and i64 %b, 63
123     %shl = shl i64 %a, %and
124     %sub = sub nsw i64 64, %and
125     %shr = lshr i64 %a, %sub
126     %or = or i64 %shr, %shl
127     ret i64 %or
128   }
129   
130   ; Function Attrs: norecurse nounwind readnone
131   define i64 @testRLDCR_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
132   entry:
133     %and = and i64 %b, 63
134     %shl = shl i64 %a, %and
135     %sub = sub nsw i64 64, %and
136     %shr = lshr i64 %a, %sub
137     %or = or i64 %shr, %shl
138     %tobool = icmp eq i64 %or, 0
139     %cond = select i1 %tobool, i64 %and, i64 %a
140     ret i64 %cond
141   }
142   
143   define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 {
144   entry:
145     %shl = shl i64 %a, %b
146     ret i64 %shl
147   }
148   
149   ; Function Attrs: norecurse nounwind readnone
150   define i64 @testSLD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
151   entry:
152     %shl = shl i64 %a, %b
153     %tobool = icmp eq i64 %shl, 0
154     %cond = select i1 %tobool, i64 %b, i64 %a
155     ret i64 %cond
156   }
157   
158   ; Function Attrs: norecurse nounwind readnone
159   define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 {
160   entry:
161     %shr = lshr i64 %a, %b
162     ret i64 %shr
163   }
164   
165   ; Function Attrs: norecurse nounwind readnone
166   define i64 @testSRD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
167   entry:
168     %shr = lshr i64 %a, %b
169     %tobool = icmp eq i64 %shr, 0
170     %cond = select i1 %tobool, i64 %b, i64 %a
171     ret i64 %cond
172   }
173   
174   ; Function Attrs: norecurse nounwind readnone
175   define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 {
176   entry:
177     %shr = ashr i64 %a, %b
178     ret i64 %shr
179   }
180   
181   ; Function Attrs: norecurse nounwind readnone
182   define i64 @testSRAD_rec(i64 %a, i64 %b) local_unnamed_addr #0 {
183   entry:
184     %shr = ashr i64 %a, %b
185     %tobool = icmp eq i64 %shr, 0
186     %cond = select i1 %tobool, i64 %b, i64 %shr
187     ret i64 %cond
188   }
189   
190   attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx" "unsafe-fp-math"="false" "use-soft-float"="false" }
191   
192   !llvm.module.flags = !{!0, !1}
193   !llvm.ident = !{!2}
194   
195   !0 = !{i32 1, !"wchar_size", i32 4}
196   !1 = !{i32 7, !"PIC Level", i32 2}
197   !2 = !{!"clang version 6.0.0 (trunk 316067)"}
198   !3 = !{!4, !4, i64 0}
199   !4 = !{!"omnipotent char", !5, i64 0}
200   !5 = !{!"Simple C/C++ TBAA"}
201   !6 = !{!7, !7, i64 0}
202   !7 = !{!"short", !4, i64 0}
203   !8 = !{!9, !9, i64 0}
204   !9 = !{!"int", !4, i64 0}
205   !10 = !{!11, !11, i64 0}
206   !11 = !{!"long long", !4, i64 0}
207   !12 = !{!13, !13, i64 0}
208   !13 = !{!"double", !4, i64 0}
209   !14 = !{!15, !15, i64 0}
210   !15 = !{!"float", !4, i64 0}
214 name:            testRLWNM
215 # CHECK-ALL: name: testRLWNM
216 alignment:       16
217 exposesReturnsTwice: false
218 legalized:       false
219 regBankSelected: false
220 selected:        false
221 tracksRegLiveness: true
222 registers:       
223   - { id: 0, class: g8rc, preferred-register: '' }
224   - { id: 1, class: gprc, preferred-register: '' }
225   - { id: 2, class: gprc, preferred-register: '' }
226   - { id: 3, class: g8rc, preferred-register: '' }
227   - { id: 4, class: gprc, preferred-register: '' }
228 liveins:         
229   - { reg: '$x3', virtual-reg: '%0' }
230 frameInfo:       
231   isFrameAddressTaken: false
232   isReturnAddressTaken: false
233   hasStackMap:     false
234   hasPatchPoint:   false
235   stackSize:       0
236   offsetAdjustment: 0
237   maxAlignment:    0
238   adjustsStack:    false
239   hasCalls:        false
240   stackProtector:  ''
241   maxCallFrameSize: 4294967295
242   hasOpaqueSPAdjustment: false
243   hasVAStart:      false
244   hasMustTailInVarArgFunc: false
245   savePoint:       ''
246   restorePoint:    ''
247 fixedStack:      
248 stack:           
249 constants:       
250 body:             |
251   bb.0.entry:
252     liveins: $x3
253   
254     %0 = COPY $x3
255     %1 = COPY %0.sub_32
256     %3 = IMPLICIT_DEF
257     %2 = LI 170
258     %4 = RLWNM killed %1, %2, 20, 27
259     ; CHECK: RLWINM killed %1, 10, 20, 27
260     ; CHECK-LATE: rlwinm 3, 3, 10, 20, 27
261     $x3 = EXTSW_32_64 %4
262     BLR8 implicit $lr8, implicit $rm, implicit $x3
266 name:            testRLWNM8
267 # CHECK-ALL: name: testRLWNM8
268 alignment:       16
269 exposesReturnsTwice: false
270 legalized:       false
271 regBankSelected: false
272 selected:        false
273 tracksRegLiveness: true
274 registers:       
275   - { id: 0, class: g8rc, preferred-register: '' }
276   - { id: 1, class: g8rc, preferred-register: '' }
277   - { id: 2, class: g8rc, preferred-register: '' }
278 liveins:         
279   - { reg: '$x3', virtual-reg: '%0' }
280 frameInfo:       
281   isFrameAddressTaken: false
282   isReturnAddressTaken: false
283   hasStackMap:     false
284   hasPatchPoint:   false
285   stackSize:       0
286   offsetAdjustment: 0
287   maxAlignment:    0
288   adjustsStack:    false
289   hasCalls:        false
290   stackProtector:  ''
291   maxCallFrameSize: 4294967295
292   hasOpaqueSPAdjustment: false
293   hasVAStart:      false
294   hasMustTailInVarArgFunc: false
295   savePoint:       ''
296   restorePoint:    ''
297 fixedStack:      
298 stack:           
299 constants:       
300 body:             |
301   bb.0.entry:
302     liveins: $x3
303   
304     %0 = LI8 234
305     %1 = COPY $x3
306     %2 = RLWNM8 %1, %0, 20, 27
307     ; CHECK: RLWINM8 killed %1, 10, 20, 27
308     ; CHECK-LATE: rlwinm 3, 3, 10, 20, 27
309     $x3 = COPY %2
310     BLR8 implicit $lr8, implicit $rm, implicit $x3
314 name:            testRLWNM_rec
315 # CHECK-ALL: name: testRLWNM_rec
316 alignment:       16
317 exposesReturnsTwice: false
318 legalized:       false
319 regBankSelected: false
320 selected:        false
321 tracksRegLiveness: true
322 registers:       
323   - { id: 0, class: g8rc, preferred-register: '' }
324   - { id: 1, class: g8rc, preferred-register: '' }
325   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
326   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
327   - { id: 4, class: gprc, preferred-register: '' }
328   - { id: 5, class: crrc, preferred-register: '' }
329   - { id: 6, class: gprc, preferred-register: '' }
330   - { id: 7, class: g8rc, preferred-register: '' }
331   - { id: 8, class: g8rc, preferred-register: '' }
332   - { id: 9, class: g8rc, preferred-register: '' }
333 liveins:         
334   - { reg: '$x3', virtual-reg: '%0' }
335   - { reg: '$x4', virtual-reg: '%1' }
336 frameInfo:       
337   isFrameAddressTaken: false
338   isReturnAddressTaken: false
339   hasStackMap:     false
340   hasPatchPoint:   false
341   stackSize:       0
342   offsetAdjustment: 0
343   maxAlignment:    0
344   adjustsStack:    false
345   hasCalls:        false
346   stackProtector:  ''
347   maxCallFrameSize: 4294967295
348   hasOpaqueSPAdjustment: false
349   hasVAStart:      false
350   hasMustTailInVarArgFunc: false
351   savePoint:       ''
352   restorePoint:    ''
353 fixedStack:      
354 stack:           
355 constants:       
356 body:             |
357   bb.0.entry:
358     liveins: $x3, $x4
359   
360     %1 = COPY $x4
361     %0 = COPY $x3
362     %2 = COPY %1.sub_32
363     %3 = LI -22
364     %4 = RLWNM_rec %2, %3, 24, 31, implicit-def $cr0
365     ; CHECK: RLWINM_rec %2, 10, 24, 31, implicit-def $cr0
366     ; CHECK-LATE: li 3, -22
367     ; CHECK-LATE: rlwinm. 5, 4, 10, 24, 31
368     %5 = COPY killed $cr0
369     %6 = ISEL %2, %3, %5.sub_eq
370     %8 = IMPLICIT_DEF
371     %7 = INSERT_SUBREG %8, killed %6, 1
372     %9 = RLDICL killed %7, 0, 32
373     $x3 = COPY %9
374     BLR8 implicit $lr8, implicit $rm, implicit $x3
378 name:            testRLWNM8_rec
379 # CHECK-ALL: name: testRLWNM8_rec
380 alignment:       16
381 exposesReturnsTwice: false
382 legalized:       false
383 regBankSelected: false
384 selected:        false
385 tracksRegLiveness: true
386 registers:       
387   - { id: 0, class: g8rc, preferred-register: '' }
388   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
389   - { id: 2, class: g8rc, preferred-register: '' }
390   - { id: 3, class: g8rc, preferred-register: '' }
391   - { id: 4, class: g8rc, preferred-register: '' }
392   - { id: 5, class: g8rc, preferred-register: '' }
393   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
394   - { id: 7, class: crrc, preferred-register: '' }
395   - { id: 8, class: g8rc, preferred-register: '' }
396 liveins:         
397   - { reg: '$x3', virtual-reg: '%0' }
398   - { reg: '$x4', virtual-reg: '%1' }
399 frameInfo:       
400   isFrameAddressTaken: false
401   isReturnAddressTaken: false
402   hasStackMap:     false
403   hasPatchPoint:   false
404   stackSize:       0
405   offsetAdjustment: 0
406   maxAlignment:    0
407   adjustsStack:    false
408   hasCalls:        false
409   stackProtector:  ''
410   maxCallFrameSize: 4294967295
411   hasOpaqueSPAdjustment: false
412   hasVAStart:      false
413   hasMustTailInVarArgFunc: false
414   savePoint:       ''
415   restorePoint:    ''
416 fixedStack:      
417 stack:           
418 constants:       
419 body:             |
420   bb.0.entry:
421     liveins: $x3, $x4
422   
423     %1 = COPY $x4
424     %0 = COPY $x3
425     %2 = LI8 -18
426     %3 = RLWNM8_rec %1, %2, 20, 27, implicit-def $cr0
427     ; CHECK: RLWINM8_rec %1, 14, 20, 27, implicit-def $cr0
428     ; CHECK-LATE: rlwinm. 3, 4, 14, 20, 27
429     %7 = COPY killed $cr0
430     %6 = RLDICL killed %3, 0, 32
431     %8 = ISEL8 %1, %6, %7.sub_eq
432     $x3 = COPY %8
433     BLR8 implicit $lr8, implicit $rm, implicit $x3
437 name:            testSLW
438 # CHECK-ALL: name: testSLW
439 alignment:       16
440 exposesReturnsTwice: false
441 legalized:       false
442 regBankSelected: false
443 selected:        false
444 tracksRegLiveness: true
445 registers:       
446   - { id: 0, class: g8rc, preferred-register: '' }
447   - { id: 1, class: g8rc, preferred-register: '' }
448   - { id: 2, class: gprc, preferred-register: '' }
449   - { id: 3, class: g8rc, preferred-register: '' }
450   - { id: 4, class: g8rc, preferred-register: '' }
451   - { id: 5, class: gprc, preferred-register: '' }
452   - { id: 6, class: g8rc, preferred-register: '' }
453   - { id: 7, class: g8rc, preferred-register: '' }
454   - { id: 8, class: gprc, preferred-register: '' }
455 liveins:         
456   - { reg: '$x3', virtual-reg: '%0' }
457   - { reg: '$x4', virtual-reg: '%1' }
458 frameInfo:       
459   isFrameAddressTaken: false
460   isReturnAddressTaken: false
461   hasStackMap:     false
462   hasPatchPoint:   false
463   stackSize:       0
464   offsetAdjustment: 0
465   maxAlignment:    0
466   adjustsStack:    false
467   hasCalls:        false
468   stackProtector:  ''
469   maxCallFrameSize: 4294967295
470   hasOpaqueSPAdjustment: false
471   hasVAStart:      false
472   hasMustTailInVarArgFunc: false
473   savePoint:       ''
474   restorePoint:    ''
475 fixedStack:      
476 stack:           
477 constants:       
478 body:             |
479   bb.0.entry:
480     liveins: $x3, $x4
481   
482     %1 = COPY $x4
483     %0 = COPY $x3
484     %2 = COPY %1.sub_32
485     %5 = LI 210
486     %8 = SLW killed %2, killed %5
487     ; CHECK: RLWINM killed %2, 18, 0, 13
488     ; CHECK-LATE: slwi 3, 4, 18
489     $x3 = EXTSW_32_64 %8
490     BLR8 implicit $lr8, implicit $rm, implicit $x3
494 name:            testSLW_rec
495 # CHECK-ALL: name: testSLW_rec
496 alignment:       16
497 exposesReturnsTwice: false
498 legalized:       false
499 regBankSelected: false
500 selected:        false
501 tracksRegLiveness: true
502 registers:       
503   - { id: 0, class: g8rc, preferred-register: '' }
504   - { id: 1, class: g8rc, preferred-register: '' }
505   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
506   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
507   - { id: 4, class: gprc, preferred-register: '' }
508   - { id: 5, class: crrc, preferred-register: '' }
509   - { id: 6, class: gprc, preferred-register: '' }
510   - { id: 7, class: g8rc, preferred-register: '' }
511   - { id: 8, class: g8rc, preferred-register: '' }
512   - { id: 9, class: g8rc, preferred-register: '' }
513 liveins:         
514   - { reg: '$x3', virtual-reg: '%0' }
515   - { reg: '$x4', virtual-reg: '%1' }
516 frameInfo:       
517   isFrameAddressTaken: false
518   isReturnAddressTaken: false
519   hasStackMap:     false
520   hasPatchPoint:   false
521   stackSize:       0
522   offsetAdjustment: 0
523   maxAlignment:    0
524   adjustsStack:    false
525   hasCalls:        false
526   stackProtector:  ''
527   maxCallFrameSize: 4294967295
528   hasOpaqueSPAdjustment: false
529   hasVAStart:      false
530   hasMustTailInVarArgFunc: false
531   savePoint:       ''
532   restorePoint:    ''
533 fixedStack:      
534 stack:           
535 constants:       
536 body:             |
537   bb.0.entry:
538     liveins: $x3, $x4
539   
540     %1 = COPY $x4
541     %0 = COPY $x3
542     %2 = LI 35
543     %3 = COPY %0.sub_32
544     %4 = SLW_rec %3, %2, implicit-def $cr0
545     ; CHECK: ANDI_rec %3, 0, implicit-def $cr0
546     ; CHECK-LATE: andi. 5, 3, 0
547     %5 = COPY killed $cr0
548     %6 = ISEL %2, %3, %5.sub_eq
549     %8 = IMPLICIT_DEF
550     %7 = INSERT_SUBREG %8, killed %6, 1
551     %9 = RLDICL killed %7, 0, 32
552     $x3 = COPY %9
553     BLR8 implicit $lr8, implicit $rm, implicit $x3
557 name:            testSRW
558 # CHECK-ALL: name: testSRW
559 alignment:       16
560 exposesReturnsTwice: false
561 legalized:       false
562 regBankSelected: false
563 selected:        false
564 tracksRegLiveness: true
565 registers:       
566   - { id: 0, class: g8rc, preferred-register: '' }
567   - { id: 1, class: g8rc, preferred-register: '' }
568   - { id: 2, class: gprc, preferred-register: '' }
569   - { id: 3, class: g8rc, preferred-register: '' }
570   - { id: 4, class: g8rc, preferred-register: '' }
571   - { id: 5, class: gprc, preferred-register: '' }
572   - { id: 6, class: g8rc, preferred-register: '' }
573   - { id: 7, class: g8rc, preferred-register: '' }
574   - { id: 8, class: gprc, preferred-register: '' }
575 liveins:         
576   - { reg: '$x3', virtual-reg: '%0' }
577   - { reg: '$x4', virtual-reg: '%1' }
578 frameInfo:       
579   isFrameAddressTaken: false
580   isReturnAddressTaken: false
581   hasStackMap:     false
582   hasPatchPoint:   false
583   stackSize:       0
584   offsetAdjustment: 0
585   maxAlignment:    0
586   adjustsStack:    false
587   hasCalls:        false
588   stackProtector:  ''
589   maxCallFrameSize: 4294967295
590   hasOpaqueSPAdjustment: false
591   hasVAStart:      false
592   hasMustTailInVarArgFunc: false
593   savePoint:       ''
594   restorePoint:    ''
595 fixedStack:      
596 stack:           
597 constants:       
598 body:             |
599   bb.0.entry:
600     liveins: $x3, $x4
601   
602     %1 = COPY $x4
603     %0 = COPY $x3
604     %2 = LI 48
605     %5 = COPY %0.sub_32
606     %8 = SRW killed %5, killed %2
607     ; CHECK: LI8 0
608     ; CHECK-LATE: li 3, 0
609     $x3 = EXTSW_32_64 %8
610     BLR8 implicit $lr8, implicit $rm, implicit $x3
614 name:            testSRW_rec
615 # CHECK-ALL: name: testSRW_rec
616 alignment:       16
617 exposesReturnsTwice: false
618 legalized:       false
619 regBankSelected: false
620 selected:        false
621 tracksRegLiveness: true
622 registers:       
623   - { id: 0, class: g8rc, preferred-register: '' }
624   - { id: 1, class: g8rc, preferred-register: '' }
625   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
626   - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' }
627   - { id: 4, class: gprc, preferred-register: '' }
628   - { id: 5, class: crrc, preferred-register: '' }
629   - { id: 6, class: gprc, preferred-register: '' }
630   - { id: 7, class: g8rc, preferred-register: '' }
631   - { id: 8, class: g8rc, preferred-register: '' }
632   - { id: 9, class: g8rc, preferred-register: '' }
633 liveins:         
634   - { reg: '$x3', virtual-reg: '%0' }
635   - { reg: '$x4', virtual-reg: '%1' }
636 frameInfo:       
637   isFrameAddressTaken: false
638   isReturnAddressTaken: false
639   hasStackMap:     false
640   hasPatchPoint:   false
641   stackSize:       0
642   offsetAdjustment: 0
643   maxAlignment:    0
644   adjustsStack:    false
645   hasCalls:        false
646   stackProtector:  ''
647   maxCallFrameSize: 4294967295
648   hasOpaqueSPAdjustment: false
649   hasVAStart:      false
650   hasMustTailInVarArgFunc: false
651   savePoint:       ''
652   restorePoint:    ''
653 fixedStack:      
654 stack:           
655 constants:       
656 body:             |
657   bb.0.entry:
658     liveins: $x3, $x4
659   
660     %1 = COPY $x4
661     %0 = COPY $x3
662     %2 = LI -7
663     %3 = COPY %0.sub_32
664     %4 = SRW_rec %3, %2, implicit-def $cr0
665     ; CHECK: ANDI_rec %3, 0, implicit-def $cr0
666     ; CHECK-LATE: andi. 5, 3, 0
667     %5 = COPY killed $cr0
668     %6 = ISEL %2, %3, %5.sub_eq
669     %8 = IMPLICIT_DEF
670     %7 = INSERT_SUBREG %8, killed %6, 1
671     %9 = RLDICL killed %7, 0, 32
672     $x3 = COPY %9
673     BLR8 implicit $lr8, implicit $rm, implicit $x3
677 name:            testSRAW
678 # CHECK-ALL: name: testSRAW
679 alignment:       16
680 exposesReturnsTwice: false
681 legalized:       false
682 regBankSelected: false
683 selected:        false
684 tracksRegLiveness: true
685 registers:       
686   - { id: 0, class: g8rc, preferred-register: '' }
687   - { id: 1, class: g8rc, preferred-register: '' }
688   - { id: 2, class: gprc, preferred-register: '' }
689   - { id: 3, class: gprc, preferred-register: '' }
690   - { id: 4, class: gprc, preferred-register: '' }
691   - { id: 5, class: g8rc, preferred-register: '' }
692 liveins:         
693   - { reg: '$x3', virtual-reg: '%0' }
694   - { reg: '$x4', virtual-reg: '%1' }
695 frameInfo:       
696   isFrameAddressTaken: false
697   isReturnAddressTaken: false
698   hasStackMap:     false
699   hasPatchPoint:   false
700   stackSize:       0
701   offsetAdjustment: 0
702   maxAlignment:    0
703   adjustsStack:    false
704   hasCalls:        false
705   stackProtector:  ''
706   maxCallFrameSize: 4294967295
707   hasOpaqueSPAdjustment: false
708   hasVAStart:      false
709   hasMustTailInVarArgFunc: false
710   savePoint:       ''
711   restorePoint:    ''
712 fixedStack:      
713 stack:           
714 constants:       
715 body:             |
716   bb.0.entry:
717     liveins: $x3, $x4
718   
719     %1 = COPY $x4
720     %0 = COPY $x3
721     %2 = LI 48
722     %3 = COPY %0.sub_32
723     %4 = SRAW killed %3, killed %2, implicit-def dead $carry
724     ; CHECK: LI 48
725     ; CHECK: SRAW8 killed %7, killed %9, implicit-def $carry, implicit-def dead $carry 
726     ; CHECK-LATE: sraw 3, 3, 4
727     %5 = EXTSW_32_64 killed %4
728     $x3 = COPY %5
729     BLR8 implicit $lr8, implicit $rm, implicit $x3
733 name:            testSRAW_rec
734 # CHECK-ALL: name: testSRAW_rec
735 alignment:       16
736 exposesReturnsTwice: false
737 legalized:       false
738 regBankSelected: false
739 selected:        false
740 tracksRegLiveness: true
741 registers:       
742   - { id: 0, class: g8rc, preferred-register: '' }
743   - { id: 1, class: g8rc, preferred-register: '' }
744   - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' }
745   - { id: 3, class: gprc, preferred-register: '' }
746   - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' }
747   - { id: 5, class: crrc, preferred-register: '' }
748   - { id: 6, class: gprc, preferred-register: '' }
749   - { id: 7, class: g8rc, preferred-register: '' }
750 liveins:         
751   - { reg: '$x3', virtual-reg: '%0' }
752   - { reg: '$x4', virtual-reg: '%1' }
753 frameInfo:       
754   isFrameAddressTaken: false
755   isReturnAddressTaken: false
756   hasStackMap:     false
757   hasPatchPoint:   false
758   stackSize:       0
759   offsetAdjustment: 0
760   maxAlignment:    0
761   adjustsStack:    false
762   hasCalls:        false
763   stackProtector:  ''
764   maxCallFrameSize: 4294967295
765   hasOpaqueSPAdjustment: false
766   hasVAStart:      false
767   hasMustTailInVarArgFunc: false
768   savePoint:       ''
769   restorePoint:    ''
770 fixedStack:      
771 stack:           
772 constants:       
773 body:             |
774   bb.0.entry:
775     liveins: $x3, $x4
776   
777     %1 = COPY $x4
778     %0 = COPY $x3
779     %2 = LI 80
780     %3 = COPY %0.sub_32
781     %4 = SRAW_rec killed %3, %2, implicit-def dead $carry, implicit-def $cr0
782     ; CHECK: SRAW8_rec killed %10, killed %12, implicit-def $carry, implicit-def $cr0, implicit-def dead $carry, implicit-def $cr0
783     ; CHECK-LATE: sraw. 3, 3, 4
784     %5 = COPY killed $cr0
785     %6 = ISEL %2, %4, %5.sub_eq
786     %7 = EXTSW_32_64 killed %6
787     $x3 = COPY %7
788     BLR8 implicit $lr8, implicit $rm, implicit $x3
792 name:            testRLDCL
793 # CHECK-ALL: name: testRLDCL
794 alignment:       16
795 exposesReturnsTwice: false
796 legalized:       false
797 regBankSelected: false
798 selected:        false
799 tracksRegLiveness: true
800 registers:       
801   - { id: 0, class: g8rc, preferred-register: '' }
802   - { id: 1, class: g8rc, preferred-register: '' }
803   - { id: 2, class: gprc, preferred-register: '' }
804   - { id: 3, class: gprc, preferred-register: '' }
805   - { id: 4, class: g8rc, preferred-register: '' }
806 liveins:         
807   - { reg: '$x3', virtual-reg: '%0' }
808   - { reg: '$x4', virtual-reg: '%1' }
809 frameInfo:       
810   isFrameAddressTaken: false
811   isReturnAddressTaken: false
812   hasStackMap:     false
813   hasPatchPoint:   false
814   stackSize:       0
815   offsetAdjustment: 0
816   maxAlignment:    0
817   adjustsStack:    false
818   hasCalls:        false
819   stackProtector:  ''
820   maxCallFrameSize: 4294967295
821   hasOpaqueSPAdjustment: false
822   hasVAStart:      false
823   hasMustTailInVarArgFunc: false
824   savePoint:       ''
825   restorePoint:    ''
826 fixedStack:      
827 stack:           
828 constants:       
829 body:             |
830   bb.0.entry:
831     liveins: $x3, $x4
832   
833     %1 = COPY $x4
834     %0 = COPY $x3
835     %2 = COPY %1.sub_32
836     %3 = LI 140
837     %4 = RLDCL %0, killed %3, 0
838     ; CHECK: RLDICL killed %0, 12, 0
839     ; CHECK-LATE: rotldi 3, 3, 12
840     $x3 = COPY %4
841     BLR8 implicit $lr8, implicit $rm, implicit $x3
845 name:            testRLDCL_rec
846 # CHECK-ALL: name: testRLDCL_rec
847 alignment:       16
848 exposesReturnsTwice: false
849 legalized:       false
850 regBankSelected: false
851 selected:        false
852 tracksRegLiveness: true
853 registers:       
854   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
855   - { id: 1, class: g8rc, preferred-register: '' }
856   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
857   - { id: 3, class: gprc, preferred-register: '' }
858   - { id: 4, class: g8rc, preferred-register: '' }
859   - { id: 5, class: crrc, preferred-register: '' }
860   - { id: 6, class: g8rc, preferred-register: '' }
861 liveins:         
862   - { reg: '$x3', virtual-reg: '%0' }
863   - { reg: '$x4', virtual-reg: '%1' }
864 frameInfo:       
865   isFrameAddressTaken: false
866   isReturnAddressTaken: false
867   hasStackMap:     false
868   hasPatchPoint:   false
869   stackSize:       0
870   offsetAdjustment: 0
871   maxAlignment:    0
872   adjustsStack:    false
873   hasCalls:        false
874   stackProtector:  ''
875   maxCallFrameSize: 4294967295
876   hasOpaqueSPAdjustment: false
877   hasVAStart:      false
878   hasMustTailInVarArgFunc: false
879   savePoint:       ''
880   restorePoint:    ''
881 fixedStack:      
882 stack:           
883 constants:       
884 body:             |
885   bb.0.entry:
886     liveins: $x3, $x4
887   
888     %1 = COPY $x4
889     %0 = COPY $x3
890     %2 = RLDICL %1, 0, 58
891     %3 = LI -37
892     %4 = RLDCL_rec %0, killed %3, 0, implicit-def $cr0
893     ; CHECK: RLDICL_rec %0, 27, 0, implicit-def $cr0
894     ; CHECK-LATE: rotldi. 5, 3, 27
895     %5 = COPY killed $cr0
896     %6 = ISEL8 %2, %0, %5.sub_eq
897     $x3 = COPY %6
898     BLR8 implicit $lr8, implicit $rm, implicit $x3
902 name:            testRLDCR
903 # CHECK-ALL: name: testRLDCR
904 alignment:       16
905 exposesReturnsTwice: false
906 legalized:       false
907 regBankSelected: false
908 selected:        false
909 tracksRegLiveness: true
910 registers:       
911   - { id: 0, class: g8rc, preferred-register: '' }
912   - { id: 1, class: g8rc, preferred-register: '' }
913   - { id: 2, class: gprc, preferred-register: '' }
914   - { id: 3, class: gprc, preferred-register: '' }
915   - { id: 4, class: g8rc, preferred-register: '' }
916 liveins:         
917   - { reg: '$x3', virtual-reg: '%0' }
918   - { reg: '$x4', virtual-reg: '%1' }
919 frameInfo:       
920   isFrameAddressTaken: false
921   isReturnAddressTaken: false
922   hasStackMap:     false
923   hasPatchPoint:   false
924   stackSize:       0
925   offsetAdjustment: 0
926   maxAlignment:    0
927   adjustsStack:    false
928   hasCalls:        false
929   stackProtector:  ''
930   maxCallFrameSize: 4294967295
931   hasOpaqueSPAdjustment: false
932   hasVAStart:      false
933   hasMustTailInVarArgFunc: false
934   savePoint:       ''
935   restorePoint:    ''
936 fixedStack:      
937 stack:           
938 constants:       
939 body:             |
940   bb.0.entry:
941     liveins: $x3, $x4
942   
943     %1 = COPY $x4
944     %0 = COPY $x3
945     %2 = COPY %1.sub_32
946     %3 = LI 300
947     %4 = RLDCR %0, killed %3, 0
948     ; CHECK: RLDICR killed %0, 44, 0
949     ; CHECK-LATE: rldicr 3, 3, 44, 0
950     $x3 = COPY %4
951     BLR8 implicit $lr8, implicit $rm, implicit $x3
955 name:            testRLDCR_rec
956 # CHECK-ALL: name: testRLDCR_rec
957 alignment:       16
958 exposesReturnsTwice: false
959 legalized:       false
960 regBankSelected: false
961 selected:        false
962 tracksRegLiveness: true
963 registers:       
964   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
965   - { id: 1, class: g8rc, preferred-register: '' }
966   - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' }
967   - { id: 3, class: gprc, preferred-register: '' }
968   - { id: 4, class: g8rc, preferred-register: '' }
969   - { id: 5, class: crrc, preferred-register: '' }
970   - { id: 6, class: g8rc, preferred-register: '' }
971 liveins:         
972   - { reg: '$x3', virtual-reg: '%0' }
973   - { reg: '$x4', virtual-reg: '%1' }
974 frameInfo:       
975   isFrameAddressTaken: false
976   isReturnAddressTaken: false
977   hasStackMap:     false
978   hasPatchPoint:   false
979   stackSize:       0
980   offsetAdjustment: 0
981   maxAlignment:    0
982   adjustsStack:    false
983   hasCalls:        false
984   stackProtector:  ''
985   maxCallFrameSize: 4294967295
986   hasOpaqueSPAdjustment: false
987   hasVAStart:      false
988   hasMustTailInVarArgFunc: false
989   savePoint:       ''
990   restorePoint:    ''
991 fixedStack:      
992 stack:           
993 constants:       
994 body:             |
995   bb.0.entry:
996     liveins: $x3, $x4
997   
998     %1 = COPY $x4
999     %0 = COPY $x3
1000     %2 = RLDICL %1, 0, 58
1001     %3 = LI -18
1002     %4 = RLDCR_rec %0, killed %3, 0, implicit-def $cr0
1003     ; CHECK: RLDICR_rec %0, 46, 0, implicit-def $cr0
1004     ; CHECK-LATE: rldicr. 5, 3, 46, 0
1005     %5 = COPY killed $cr0
1006     %6 = ISEL8 %2, %0, %5.sub_eq
1007     $x3 = COPY %6
1008     BLR8 implicit $lr8, implicit $rm, implicit $x3
1012 name:            testSLD
1013 # CHECK-ALL: name: testSLD
1014 alignment:       16
1015 exposesReturnsTwice: false
1016 legalized:       false
1017 regBankSelected: false
1018 selected:        false
1019 tracksRegLiveness: true
1020 registers:       
1021   - { id: 0, class: g8rc, preferred-register: '' }
1022   - { id: 1, class: g8rc, preferred-register: '' }
1023   - { id: 2, class: gprc, preferred-register: '' }
1024   - { id: 3, class: g8rc, preferred-register: '' }
1025 liveins:         
1026   - { reg: '$x3', virtual-reg: '%0' }
1027   - { reg: '$x4', virtual-reg: '%1' }
1028 frameInfo:       
1029   isFrameAddressTaken: false
1030   isReturnAddressTaken: false
1031   hasStackMap:     false
1032   hasPatchPoint:   false
1033   stackSize:       0
1034   offsetAdjustment: 0
1035   maxAlignment:    0
1036   adjustsStack:    false
1037   hasCalls:        false
1038   stackProtector:  ''
1039   maxCallFrameSize: 4294967295
1040   hasOpaqueSPAdjustment: false
1041   hasVAStart:      false
1042   hasMustTailInVarArgFunc: false
1043   savePoint:       ''
1044   restorePoint:    ''
1045 fixedStack:      
1046 stack:           
1047 constants:       
1048 body:             |
1049   bb.0.entry:
1050     liveins: $x3, $x4
1051   
1052     %1 = COPY $x4
1053     %0 = COPY $x3
1054     %2 = LI -13
1055     %3 = SLD %0, killed %2
1056     ; CHECK: LI8 0
1057     ; CHECK-LATE: li 3, 0
1058     $x3 = COPY %3
1059     BLR8 implicit $lr8, implicit $rm, implicit $x3
1063 name:            testSLD_rec
1064 # CHECK-ALL: name: testSLD_rec
1065 alignment:       16
1066 exposesReturnsTwice: false
1067 legalized:       false
1068 regBankSelected: false
1069 selected:        false
1070 tracksRegLiveness: true
1071 registers:       
1072   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1073   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1074   - { id: 2, class: gprc, preferred-register: '' }
1075   - { id: 3, class: g8rc, preferred-register: '' }
1076   - { id: 4, class: crrc, preferred-register: '' }
1077   - { id: 5, class: g8rc, preferred-register: '' }
1078 liveins:         
1079   - { reg: '$x3', virtual-reg: '%0' }
1080   - { reg: '$x4', virtual-reg: '%1' }
1081 frameInfo:       
1082   isFrameAddressTaken: false
1083   isReturnAddressTaken: false
1084   hasStackMap:     false
1085   hasPatchPoint:   false
1086   stackSize:       0
1087   offsetAdjustment: 0
1088   maxAlignment:    0
1089   adjustsStack:    false
1090   hasCalls:        false
1091   stackProtector:  ''
1092   maxCallFrameSize: 4294967295
1093   hasOpaqueSPAdjustment: false
1094   hasVAStart:      false
1095   hasMustTailInVarArgFunc: false
1096   savePoint:       ''
1097   restorePoint:    ''
1098 fixedStack:      
1099 stack:           
1100 constants:       
1101 body:             |
1102   bb.0.entry:
1103     liveins: $x3, $x4
1104   
1105     %1 = COPY $x4
1106     %0 = COPY $x3
1107     %2 = LI 88
1108     %3 = SLD_rec %0, killed %2, implicit-def $cr0
1109     ; CHECK: ANDI8_rec %0, 0, implicit-def $cr0
1110     ; CHECK-LATE: andi. 5, 3, 0
1111     %4 = COPY killed $cr0
1112     %5 = ISEL8 %1, %0, %4.sub_eq
1113     $x3 = COPY %5
1114     BLR8 implicit $lr8, implicit $rm, implicit $x3
1118 name:            testSRD
1119 # CHECK-ALL: name: testSRD
1120 alignment:       16
1121 exposesReturnsTwice: false
1122 legalized:       false
1123 regBankSelected: false
1124 selected:        false
1125 tracksRegLiveness: true
1126 registers:       
1127   - { id: 0, class: g8rc, preferred-register: '' }
1128   - { id: 1, class: g8rc, preferred-register: '' }
1129   - { id: 2, class: gprc, preferred-register: '' }
1130   - { id: 3, class: g8rc, preferred-register: '' }
1131 liveins:         
1132   - { reg: '$x3', virtual-reg: '%0' }
1133   - { reg: '$x4', virtual-reg: '%1' }
1134 frameInfo:       
1135   isFrameAddressTaken: false
1136   isReturnAddressTaken: false
1137   hasStackMap:     false
1138   hasPatchPoint:   false
1139   stackSize:       0
1140   offsetAdjustment: 0
1141   maxAlignment:    0
1142   adjustsStack:    false
1143   hasCalls:        false
1144   stackProtector:  ''
1145   maxCallFrameSize: 4294967295
1146   hasOpaqueSPAdjustment: false
1147   hasVAStart:      false
1148   hasMustTailInVarArgFunc: false
1149   savePoint:       ''
1150   restorePoint:    ''
1151 fixedStack:      
1152 stack:           
1153 constants:       
1154 body:             |
1155   bb.0.entry:
1156     liveins: $x3, $x4
1157   
1158     %1 = COPY $x4
1159     %0 = COPY $x3
1160     %2 = LI 400
1161     %3 = SRD %0, killed %2
1162     ; CHECK: RLDICL killed %0, 48, 16
1163     ; CHECK-LATE: rldicl 3, 3, 48, 16
1164     $x3 = COPY %3
1165     BLR8 implicit $lr8, implicit $rm, implicit $x3
1169 name:            testSRD_rec
1170 # CHECK-ALL: name: testSRD_rec
1171 alignment:       16
1172 exposesReturnsTwice: false
1173 legalized:       false
1174 regBankSelected: false
1175 selected:        false
1176 tracksRegLiveness: true
1177 registers:       
1178   - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1179   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1180   - { id: 2, class: gprc, preferred-register: '' }
1181   - { id: 3, class: g8rc, preferred-register: '' }
1182   - { id: 4, class: crrc, preferred-register: '' }
1183   - { id: 5, class: g8rc, preferred-register: '' }
1184 liveins:         
1185   - { reg: '$x3', virtual-reg: '%0' }
1186   - { reg: '$x4', virtual-reg: '%1' }
1187 frameInfo:       
1188   isFrameAddressTaken: false
1189   isReturnAddressTaken: false
1190   hasStackMap:     false
1191   hasPatchPoint:   false
1192   stackSize:       0
1193   offsetAdjustment: 0
1194   maxAlignment:    0
1195   adjustsStack:    false
1196   hasCalls:        false
1197   stackProtector:  ''
1198   maxCallFrameSize: 4294967295
1199   hasOpaqueSPAdjustment: false
1200   hasVAStart:      false
1201   hasMustTailInVarArgFunc: false
1202   savePoint:       ''
1203   restorePoint:    ''
1204 fixedStack:      
1205 stack:           
1206 constants:       
1207 body:             |
1208   bb.0.entry:
1209     liveins: $x3, $x4
1210   
1211     %1 = COPY $x4
1212     %0 = COPY $x3
1213     %2 = LI 64
1214     %3 = SRD_rec %0, killed %2, implicit-def $cr0
1215     ; CHECK: ANDI8_rec %0, 0, implicit-def $cr0
1216     ; CHECK-LATE: andi. 5, 3, 0
1217     %4 = COPY killed $cr0
1218     %5 = ISEL8 %1, %0, %4.sub_eq
1219     $x3 = COPY %5
1220     BLR8 implicit $lr8, implicit $rm, implicit $x3
1224 name:            testSRAD
1225 # CHECK-ALL: name: testSRAD
1226 alignment:       16
1227 exposesReturnsTwice: false
1228 legalized:       false
1229 regBankSelected: false
1230 selected:        false
1231 tracksRegLiveness: true
1232 registers:       
1233   - { id: 0, class: g8rc, preferred-register: '' }
1234   - { id: 1, class: g8rc, preferred-register: '' }
1235   - { id: 2, class: gprc, preferred-register: '' }
1236   - { id: 3, class: g8rc, preferred-register: '' }
1237 liveins:         
1238   - { reg: '$x3', virtual-reg: '%0' }
1239   - { reg: '$x4', virtual-reg: '%1' }
1240 frameInfo:       
1241   isFrameAddressTaken: false
1242   isReturnAddressTaken: false
1243   hasStackMap:     false
1244   hasPatchPoint:   false
1245   stackSize:       0
1246   offsetAdjustment: 0
1247   maxAlignment:    0
1248   adjustsStack:    false
1249   hasCalls:        false
1250   stackProtector:  ''
1251   maxCallFrameSize: 4294967295
1252   hasOpaqueSPAdjustment: false
1253   hasVAStart:      false
1254   hasMustTailInVarArgFunc: false
1255   savePoint:       ''
1256   restorePoint:    ''
1257 fixedStack:      
1258 stack:           
1259 constants:       
1260 body:             |
1261   bb.0.entry:
1262     liveins: $x3, $x4
1263   
1264     %1 = COPY $x4
1265     %0 = COPY $x3
1266     %2 = LI -44
1267     %3 = SRAD %0, killed %2, implicit-def dead $carry
1268     ; CHECK: SRAD killed %0, killed %2, implicit-def dead $carry
1269     ; CHECK-LATE: srad 3, 3, 4
1270     $x3 = COPY %3
1271     BLR8 implicit $lr8, implicit $rm, implicit $x3
1275 name:            testSRAD_rec
1276 # CHECK-ALL: name: testSRAD_rec
1277 alignment:       16
1278 exposesReturnsTwice: false
1279 legalized:       false
1280 regBankSelected: false
1281 selected:        false
1282 tracksRegLiveness: true
1283 registers:       
1284   - { id: 0, class: g8rc, preferred-register: '' }
1285   - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1286   - { id: 2, class: gprc, preferred-register: '' }
1287   - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' }
1288   - { id: 4, class: crrc, preferred-register: '' }
1289   - { id: 5, class: g8rc, preferred-register: '' }
1290 liveins:         
1291   - { reg: '$x3', virtual-reg: '%0' }
1292   - { reg: '$x4', virtual-reg: '%1' }
1293 frameInfo:       
1294   isFrameAddressTaken: false
1295   isReturnAddressTaken: false
1296   hasStackMap:     false
1297   hasPatchPoint:   false
1298   stackSize:       0
1299   offsetAdjustment: 0
1300   maxAlignment:    0
1301   adjustsStack:    false
1302   hasCalls:        false
1303   stackProtector:  ''
1304   maxCallFrameSize: 4294967295
1305   hasOpaqueSPAdjustment: false
1306   hasVAStart:      false
1307   hasMustTailInVarArgFunc: false
1308   savePoint:       ''
1309   restorePoint:    ''
1310 fixedStack:      
1311 stack:           
1312 constants:       
1313 body:             |
1314   bb.0.entry:
1315     liveins: $x3, $x4
1316   
1317     %1 = COPY $x4
1318     %0 = COPY $x3
1319     %2 = LI 68
1320     %3 = SRAD_rec %0, killed %2, implicit-def dead $carry, implicit-def $cr0
1321     ; CHECK: SRAD_rec killed %0, killed %2, implicit-def dead $carry, implicit-def $cr0
1322     ; CHECK-LATE: srad. 3, 3, 5
1323     %4 = COPY killed $cr0
1324     %5 = ISEL8 %1, %3, %4.sub_eq
1325     $x3 = COPY %5
1326     BLR8 implicit $lr8, implicit $rm, implicit $x3