# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=print-machine-cycles -o - %s 2>&1 | FileCheck %s ... --- # CHECK-LABEL: MachineCycleInfo for function: empty name: empty alignment: 16 tracksRegLiveness: true frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: simple # CHECK: depth=1: entries(bb.1) name: simple alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.2: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: two_latches # CHECK: depth=1: entries(bb.1) bb.2 name: two_latches alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.2: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.1 bb.3: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: nested_simple # CHECK: depth=1: entries(bb.1) bb.3 bb.2 # CHECK: depth=2: entries(bb.2) name: nested_simple alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: JMP_1 %bb.2 bb.2: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.3: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.4 bb.4: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: nested_outer_latch_in_inner_loop # CHECK: depth=1: entries(bb.1) bb.2 bb.3 # CHECK: depth=2: entries(bb.2) bb.3 name: nested_outer_latch_in_inner_loop alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: JMP_1 %bb.2 bb.2: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.1 bb.3: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.4, 5, implicit $eflags JMP_1 %bb.2 bb.4: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: sibling_loops # CHECK: depth=1: entries(bb.1) # CHECK: depth=1: entries(bb.2) name: sibling_loops alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } - { id: 2, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.1: %2:gr8 = IMPLICIT_DEF TEST8ri %2, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.3 bb.2: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.3: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: serial_loops # CHECK: depth=1: entries(bb.2) # CHECK: depth=1: entries(bb.1) name: serial_loops alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.2: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.3: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: nested_sibling_loops # CHECK: depth=1: entries(bb.1) bb.4 bb.5 bb.3 bb.2 # CHECK: depth=2: entries(bb.4) bb.5 # CHECK: depth=2: entries(bb.2) name: nested_sibling_loops alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr32 } - { id: 2, class: gr8 } - { id: 3, class: gr32 } - { id: 4, class: gr8 } - { id: 5, class: gr32 } - { id: 6, class: gr8 } - { id: 7, class: gr32 } - { id: 8, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.2: %5:gr32 = MOV32r0 implicit-def dead $eflags %6:gr8 = COPY %5.sub_8bit TEST8rr %6, %6, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.6 bb.6: %7:gr32 = MOV32r0 implicit-def dead $eflags %8:gr8 = COPY %7.sub_8bit TEST8rr %8, %8, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.4 bb.3: %1:gr32 = MOV32r0 implicit-def dead $eflags %2:gr8 = COPY %1.sub_8bit TEST8rr %2, %2, implicit-def $eflags JCC_1 %bb.4, 5, implicit $eflags JMP_1 %bb.5 bb.5: %3:gr32 = MOV32r0 implicit-def dead $eflags %4:gr8 = COPY %3.sub_8bit TEST8rr %4, %4, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.1 bb.4: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: deeper_nest # CHECK: depth=1: entries(bb.1) bb.5 bb.2 bb.3 bb.4 # CHECK: depth=2: entries(bb.2) bb.3 bb.4 # CHECK: depth=3: entries(bb.3) bb.4 name: deeper_nest alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } - { id: 2, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: JMP_1 %bb.1 bb.1: JMP_1 %bb.2 bb.2: JMP_1 %bb.3 bb.3: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.4 bb.4: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.5 bb.5: %2:gr8 = IMPLICIT_DEF TEST8ri %2, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.6 bb.6: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: irreducible_basic # CHECK: depth=1: entries(bb.2 bb.1) name: irreducible_basic alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } - { id: 2, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.1: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.2: %2:gr8 = IMPLICIT_DEF TEST8ri %2, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.3 bb.3: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: irreducible_mess # CHECK: depth=1: entries(bb.2 bb.1) bb.6 bb.5 bb.3 bb.4 # CHECK: depth=2: entries(bb.5 bb.3 bb.1) bb.4 # CHECK: depth=3: entries(bb.3 bb.1) bb.4 name: irreducible_mess alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } - { id: 2, class: gr32 } - { id: 3, class: gr8 } - { id: 4, class: gr32 } - { id: 5, class: gr8 } - { id: 6, class: gr32 } - { id: 7, class: gr8 } - { id: 8, class: gr32 } - { id: 9, class: gr8 } - { id: 10, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.2 bb.1: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.4 bb.2: %10:gr8 = IMPLICIT_DEF TEST8ri %10, 1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.4 bb.3: %2:gr32 = MOV32r0 implicit-def dead $eflags %3:gr8 = COPY %2.sub_8bit TEST8rr %3, %3, implicit-def $eflags JCC_1 %bb.4, 5, implicit $eflags JMP_1 %bb.6 bb.6: %4:gr32 = MOV32r0 implicit-def dead $eflags %5:gr8 = COPY %4.sub_8bit TEST8rr %5, %5, implicit-def $eflags JCC_1 %bb.5, 5, implicit $eflags JMP_1 %bb.1 bb.4: %6:gr32 = MOV32r0 implicit-def dead $eflags %7:gr8 = COPY %6.sub_8bit TEST8rr %7, %7, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.7 bb.7: successors: %bb.5, %bb.2 %8:gr32 = MOV32r0 implicit-def dead $eflags %9:gr8 = COPY %8.sub_8bit TEST8rr %9, %9, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.5 bb.5: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: irreducible_into_simple_cycle # CHECK: depth=1: entries(bb.2 bb.7 bb.4) bb.6 bb.5 bb.3 name: irreducible_into_simple_cycle alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr32 } - { id: 1, class: gr8 } - { id: 2, class: gr32 } - { id: 3, class: gr8 } - { id: 4, class: gr8 } - { id: 5, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: %0:gr32 = MOV32r0 implicit-def dead $eflags %1:gr8 = COPY %0.sub_8bit TEST8rr %1, %1, implicit-def $eflags JCC_1 %bb.3, 5, implicit $eflags JMP_1 %bb.8 bb.8: %2:gr32 = MOV32r0 implicit-def dead $eflags %3:gr8 = COPY %2.sub_8bit TEST8rr %3, %3, implicit-def $eflags JCC_1 %bb.6, 5, implicit $eflags JMP_1 %bb.1 bb.1: JMP_1 %bb.2 bb.2: JMP_1 %bb.3 bb.3: JMP_1 %bb.4 bb.4: %4:gr8 = IMPLICIT_DEF TEST8ri %4, 1, implicit-def $eflags JCC_1 %bb.5, 5, implicit $eflags JMP_1 %bb.7 bb.5: JMP_1 %bb.6 bb.6: %5:gr8 = IMPLICIT_DEF TEST8ri %5, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.7 bb.7: RET64 ... --- # CHECK-LABEL: MachineCycleInfo for function: irreducible_mountain_bug # CHECK: depth=1: entries(bb.6) bb.11 bb.10 bb.8 bb.7 bb.9 bb.12 # CHECK: depth=2: entries(bb.10 bb.7) bb.8 bb.9 # CHECK: depth=3: entries(bb.8 bb.7) bb.9 name: irreducible_mountain_bug alignment: 16 tracksRegLiveness: true registers: - { id: 0, class: gr8 } - { id: 1, class: gr8 } - { id: 2, class: gr8 } - { id: 3, class: gr8 } - { id: 4, class: gr8 } - { id: 5, class: gr8 } - { id: 6, class: gr8 } - { id: 7, class: gr8 } - { id: 8, class: gr8 } - { id: 9, class: gr8 } - { id: 10, class: gr8 } - { id: 11, class: gr8 } - { id: 12, class: gr8 } - { id: 13, class: gr8 } frameInfo: maxAlignment: 1 machineFunctionInfo: {} body: | bb.0: %0:gr8 = IMPLICIT_DEF TEST8ri %0, 1, implicit-def $eflags JCC_1 %bb.1, 5, implicit $eflags JMP_1 %bb.17 bb.1: %3:gr8 = IMPLICIT_DEF TEST8ri %3, 1, implicit-def $eflags JCC_1 %bb.2, 5, implicit $eflags JMP_1 %bb.3 bb.2: JMP_1 %bb.4 bb.3: JMP_1 %bb.4 bb.4: %4:gr8 = IMPLICIT_DEF TEST8ri %4, 1, implicit-def $eflags JCC_1 %bb.5, 5, implicit $eflags JMP_1 %bb.14 bb.5: JMP_1 %bb.6 bb.6: %7:gr8 = IMPLICIT_DEF TEST8ri %7, 1, implicit-def $eflags JCC_1 %bb.7, 5, implicit $eflags JMP_1 %bb.12 bb.7: %9:gr8 = IMPLICIT_DEF TEST8ri %9, 1, implicit-def $eflags JCC_1 %bb.11, 5, implicit $eflags JMP_1 %bb.8 bb.8: %10:gr8 = IMPLICIT_DEF TEST8ri %10, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.9 bb.9: %11:gr8 = IMPLICIT_DEF TEST8ri %11, 1, implicit-def $eflags JCC_1 %bb.7, 5, implicit $eflags JMP_1 %bb.10 bb.10: %12:gr8 = IMPLICIT_DEF TEST8ri %12, 1, implicit-def $eflags JCC_1 %bb.8, 5, implicit $eflags JMP_1 %bb.6 bb.11: %13:gr8 = IMPLICIT_DEF TEST8ri %13, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.6 bb.12: %8:gr8 = IMPLICIT_DEF TEST8ri %8, 1, implicit-def $eflags JCC_1 %bb.10, 5, implicit $eflags JMP_1 %bb.13 bb.13: JMP_1 %bb.20 bb.14: %5:gr8 = IMPLICIT_DEF TEST8ri %5, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.15 bb.15: %6:gr8 = IMPLICIT_DEF TEST8ri %6, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.16 bb.16: JMP_1 %bb.20 bb.17: %1:gr8 = IMPLICIT_DEF TEST8ri %1, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.18 bb.18: %2:gr8 = IMPLICIT_DEF TEST8ri %2, 1, implicit-def $eflags JCC_1 %bb.20, 5, implicit $eflags JMP_1 %bb.19 bb.19: JMP_1 %bb.20 bb.20: RET64 ...