| # 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 |
| |
| ... |