# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
# bb0(div)
# / \
# bb1 <-> bb2
# |
# bb3
# CHECK-LABEL: MachineUniformityInfo for function: cycle_diverge_enter
# CHECK-NEXT: CYCLES ASSSUMED DIVERGENT:
# CHECK-NEXT: depth=1: entries(bb.2 bb.1)
# CHECK-NEXT: CYCLES WITH DIVERGENT EXIT:
# CHECK-NEXT: depth=1: entries(bb.2 bb.1)
---
name: cycle_diverge_enter
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1, %bb.2
%0:_(s32) = G_IMPLICIT_DEF
%1:_(s32) = G_CONSTANT i32 0
%2:_(s32) = G_IMPLICIT_DEF
%3:_(s32) = G_CONSTANT i32 1
%4:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.workitem.id.x)
%6:_(s1) = G_ICMP intpred(slt), %4(s32), %1 ; DIVERGENT CONDITION
%7:_(s1) = G_ICMP intpred(slt), %2(s32), %1 ; UNIFORM CONDITION
G_BRCOND %6(s1), %bb.1 ; divergent branch
G_BR %bb.2
bb.1:
successors: %bb.2
%8:_(s32) = G_PHI %1(s32), %bb.0, %0(s32), %bb.2
G_BR %bb.2
bb.2:
successors: %bb.1, %bb.3
%9:_(s32) = G_PHI %2(s32), %bb.1, %3(s32), %bb.0
%10:_(s1) = G_ICMP intpred(eq), %9(s32), %1(s32)
G_BRCOND %10(s1), %bb.3 ; divergent branch
G_BR %bb.1
bb.3:
%11:_(s32), %12:_(s1) = G_UADDO %9, %3
S_ENDPGM 0
...
# CHECK-LABEL: MachineUniformityInfo for function: cycle_diverge_exit
# CHECK: DIVERGENT: %{{[0-9]*}}: %{{[0-9]*}}:_(s32), %{{[0-9]*}}:_(s1) = G_UADDO %8:_, %{{[0-9]*}}:_
# bb0
# / \
# bb1 <-> bb2(div)
# |
# bb3
---
name: cycle_diverge_exit
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1, %bb.2
%0:_(s32) = G_IMPLICIT_DEF
%1:_(s32) = G_CONSTANT i32 0
%2:_(s32) = G_IMPLICIT_DEF
%3:_(s32) = G_CONSTANT i32 1
%4:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.workitem.id.x)
%6:_(s1) = G_ICMP intpred(slt), %4(s32), %1 ; DIVERGENT CONDITION
%7:_(s1) = G_ICMP intpred(slt), %2(s32), %1 ; UNIFORM CONDITION
G_BRCOND %7(s1), %bb.1 ; uniform branch
G_BR %bb.2
bb.1:
successors: %bb.2
%8:_(s32) = G_PHI %1(s32), %bb.0, %0(s32), %bb.2
G_BR %bb.2
bb.2:
successors: %bb.1, %bb.3
%9:_(s32) = G_PHI %2(s32), %bb.1, %3(s32), %bb.0
%10:_(s1) = G_ICMP intpred(sgt), %9(s32), %1(s32)
G_BRCOND %6(s1), %bb.3 ; divergent branch
G_BR %bb.1
bb.3:
%11:_(s32), %12:_(s1) = G_UADDO %9, %3
S_ENDPGM 0
...