aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Tooling/PipelineDriver.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-26 00:50:21 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-26 00:50:21 +0800
commitd54646c69a5117cbeef35f5c3f0d546f4c6bf0e7 (patch)
tree422b1c96cefaf0315a73ad8328ffe0d6e578fe9f /backend/lib/Tooling/PipelineDriver.cpp
parent73ff142aa16a29c18d09564f0b7e41940fcf786c (diff)
downloadrcc-project-d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7.tar.gz
rcc-project-d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7.tar.xz
[CodeGen] Implement reaching-def analysis printing
Diffstat (limited to 'backend/lib/Tooling/PipelineDriver.cpp')
-rw-r--r--backend/lib/Tooling/PipelineDriver.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/backend/lib/Tooling/PipelineDriver.cpp b/backend/lib/Tooling/PipelineDriver.cpp
index b247326..72c7dd2 100644
--- a/backend/lib/Tooling/PipelineDriver.cpp
+++ b/backend/lib/Tooling/PipelineDriver.cpp
@@ -9,6 +9,7 @@
#include "rcc/CodeGen/MachineOutliner.h"
#include "rcc/CodeGen/MachineStripDebug.h"
#include "rcc/CodeGen/MachineVerifier.h"
+#include "rcc/MIR/ReachingDefPrinter.h"
#include "rcc/Target/RISCV/RISCVPipeline.h"
#include <algorithm>
@@ -121,6 +122,14 @@ struct FunctionRunResult final {
return std::nullopt;
}
+[[nodiscard]] Expected<std::unique_ptr<MachineFunctionPass>>
+createNamedMachinePass(std::string_view Name, const riscv::RISCVSubtarget &Subtarget,
+ riscv::RISCVPipelineOptions Options = {}) {
+ if (Name == mir::ReachingDefPrinterPass::name())
+ return std::make_unique<mir::ReachingDefPrinterPass>();
+ return riscv::createCanonicalPipelinePass(Name, Subtarget, Options);
+}
+
[[nodiscard]] Expected<MachineFunctionPassManager::PassList>
createPasses(const MachineFunction &Function, const BackendInvocation &Invocation,
const riscv::RISCVSubtarget &Subtarget, MachinePassManagerOptions Options) {
@@ -156,7 +165,7 @@ createPasses(const MachineFunction &Function, const BackendInvocation &Invocatio
const bool UseTargetCopyInstructions =
TargetCopyOption != Invocation.TargetOptions.end() && TargetCopyOption->Value == "true";
for (const std::string &Name : Invocation.PassPipeline) {
- auto Pass = riscv::createCanonicalPipelinePass(
+ auto Pass = createNamedMachinePass(
Name, Subtarget,
riscv::RISCVPipelineOptions{.Optimization = Invocation.Optimization,
.UseTargetCopyInstructions = UseTargetCopyInstructions,
@@ -183,7 +192,7 @@ createPasses(const MachineFunction &Function, const BackendInvocation &Invocatio
if (Name.empty())
return makeUnexpected(ErrorCode::InvalidInvocation, "empty pipeline pass selector");
if (Name != "machine-outliner") {
- auto Pass = riscv::createCanonicalPipelinePass(Name, Subtarget);
+ auto Pass = createNamedMachinePass(Name, Subtarget);
if (!Pass)
return std::unexpected(Pass.error());
}