[llvm] eec183c - [nfc] Refactor SlotIndex::getInstrDistance to better reflect actual functionality
Aiden Grossman via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 12 16:33:55 PDT 2022
Author: Aiden Grossman
Date: 2022-09-12T23:33:35Z
New Revision: eec183c171c271578ebd7ee35eafb5ef0ae29298
URL: https://github.com/llvm/llvm-project/commit/eec183c171c271578ebd7ee35eafb5ef0ae29298
DIFF: https://github.com/llvm/llvm-project/commit/eec183c171c271578ebd7ee35eafb5ef0ae29298.diff
LOG: [nfc] Refactor SlotIndex::getInstrDistance to better reflect actual functionality
This patch refactors SlotIndex::getInstrDistance to
SlotIndex::getApproxInstrDistance to better describe the actual
functionality of this function. This patch also adds in some additional
comments better documenting the assumptions that this function makes to
increase clarity.
Based on discussion on the LLVM Discourse:
https://discourse.llvm.org/t/odd-behavior-in-slotindex-getinstrdistance/64934/5
Reviewed By: mtrofin, foad
Differential Revision: https://reviews.llvm.org/D133386
Added:
Modified:
llvm/include/llvm/CodeGen/SlotIndexes.h
llvm/lib/CodeGen/RegAllocGreedy.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/SlotIndexes.h b/llvm/include/llvm/CodeGen/SlotIndexes.h
index 942a47c6cc7d..5df6520f7cf6 100644
--- a/llvm/include/llvm/CodeGen/SlotIndexes.h
+++ b/llvm/include/llvm/CodeGen/SlotIndexes.h
@@ -215,8 +215,12 @@ class raw_ostream;
}
/// Return the scaled distance from this index to the given one, where all
- /// slots on the same instruction have zero distance.
- int getInstrDistance(SlotIndex other) const {
+ /// slots on the same instruction have zero distance, assuming that the slot
+ /// indices are packed as densely as possible. There are normally gaps
+ /// between instructions, so this assumption often doesn't hold. This
+ /// results in this function often returning a value greater than the actual
+ /// instruction distance.
+ int getApproxInstrDistance(SlotIndex other) const {
return (other.listEntry()->getIndex() - listEntry()->getIndex())
/ Slot_Count;
}
diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp
index 8c412b2aeb12..dd6e20558b16 100644
--- a/llvm/lib/CodeGen/RegAllocGreedy.cpp
+++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp
@@ -330,12 +330,12 @@ unsigned DefaultPriorityAdvisor::getPriority(const LiveInterval &LI) const {
// are singly defined, this produces optimal coloring in the absence of
// global interference and other constraints.
if (!ReverseLocalAssignment)
- Prio = LI.beginIndex().getInstrDistance(Indexes->getLastIndex());
+ Prio = LI.beginIndex().getApproxInstrDistance(Indexes->getLastIndex());
else {
// Allocating bottom up may allow many short LRGs to be assigned first
// to one of the cheap registers. This could be much faster for very
// large blocks on targets with many physical registers.
- Prio = Indexes->getZeroIndex().getInstrDistance(LI.endIndex());
+ Prio = Indexes->getZeroIndex().getApproxInstrDistance(LI.endIndex());
}
} else {
// Allocate global and split ranges in long->short order. Long ranges that
More information about the llvm-commits
mailing list