Skip to content

Commit

Permalink
[AMDGPU] Track liveins for max-ilp-sched-strategy
Browse files Browse the repository at this point in the history
Even if optimizing for ILP, it is still useful to track RP to avoid spilling. Given that, we need to maintin consistent liveness state with the RP tracker. This patch makes RP tracking consistent by updating for liveins.

Otherwise, we should completely eliminate RP tracking for this scheduler (checkScheduling, initCandidate).

Differential Revision: https://reviews.llvm.org/D149358
  • Loading branch information
Jeffrey Byrnes authored and Jeffrey Byrnes committed Apr 27, 2023
1 parent ce861ec commit 7f0a881
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
3 changes: 2 additions & 1 deletion llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -872,7 +872,8 @@ void GCNSchedStage::setupNewBlock() {
DAG.startBlock(CurrentMBB);
// Get real RP for the region if it hasn't be calculated before. After the
// initial schedule stage real RP will be collected after scheduling.
if (StageID == GCNSchedStageID::OccInitialSchedule)
if (StageID == GCNSchedStageID::OccInitialSchedule ||
StageID == GCNSchedStageID::ILPInitialSchedule)
DAG.computeBlockPressure(RegionIdx, CurrentMBB);
}

Expand Down
33 changes: 33 additions & 0 deletions llvm/test/CodeGen/AMDGPU/schedule-ilp-liveness-tracking.mir
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-enable-max-ilp-scheduling-strategy -verify-machineinstrs -run-pass=machine-scheduler -verify-misched -o - %s | FileCheck %s

---
name: max-ilp-liveness-tracking
tracksRegLiveness: true
body: |
; CHECK-LABEL: name: max-ilp-liveness-tracking
; CHECK: bb.0:
; CHECK-NEXT: successors: %bb.1(0x80000000)
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: %src0:vgpr_32 = V_MOV_B32_e64 0, implicit $exec
; CHECK-NEXT: %src1:vgpr_32 = V_MOV_B32_e64 1, implicit $exec
; CHECK-NEXT: %live0:vgpr_32 = V_ADD_U32_e32 %src0, %src1, implicit $exec
; CHECK-NEXT: %live1:vgpr_32 = V_ADD_U32_e32 %live0, %src1, implicit $exec
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.1:
; CHECK-NEXT: %out0:vgpr_32 = V_ADD_U32_e32 %live0, %live1, implicit $exec
; CHECK-NEXT: dead %out1:vgpr_32 = V_ADD_U32_e32 %out0, %live1, implicit $exec
; CHECK-NEXT: S_ENDPGM 0
bb.0:
successors: %bb.1
%src0:vgpr_32 = V_MOV_B32_e64 0, implicit $exec
%src1:vgpr_32 = V_MOV_B32_e64 1, implicit $exec
%live0:vgpr_32 = V_ADD_U32_e32 %src0:vgpr_32, %src1:vgpr_32, implicit $exec
%live1:vgpr_32 = V_ADD_U32_e32 %live0:vgpr_32, %src1:vgpr_32, implicit $exec
bb.1:
%out0:vgpr_32 = V_ADD_U32_e32 %live0:vgpr_32, %live1:vgpr_32, implicit $exec
%out1:vgpr_32 = V_ADD_U32_e32 %out0:vgpr_32, %live1:vgpr_32, implicit $exec
S_ENDPGM 0
...

0 comments on commit 7f0a881

Please sign in to comment.