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
3
4--- |
5  ; ModuleID = 'convert-rr-to-ri-instrs.ll'
6  source_filename = "convert-rr-to-ri-instrs.c"
7  target datalayout = "e-m:e-i64:64-n32:64"
8  target triple = "powerpc64le-unknown-linux-gnu"
9
10  ; Function Attrs: norecurse nounwind readnone
11  define 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}
211
212...
213---
214name:            testRLWNM
215# CHECK-ALL: name: testRLWNM
216alignment:       16
217exposesReturnsTwice: false
218legalized:       false
219regBankSelected: false
220selected:        false
221tracksRegLiveness: true
222registers:
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: '' }
228liveins:
229  - { reg: '$x3', virtual-reg: '%0' }
230frameInfo:
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:    ''
247fixedStack:
248stack:
249constants:
250body:             |
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
263
264...
265---
266name:            testRLWNM8
267# CHECK-ALL: name: testRLWNM8
268alignment:       16
269exposesReturnsTwice: false
270legalized:       false
271regBankSelected: false
272selected:        false
273tracksRegLiveness: true
274registers:
275  - { id: 0, class: g8rc, preferred-register: '' }
276  - { id: 1, class: g8rc, preferred-register: '' }
277  - { id: 2, class: g8rc, preferred-register: '' }
278liveins:
279  - { reg: '$x3', virtual-reg: '%0' }
280frameInfo:
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:    ''
297fixedStack:
298stack:
299constants:
300body:             |
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 %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
311
312...
313---
314name:            testRLWNM_rec
315# CHECK-ALL: name: testRLWNM_rec
316alignment:       16
317exposesReturnsTwice: false
318legalized:       false
319regBankSelected: false
320selected:        false
321tracksRegLiveness: true
322registers:
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: '' }
333liveins:
334  - { reg: '$x3', virtual-reg: '%0' }
335  - { reg: '$x4', virtual-reg: '%1' }
336frameInfo:
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:    ''
353fixedStack:
354stack:
355constants:
356body:             |
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
375
376...
377---
378name:            testRLWNM8_rec
379# CHECK-ALL: name: testRLWNM8_rec
380alignment:       16
381exposesReturnsTwice: false
382legalized:       false
383regBankSelected: false
384selected:        false
385tracksRegLiveness: true
386registers:
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: '' }
396liveins:
397  - { reg: '$x3', virtual-reg: '%0' }
398  - { reg: '$x4', virtual-reg: '%1' }
399frameInfo:
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:    ''
416fixedStack:
417stack:
418constants:
419body:             |
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
434
435...
436---
437name:            testSLW
438# CHECK-ALL: name: testSLW
439alignment:       16
440exposesReturnsTwice: false
441legalized:       false
442regBankSelected: false
443selected:        false
444tracksRegLiveness: true
445registers:
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: '' }
455liveins:
456  - { reg: '$x3', virtual-reg: '%0' }
457  - { reg: '$x4', virtual-reg: '%1' }
458frameInfo:
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:    ''
475fixedStack:
476stack:
477constants:
478body:             |
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
491
492...
493---
494name:            testSLW_rec
495# CHECK-ALL: name: testSLW_rec
496alignment:       16
497exposesReturnsTwice: false
498legalized:       false
499regBankSelected: false
500selected:        false
501tracksRegLiveness: true
502registers:
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: '' }
513liveins:
514  - { reg: '$x3', virtual-reg: '%0' }
515  - { reg: '$x4', virtual-reg: '%1' }
516frameInfo:
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:    ''
533fixedStack:
534stack:
535constants:
536body:             |
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
554
555...
556---
557name:            testSRW
558# CHECK-ALL: name: testSRW
559alignment:       16
560exposesReturnsTwice: false
561legalized:       false
562regBankSelected: false
563selected:        false
564tracksRegLiveness: true
565registers:
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: '' }
575liveins:
576  - { reg: '$x3', virtual-reg: '%0' }
577  - { reg: '$x4', virtual-reg: '%1' }
578frameInfo:
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:    ''
595fixedStack:
596stack:
597constants:
598body:             |
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: LI 0
608    ; CHECK-LATE: li 3, 0
609    $x3 = EXTSW_32_64 %8
610    BLR8 implicit $lr8, implicit $rm, implicit $x3
611
612...
613---
614name:            testSRW_rec
615# CHECK-ALL: name: testSRW_rec
616alignment:       16
617exposesReturnsTwice: false
618legalized:       false
619regBankSelected: false
620selected:        false
621tracksRegLiveness: true
622registers:
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: '' }
633liveins:
634  - { reg: '$x3', virtual-reg: '%0' }
635  - { reg: '$x4', virtual-reg: '%1' }
636frameInfo:
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:    ''
653fixedStack:
654stack:
655constants:
656body:             |
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
674
675...
676---
677name:            testSRAW
678# CHECK-ALL: name: testSRAW
679alignment:       16
680exposesReturnsTwice: false
681legalized:       false
682regBankSelected: false
683selected:        false
684tracksRegLiveness: true
685registers:
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: '' }
692liveins:
693  - { reg: '$x3', virtual-reg: '%0' }
694  - { reg: '$x4', virtual-reg: '%1' }
695frameInfo:
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:    ''
712fixedStack:
713stack:
714constants:
715body:             |
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: SRAW killed %3, killed %2, 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
730
731...
732---
733name:            testSRAW_rec
734# CHECK-ALL: name: testSRAW_rec
735alignment:       16
736exposesReturnsTwice: false
737legalized:       false
738regBankSelected: false
739selected:        false
740tracksRegLiveness: true
741registers:
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: '' }
750liveins:
751  - { reg: '$x3', virtual-reg: '%0' }
752  - { reg: '$x4', virtual-reg: '%1' }
753frameInfo:
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:    ''
770fixedStack:
771stack:
772constants:
773body:             |
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: SRAW_rec killed %3, %2, 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
789
790...
791---
792name:            testRLDCL
793# CHECK-ALL: name: testRLDCL
794alignment:       16
795exposesReturnsTwice: false
796legalized:       false
797regBankSelected: false
798selected:        false
799tracksRegLiveness: true
800registers:
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: '' }
806liveins:
807  - { reg: '$x3', virtual-reg: '%0' }
808  - { reg: '$x4', virtual-reg: '%1' }
809frameInfo:
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:    ''
826fixedStack:
827stack:
828constants:
829body:             |
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 %0, 12, 0
839    ; CHECK-LATE: rotldi 3, 3, 12
840    $x3 = COPY %4
841    BLR8 implicit $lr8, implicit $rm, implicit $x3
842
843...
844---
845name:            testRLDCL_rec
846# CHECK-ALL: name: testRLDCL_rec
847alignment:       16
848exposesReturnsTwice: false
849legalized:       false
850regBankSelected: false
851selected:        false
852tracksRegLiveness: true
853registers:
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: '' }
861liveins:
862  - { reg: '$x3', virtual-reg: '%0' }
863  - { reg: '$x4', virtual-reg: '%1' }
864frameInfo:
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:    ''
881fixedStack:
882stack:
883constants:
884body:             |
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
899
900...
901---
902name:            testRLDCR
903# CHECK-ALL: name: testRLDCR
904alignment:       16
905exposesReturnsTwice: false
906legalized:       false
907regBankSelected: false
908selected:        false
909tracksRegLiveness: true
910registers:
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: '' }
916liveins:
917  - { reg: '$x3', virtual-reg: '%0' }
918  - { reg: '$x4', virtual-reg: '%1' }
919frameInfo:
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:    ''
936fixedStack:
937stack:
938constants:
939body:             |
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 %0, 44, 0
949    ; CHECK-LATE: rldicr 3, 3, 44, 0
950    $x3 = COPY %4
951    BLR8 implicit $lr8, implicit $rm, implicit $x3
952
953...
954---
955name:            testRLDCR_rec
956# CHECK-ALL: name: testRLDCR_rec
957alignment:       16
958exposesReturnsTwice: false
959legalized:       false
960regBankSelected: false
961selected:        false
962tracksRegLiveness: true
963registers:
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: '' }
971liveins:
972  - { reg: '$x3', virtual-reg: '%0' }
973  - { reg: '$x4', virtual-reg: '%1' }
974frameInfo:
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:    ''
991fixedStack:
992stack:
993constants:
994body:             |
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
1009
1010...
1011---
1012name:            testSLD
1013# CHECK-ALL: name: testSLD
1014alignment:       16
1015exposesReturnsTwice: false
1016legalized:       false
1017regBankSelected: false
1018selected:        false
1019tracksRegLiveness: true
1020registers:
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: '' }
1025liveins:
1026  - { reg: '$x3', virtual-reg: '%0' }
1027  - { reg: '$x4', virtual-reg: '%1' }
1028frameInfo:
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:    ''
1045fixedStack:
1046stack:
1047constants:
1048body:             |
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
1060
1061...
1062---
1063name:            testSLD_rec
1064# CHECK-ALL: name: testSLD_rec
1065alignment:       16
1066exposesReturnsTwice: false
1067legalized:       false
1068regBankSelected: false
1069selected:        false
1070tracksRegLiveness: true
1071registers:
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: '' }
1078liveins:
1079  - { reg: '$x3', virtual-reg: '%0' }
1080  - { reg: '$x4', virtual-reg: '%1' }
1081frameInfo:
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:    ''
1098fixedStack:
1099stack:
1100constants:
1101body:             |
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
1115
1116...
1117---
1118name:            testSRD
1119# CHECK-ALL: name: testSRD
1120alignment:       16
1121exposesReturnsTwice: false
1122legalized:       false
1123regBankSelected: false
1124selected:        false
1125tracksRegLiveness: true
1126registers:
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: '' }
1131liveins:
1132  - { reg: '$x3', virtual-reg: '%0' }
1133  - { reg: '$x4', virtual-reg: '%1' }
1134frameInfo:
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:    ''
1151fixedStack:
1152stack:
1153constants:
1154body:             |
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 %0, 48, 16
1163    ; CHECK-LATE: rldicl 3, 3, 48, 16
1164    $x3 = COPY %3
1165    BLR8 implicit $lr8, implicit $rm, implicit $x3
1166
1167...
1168---
1169name:            testSRD_rec
1170# CHECK-ALL: name: testSRD_rec
1171alignment:       16
1172exposesReturnsTwice: false
1173legalized:       false
1174regBankSelected: false
1175selected:        false
1176tracksRegLiveness: true
1177registers:
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: '' }
1184liveins:
1185  - { reg: '$x3', virtual-reg: '%0' }
1186  - { reg: '$x4', virtual-reg: '%1' }
1187frameInfo:
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:    ''
1204fixedStack:
1205stack:
1206constants:
1207body:             |
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
1221
1222...
1223---
1224name:            testSRAD
1225# CHECK-ALL: name: testSRAD
1226alignment:       16
1227exposesReturnsTwice: false
1228legalized:       false
1229regBankSelected: false
1230selected:        false
1231tracksRegLiveness: true
1232registers:
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: '' }
1237liveins:
1238  - { reg: '$x3', virtual-reg: '%0' }
1239  - { reg: '$x4', virtual-reg: '%1' }
1240frameInfo:
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:    ''
1257fixedStack:
1258stack:
1259constants:
1260body:             |
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 %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
1272
1273...
1274---
1275name:            testSRAD_rec
1276# CHECK-ALL: name: testSRAD_rec
1277alignment:       16
1278exposesReturnsTwice: false
1279legalized:       false
1280regBankSelected: false
1281selected:        false
1282tracksRegLiveness: true
1283registers:
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: '' }
1290liveins:
1291  - { reg: '$x3', virtual-reg: '%0' }
1292  - { reg: '$x4', virtual-reg: '%1' }
1293frameInfo:
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:    ''
1310fixedStack:
1311stack:
1312constants:
1313body:             |
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 %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
1327
1328...
1329---
1330