llvm/llvm/test/CodeGen/AMDGPU/partial-forwarding-hazards.mir

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX11 %s
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX12 %s

---
name:            partial_forwarding_1_hazard
body:            |
  bb.0:
    ; GFX11-LABEL: name: partial_forwarding_1_hazard
    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $exec = S_MOV_B64 -1
    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX11-NEXT: S_ENDPGM 0
    ;
    ; GFX12-LABEL: name: partial_forwarding_1_hazard
    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $exec = S_MOV_B64 -1
    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX12-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_2_hazard
body:            |
  bb.0:
    ; GFX11-LABEL: name: partial_forwarding_2_hazard
    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $sgpr0 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr1 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr2 = S_MOV_B32 0
    ; GFX11-NEXT: $exec = S_MOV_B64 -1
    ; GFX11-NEXT: $sgpr3 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr4 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr5 = S_MOV_B32 0
    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $sgpr6 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr7 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr8 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr9 = S_MOV_B32 0
    ; GFX11-NEXT: $sgpr10 = S_MOV_B32 0
    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX11-NEXT: S_ENDPGM 0
    ;
    ; GFX12-LABEL: name: partial_forwarding_2_hazard
    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $sgpr0 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr1 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr2 = S_MOV_B32 0
    ; GFX12-NEXT: $exec = S_MOV_B64 -1
    ; GFX12-NEXT: $sgpr3 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr4 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr5 = S_MOV_B32 0
    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $sgpr6 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr7 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr8 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr9 = S_MOV_B32 0
    ; GFX12-NEXT: $sgpr10 = S_MOV_B32 0
    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX12-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $sgpr0 = S_MOV_B32 0
    $sgpr1 = S_MOV_B32 0
    $sgpr2 = S_MOV_B32 0
    $exec = S_MOV_B64 -1
    $sgpr3 = S_MOV_B32 0
    $sgpr4 = S_MOV_B32 0
    $sgpr5 = S_MOV_B32 0
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $sgpr6 = S_MOV_B32 0
    $sgpr7 = S_MOV_B32 0
    $sgpr8 = S_MOV_B32 0
    $sgpr9 = S_MOV_B32 0
    $sgpr10 = S_MOV_B32 0
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_3_hazard
body:            |
  bb.0:
    ; GFX11-LABEL: name: partial_forwarding_3_hazard
    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $exec = S_MOV_B64 -1
    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX11-NEXT: S_ENDPGM 0
    ;
    ; GFX12-LABEL: name: partial_forwarding_3_hazard
    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $exec = S_MOV_B64 -1
    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX12-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_3_no_hazard_1
body:            |
  bb.0:
    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_1
    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $exec = S_MOV_B64 -1
    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GCN-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_3_no_hazard_2
body:            |
  bb.0:
    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_2
    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $exec = S_MOV_B64 -1
    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GCN-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_3_no_hazard_3
body:            |
  bb.0:
    ; GCN-LABEL: name: partial_forwarding_3_no_hazard_3
    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $exec = S_MOV_B64 -1
    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GCN-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr20 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_4_hazard
body:            |
  bb.0:
    ; GFX11-LABEL: name: partial_forwarding_4_hazard
    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $exec = S_MOV_B64 -1
    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX11-NEXT: S_ENDPGM 0
    ;
    ; GFX12-LABEL: name: partial_forwarding_4_hazard
    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $exec = S_MOV_B64 -1
    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX12-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_4_no_hazard
body:            |
  bb.0:
    ; GCN-LABEL: name: partial_forwarding_4_no_hazard
    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $exec = S_MOV_B64 -1
    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GCN-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr21 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_5_hazard
body:            |
  bb.0:
    ; GFX11-LABEL: name: partial_forwarding_5_hazard
    ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $exec = S_MOV_B64 -1
    ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095
    ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX11-NEXT: S_ENDPGM 0
    ;
    ; GFX12-LABEL: name: partial_forwarding_5_hazard
    ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $exec = S_MOV_B64 -1
    ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GFX12-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_5_no_hazard
