From d54646c69a5117cbeef35f5c3f0d546f4c6bf0e7 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 26 Aug 2026 00:50:21 +0800 Subject: [CodeGen] Implement reaching-def analysis printing --- backend/lib/Tooling/PipelineDriver.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'backend/lib/Tooling/PipelineDriver.cpp') 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 @@ -121,6 +122,14 @@ struct FunctionRunResult final { return std::nullopt; } +[[nodiscard]] Expected> +createNamedMachinePass(std::string_view Name, const riscv::RISCVSubtarget &Subtarget, + riscv::RISCVPipelineOptions Options = {}) { + if (Name == mir::ReachingDefPrinterPass::name()) + return std::make_unique(); + return riscv::createCanonicalPipelinePass(Name, Subtarget, Options); +} + [[nodiscard]] Expected 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()); } -- cgit v1.2.3