blob: e3ac9f70a50a0189c913b2be2d6fa04d654c1ae2 [file]
# 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
...