[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / PowerPC / shrink-wrap.mir
blobcb125abde53efbbdefe8b5d4c8fe71c435b2dcc5
1 # RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple powerpc64le-unknown-linux-gnu \
2 # RUN:   -run-pass=shrink-wrap -o - %s | FileCheck %s
3 --- |
4   ; ModuleID = 'test.ll'
5   source_filename = "test.ll"
6   target datalayout = "e-m:e-i64:64-n32:64"
7   
8   define signext i32 @shrinkwrapme(i32 signext %a, i32 signext %lim) {
9   entry:
10     %cmp5 = icmp sgt i32 %lim, 0
11     br i1 %cmp5, label %for.body.preheader, label %for.cond.cleanup
12   
13   for.body.preheader:                               ; preds = %entry
14     %0 = add i32 %lim, -1
15     %1 = zext i32 %0 to i64
16     %2 = add nuw nsw i64 %1, 1
17     call void @llvm.set.loop.iterations.i64(i64 %2)
18     br label %for.body
19   
20   for.cond.cleanup:                                 ; preds = %for.body, %entry
21     %Ret.0.lcssa = phi i32 [ 0, %entry ], [ %3, %for.body ]
22     ret i32 %Ret.0.lcssa
23   
24   for.body:                                         ; preds = %for.body, %for.body.preheader
25     %Ret.06 = phi i32 [ %3, %for.body ], [ 0, %for.body.preheader ]
26     %3 = tail call i32 asm "add $0, $1, $2", "=r,r,r,~{r14},~{r15},~{r16},~{r17},~{r18},~{r19},~{r20},~{r21},~{r22},~{r23},~{r24},~{r25},~{r26},~{r27},~{r28},~{r29},~{r30},~{r31}"(i32 %a, i32 %Ret.06)
27     %4 = call i1 @llvm.loop.decrement.i64(i64 1)
28     br i1 %4, label %for.body, label %for.cond.cleanup
29   }
30   
31   ; Function Attrs: noduplicate nounwind
32   declare void @llvm.set.loop.iterations.i64(i64) #0
33   
34   ; Function Attrs: noduplicate nounwind
35   declare i1 @llvm.loop.decrement.i64(i64) #0
36   
37   ; Function Attrs: nounwind
38   declare void @llvm.stackprotector(i8*, i8**) #1
39   
40   attributes #0 = { noduplicate nounwind }
41   attributes #1 = { nounwind }
43 ...
44 ---
45 name:            shrinkwrapme
46 alignment:       16
47 exposesReturnsTwice: false
48 legalized:       false
49 regBankSelected: false
50 selected:        false
51 failedISel:      false
52 tracksRegLiveness: true
53 hasWinCFI:       false
54 registers:       []
55 liveins:
56   - { reg: '$x3', virtual-reg: '' }
57   - { reg: '$x4', virtual-reg: '' }
58 frameInfo:
59   isFrameAddressTaken: false
60   isReturnAddressTaken: false
61   hasStackMap:     false
62   hasPatchPoint:   false
63   stackSize:       0
64   offsetAdjustment: 0
65   maxAlignment:    0
66   adjustsStack:    false
67   hasCalls:        false
68   stackProtector:  ''
69   maxCallFrameSize: 4294967295
70   cvBytesOfCalleeSavedRegisters: 0
71   hasOpaqueSPAdjustment: false
72   hasVAStart:      false
73   hasMustTailInVarArgFunc: false
74   localFrameSize:  0
75   savePoint:       ''
76   restorePoint:    ''
77 fixedStack:      []
78 stack:           []
79 callSites:       []
80 constants:       []
81 machineFunctionInfo: {}
82 body:             |
83   bb.0.entry:
84     successors: %bb.2(0x50000000), %bb.1(0x30000000)
85     liveins: $x3, $x4
86   
87     renamable $cr0 = CMPWI renamable $r4, 1
88     BCC 4, killed renamable $cr0, %bb.2
89   
90   bb.1:
91     successors: %bb.3(0x80000000)
92   
93     renamable $r4 = LI 0
94     B %bb.3
95   
96   bb.2.for.body.preheader:
97     successors: %bb.4(0x80000000)
98     liveins: $x3, $x4
99   
100     renamable $r4 = ADDI renamable $r4, -1, implicit killed $x4, implicit-def $x4
101     renamable $x4 = RLDICL killed renamable $x4, 0, 32
102     renamable $x4 = nuw nsw ADDI8 killed renamable $x4, 1
103     MTCTR8loop killed renamable $x4, implicit-def dead $ctr8
104     renamable $r4 = LI 0
105     B %bb.4
106   
107   bb.3.for.cond.cleanup:
108     liveins: $r4
109   
110     renamable $x3 = EXTSW_32_64 killed renamable $r4
111     BLR8 implicit $lr8, implicit $rm, implicit $x3
112   
113   bb.4.for.body:
114     successors: %bb.4(0x7c000000), %bb.3(0x04000000)
115     liveins: $r4, $x3
116   
117     INLINEASM &"add $0, $1, $2", 0, 131082, def renamable $r4, 131081, renamable $r3, 131081, killed renamable $r4, 12, implicit-def dead early-clobber $r14, 12, implicit-def dead early-clobber $r15, 12, implicit-def dead early-clobber $r16, 12, implicit-def dead early-clobber $r17, 12, implicit-def dead early-clobber $r18, 12, implicit-def dead early-clobber $r19, 12, implicit-def dead early-clobber $r20, 12, implicit-def dead early-clobber $r21, 12, implicit-def dead early-clobber $r22, 12, implicit-def dead early-clobber $r23, 12, implicit-def dead early-clobber $r24, 12, implicit-def dead early-clobber $r25, 12, implicit-def dead early-clobber $r26, 12, implicit-def dead early-clobber $r27, 12, implicit-def dead early-clobber $r28, 12, implicit-def dead early-clobber $r29, 12, implicit-def dead early-clobber $r30, 12, implicit-def dead early-clobber $r31
118     BDNZ8 %bb.4, implicit-def dead $ctr8, implicit $ctr8
119     B %bb.3
121   ; CHECK:      savePoint:       ''
122   ; CHECK-NEXT: restorePoint:    ''
124   ; CHECK:      bb.4.for.body:
125   ; CHECK-NEXT:   successors: %bb.4(0x7c000000), %bb.3(0x04000000)
126   ; CHECK-NEXT:   liveins: $r4, $x3
127   ; CHECK:        INLINEASM
128   ; CHECK-NEXT:   BDNZ8 %bb.4
129   ; CHECK-NEXT:   B %bb.3