# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=si-insert-waitcnts %s -o - | FileCheck -check-prefix=GCN %s

---
name: signal_isfirst_imm_same_barrier_wait
body: |
  bb.0:
    ; GCN-LABEL: name: signal_isfirst_imm_same_barrier_wait
    ; GCN: S_WAIT_LOADCNT_DSCNT 0
    ; GCN-NEXT: S_WAIT_EXPCNT 0
    ; GCN-NEXT: S_WAIT_SAMPLECNT 0
    ; GCN-NEXT: S_WAIT_BVHCNT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: S_CMP_EQ_U32 0, 0, implicit-def $scc
    ; GCN-NEXT: S_BARRIER_SIGNAL_ISFIRST_IMM -1, implicit-def $scc, implicit killed $scc
    ; GCN-NEXT: S_BARRIER_WAIT -1
    ; GCN-NEXT: renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    ; GCN-NEXT: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
    S_CMP_EQ_U32 0, 0, implicit-def $scc
    S_BARRIER_SIGNAL_ISFIRST_IMM -1, implicit-def $scc, implicit killed $scc
    S_BARRIER_WAIT -1
    renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
...

---
name: signal_isfirst_imm_different_barrier_wait
body: |
  bb.0:
    ; GCN-LABEL: name: signal_isfirst_imm_different_barrier_wait
    ; GCN: S_WAIT_LOADCNT_DSCNT 0
    ; GCN-NEXT: S_WAIT_EXPCNT 0
    ; GCN-NEXT: S_WAIT_SAMPLECNT 0
    ; GCN-NEXT: S_WAIT_BVHCNT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: S_CMP_EQ_U32 0, 0, implicit-def $scc
    ; GCN-NEXT: S_BARRIER_SIGNAL_ISFIRST_IMM -1, implicit-def $scc, implicit killed $scc
    ; GCN-NEXT: S_BARRIER_WAIT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    ; GCN-NEXT: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
    S_CMP_EQ_U32 0, 0, implicit-def $scc
    S_BARRIER_SIGNAL_ISFIRST_IMM -1, implicit-def $scc, implicit killed $scc
    S_BARRIER_WAIT 0
    renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
...

---
name: signal_isfirst_m0_same_barrier_wait
body: |
  bb.0:
    ; GCN-LABEL: name: signal_isfirst_m0_same_barrier_wait
    ; GCN: S_WAIT_LOADCNT_DSCNT 0
    ; GCN-NEXT: S_WAIT_EXPCNT 0
    ; GCN-NEXT: S_WAIT_SAMPLECNT 0
    ; GCN-NEXT: S_WAIT_BVHCNT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: S_CMP_EQ_U32 0, 0, implicit-def $scc
    ; GCN-NEXT: $m0 = S_MOV_B32 -1
    ; GCN-NEXT: S_BARRIER_SIGNAL_ISFIRST_M0 implicit $m0, implicit-def $scc, implicit killed $scc
    ; GCN-NEXT: S_BARRIER_WAIT -1
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    ; GCN-NEXT: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
    S_CMP_EQ_U32 0, 0, implicit-def $scc
    $m0 = S_MOV_B32 -1
    S_BARRIER_SIGNAL_ISFIRST_M0 implicit $m0, implicit-def $scc, implicit killed $scc
    S_BARRIER_WAIT -1
    renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
...

---
name: signal_isfirst_m0_different_barrier_wait
body: |
  bb.0:
    ; GCN-LABEL: name: signal_isfirst_m0_different_barrier_wait
    ; GCN: S_WAIT_LOADCNT_DSCNT 0
    ; GCN-NEXT: S_WAIT_EXPCNT 0
    ; GCN-NEXT: S_WAIT_SAMPLECNT 0
    ; GCN-NEXT: S_WAIT_BVHCNT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: S_CMP_EQ_U32 0, 0, implicit-def $scc
    ; GCN-NEXT: $m0 = S_MOV_B32 -1
    ; GCN-NEXT: S_BARRIER_SIGNAL_ISFIRST_M0 implicit $m0, implicit-def $scc, implicit killed $scc
    ; GCN-NEXT: S_BARRIER_WAIT 0
    ; GCN-NEXT: S_WAIT_KMCNT 0
    ; GCN-NEXT: renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    ; GCN-NEXT: renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
    S_CMP_EQ_U32 0, 0, implicit-def $scc
    $m0 = S_MOV_B32 -1
    S_BARRIER_SIGNAL_ISFIRST_M0 implicit $m0, implicit-def $scc, implicit killed $scc
    S_BARRIER_WAIT 0
    renamable $sgpr0 = S_CSELECT_B32 -1, 0, implicit killed $scc
    renamable $vgpr0 = V_CNDMASK_B32_e64 0, 0, 0, 1, killed $sgpr0, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0
...
