1# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=print-machine-cycles -o - %s 2>&1 | FileCheck %s 2 3... 4--- 5# CHECK-LABEL: MachineCycleInfo for function: empty 6name: empty 7alignment: 16 8tracksRegLiveness: true 9frameInfo: 10 maxAlignment: 1 11machineFunctionInfo: {} 12body: | 13 bb.0: 14 RET64 15 16... 17--- 18# CHECK-LABEL: MachineCycleInfo for function: simple 19# CHECK: depth=1: entries(bb.1) 20name: simple 21alignment: 16 22tracksRegLiveness: true 23registers: 24 - { id: 0, class: gr8 } 25frameInfo: 26 maxAlignment: 1 27machineFunctionInfo: {} 28body: | 29 bb.0: 30 JMP_1 %bb.1 31 32 bb.1: 33 %0:gr8 = IMPLICIT_DEF 34 TEST8ri %0, 1, implicit-def $eflags 35 JCC_1 %bb.1, 5, implicit $eflags 36 JMP_1 %bb.2 37 38 bb.2: 39 RET64 40 41... 42--- 43# CHECK-LABEL: MachineCycleInfo for function: two_latches 44# CHECK: depth=1: entries(bb.1) bb.2 45name: two_latches 46alignment: 16 47tracksRegLiveness: true 48registers: 49 - { id: 0, class: gr8 } 50 - { id: 1, class: gr8 } 51frameInfo: 52 maxAlignment: 1 53machineFunctionInfo: {} 54body: | 55 bb.0: 56 JMP_1 %bb.1 57 58 bb.1: 59 %0:gr8 = IMPLICIT_DEF 60 TEST8ri %0, 1, implicit-def $eflags 61 JCC_1 %bb.1, 5, implicit $eflags 62 JMP_1 %bb.2 63 64 bb.2: 65 %1:gr8 = IMPLICIT_DEF 66 TEST8ri %1, 1, implicit-def $eflags 67 JCC_1 %bb.3, 5, implicit $eflags 68 JMP_1 %bb.1 69 70 bb.3: 71 RET64 72 73... 74--- 75# CHECK-LABEL: MachineCycleInfo for function: nested_simple 76# CHECK: depth=1: entries(bb.1) bb.3 bb.2 77# CHECK: depth=2: entries(bb.2) 78name: nested_simple 79alignment: 16 80tracksRegLiveness: true 81registers: 82 - { id: 0, class: gr8 } 83 - { id: 1, class: gr8 } 84frameInfo: 85 maxAlignment: 1 86machineFunctionInfo: {} 87body: | 88 bb.0: 89 JMP_1 %bb.1 90 91 bb.1: 92 JMP_1 %bb.2 93 94 bb.2: 95 %0:gr8 = IMPLICIT_DEF 96 TEST8ri %0, 1, implicit-def $eflags 97 JCC_1 %bb.2, 5, implicit $eflags 98 JMP_1 %bb.3 99 100 bb.3: 101 %1:gr8 = IMPLICIT_DEF 102 TEST8ri %1, 1, implicit-def $eflags 103 JCC_1 %bb.1, 5, implicit $eflags 104 JMP_1 %bb.4 105 106 bb.4: 107 RET64 108 109... 110--- 111# CHECK-LABEL: MachineCycleInfo for function: nested_outer_latch_in_inner_loop 112# CHECK: depth=1: entries(bb.1) bb.2 bb.3 113# CHECK: depth=2: entries(bb.2) bb.3 114name: nested_outer_latch_in_inner_loop 115alignment: 16 116tracksRegLiveness: true 117registers: 118 - { id: 0, class: gr8 } 119 - { id: 1, class: gr8 } 120frameInfo: 121 maxAlignment: 1 122machineFunctionInfo: {} 123body: | 124 bb.0: 125 JMP_1 %bb.1 126 127 bb.1: 128 JMP_1 %bb.2 129 130 bb.2: 131 %0:gr8 = IMPLICIT_DEF 132 TEST8ri %0, 1, implicit-def $eflags 133 JCC_1 %bb.3, 5, implicit $eflags 134 JMP_1 %bb.1 135 136 bb.3: 137 %1:gr8 = IMPLICIT_DEF 138 TEST8ri %1, 1, implicit-def $eflags 139 JCC_1 %bb.4, 5, implicit $eflags 140 JMP_1 %bb.2 141 142 bb.4: 143 RET64 144 145... 146--- 147# CHECK-LABEL: MachineCycleInfo for function: sibling_loops 148# CHECK: depth=1: entries(bb.1) 149# CHECK: depth=1: entries(bb.2) 150name: sibling_loops 151alignment: 16 152tracksRegLiveness: true 153registers: 154 - { id: 0, class: gr8 } 155 - { id: 1, class: gr8 } 156 - { id: 2, class: gr8 } 157frameInfo: 158 maxAlignment: 1 159machineFunctionInfo: {} 160body: | 161 bb.0: 162 %0:gr8 = IMPLICIT_DEF 163 TEST8ri %0, 1, implicit-def $eflags 164 JCC_1 %bb.1, 5, implicit $eflags 165 JMP_1 %bb.2 166 167 bb.1: 168 %2:gr8 = IMPLICIT_DEF 169 TEST8ri %2, 1, implicit-def $eflags 170 JCC_1 %bb.1, 5, implicit $eflags 171 JMP_1 %bb.3 172 173 bb.2: 174 %1:gr8 = IMPLICIT_DEF 175 TEST8ri %1, 1, implicit-def $eflags 176 JCC_1 %bb.2, 5, implicit $eflags 177 JMP_1 %bb.3 178 179 bb.3: 180 RET64 181 182... 183--- 184# CHECK-LABEL: MachineCycleInfo for function: serial_loops 185# CHECK: depth=1: entries(bb.2) 186# CHECK: depth=1: entries(bb.1) 187name: serial_loops 188alignment: 16 189tracksRegLiveness: true 190registers: 191 - { id: 0, class: gr8 } 192 - { id: 1, class: gr8 } 193frameInfo: 194 maxAlignment: 1 195machineFunctionInfo: {} 196body: | 197 bb.0: 198 JMP_1 %bb.1 199 200 bb.1: 201 %0:gr8 = IMPLICIT_DEF 202 TEST8ri %0, 1, implicit-def $eflags 203 JCC_1 %bb.1, 5, implicit $eflags 204 JMP_1 %bb.2 205 206 bb.2: 207 %1:gr8 = IMPLICIT_DEF 208 TEST8ri %1, 1, implicit-def $eflags 209 JCC_1 %bb.2, 5, implicit $eflags 210 JMP_1 %bb.3 211 212 bb.3: 213 RET64 214 215... 216--- 217# CHECK-LABEL: MachineCycleInfo for function: nested_sibling_loops 218# CHECK: depth=1: entries(bb.1) bb.4 bb.5 bb.3 bb.2 219# CHECK: depth=2: entries(bb.4) bb.5 220# CHECK: depth=2: entries(bb.2) 221name: nested_sibling_loops 222alignment: 16 223tracksRegLiveness: true 224registers: 225 - { id: 0, class: gr8 } 226 - { id: 1, class: gr32 } 227 - { id: 2, class: gr8 } 228 - { id: 3, class: gr32 } 229 - { id: 4, class: gr8 } 230 - { id: 5, class: gr32 } 231 - { id: 6, class: gr8 } 232 - { id: 7, class: gr32 } 233 - { id: 8, class: gr8 } 234frameInfo: 235 maxAlignment: 1 236machineFunctionInfo: {} 237body: | 238 bb.0: 239 JMP_1 %bb.1 240 241 bb.1: 242 %0:gr8 = IMPLICIT_DEF 243 TEST8ri %0, 1, implicit-def $eflags 244 JCC_1 %bb.2, 5, implicit $eflags 245 JMP_1 %bb.3 246 247 bb.2: 248 %5:gr32 = MOV32r0 implicit-def dead $eflags 249 %6:gr8 = COPY %5.sub_8bit 250 TEST8rr %6, %6, implicit-def $eflags 251 JCC_1 %bb.2, 5, implicit $eflags 252 JMP_1 %bb.6 253 254 bb.6: 255 %7:gr32 = MOV32r0 implicit-def dead $eflags 256 %8:gr8 = COPY %7.sub_8bit 257 TEST8rr %8, %8, implicit-def $eflags 258 JCC_1 %bb.1, 5, implicit $eflags 259 JMP_1 %bb.4 260 261 bb.3: 262 %1:gr32 = MOV32r0 implicit-def dead $eflags 263 %2:gr8 = COPY %1.sub_8bit 264 TEST8rr %2, %2, implicit-def $eflags 265 JCC_1 %bb.4, 5, implicit $eflags 266 JMP_1 %bb.5 267 268 bb.5: 269 %3:gr32 = MOV32r0 implicit-def dead $eflags 270 %4:gr8 = COPY %3.sub_8bit 271 TEST8rr %4, %4, implicit-def $eflags 272 JCC_1 %bb.3, 5, implicit $eflags 273 JMP_1 %bb.1 274 275 bb.4: 276 RET64 277 278... 279--- 280# CHECK-LABEL: MachineCycleInfo for function: deeper_nest 281# CHECK: depth=1: entries(bb.1) bb.5 bb.2 bb.3 bb.4 282# CHECK: depth=2: entries(bb.2) bb.3 bb.4 283# CHECK: depth=3: entries(bb.3) bb.4 284name: deeper_nest 285alignment: 16 286tracksRegLiveness: true 287registers: 288 - { id: 0, class: gr8 } 289 - { id: 1, class: gr8 } 290 - { id: 2, class: gr8 } 291frameInfo: 292 maxAlignment: 1 293machineFunctionInfo: {} 294body: | 295 bb.0: 296 JMP_1 %bb.1 297 298 bb.1: 299 JMP_1 %bb.2 300 301 bb.2: 302 JMP_1 %bb.3 303 304 bb.3: 305 %0:gr8 = IMPLICIT_DEF 306 TEST8ri %0, 1, implicit-def $eflags 307 JCC_1 %bb.2, 5, implicit $eflags 308 JMP_1 %bb.4 309 310 bb.4: 311 %1:gr8 = IMPLICIT_DEF 312 TEST8ri %1, 1, implicit-def $eflags 313 JCC_1 %bb.3, 5, implicit $eflags 314 JMP_1 %bb.5 315 316 bb.5: 317 %2:gr8 = IMPLICIT_DEF 318 TEST8ri %2, 1, implicit-def $eflags 319 JCC_1 %bb.1, 5, implicit $eflags 320 JMP_1 %bb.6 321 322 bb.6: 323 RET64 324 325... 326--- 327# CHECK-LABEL: MachineCycleInfo for function: irreducible_basic 328# CHECK: depth=1: entries(bb.2 bb.1) 329name: irreducible_basic 330alignment: 16 331tracksRegLiveness: true 332registers: 333 - { id: 0, class: gr8 } 334 - { id: 1, class: gr8 } 335 - { id: 2, class: gr8 } 336frameInfo: 337 maxAlignment: 1 338machineFunctionInfo: {} 339body: | 340 bb.0: 341 %0:gr8 = IMPLICIT_DEF 342 TEST8ri %0, 1, implicit-def $eflags 343 JCC_1 %bb.1, 5, implicit $eflags 344 JMP_1 %bb.2 345 346 bb.1: 347 %1:gr8 = IMPLICIT_DEF 348 TEST8ri %1, 1, implicit-def $eflags 349 JCC_1 %bb.2, 5, implicit $eflags 350 JMP_1 %bb.3 351 352 bb.2: 353 %2:gr8 = IMPLICIT_DEF 354 TEST8ri %2, 1, implicit-def $eflags 355 JCC_1 %bb.1, 5, implicit $eflags 356 JMP_1 %bb.3 357 358 bb.3: 359 RET64 360 361... 362--- 363# CHECK-LABEL: MachineCycleInfo for function: irreducible_mess 364# CHECK: depth=1: entries(bb.2 bb.1) bb.6 bb.5 bb.3 bb.4 365# CHECK: depth=2: entries(bb.5 bb.3 bb.1) bb.4 366# CHECK: depth=3: entries(bb.3 bb.1) bb.4 367name: irreducible_mess 368alignment: 16 369tracksRegLiveness: true 370registers: 371 - { id: 0, class: gr8 } 372 - { id: 1, class: gr8 } 373 - { id: 2, class: gr32 } 374 - { id: 3, class: gr8 } 375 - { id: 4, class: gr32 } 376 - { id: 5, class: gr8 } 377 - { id: 6, class: gr32 } 378 - { id: 7, class: gr8 } 379 - { id: 8, class: gr32 } 380 - { id: 9, class: gr8 } 381 - { id: 10, class: gr8 } 382frameInfo: 383 maxAlignment: 1 384machineFunctionInfo: {} 385body: | 386 bb.0: 387 %0:gr8 = IMPLICIT_DEF 388 TEST8ri %0, 1, implicit-def $eflags 389 JCC_1 %bb.1, 5, implicit $eflags 390 JMP_1 %bb.2 391 392 bb.1: 393 %1:gr8 = IMPLICIT_DEF 394 TEST8ri %1, 1, implicit-def $eflags 395 JCC_1 %bb.3, 5, implicit $eflags 396 JMP_1 %bb.4 397 398 bb.2: 399 %10:gr8 = IMPLICIT_DEF 400 TEST8ri %10, 1, implicit-def $eflags 401 JCC_1 %bb.3, 5, implicit $eflags 402 JMP_1 %bb.4 403 404 bb.3: 405 %2:gr32 = MOV32r0 implicit-def dead $eflags 406 %3:gr8 = COPY %2.sub_8bit 407 TEST8rr %3, %3, implicit-def $eflags 408 JCC_1 %bb.4, 5, implicit $eflags 409 JMP_1 %bb.6 410 411 bb.6: 412 %4:gr32 = MOV32r0 implicit-def dead $eflags 413 %5:gr8 = COPY %4.sub_8bit 414 TEST8rr %5, %5, implicit-def $eflags 415 JCC_1 %bb.5, 5, implicit $eflags 416 JMP_1 %bb.1 417 418 bb.4: 419 %6:gr32 = MOV32r0 implicit-def dead $eflags 420 %7:gr8 = COPY %6.sub_8bit 421 TEST8rr %7, %7, implicit-def $eflags 422 JCC_1 %bb.3, 5, implicit $eflags 423 JMP_1 %bb.7 424 425 bb.7: 426 successors: %bb.5, %bb.2 427 428 %8:gr32 = MOV32r0 implicit-def dead $eflags 429 %9:gr8 = COPY %8.sub_8bit 430 TEST8rr %9, %9, implicit-def $eflags 431 JCC_1 %bb.2, 5, implicit $eflags 432 JMP_1 %bb.5 433 434 bb.5: 435 RET64 436 437... 438--- 439# CHECK-LABEL: MachineCycleInfo for function: irreducible_into_simple_cycle 440# CHECK: depth=1: entries(bb.2 bb.7 bb.4) bb.6 bb.5 bb.3 441name: irreducible_into_simple_cycle 442alignment: 16 443tracksRegLiveness: true 444registers: 445 - { id: 0, class: gr32 } 446 - { id: 1, class: gr8 } 447 - { id: 2, class: gr32 } 448 - { id: 3, class: gr8 } 449 - { id: 4, class: gr8 } 450 - { id: 5, class: gr8 } 451frameInfo: 452 maxAlignment: 1 453machineFunctionInfo: {} 454body: | 455 bb.0: 456 %0:gr32 = MOV32r0 implicit-def dead $eflags 457 %1:gr8 = COPY %0.sub_8bit 458 TEST8rr %1, %1, implicit-def $eflags 459 JCC_1 %bb.3, 5, implicit $eflags 460 JMP_1 %bb.8 461 462 bb.8: 463 %2:gr32 = MOV32r0 implicit-def dead $eflags 464 %3:gr8 = COPY %2.sub_8bit 465 TEST8rr %3, %3, implicit-def $eflags 466 JCC_1 %bb.6, 5, implicit $eflags 467 JMP_1 %bb.1 468 469 bb.1: 470 JMP_1 %bb.2 471 472 bb.2: 473 JMP_1 %bb.3 474 475 bb.3: 476 JMP_1 %bb.4 477 478 bb.4: 479 %4:gr8 = IMPLICIT_DEF 480 TEST8ri %4, 1, implicit-def $eflags 481 JCC_1 %bb.5, 5, implicit $eflags 482 JMP_1 %bb.7 483 484 bb.5: 485 JMP_1 %bb.6 486 487 bb.6: 488 %5:gr8 = IMPLICIT_DEF 489 TEST8ri %5, 1, implicit-def $eflags 490 JCC_1 %bb.1, 5, implicit $eflags 491 JMP_1 %bb.7 492 493 bb.7: 494 RET64 495 496... 497--- 498# CHECK-LABEL: MachineCycleInfo for function: irreducible_mountain_bug 499# CHECK: depth=1: entries(bb.6) bb.11 bb.10 bb.8 bb.7 bb.9 bb.12 500# CHECK: depth=2: entries(bb.10 bb.7) bb.8 bb.9 501# CHECK: depth=3: entries(bb.8 bb.7) bb.9 502name: irreducible_mountain_bug 503alignment: 16 504tracksRegLiveness: true 505registers: 506 - { id: 0, class: gr8 } 507 - { id: 1, class: gr8 } 508 - { id: 2, class: gr8 } 509 - { id: 3, class: gr8 } 510 - { id: 4, class: gr8 } 511 - { id: 5, class: gr8 } 512 - { id: 6, class: gr8 } 513 - { id: 7, class: gr8 } 514 - { id: 8, class: gr8 } 515 - { id: 9, class: gr8 } 516 - { id: 10, class: gr8 } 517 - { id: 11, class: gr8 } 518 - { id: 12, class: gr8 } 519 - { id: 13, class: gr8 } 520frameInfo: 521 maxAlignment: 1 522machineFunctionInfo: {} 523body: | 524 bb.0: 525 %0:gr8 = IMPLICIT_DEF 526 TEST8ri %0, 1, implicit-def $eflags 527 JCC_1 %bb.1, 5, implicit $eflags 528 JMP_1 %bb.17 529 530 bb.1: 531 %3:gr8 = IMPLICIT_DEF 532 TEST8ri %3, 1, implicit-def $eflags 533 JCC_1 %bb.2, 5, implicit $eflags 534 JMP_1 %bb.3 535 536 bb.2: 537 JMP_1 %bb.4 538 539 bb.3: 540 JMP_1 %bb.4 541 542 bb.4: 543 %4:gr8 = IMPLICIT_DEF 544 TEST8ri %4, 1, implicit-def $eflags 545 JCC_1 %bb.5, 5, implicit $eflags 546 JMP_1 %bb.14 547 548 bb.5: 549 JMP_1 %bb.6 550 551 bb.6: 552 %7:gr8 = IMPLICIT_DEF 553 TEST8ri %7, 1, implicit-def $eflags 554 JCC_1 %bb.7, 5, implicit $eflags 555 JMP_1 %bb.12 556 557 bb.7: 558 %9:gr8 = IMPLICIT_DEF 559 TEST8ri %9, 1, implicit-def $eflags 560 JCC_1 %bb.11, 5, implicit $eflags 561 JMP_1 %bb.8 562 563 bb.8: 564 %10:gr8 = IMPLICIT_DEF 565 TEST8ri %10, 1, implicit-def $eflags 566 JCC_1 %bb.20, 5, implicit $eflags 567 JMP_1 %bb.9 568 569 bb.9: 570 %11:gr8 = IMPLICIT_DEF 571 TEST8ri %11, 1, implicit-def $eflags 572 JCC_1 %bb.7, 5, implicit $eflags 573 JMP_1 %bb.10 574 575 bb.10: 576 %12:gr8 = IMPLICIT_DEF 577 TEST8ri %12, 1, implicit-def $eflags 578 JCC_1 %bb.8, 5, implicit $eflags 579 JMP_1 %bb.6 580 581 bb.11: 582 %13:gr8 = IMPLICIT_DEF 583 TEST8ri %13, 1, implicit-def $eflags 584 JCC_1 %bb.20, 5, implicit $eflags 585 JMP_1 %bb.6 586 587 bb.12: 588 %8:gr8 = IMPLICIT_DEF 589 TEST8ri %8, 1, implicit-def $eflags 590 JCC_1 %bb.10, 5, implicit $eflags 591 JMP_1 %bb.13 592 593 bb.13: 594 JMP_1 %bb.20 595 596 bb.14: 597 %5:gr8 = IMPLICIT_DEF 598 TEST8ri %5, 1, implicit-def $eflags 599 JCC_1 %bb.20, 5, implicit $eflags 600 JMP_1 %bb.15 601 602 bb.15: 603 %6:gr8 = IMPLICIT_DEF 604 TEST8ri %6, 1, implicit-def $eflags 605 JCC_1 %bb.20, 5, implicit $eflags 606 JMP_1 %bb.16 607 608 bb.16: 609 JMP_1 %bb.20 610 611 bb.17: 612 %1:gr8 = IMPLICIT_DEF 613 TEST8ri %1, 1, implicit-def $eflags 614 JCC_1 %bb.20, 5, implicit $eflags 615 JMP_1 %bb.18 616 617 bb.18: 618 %2:gr8 = IMPLICIT_DEF 619 TEST8ri %2, 1, implicit-def $eflags 620 JCC_1 %bb.20, 5, implicit $eflags 621 JMP_1 %bb.19 622 623 bb.19: 624 JMP_1 %bb.20 625 626 bb.20: 627 RET64 628 629... 630