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/Tooling/PipelineDriver.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/Tooling/PipelineDriver.cpp')
| -rw-r--r-- | backend/lib/Tooling/PipelineDriver.cpp | 13 |
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()); } |
