aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/MachinePass.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-09 04:40:17 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-09 04:40:17 +0800
commite5fdceb9b869f010a2a75638fd38aaf1867f3008 (patch)
tree023d3e18960956f5ce369739c68aaa2a3e8400e7 /backend/lib/CodeGen/MachinePass.cpp
parent6c7cecc81a4c7e06e26027e21edd2cfd95a37a0b (diff)
downloadrcc-project-e5fdceb9b869f010a2a75638fd38aaf1867f3008.tar.gz
rcc-project-e5fdceb9b869f010a2a75638fd38aaf1867f3008.tar.xz
[CodeGen] Complete register allocation infrastructure
Diffstat (limited to 'backend/lib/CodeGen/MachinePass.cpp')
-rw-r--r--backend/lib/CodeGen/MachinePass.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/backend/lib/CodeGen/MachinePass.cpp b/backend/lib/CodeGen/MachinePass.cpp
index e6dccd0..ae69b1c 100644
--- a/backend/lib/CodeGen/MachinePass.cpp
+++ b/backend/lib/CodeGen/MachinePass.cpp
@@ -20,6 +20,7 @@
#include <memory>
#include <optional>
#include <ranges>
+#include <set>
#include <string>
#include <string_view>
#include <thread>
@@ -164,8 +165,9 @@ MachineAnalysisManager::registerAnalysisImpl(MachineAnalysisRegistration Registr
return makeUnexpected(ErrorCode::InvalidArgument,
"machine analysis name is already registered");
}
- Registry.emplace(Registration.ID, RegisteredAnalysis{std::move(Registration), std::move(Runner),
- std::move(Invalidator)});
+ const AnalysisID RegistrationID = Registration.ID;
+ Registry.emplace(RegistrationID, RegisteredAnalysis{std::move(Registration), std::move(Runner),
+ std::move(Invalidator)});
return {};
}
@@ -287,7 +289,7 @@ void MachineAnalysisManager::invalidate(MachineFunction &Function,
if (FunctionPosition == Cache.end() || Preserved.preservesAll() || Changes.empty())
return;
- std::unordered_set<AnalysisID> Invalid;
+ std::set<AnalysisID> Invalid;
for (auto &[ID, Entry] : FunctionPosition->second) {
if (Preserved.preserves(ID))
continue;
@@ -406,8 +408,9 @@ Expected<void> CompilationUnitAnalysisManager::registerAnalysisImpl(
return makeUnexpected(ErrorCode::InvalidArgument,
"compilation-unit analysis name is already registered");
}
- Registry.emplace(Registration.ID, RegisteredAnalysis{std::move(Registration), std::move(Runner),
- std::move(Invalidator)});
+ const AnalysisID RegistrationID = Registration.ID;
+ Registry.emplace(RegistrationID, RegisteredAnalysis{std::move(Registration), std::move(Runner),
+ std::move(Invalidator)});
return {};
}
@@ -524,7 +527,7 @@ void CompilationUnitAnalysisManager::invalidate(CompilationUnit &Unit,
if (UnitPosition == Cache.end() || Preserved.preservesAll() || Changes.empty())
return;
- std::unordered_set<AnalysisID> Invalid;
+ std::set<AnalysisID> Invalid;
for (auto &[ID, Entry] : UnitPosition->second) {
if (Preserved.preserves(ID))
continue;
@@ -1238,10 +1241,10 @@ Expected<void> MachinePassManager::runFunctions(CompilationUnit &Unit,
for (std::size_t Index = 0; Index < FunctionCount; ++Index) {
if (Instrumentation != nullptr)
Instrumentation->replayBufferedEvents(EventBuffers[Index]);
- if (Failures[Index]) {
- return std::unexpected(
- prefixedError(*Failures[Index],
- "function '" + std::string(Unit.functionAt(Index)->name()) + "' failed: "));
+ const auto &Failure = Failures[Index];
+ if (Failure) {
+ return std::unexpected(prefixedError(
+ *Failure, "function '" + std::string(Unit.functionAt(Index)->name()) + "' failed: "));
}
}
return {};