blob: 854e4f8cad0a08dba265b5187bd3de5c2b745e9d [file] [log] [blame]
Chad Rosier9b2b4c92017-07-23 16:38:08 +00001# RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-copyelim %s -verify-machineinstrs -o - | FileCheck %s
2---
3# CHECK-LABEL: name: test1
Puyan Lotfi43e94b12018-01-31 22:04:26 +00004# CHECK: ANDSWri $w0, 1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +00005# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +00006# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +00007name: test1
8tracksRegLiveness: true
9body: |
10 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000011 liveins: $w0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000012
Puyan Lotfi43e94b12018-01-31 22:04:26 +000013 $w0 = ANDSWri $w0, 1, implicit-def $nzcv
14 STRWui killed $w0, killed $x1, 0
15 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000016 B %bb.1
17
18 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000019 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000020
Puyan Lotfi43e94b12018-01-31 22:04:26 +000021 $w0 = COPY $wzr
22 STRWui killed $w0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +000023
24 bb.2:
25 RET_ReallyLR
26...
27# CHECK-LABEL: name: test2
Puyan Lotfi43e94b12018-01-31 22:04:26 +000028# CHECK: ANDSXri $x0, 1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000029# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000030# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +000031name: test2
32tracksRegLiveness: true
33body: |
34 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000035 liveins: $x0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000036
Puyan Lotfi43e94b12018-01-31 22:04:26 +000037 $x0 = ANDSXri $x0, 1, implicit-def $nzcv
38 STRXui killed $x0, killed $x1, 0
39 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000040 B %bb.1
41
42 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000043 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000044
Puyan Lotfi43e94b12018-01-31 22:04:26 +000045 $x0 = COPY $xzr
46 STRXui killed $x0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +000047
48 bb.2:
49 RET_ReallyLR
50...
51# CHECK-LABEL: name: test3
Puyan Lotfi43e94b12018-01-31 22:04:26 +000052# CHECK: ADDSWri $w0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000053# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000054# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +000055name: test3
56tracksRegLiveness: true
57body: |
58 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000059 liveins: $w0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000060
Puyan Lotfi43e94b12018-01-31 22:04:26 +000061 $w0 = ADDSWri $w0, 1, 0, implicit-def $nzcv
62 STRWui killed $w0, killed $x1, 0
63 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000064 B %bb.1
65
66 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000067 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000068
Puyan Lotfi43e94b12018-01-31 22:04:26 +000069 $w0 = COPY $wzr
70 STRWui killed $w0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +000071
72 bb.2:
73 RET_ReallyLR
74...
75# CHECK-LABEL: name: test4
Puyan Lotfi43e94b12018-01-31 22:04:26 +000076# CHECK: ADDSXri $x0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000077# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000078# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +000079name: test4
80tracksRegLiveness: true
81body: |
82 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000083 liveins: $x0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000084
Puyan Lotfi43e94b12018-01-31 22:04:26 +000085 $x0 = ADDSXri $x0, 1, 0, implicit-def $nzcv
86 STRXui killed $x0, killed $x1, 0
87 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +000088 B %bb.1
89
90 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +000091 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +000092
Puyan Lotfi43e94b12018-01-31 22:04:26 +000093 $x0 = COPY $xzr
94 STRXui killed $x0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +000095
96 bb.2:
97 RET_ReallyLR
98...
99# CHECK-LABEL: name: test5
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000100# CHECK: SUBSWri $w0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000101# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000102# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000103name: test5
104tracksRegLiveness: true
105body: |
106 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000107 liveins: $w0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000108
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000109 $w0 = SUBSWri $w0, 1, 0, implicit-def $nzcv
110 STRWui killed $w0, killed $x1, 0
111 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000112 B %bb.1
113
114 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000115 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000116
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000117 $w0 = COPY $wzr
118 STRWui killed $w0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000119
120 bb.2:
121 RET_ReallyLR
122...
123# CHECK-LABEL: name: test6
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000124# CHECK: SUBSXri $x0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000125# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000126# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000127name: test6
128tracksRegLiveness: true
129body: |
130 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000131 liveins: $x0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000132
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000133 $x0 = SUBSXri $x0, 1, 0, implicit-def $nzcv
134 STRXui killed $x0, killed $x1, 0
135 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000136 B %bb.1
137
138 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000139 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000140
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000141 $x0 = COPY $xzr
142 STRXui killed $x0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000143
144 bb.2:
145 RET_ReallyLR
146...
147# CHECK-LABEL: name: test7
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000148# CHECK: ADDSWrr $w0, $w1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000149# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000150# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000151name: test7
152tracksRegLiveness: true
153body: |
154 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000155 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000156
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000157 $w0 = ADDSWrr $w0, $w1, implicit-def $nzcv
158 STRWui killed $w0, killed $x2, 0
159 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000160 B %bb.1
161
162 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000163 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000164
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000165 $w0 = COPY $wzr
166 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000167
168 bb.2:
169 RET_ReallyLR
170...
171# CHECK-LABEL: name: test8
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000172# CHECK: ADDSXrr $x0, $x1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000173# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000174# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000175name: test8
176tracksRegLiveness: true
177body: |
178 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000179 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000180
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000181 $x0 = ADDSXrr $x0, $x1, implicit-def $nzcv
182 STRXui killed $x0, killed $x2, 0
183 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000184 B %bb.1
185
186 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000187 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000188
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000189 $x0 = COPY $xzr
190 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000191
192 bb.2:
193 RET_ReallyLR
194...
195# CHECK-LABEL: name: test9
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000196# CHECK: ANDSWrr $w0, $w1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000197# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000198# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000199name: test9
200tracksRegLiveness: true
201body: |
202 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000203 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000204
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000205 $w0 = ANDSWrr $w0, $w1, implicit-def $nzcv
206 STRWui killed $w0, killed $x2, 0
207 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000208 B %bb.1
209
210 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000211 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000212
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000213 $w0 = COPY $wzr
214 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000215
216 bb.2:
217 RET_ReallyLR
218...
219# CHECK-LABEL: name: test10
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000220# CHECK: ANDSXrr $x0, $x1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000221# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000222# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000223name: test10
224tracksRegLiveness: true
225body: |
226 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000227 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000228
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000229 $x0 = ANDSXrr $x0, $x1, implicit-def $nzcv
230 STRXui killed $x0, killed $x2, 0
231 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000232 B %bb.1
233
234 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000235 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000236
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000237 $x0 = COPY $xzr
238 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000239
240 bb.2:
241 RET_ReallyLR
242...
243# CHECK-LABEL: name: test11
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000244# CHECK: BICSWrr $w0, $w1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000245# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000246# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000247name: test11
248tracksRegLiveness: true
249body: |
250 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000251 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000252
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000253 $w0 = BICSWrr $w0, $w1, implicit-def $nzcv
254 STRWui killed $w0, killed $x2, 0
255 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000256 B %bb.1
257
258 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000259 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000260
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000261 $w0 = COPY $wzr
262 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000263
264 bb.2:
265 RET_ReallyLR
266...
267# CHECK-LABEL: name: test12
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000268# CHECK: BICSXrr $x0, $x1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000269# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000270# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000271name: test12
272tracksRegLiveness: true
273body: |
274 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000275 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000276
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000277 $x0 = BICSXrr $x0, $x1, implicit-def $nzcv
278 STRXui killed $x0, killed $x2, 0
279 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000280 B %bb.1
281
282 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000283 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000284
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000285 $x0 = COPY $xzr
286 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000287
288 bb.2:
289 RET_ReallyLR
290...
291# CHECK-LABEL: name: test13
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000292# CHECK: SUBSWrr $w0, $w1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000293# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000294# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000295name: test13
296tracksRegLiveness: true
297body: |
298 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000299 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000300
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000301 $w0 = SUBSWrr $w0, $w1, implicit-def $nzcv
302 STRWui killed $w0, killed $x2, 0
303 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000304 B %bb.1
305
306 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000307 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000308
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000309 $w0 = COPY $wzr
310 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000311
312 bb.2:
313 RET_ReallyLR
314...
315# CHECK-LABEL: name: test14
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000316# CHECK: SUBSXrr $x0, $x1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000317# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000318# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000319name: test14
320tracksRegLiveness: true
321body: |
322 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000323 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000324
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000325 $x0 = SUBSXrr $x0, $x1, implicit-def $nzcv
326 STRXui killed $x0, killed $x2, 0
327 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000328 B %bb.1
329
330 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000331 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000332
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000333 $x0 = COPY $xzr
334 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000335
336 bb.2:
337 RET_ReallyLR
338...
339# CHECK-LABEL: name: test15
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000340# CHECK: ADDSWrs $w0, $w1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000341# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000342# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000343name: test15
344tracksRegLiveness: true
345body: |
346 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000347 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000348
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000349 $w0 = ADDSWrs $w0, $w1, 0, implicit-def $nzcv
350 STRWui killed $w0, killed $x2, 0
351 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000352 B %bb.1
353
354 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000355 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000356
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000357 $w0 = COPY $wzr
358 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000359
360 bb.2:
361 RET_ReallyLR
362...
363# CHECK-LABEL: name: test16
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000364# CHECK: ADDSXrs $x0, $x1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000365# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000366# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000367name: test16
368tracksRegLiveness: true
369body: |
370 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000371 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000372
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000373 $x0 = ADDSXrs $x0, $x1, 0, implicit-def $nzcv
374 STRXui killed $x0, killed $x2, 0
375 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000376 B %bb.1
377
378 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000379 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000380
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000381 $x0 = COPY $xzr
382 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000383
384 bb.2:
385 RET_ReallyLR
386...
387# CHECK-LABEL: name: test17
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000388# CHECK: ANDSWrs $w0, $w1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000389# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000390# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000391name: test17
392tracksRegLiveness: true
393body: |
394 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000395 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000396
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000397 $w0 = ANDSWrs $w0, $w1, 0, implicit-def $nzcv
398 STRWui killed $w0, killed $x2, 0
399 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000400 B %bb.1
401
402 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000403 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000404
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000405 $w0 = COPY $wzr
406 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000407
408 bb.2:
409 RET_ReallyLR
410...
411# CHECK-LABEL: name: test18
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000412# CHECK: ANDSXrs $x0, $x1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000413# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000414# CHECK-NOT: COPY $xzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000415name: test18
416tracksRegLiveness: true
417body: |
418 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000419 liveins: $x0, $x1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000420
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000421 $x0 = ANDSXrs $x0, $x1, 0, implicit-def $nzcv
422 STRXui killed $x0, killed $x2, 0
423 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000424 B %bb.1
425
426 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000427 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000428
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000429 $x0 = COPY $xzr
430 STRXui killed $x0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000431
432 bb.2:
433 RET_ReallyLR
434...
435# CHECK-LABEL: name: test19
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000436# CHECK: BICSWrs $w0, $w1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000437# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000438# CHECK-NOT: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000439name: test19
440tracksRegLiveness: true
441body: |
442 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000443 liveins: $w0, $w1, $x2, $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000444
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000445 $w0 = BICSWrs $w0, $w1, 0, implicit-def $nzcv
446 STRWui killed $w0, killed $x2, 0
447 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000448 B %bb.1
449
450 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000451 liveins: $x3
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000452
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000453 $w0 = COPY $wzr
454 STRWui killed $w0, killed $x3, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000455
456 bb.2:
457 RET_ReallyLR
458...
459# Unicorn test - we can remove a redundant copy and a redundant mov
460# CHECK-LABEL: name: test20
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000461# CHECK: SUBSWri $w1, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000462# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000463# CHECK-NOT: $w0 = COPY $wzr
464# CHECK-NOT: $w1 = MOVi32imm 1
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000465name: test20
466tracksRegLiveness: true
467body: |
468 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000469 liveins: $w1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000470
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000471 $w0 = SUBSWri $w1, 1, 0, implicit-def $nzcv
472 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000473 B %bb.1
474
475 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000476 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000477
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000478 $w0 = COPY $wzr
479 $w1 = MOVi32imm 1
480 STRWui killed $w0, $x2, 0
481 STRWui killed $w1, killed $x2, 1
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000482
483 bb.2:
484 RET_ReallyLR
485
486...
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000487# Negative test - MOVi32imm clobbers $w0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000488# CHECK-LABEL: name: test21
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000489# CHECK: ANDSWri $w0, 1, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000490# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000491# CHECK: $w0 = COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000492name: test21
493tracksRegLiveness: true
494body: |
495 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000496 liveins: $w0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000497
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000498 $w0 = ANDSWri $w0, 1, implicit-def $nzcv
499 STRWui killed $w0, $x1, 0
500 $w0 = MOVi32imm -1
501 STRWui killed $w0, killed $x1, 1
502 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000503 B %bb.1
504
505 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000506 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000507
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000508 $w0 = COPY $wzr
509 STRWui killed $w0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000510
511 bb.2:
512 RET_ReallyLR
513...
514# Negative test - SUBSXri self-clobbers x0, so MOVi64imm can't be removed
515# CHECK-LABEL: name: test22
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000516# CHECK: SUBSXri $x0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000517# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000518# CHECK: $x0 = MOVi64imm 1
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000519name: test22
520tracksRegLiveness: true
521body: |
522 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000523 liveins: $x0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000524
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000525 $x0 = SUBSXri $x0, 1, 0, implicit-def $nzcv
526 STRXui killed $x0, killed $x1, 0
527 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000528 B %bb.1
529
530 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000531 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000532
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000533 $x0 = MOVi64imm 1
534 STRXui killed $x0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000535
536 bb.2:
537 RET_ReallyLR
538...
539# Negative test - bb.1 has multiple preds
540# CHECK-LABEL: name: test23
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000541# CHECK: ADDSWri $w0, 1, 0, implicit-def $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000542# CHECK: bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000543# CHECK: COPY $wzr
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000544name: test23
545tracksRegLiveness: true
546body: |
547 bb.0.entry:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000548 liveins: $w0, $x1, $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000549
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000550 $w0 = ADDSWri $w0, 1, 0, implicit-def $nzcv
551 STRWui killed $w0, killed $x1, 0
552 Bcc 1, %bb.2, implicit killed $nzcv
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000553 B %bb.1
554
555 bb.3:
556 B %bb.1
557
558 bb.1:
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000559 liveins: $x2
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000560
Puyan Lotfi43e94b12018-01-31 22:04:26 +0000561 $w0 = COPY $wzr
562 STRWui killed $w0, killed $x2, 0
Chad Rosier9b2b4c92017-07-23 16:38:08 +0000563
564 bb.2:
565 RET_ReallyLR