-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[MachineScheduler][RISCV] Release the pending queue base on condition #125468
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
b942cc2
[MachineScheduler][RISCV] Release the pending queue base on condition
BeMg e7f9eee
fixup! Update comment
BeMg 7d055c1
fixup! add line
BeMg c8177f9
fixup! consider ReadyListLimit in bumpCycleUntilReleaseSUFromPending
BeMg 8c496e4
fixup! need -> should
BeMg 9d90fd8
fixup! update format
BeMg 17e19f0
fixup! drop pending.empty()
BeMg 900ac8d
fixup! early return when doesn't has VInstruction
BeMg 6db2bfd
fixup! add early exit to shouldReleaseSUFromPendingQueue
BeMg 01722cb
fixup! make threshold as cl:opt
BeMg 99a5428
fixup! Use RISCV::RegisterPressureSets idx directly
BeMg 7beccdc
fixup! add const
BeMg fdc6207
Update llvm/lib/CodeGen/MachineScheduler.cpp
BeMg 07386a8
fixup! releasePending -> ReleasePending
BeMg 9a9dea6
fixup! Add comment on bumpCycleUntilReleaseSUFromPending
BeMg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,6 +37,18 @@ static cl::opt<bool> | |
cl::desc("Disable two address hints for register " | ||
"allocation")); | ||
|
||
static cl::opt<unsigned> RVVReleasePendingPressureThreshold( | ||
"riscv-release-pending-queue-rvv-pressure-threshold", cl::Hidden, | ||
cl::desc("Release pending queue when vector register pressure exceeds " | ||
"threshold"), | ||
cl::init(7)); | ||
|
||
static cl::opt<int> UnitIncRVVRegPressureThreshold( | ||
"riscv-release-pending-queue-unit-inc-rvv-pressure-threshold", cl::Hidden, | ||
cl::desc("Release pending queue when vector register unit pressure " | ||
"increase exceeds threshold"), | ||
cl::init(-3)); | ||
|
||
static_assert(RISCV::X1 == RISCV::X0 + 1, "Register list not consecutive"); | ||
static_assert(RISCV::X31 == RISCV::X0 + 31, "Register list not consecutive"); | ||
static_assert(RISCV::F1_H == RISCV::F0_H + 1, "Register list not consecutive"); | ||
|
@@ -954,3 +966,47 @@ bool RISCVRegisterInfo::getRegAllocationHints( | |
|
||
return BaseImplRetVal; | ||
} | ||
|
||
static bool isRVVPressureSetIdx(unsigned Idx) { | ||
const static std::vector<unsigned> RVVPressureSetIndices = { | ||
RISCV::RegisterPressureSets::VRM8NoV0, RISCV::RegisterPressureSets::VM}; | ||
|
||
return llvm::find(RVVPressureSetIndices, Idx) != RVVPressureSetIndices.end(); | ||
} | ||
|
||
bool RISCVRegisterInfo::shouldReleasePendingQueue( | ||
MachineFunction &MF, ArrayRef<unsigned> MaxSetPressure) const { | ||
|
||
if (!MF.getSubtarget<RISCVSubtarget>().hasVInstructions()) | ||
return false; | ||
|
||
for (unsigned Idx = 0; Idx < MaxSetPressure.size(); Idx++) { | ||
BeMg marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// Consider only the RVV Register, as RVV spilling/reloading has higher | ||
// potential costs than hazards. | ||
if (!isRVVPressureSetIdx(Idx)) | ||
continue; | ||
if (MaxSetPressure[Idx] + RVVReleasePendingPressureThreshold > | ||
getRegPressureSetLimit(MF, Idx)) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
bool RISCVRegisterInfo::shouldReleaseSUFromPendingQueue( | ||
MachineFunction &MF, ArrayRef<unsigned> PSetID, | ||
ArrayRef<int> UnitInc) const { | ||
|
||
if (!MF.getSubtarget<RISCVSubtarget>().hasVInstructions()) | ||
return false; | ||
|
||
for (unsigned Idx = 0; Idx < PSetID.size(); Idx++) { | ||
// Consider only the RVV Register, as RVV spilling/reloading has higher | ||
// potential costs than hazards. | ||
if (!isRVVPressureSetIdx(PSetID[Idx])) | ||
continue; | ||
if (UnitInc[Idx] < UnitIncRVVRegPressureThreshold) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does both TopDown and BottomUp have the same threshold? IIRC, they have different computations of register pressure so the threshold may be different? |
||
return true; | ||
} | ||
return false; | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.