llvm/llvm/test/CodeGen/AMDGPU/shrink-v-cmp-wave32-dead-vcc-lo.mir

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
# RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=si-shrink-instructions -mcpu=gfx1100 -o - %s | FileCheck %s

# Make sure there's no crash when shrinking a v_cmp on a wave32 target
# when the def is dead. Previously the vcc implicit def wasn't
# properly replaced with vcc_lo, so the expected implicit operand was
# not found in the shrunk instruction.

---
name:            shrink_v_cmp_vcc_lo_dead
tracksRegLiveness: true
tracksDebugUserValues: true
frameInfo:
  maxAlignment:    1
  maxCallFrameSize: 0
  isCalleeSavedInfoValid: true
machineFunctionInfo:
  maxKernArgAlign: 1
  stackPtrOffsetReg: '$sgpr32'
body:             |
  bb.0:
    liveins: $vgpr0, $vgpr1
    ; CHECK-LABEL: name: shrink_v_cmp_vcc_lo_dead
    ; CHECK: liveins: $vgpr0, $vgpr1
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: V_CMP_LT_U32_e32 $vgpr0, $vgpr1, implicit-def dead $vcc_lo, implicit $exec
    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31
    dead renamable $vcc_lo = V_CMP_LT_U32_e64 $vgpr0, $vgpr1, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31

...

---
name:            shrink_v_cmp_vcc_lo_live
tracksRegLiveness: true
tracksDebugUserValues: true
frameInfo:
  maxAlignment:    1
  maxCallFrameSize: 0
  isCalleeSavedInfoValid: true
machineFunctionInfo:
  maxKernArgAlign: 1
  stackPtrOffsetReg: '$sgpr32'
body:             |
  bb.0:
    liveins: $vgpr0, $vgpr1
    ; CHECK-LABEL: name: shrink_v_cmp_vcc_lo_live
    ; CHECK: liveins: $vgpr0, $vgpr1
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: V_CMP_LT_U32_e32 $vgpr0, $vgpr1, implicit-def $vcc_lo, implicit $exec
    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vcc_lo
    renamable $vcc_lo = V_CMP_LT_U32_e64 $vgpr0, $vgpr1, implicit $exec
    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vcc_lo

...