1# RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc-ibm-aix-xcoff \ 2# RUN: -run-pass=ppc-ctrloops %s -o - -verify-machineinstrs | FileCheck %s 3 4--- 5name: test_success1 6# CHECK: test_success1 7 8tracksRegLiveness: true 9body: | 10 bb.0.entry: 11 12 %0:gprc = LI 2048 13 ; CHECK: MTCTRloop 14 ; CHECK: BDNZ 15 ; CHECK-NOT: ADDI 16 ; CHECK-NOT: CMPLWI 17 ; CHECK-NOT: BC 18 MTCTRloop killed %0:gprc, implicit-def dead $ctr 19 20 bb.1: 21 22 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 23 BC killed %1:crbitrc, %bb.1 24 B %bb.2 25 26 bb.2: 27 28 BLR implicit $lr, implicit $rm 29... 30--- 31name: test_fail_clobber 32# CHECK: test_fail_clobber 33tracksRegLiveness: true 34body: | 35 bb.0.entry: 36 37 %0:gprc = LI 2048 38 ; CHECK-NOT: MTCTRloop 39 ; CHECK-NOT: BDNZ 40 ; CHECK: ADDI 41 ; CHECK: CMPLWI 42 ; CHECK: BC 43 MTCTRloop killed %0:gprc, implicit-def dead $ctr 44 45 bb.1: 46 47 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 48 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 49 BC killed %1:crbitrc, %bb.1 50 B %bb.2 51 52 bb.2: 53 54 BLR implicit $lr, implicit $rm 55... 56--- 57name: test_fail_use_in_loop 58# CHECK: test_fail_use_in_loop 59tracksRegLiveness: true 60body: | 61 bb.0.entry: 62 63 %0:gprc = LI 2048 64 ; CHECK-NOT: MTCTRloop 65 ; CHECK-NOT: BDNZ 66 ; CHECK: ADDI 67 ; CHECK: CMPLWI 68 ; CHECK: BC 69 MTCTRloop killed %0:gprc, implicit-def dead $ctr 70 71 bb.1: 72 73 %1:gprc = MFCTR implicit $ctr 74 %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 75 BC killed %2:crbitrc, %bb.1 76 B %bb.2 77 78 bb.2: 79 80 BLR implicit $lr, implicit $rm 81... 82--- 83name: test_fail_call_in_preheader_after_mtctr 84# CHECK: test_fail_call_in_preheader_after_mtctr 85tracksRegLiveness: true 86body: | 87 bb.0.entry: 88 89 %0:gprc = LI 2048 90 ; CHECK-NOT: MTCTR 91 ; CHECK-NOT: BDNZ 92 ; CHECK: ADDI 93 ; CHECK: CMPLWI 94 ; CHECK: BC 95 MTCTRloop killed %0:gprc, implicit-def dead $ctr 96 BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm 97 98 bb.1: 99 100 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 101 BC killed %1:crbitrc, %bb.1 102 B %bb.2 103 104 bb.2: 105 106 BLR implicit $lr, implicit $rm 107... 108--- 109name: test_succ_call_in_preheader_before_mtctr 110# CHECK: test_succ_call_in_preheader_before_mtctr 111tracksRegLiveness: true 112body: | 113 bb.0.entry: 114 115 %0:gprc = LI 2048 116 BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm 117 ; CHECK: MTCTR 118 ; CHECK: BDNZ 119 ; CHECK-NOT: ADDI 120 ; CHECK-NOT: CMPLWI 121 ; CHECK-NOT: BC 122 MTCTRloop killed %0:gprc, implicit-def dead $ctr 123 124 bb.1: 125 126 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 127 BC killed %1:crbitrc, %bb.1 128 B %bb.2 129 130 bb.2: 131 132 BLR implicit $lr, implicit $rm 133... 134--- 135name: test_fail_call_in_loop 136# CHECK: test_fail_call_in_loop 137tracksRegLiveness: true 138body: | 139 bb.0.entry: 140 141 %0:gprc = LI 2048 142 ; CHECK-NOT: MTCTR 143 ; CHECK-NOT: BDNZ 144 ; CHECK: ADDI 145 ; CHECK: CMPLWI 146 ; CHECK: BC 147 MTCTRloop killed %0:gprc, implicit-def dead $ctr 148 149 bb.1: 150 151 BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm 152 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 153 BC killed %1:crbitrc, %bb.1 154 B %bb.2 155 156 bb.2: 157 158 BLR implicit $lr, implicit $rm 159... 160--- 161name: test_fail_indirect_call_in_loop 162# CHECK: test_fail_indirect_call_in_loop 163tracksRegLiveness: true 164body: | 165 bb.0.entry: 166 liveins: $r3, $r4 167 168 %0:gprc = LI 2048 169 ; CHECK-NOT: MTCTR 170 ; CHECK-NOT: BDNZ 171 ; CHECK: ADDI 172 ; CHECK: CMPLWI 173 ; CHECK: BC 174 renamable %1:crrc = CMPLW killed renamable $r3, killed renamable $r4 175 renamable %2:crbitrc = COPY %1.sub_gt 176 MTLR %0:gprc, implicit-def $lr 177 MTCTRloop %0:gprc, implicit-def dead $ctr 178 179 bb.1: 180 181 BCLRL renamable %2, implicit $lr, implicit $rm 182 %3:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 183 BC killed %3:crbitrc, %bb.1 184 B %bb.2 185 186 bb.2: 187 188 BLR implicit $lr, implicit $rm 189... 190--- 191name: test_fail_livein_preheader 192# CHECK: test_fail_livein_preheader 193tracksRegLiveness: true 194body: | 195 bb.0.entry: 196 liveins: $ctr 197 198 %0:gprc = LI 2048 199 ; CHECK-NOT: MTCTRloop 200 ; CHECK-NOT: BDNZ 201 ; CHECK: ADDI 202 ; CHECK: CMPLWI 203 ; CHECK: BC 204 MTCTRloop killed %0:gprc, implicit-def dead $ctr 205 206 bb.1: 207 208 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 209 BC killed %1:crbitrc, %bb.1 210 B %bb.2 211 212 bb.2: 213 214 BLR implicit $lr, implicit $rm 215... 216--- 217name: test_fail_def_preheader 218# CHECK: test_fail_def_preheader 219tracksRegLiveness: true 220body: | 221 bb.0.entry: 222 223 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 224 %0:gprc = LI 2048 225 ; CHECK-NOT: MTCTRloop 226 ; CHECK-NOT: BDNZ 227 ; CHECK: ADDI 228 ; CHECK: CMPLWI 229 ; CHECK: BC 230 MTCTRloop killed %0:gprc, implicit-def dead $ctr 231 232 bb.1: 233 234 %1:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 235 BC killed %1:crbitrc, %bb.1 236 B %bb.2 237 238 bb.2: 239 240 BLR implicit $lr, implicit $rm 241... 242--- 243name: test_success_only_use_preheader 244# CHECK: test_success_only_use_preheader 245tracksRegLiveness: true 246body: | 247 bb.0.entry: 248 249 %0:gprc = MFCTR implicit $ctr 250 %1:gprc = LI 2048 251 ; CHECK: MTCTRloop 252 ; CHECK: BDNZ 253 ; CHECK-NOT: ADDI 254 ; CHECK-NOT: CMPLWI 255 ; CHECK-NOT: BC 256 MTCTRloop killed %1:gprc, implicit-def dead $ctr 257 258 bb.1: 259 260 %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 261 BC killed %2:crbitrc, %bb.1 262 B %bb.2 263 264 bb.2: 265 266 BLR implicit $lr, implicit $rm 267... 268--- 269name: test_fail_use_after_mtctr 270# CHECK: test_fail_use_after_mtctr 271tracksRegLiveness: true 272body: | 273 bb.0.entry: 274 275 %0:gprc = LI 2048 276 ; CHECK-NOT: MTCTRloop 277 ; CHECK-NOT: BDNZ 278 ; CHECK: ADDI 279 ; CHECK: CMPLWI 280 ; CHECK: BC 281 MTCTRloop killed %0:gprc, implicit-def dead $ctr 282 %1:gprc = MFCTR implicit $ctr 283 284 bb.1: 285 286 %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 287 BC killed %2:crbitrc, %bb.1 288 B %bb.2 289 290 bb.2: 291 292 BLR implicit $lr, implicit $rm 293... 294--- 295name: test_fail_def_after_mtctr 296# CHECK: test_fail_def_after_mtctr 297tracksRegLiveness: true 298body: | 299 bb.0.entry: 300 301 %0:gprc = LI 2048 302 ; CHECK-NOT: MTCTRloop 303 ; CHECK-NOT: BDNZ 304 ; CHECK: ADDI 305 ; CHECK: CMPLWI 306 ; CHECK: BC 307 MTCTRloop killed %0:gprc, implicit-def dead $ctr 308 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 309 310 bb.1: 311 312 %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 313 BC killed %2:crbitrc, %bb.1 314 B %bb.2 315 316 bb.2: 317 318 BLR implicit $lr, implicit $rm 319... 320--- 321name: test_success_def_after_loop 322# CHECK: test_success_def_after_loop 323tracksRegLiveness: true 324body: | 325 bb.0.entry: 326 327 %0:gprc = LI 2048 328 ; CHECK: MTCTRloop 329 ; CHECK: BDNZ 330 ; CHECK-NOT: ADDI 331 ; CHECK-NOT: CMPLWI 332 ; CHECK-NOT: BC 333 MTCTRloop killed %0:gprc, implicit-def dead $ctr 334 335 bb.1: 336 337 %2:crbitrc = DecreaseCTRloop 1, implicit-def dead $ctr, implicit $ctr 338 BC killed %2:crbitrc, %bb.1 339 B %bb.2 340 341 bb.2: 342 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 343 344 BLR implicit $lr, implicit $rm 345... 346