| # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes="require<machine-loops>,si-pre-emit-peephole,print<machine-loops>" -debug-pass-manager -filetype=null %s 2>&1 | FileCheck %s |
| |
| # CHECK: Running analysis: MachineLoopAnalysis on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Running analysis: MachineDominatorTreeAnalysis on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Running pass: SIPreEmitPeepholePass on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Invalidating analysis: MachineDominatorTreeAnalysis on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Running pass: MachineLoopPrinterPass on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Machine loop info for machine function 'vcc_and_removal_preserves_mli': |
| # CHECK-NOT: Running analysis: MachineLoopAnalysis on vcc_and_removal_preserves_mli |
| # CHECK-NEXT: Loop at depth 1 containing: %bb.1<header><latch><exiting> |
| |
| --- |
| name: vcc_and_removal_preserves_mli |
| body: | |
| bb.0: |
| S_BRANCH %bb.1 |
| |
| ; S_AND gets removed |
| bb.1: |
| V_CMP_EQ_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $exec |
| $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc |
| S_CBRANCH_VCCNZ %bb.1, implicit $vcc |
| S_BRANCH %bb.2 |
| |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| # CHECK-LABEL: Running pass: SIPreEmitPeepholePass on vcc_branch_destroys_loop |
| # CHECK-NOT: Running analysis: MachineLoopAnalysis on vcc_branch_destroys_loop |
| # CHECK: Machine loop info for machine function 'vcc_branch_destroys_loop': |
| # CHECK-NOT: Loop at depth |
| |
| --- |
| name: vcc_branch_destroys_loop |
| body: | |
| bb.0: |
| S_BRANCH %bb.1 |
| |
| ; After opt, S_CBRANCH_VCCZ becomes S_BRANCH %bb.3, S_BRANCH %bb.1 removed. |
| bb.1: |
| $vcc = S_MOV_B64 0 |
| $vcc = S_AND_B64 $exec, $vcc, implicit-def dead $scc |
| S_CBRANCH_VCCZ %bb.3, implicit $vcc |
| S_BRANCH %bb.1 |
| |
| bb.2: |
| S_ENDPGM 0 |
| |
| bb.3: |
| S_ENDPGM 0 |
| ... |