Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / PowerPC / convert-rr-to-ri-instrs-kill-flag.mir
blob34de071c4159523e7f2a3c7e8ecb3a2d7ca9b346
1 # RUN: llc -mtriple=powerpc64le--linux-gnu -stop-after ppc-pre-emit-peephole %s -o - -verify-machineinstrs | FileCheck %s
3 ---
4 # LI + XFORM -> DFORM, no killed/dead flag fixup.
5 name: testKillPassUpLI1
6 #CHECK: name: testKillPassUpLI1
7 tracksRegLiveness: true
8 body: |
9   bb.0.entry:
10     liveins: $x3, $f1, $x5
11     $x3 = LI8 100
12     STFSX killed $f1, $x3, $x5
13     ; CHECK: STFS killed $f1, 100, $x5
14     STD killed $x3, killed $x5, 100
15     ; CHECK: STD killed $x3, killed $x5, 100
16     BLR8 implicit $lr8, implicit $rm
18 ...
19 ---
20 # LI + XFORM -> DFORM, fixup killed/dead flag for $x3, find no use, set def as
21 # dead(LI8 is deleted).
22 name: testKillPassUpLI2
23 # CHECK: name: testKillPassUpLI2
24 tracksRegLiveness: true
25 body: |
26   bb.0.entry:
27     liveins: $x3, $f1, $x5
28     $x3 = LI8 100
29     ; CHECK-NOT: LI8
30     STFSX killed $f1, killed $x3, killed $x5
31     ; CHECK: STFS killed $f1, 100, killed $x5
32     BLR8 implicit $lr8, implicit $rm
34 ...
35 ---
36 # LI + XFORM -> DFORM, fixup killed/dead flag for $x3, find last use, set last
37 # use as killed.
38 name: testKillPassUpLI3
39 # CHECK: name: testKillPassUpLI3
40 tracksRegLiveness: true
41 body: |
42   bb.0.entry:
43     liveins: $x3, $f1, $x5
44     $x3 = LI8 100
45     STD $x3, $x5, 100
46     ; CHECK: STD killed $x3, $x5, 100
47     STFSX killed $f1, killed $x3, $x5
48     ; CHECK: STFS killed $f1, 100, $x5
49     STD killed $x5, $x5, 100
50     ; CHECK: STD killed $x5, killed $x5, 100
51     BLR8 implicit $lr8, implicit $rm
53 ...
54 ---
55 # LI + OP -> LI, fixup killed/dead flag for $x3, find last use, set last use as
56 # killed.
57 name: testKillPassUpLI4
58 # CHECK: name: testKillPassUpLI4
59 tracksRegLiveness: true
60 body: |
61   bb.0.entry:
62     liveins: $x3, $x5
63     $x3 = LI8 100
64     STD $x3, $x5, 100
65     ; CHECK: STD killed $x3, killed $x5, 100
66     $x5 = ADDI8 killed $x3, 200
67     ; CHECK: $x5 = LI8 300
68     STD $x5, $x5, 100
69     BLR8 implicit $lr8, implicit $rm
71 ...
72 ---
73 # ADD + XFORM -> DFORM, fixup killed/dead flag for $x3, find no use, set def as dead
74 # (ADDI8 is deleted).
75 name: testKillPassUpADD1
76 # CHECK: name: testKillPassUpADD1
77 tracksRegLiveness: true
78 body: |
79   bb.0.entry:
80     liveins: $x3, $f1, $x5
81     $x3 = ADDI8 killed $x5, 100
82     ; CHECK-NOT: ADDI8
83     STFSX killed $f1, $zero8, killed $x3
84     ; CHECK: STFS killed $f1, 100, killed $x5
85     BLR8 implicit $lr8, implicit $rm
87 ...
88 ---
89 # ADD + XFORM -> DFORM, fixup killed/dead flag for $x3, find last use, set last
90 # use as killed.
91 name: testKillPassUpADD2
92 # CHECK: name: testKillPassUpADD2
93 tracksRegLiveness: true
94 body: |
95   bb.0.entry:
96     liveins: $x3, $f1, $x5
97     $x3 = ADDI8 $x5, 100
98     STD $x3, $x5, 100
99     ; CHECK: STD killed $x3, $x5, 100
100     STFSX killed $f1, $zero8, killed $x3
101     ; CHECK: STFS killed $f1, 100, $x5
102     STD killed $x5, $x5, 100
103     ; CHECK: STD killed $x5, killed $x5, 100
104     BLR8 implicit $lr8, implicit $rm
108 # ADD + XFORM -> DFORM, fixup killed/dead flag for register $x5, DFORM
109 # instruction uses $x5 and no other kill uses, set it as killed in
110 # DFORM instruction.
111 name: testKillPassDownADD1
112 # CHECK: name: testKillPassDownADD1
113 tracksRegLiveness: true
114 body: |
115   bb.0.entry:
116     liveins: $x3, $f1, $x5
117     $x3 = ADDI8 killed $x5, 100
118     ; CHECK: $x3 = ADDI8 $x5, 100
119     STFSX killed $f1, $zero8, $x3
120     ; CHECK: STFS killed $f1, 100, killed $x5
121     STD killed $x3, $x3, 100
122     ; CHECK: STD killed $x3, killed $x3, 100
123     BLR8 implicit $lr8, implicit $rm
127 # ADD + XFORM -> DFORM, fixup killed/dead flag for register $x5, DFORM
128 # instruction uses $x5 and there is one kill use, set $x5 as killed in
129 # DFORM instruction and clear the other kill use killed flag.
130 name: testKillPassDownADD2
131 # CHECK: name: testKillPassDownADD2
132 tracksRegLiveness: true
133 body: |
134   bb.0.entry:
135     liveins: $x3, $f1, $x5
136     $x3 = ADDI8 $x5, 100
137     STD killed $x5, $x5, 100
138     ; CHECK: STD $x5, $x5, 100
139     STFSX killed $f1, $zero8, killed $x3
140     ; CHECK: STFS killed $f1, 100, killed $x5
141     BLR8 implicit $lr8, implicit $rm
145 # ADD + XFORM -> DFORM, fixup killed/dead flag for register $x3, DFORM
146 # instruction defines $x3, do nothing for killed/dead flag.
147 name: testKillPassDownADD3
148 # CHECK: name: testKillPassDownADD3
149 tracksRegLiveness: true
150 body: |
151   bb.0.entry:
152     liveins: $x3, $x5
153     $x3 = ADDI8 $x5, 100
154     $x3 = LDX $zero8, killed $x3
155     ; CHECK: $x3 = LD 100, $x5
156     STD killed $x5, $x5, 100
157     ; CHECK: STD killed $x5, killed $x5, 100
158     STD killed $x3, $x3, 200
159     ; CHECK: STD killed $x3, killed $x3, 200
160     BLR8 implicit $lr8, implicit $rm
164 # ADD + XFORM -> DFORM, fixup killed/dead flag for both register $x5 and $x3,
165 # DFORM instruction uses $x5 and there is one kill use, set $x5 as killed in
166 # DFORM instruction and clear the other kill use killed flag. Find last use for
167 # $x3, set last use as killed.
168 name: testKillPassDownADD4
169 # CHECK: name: testKillPassDownADD4
170 tracksRegLiveness: true
171 body: |
172   bb.0.entry:
173     liveins: $x3, $f1, $x5
174     $x3 = ADDI8 $x5, 100
175     STD killed $x5, $x5, 100
176     ; CHECK: STD $x5, $x5, 100
177     STD $x3, $x3, 200
178     ; CHECK: STD killed $x3, killed $x3, 200
179     STFSX killed $f1, $zero8, killed $x3
180     ; CHECK: STFS killed $f1, 100, killed $x5
181     BLR8 implicit $lr8, implicit $rm