aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/RegAllocBasic.cpp
diff options
context:
space:
mode:
authorMircea Trofin <mtrofin@google.com>2022-02-03 09:07:42 -0800
committerMircea Trofin <mtrofin@google.com>2022-02-03 12:35:36 -0800
commit592f52de33040630472bb49b6ed6be434d2b95e6 (patch)
treeaab04345801b81514a479e7a72472c80f80831ce /llvm/lib/CodeGen/RegAllocBasic.cpp
parent9fa3243ffc6f81b15709dba69526404eb442f5ac (diff)
downloadllvm-592f52de33040630472bb49b6ed6be434d2b95e6.zip
llvm-592f52de33040630472bb49b6ed6be434d2b95e6.tar.gz
llvm-592f52de33040630472bb49b6ed6be434d2b95e6.tar.bz2
[nfc][regalloc] const LiveIntervals within the allocator
Once built, LiveIntervals are immutable. This patch captures that. Differential Revision: https://reviews.llvm.org/D118918
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocBasic.cpp')
-rw-r--r--llvm/lib/CodeGen/RegAllocBasic.cpp30
1 files changed, 15 insertions, 15 deletions
diff --git a/llvm/lib/CodeGen/RegAllocBasic.cpp b/llvm/lib/CodeGen/RegAllocBasic.cpp
index a9816b1..e67ebae 100644
--- a/llvm/lib/CodeGen/RegAllocBasic.cpp
+++ b/llvm/lib/CodeGen/RegAllocBasic.cpp
@@ -45,7 +45,7 @@ static RegisterRegAlloc basicRegAlloc("basic", "basic register allocator",
namespace {
struct CompSpillWeight {
- bool operator()(LiveInterval *A, LiveInterval *B) const {
+ bool operator()(const LiveInterval *A, const LiveInterval *B) const {
return A->weight() < B->weight();
}
};
@@ -65,8 +65,9 @@ class RABasic : public MachineFunctionPass,
// state
std::unique_ptr<Spiller> SpillerInstance;
- std::priority_queue<LiveInterval*, std::vector<LiveInterval*>,
- CompSpillWeight> Queue;
+ std::priority_queue<const LiveInterval *, std::vector<const LiveInterval *>,
+ CompSpillWeight>
+ Queue;
// Scratch space. Allocated here to avoid repeated malloc calls in
// selectOrSplit().
@@ -88,19 +89,17 @@ public:
Spiller &spiller() override { return *SpillerInstance; }
- void enqueueImpl(LiveInterval *LI) override {
- Queue.push(LI);
- }
+ void enqueueImpl(const LiveInterval *LI) override { Queue.push(LI); }
- LiveInterval *dequeue() override {
+ const LiveInterval *dequeue() override {
if (Queue.empty())
return nullptr;
- LiveInterval *LI = Queue.top();
+ const LiveInterval *LI = Queue.top();
Queue.pop();
return LI;
}
- MCRegister selectOrSplit(LiveInterval &VirtReg,
+ MCRegister selectOrSplit(const LiveInterval &VirtReg,
SmallVectorImpl<Register> &SplitVRegs) override;
/// Perform register allocation.
@@ -119,7 +118,7 @@ public:
// Helper for spilling all live virtual registers currently unified under preg
// that interfere with the most recently queried lvr. Return true if spilling
// was successful, and append any new spilled/split intervals to splitLVRs.
- bool spillInterferences(LiveInterval &VirtReg, MCRegister PhysReg,
+ bool spillInterferences(const LiveInterval &VirtReg, MCRegister PhysReg,
SmallVectorImpl<Register> &SplitVRegs);
static char ID;
@@ -208,16 +207,17 @@ void RABasic::releaseMemory() {
// Spill or split all live virtual registers currently unified under PhysReg
// that interfere with VirtReg. The newly spilled or split live intervals are
// returned by appending them to SplitVRegs.
-bool RABasic::spillInterferences(LiveInterval &VirtReg, MCRegister PhysReg,
+bool RABasic::spillInterferences(const LiveInterval &VirtReg,
+ MCRegister PhysReg,
SmallVectorImpl<Register> &SplitVRegs) {
// Record each interference and determine if all are spillable before mutating
// either the union or live intervals.
- SmallVector<LiveInterval*, 8> Intfs;
+ SmallVector<const LiveInterval *, 8> Intfs;
// Collect interferences assigned to any alias of the physical register.
for (MCRegUnitIterator Units(PhysReg, TRI); Units.isValid(); ++Units) {
LiveIntervalUnion::Query &Q = Matrix->query(VirtReg, *Units);
- for (auto *Intf : reverse(Q.interferingVRegs())) {
+ for (const auto *Intf : reverse(Q.interferingVRegs())) {
if (!Intf->isSpillable() || Intf->weight() > VirtReg.weight())
return false;
Intfs.push_back(Intf);
@@ -229,7 +229,7 @@ bool RABasic::spillInterferences(LiveInterval &VirtReg, MCRegister PhysReg,
// Spill each interfering vreg allocated to PhysReg or an alias.
for (unsigned i = 0, e = Intfs.size(); i != e; ++i) {
- LiveInterval &Spill = *Intfs[i];
+ const LiveInterval &Spill = *Intfs[i];
// Skip duplicates.
if (!VRM->hasPhys(Spill.reg()))
@@ -258,7 +258,7 @@ bool RABasic::spillInterferences(LiveInterval &VirtReg, MCRegister PhysReg,
// |vregs| * |machineregs|. And since the number of interference tests is
// minimal, there is no value in caching them outside the scope of
// selectOrSplit().
-MCRegister RABasic::selectOrSplit(LiveInterval &VirtReg,
+MCRegister RABasic::selectOrSplit(const LiveInterval &VirtReg,
SmallVectorImpl<Register> &SplitVRegs) {
// Populate a list of physical register spill candidates.
SmallVector<MCRegister, 8> PhysRegSpillCands;