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: MTCTR 14 ; CHECK: BDNZ 15 ; CHECK-NOT: ADDI 16 ; CHECK-NOT: CMPLWI 17 ; CHECK-NOT: BC 18 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 19 20 bb.1: 21 22 %1:crbitrc = DecreaseCTRPseudo 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: MTCTR 39 ; CHECK-NOT: BDNZ 40 ; CHECK: ADDI 41 ; CHECK: CMPLWI 42 ; CHECK: BC 43 MTCTRPseudo 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 = DecreaseCTRPseudo 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: MTCTR 65 ; CHECK-NOT: BDNZ 66 ; CHECK: ADDI 67 ; CHECK: CMPLWI 68 ; CHECK: BC 69 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 70 71 bb.1: 72 73 %1:gprc = MFCTR implicit $ctr 74 %2:crbitrc = DecreaseCTRPseudo 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_loop 84# CHECK: test_fail_call_in_loop 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 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 96 97 bb.1: 98 99 BL @test_fail_use_in_loop, csr_aix32, implicit-def dead $lr, implicit $rm 100 %1:crbitrc = DecreaseCTRPseudo 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_fail_indirect_call_in_loop 110# CHECK: test_fail_indirect_call_in_loop 111tracksRegLiveness: true 112body: | 113 bb.0.entry: 114 liveins: $r3, $r4 115 116 %0:gprc = LI 2048 117 ; CHECK-NOT: MTCTR 118 ; CHECK-NOT: BDNZ 119 ; CHECK: ADDI 120 ; CHECK: CMPLWI 121 ; CHECK: BC 122 renamable %1:crrc = CMPLW killed renamable $r3, killed renamable $r4 123 renamable %2:crbitrc = COPY %1.sub_gt 124 MTLR %0:gprc, implicit-def $lr 125 MTCTRPseudo %0:gprc, implicit-def dead $ctr 126 127 bb.1: 128 129 BCLRL renamable %2, implicit $lr, implicit $rm 130 %3:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 131 BC killed %3:crbitrc, %bb.1 132 B %bb.2 133 134 bb.2: 135 136 BLR implicit $lr, implicit $rm 137... 138--- 139name: test_fail_livein_preheader 140# CHECK: test_fail_livein_preheader 141tracksRegLiveness: true 142body: | 143 bb.0.entry: 144 liveins: $ctr 145 146 %0:gprc = LI 2048 147 ; CHECK-NOT: MTCTR 148 ; CHECK-NOT: BDNZ 149 ; CHECK: ADDI 150 ; CHECK: CMPLWI 151 ; CHECK: BC 152 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 153 154 bb.1: 155 156 %1:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 157 BC killed %1:crbitrc, %bb.1 158 B %bb.2 159 160 bb.2: 161 162 BLR implicit $lr, implicit $rm 163... 164--- 165name: test_fail_def_preheader 166# CHECK: test_fail_def_preheader 167tracksRegLiveness: true 168body: | 169 bb.0.entry: 170 171 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 172 %0:gprc = LI 2048 173 ; CHECK2-NOT: MTCTR 174 ; CHECK-NOT: BDNZ 175 ; CHECK: ADDI 176 ; CHECK: CMPLWI 177 ; CHECK: BC 178 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 179 180 bb.1: 181 182 %1:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 183 BC killed %1:crbitrc, %bb.1 184 B %bb.2 185 186 bb.2: 187 188 BLR implicit $lr, implicit $rm 189... 190--- 191name: test_success_only_use_preheader 192# CHECK: test_success_only_use_preheader 193tracksRegLiveness: true 194body: | 195 bb.0.entry: 196 197 %0:gprc = MFCTR implicit $ctr 198 %1:gprc = LI 2048 199 ; CHECK: MTCTR 200 ; CHECK: BDNZ 201 ; CHECK-NOT: ADDI 202 ; CHECK-NOT: CMPLWI 203 ; CHECK-NOT: BC 204 MTCTRPseudo killed %1:gprc, implicit-def dead $ctr 205 206 bb.1: 207 208 %2:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 209 BC killed %2:crbitrc, %bb.1 210 B %bb.2 211 212 bb.2: 213 214 BLR implicit $lr, implicit $rm 215... 216--- 217name: test_fail_use_after_mtctr 218# CHECK: test_fail_use_after_mtctr 219tracksRegLiveness: true 220body: | 221 bb.0.entry: 222 223 %0:gprc = LI 2048 224 ; CHECK-NOT: MTCTR 225 ; CHECK-NOT: BDNZ 226 ; CHECK: ADDI 227 ; CHECK: CMPLWI 228 ; CHECK: BC 229 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 230 %1:gprc = MFCTR implicit $ctr 231 232 bb.1: 233 234 %2:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 235 BC killed %2:crbitrc, %bb.1 236 B %bb.2 237 238 bb.2: 239 240 BLR implicit $lr, implicit $rm 241... 242--- 243name: test_fail_def_after_mtctr 244# CHECK: test_fail_def_after_mtctr 245tracksRegLiveness: true 246body: | 247 bb.0.entry: 248 249 %0:gprc = LI 2048 250 ; CHECK-NOT: MTCTR 251 ; CHECK-NOT: BDNZ 252 ; CHECK: ADDI 253 ; CHECK: CMPLWI 254 ; CHECK: BC 255 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 256 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 257 258 bb.1: 259 260 %2:crbitrc = DecreaseCTRPseudo 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_success_def_after_loop 270# CHECK: test_success_def_after_loop 271tracksRegLiveness: true 272body: | 273 bb.0.entry: 274 275 %0:gprc = LI 2048 276 ; CHECK: MTCTR 277 ; CHECK: BDNZ 278 ; CHECK-NOT: ADDI 279 ; CHECK-NOT: CMPLWI 280 ; CHECK-NOT: BC 281 MTCTRPseudo killed %0:gprc, implicit-def dead $ctr 282 283 bb.1: 284 285 %2:crbitrc = DecreaseCTRPseudo 1, implicit-def dead $ctr, implicit $ctr 286 BC killed %2:crbitrc, %bb.1 287 B %bb.2 288 289 bb.2: 290 INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def early-clobber $ctr 291 292 BLR implicit $lr, implicit $rm 293... 294