blob: 9b7411d98dc752b44b9d521d874464db3be8291e [file] [edit]
# RUN: llc -mtriple=amdgpu9.50-amd-amdhsa -passes='greedy<wwm>' \
# RUN: -stress-regalloc=3 -verify-regalloc -o - %s | FileCheck %s
#
# InlineSpiller tries to hoist the spill of %1 by storing its sibling %0 after
# the basic block prologue. Extending the PHI-defined %0 to that insertion point
# would overlap an interval already assigned to the same physical register.
# Reject the hoist and spill %0 at the original copy instead.
# CHECK-LABEL: name: hoist_spill_live_range_interference
# CHECK: bb.2:
# CHECK: SI_SPILL_WWM_V32_SAVE %0
# CHECK-NEXT: $exec = S_AND_B64
---
name: hoist_spill_live_range_interference
tracksRegLiveness: true
machineFunctionInfo:
stackPtrOffsetReg: '$sgpr32'
registers:
- { id: 0, class: vgpr_32, flags: [ WWM_REG ], split-from: '%2' }
- { id: 1, class: vgpr_32, flags: [ WWM_REG ], split-from: '%2' }
- { id: 2, class: vgpr_32, flags: [ WWM_REG ] }
- { id: 3, class: vgpr_32, flags: [ WWM_REG ] }
- { id: 4, class: vgpr_32, flags: [ WWM_REG ] }
body: |
bb.0:
successors: %bb.1, %bb.2
liveins: $scc
%2:vgpr_32 = KILL
%0:vgpr_32 = COPY %2
S_CBRANCH_SCC1 %bb.2, implicit $scc
bb.1:
successors: %bb.2
%0:vgpr_32 = COPY %2
bb.2:
%1:vgpr_32 = lr-split WWM_COPY %0:vgpr_32
$exec = S_AND_B64 $exec, $exec, implicit-def $scc
%3:vgpr_32 = IMPLICIT_DEF
%4:vgpr_32 = IMPLICIT_DEF
KILL %2:vgpr_32, %3:vgpr_32, %4:vgpr_32
KILL %1:vgpr_32, %2:vgpr_32
S_ENDPGM 0
...