diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-26 00:50:21 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-26 00:50:21 +0800 |
| commit | d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7 (patch) | |
| tree | 422b1c96cefaf0315a73ad8328ffe0d6e578fe9f /backend/lib/CodeGen/LiveVariables.cpp | |
| parent | 73ff142aa16a29c18d09564f0b7e41940fcf786c (diff) | |
| download | rcc-project-d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7.tar.gz rcc-project-d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7.tar.xz | |
[CodeGen] Implement reaching-def analysis printing
Diffstat (limited to 'backend/lib/CodeGen/LiveVariables.cpp')
| -rw-r--r-- | backend/lib/CodeGen/LiveVariables.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/backend/lib/CodeGen/LiveVariables.cpp b/backend/lib/CodeGen/LiveVariables.cpp index 601fd05..3c91cfb 100644 --- a/backend/lib/CodeGen/LiveVariables.cpp +++ b/backend/lib/CodeGen/LiveVariables.cpp @@ -9,6 +9,7 @@ #include "rcc/CodeGen/MachineInstr.h" #include "rcc/CodeGen/MachineOperand.h" #include "rcc/CodeGen/MachineRegisterInfo.h" +#include "rcc/CodeGen/ReachingDefAnalysis.h" #include "rcc/CodeGen/RegisterMask.h" #include "rcc/CodeGen/SlotIndexes.h" #include "rcc/CodeGen/TargetDescription.h" @@ -992,6 +993,7 @@ Expected<void> registerStage11MachineAnalyses(MachineFunctionAnalysisManager &An MachineFunctionAnalysisManager::id<LiveVariablesAnalysis>(), MachineFunctionAnalysisManager::id<LiveIntervalsAnalysis>(), MachineFunctionAnalysisManager::id<VirtRegMapAnalysis>(), + MachineFunctionAnalysisManager::id<ReachingDefAnalysis>(), }; const std::size_t Registered = static_cast<std::size_t>( std::ranges::count_if(IDs, [&Analyses](AnalysisID ID) { return Analyses.isRegistered(ID); })); @@ -1043,6 +1045,17 @@ Expected<void> registerStage11MachineAnalyses(MachineFunctionAnalysisManager &An }); if (!Mapping) return std::unexpected(Mapping.error()); + auto ReachingDefinitions = Staging.registerAnalysis<ReachingDefAnalysis>({ + .Name = "ReachingDefAnalysis", + .Dependencies = {}, + .InvalidatedBy = {MachinePassChange::Instructions, MachinePassChange::Operands, + MachinePassChange::Registers, MachinePassChange::CFG, + MachinePassChange::BlockLayout, MachinePassChange::Frame, + MachinePassChange::TargetState}, + .ThreadSafety = PassThreadSafety::ThreadSafe, + }); + if (!ReachingDefinitions) + return std::unexpected(ReachingDefinitions.error()); return Analyses.replaceRegistrations(std::move(Staging)); } |