body:            |
  bb.0:
    ; GCN-LABEL: name: partial_forwarding_5_no_hazard
    ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $exec = S_MOV_B64 -1
    ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    ; GCN-NEXT: S_ENDPGM 0
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr21 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_branching_1a
body:            |
  ; GFX11-LABEL: name: partial_forwarding_branching_1a
  ; GFX11: bb.0:
  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $exec = S_MOV_B64 -1
  ; GFX11-NEXT:   S_BRANCH %bb.2
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT: bb.1:
  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   S_BRANCH %bb.2
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT: bb.2:
  ; GFX11-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   S_WAITCNT_DEPCTR 4095
  ; GFX11-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
  ; GFX11-NEXT:   S_ENDPGM 0
  ;
  ; GFX12-LABEL: name: partial_forwarding_branching_1a
  ; GFX12: bb.0:
  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $exec = S_MOV_B64 -1
  ; GFX12-NEXT:   S_BRANCH %bb.2
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT: bb.1:
  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   S_BRANCH %bb.2
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT: bb.2:
  ; GFX12-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
  ; GFX12-NEXT:   S_ENDPGM 0
  bb.0:
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    S_BRANCH %bb.2
  bb.1:
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr30 = V_MOV_B32_e32 0, implicit $exec
    $vgpr31 = V_MOV_B32_e32 0, implicit $exec
    S_BRANCH %bb.2
  bb.2:
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...

---
name:            partial_forwarding_branching_1b
body:            |
  ; GFX11-LABEL: name: partial_forwarding_branching_1b
  ; GFX11: bb.0:
  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   S_BRANCH %bb.2
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT: bb.1:
  ; GFX11-NEXT:   successors: %bb.2(0x80000000)
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $exec = S_MOV_B64 -1
  ; GFX11-NEXT:   S_BRANCH %bb.2
  ; GFX11-NEXT: {{  $}}
  ; GFX11-NEXT: bb.2:
  ; GFX11-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
  ; GFX11-NEXT:   S_WAITCNT_DEPCTR 4095
  ; GFX11-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
  ; GFX11-NEXT:   S_ENDPGM 0
  ;
  ; GFX12-LABEL: name: partial_forwarding_branching_1b
  ; GFX12: bb.0:
  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr30 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr31 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   S_BRANCH %bb.2
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT: bb.1:
  ; GFX12-NEXT:   successors: %bb.2(0x80000000)
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $exec = S_MOV_B64 -1
  ; GFX12-NEXT:   S_BRANCH %bb.2
  ; GFX12-NEXT: {{  $}}
  ; GFX12-NEXT: bb.2:
  ; GFX12-NEXT:   $vgpr10 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr11 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr1 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr12 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr13 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr14 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr15 = V_MOV_B32_e32 0, implicit $exec
  ; GFX12-NEXT:   $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
  ; GFX12-NEXT:   S_ENDPGM 0
  bb.0:
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $vgpr30 = V_MOV_B32_e32 0, implicit $exec
    $vgpr31 = V_MOV_B32_e32 0, implicit $exec
    S_BRANCH %bb.2
  bb.1:
    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
    $exec = S_MOV_B64 -1
    S_BRANCH %bb.2
  bb.2:
    $vgpr10 = V_MOV_B32_e32 0, implicit $exec
    $vgpr11 = V_MOV_B32_e32 0, implicit $exec
    $vgpr1 = V_MOV_B32_e32 0, implicit $exec
    $vgpr12 = V_MOV_B32_e32 0, implicit $exec
    $vgpr13 = V_MOV_B32_e32 0, implicit $exec
    $vgpr14 = V_MOV_B32_e32 0, implicit $exec
    $vgpr15 = V_MOV_B32_e32 0, implicit $exec
    $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec
    S_ENDPGM 0
...