# RUN: not --crash llc -mtriple=amdgcn -run-pass=none -verify-machineinstrs -o /dev/null %s 2>&1 | FileCheck %s --- name: cycles body: | bb.0: %0:sgpr_64 = CONVERGENCECTRL_ANCHOR %1:sgpr_64 = IMPLICIT_DEF S_CBRANCH_EXECZ %bb.9, implicit $exec S_BRANCH %bb.1 bb.1: S_CBRANCH_EXECZ %bb.8, implicit $exec S_BRANCH %bb.5 bb.2: S_CBRANCH_EXECZ %bb.3, implicit $exec S_BRANCH %bb.4 bb.3: ; CHECK: Cycle heart must dominate all blocks in the cycle. ; Irreducible cycle: entries(bb.4 bb.3) %3:sgpr_64 = CONVERGENCECTRL_LOOP %0:sgpr_64 S_BRANCH %bb.4 bb.4: S_BRANCH %bb.3 bb.5: S_CBRANCH_EXECZ %bb.6, implicit $exec S_BRANCH %bb.2 bb.6: S_BRANCH %bb.7 bb.7: ; CHECK: Cycle heart must dominate all blocks in the cycle. ; Reducible cycle: entries(bb.6) bb.7 %4:sgpr_64 = CONVERGENCECTRL_LOOP %0:sgpr_64 S_BRANCH %bb.6 bb.8: ; CHECK: Two static convergence token uses in a cycle that does not contain either token's definition. %5:sgpr_64 = CONVERGENCECTRL_LOOP %0:sgpr_64 %6:sgpr_64 = CONVERGENCECTRL_LOOP %0:sgpr_64 S_BRANCH %bb.8 bb.9: ; CHECK: Convergence token used by an instruction other than llvm.experimental.convergence.loop in a cycle that does not contain the token's definition. %7:sgpr_64 = G_SI_CALL %1:sgpr_64, 3, implicit %0:sgpr_64 S_BRANCH %bb.9 ...