From 3341938bb644e6fc39afa6a8fcb1306604999e42 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 12 Aug 2026 22:37:49 +0800 Subject: [RISCV] Split the GlobalISel target components --- backend/lib/Target/RISCV/RISCVPipeline.cpp | 40 +++++++++++++----------------- 1 file changed, 17 insertions(+), 23 deletions(-) (limited to 'backend/lib/Target/RISCV/RISCVPipeline.cpp') diff --git a/backend/lib/Target/RISCV/RISCVPipeline.cpp b/backend/lib/Target/RISCV/RISCVPipeline.cpp index 7c778ea..5212838 100644 --- a/backend/lib/Target/RISCV/RISCVPipeline.cpp +++ b/backend/lib/Target/RISCV/RISCVPipeline.cpp @@ -2,6 +2,8 @@ #include "rcc/Target/RISCV/RISCVPipeline.h" +#include "GISel/RISCVRegisterBankInfo.h" +#include "RISCV.h" #include "RISCVInstrInfo.h" #include "rcc/CodeGen/GlobalISel/InstructionSelect.h" #include "rcc/CodeGen/GlobalISel/Legalizer.h" @@ -12,7 +14,6 @@ #include "rcc/CodeGen/MachineSSAExit.h" #include "rcc/CodeGen/RegAllocPBQP.h" #include "rcc/CodeGen/TargetDescription.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" #include #include @@ -30,18 +31,18 @@ template } [[nodiscard]] Expected addInitialPipeline(MachinePassManager &Pipeline, - RISCVSubtargetFeatures Features) { + const RISCVSubtarget &Subtarget) { auto Added = addPass(Pipeline, machineCombinerInfo(), MachineCombinerStage::PreLegalizer); if (!Added) return std::unexpected(Added.error()); - Added = addPass(Pipeline, createLegalizerInfo(Features)); + Added = addPass(Pipeline, Subtarget.getLegalizerInfo()); if (!Added) return std::unexpected(Added.error()); - Added = addPass(Pipeline, registerBankInfo()); + Added = addPass(Pipeline, Subtarget.getRegBankInfo()); if (!Added) return std::unexpected(Added.error()); - return addPass(Pipeline, instructionSelector()); + return addPass(Pipeline, Subtarget.getInstructionSelector()); } [[nodiscard]] Expected addSSAExitPipeline(MachinePassManager &Pipeline) { @@ -62,8 +63,8 @@ template } [[nodiscard]] Expected addCompleteRegistry(MachinePassManager &Pipeline, - RISCVSubtargetFeatures Features) { - auto Added = addInitialPipeline(Pipeline, Features); + const RISCVSubtarget &Subtarget) { + auto Added = addInitialPipeline(Pipeline, Subtarget); if (!Added) return std::unexpected(Added.error()); Added = addSSAExitPipeline(Pipeline); @@ -77,28 +78,24 @@ template } // namespace -Expected addCanonicalPipeline(MachinePassManager &Pipeline, const MachineFunction &Function) { - return addCanonicalPipeline(Pipeline, Function, RISCVSubtargetFeatures::rv64gc()); -} - Expected addCanonicalPipeline(MachinePassManager &Pipeline, const MachineFunction &Function, - RISCVSubtargetFeatures Features) { + const RISCVSubtarget &Subtarget) { if (!Function.properties().has(MachineFunctionProperty::Legalized)) { auto Added = addPass(Pipeline, machineCombinerInfo(), MachineCombinerStage::PreLegalizer); if (!Added) return std::unexpected(Added.error()); - Added = addPass(Pipeline, createLegalizerInfo(Features)); + Added = addPass(Pipeline, Subtarget.getLegalizerInfo()); if (!Added) return std::unexpected(Added.error()); } if (!Function.properties().has(MachineFunctionProperty::RegBankSelected)) { - auto Added = addPass(Pipeline, registerBankInfo()); + auto Added = addPass(Pipeline, Subtarget.getRegBankInfo()); if (!Added) return std::unexpected(Added.error()); } if (!Function.properties().has(MachineFunctionProperty::Selected)) { - auto Added = addPass(Pipeline, instructionSelector()); + auto Added = addPass(Pipeline, Subtarget.getInstructionSelector()); if (!Added) return std::unexpected(Added.error()); } @@ -130,16 +127,12 @@ Expected addCanonicalPipeline(MachinePassManager &Pipeline, const MachineF return {}; } -Expected> createCanonicalPipelinePass(std::string_view Name) { - return createCanonicalPipelinePass(Name, RISCVSubtargetFeatures::rv64gc()); -} - Expected> -createCanonicalPipelinePass(std::string_view Name, RISCVSubtargetFeatures Features) { +createCanonicalPipelinePass(std::string_view Name, const RISCVSubtarget &Subtarget) { if (Name.empty()) return makeUnexpected(ErrorCode::InvalidArgument, "pipeline pass name cannot be empty"); MachinePassManager Registry; - auto Added = addCompleteRegistry(Registry, Features); + auto Added = addCompleteRegistry(Registry, Subtarget); if (!Added) return std::unexpected(Added.error()); MachinePassManager::PassList Passes = std::move(Registry).takePasses(); @@ -153,9 +146,10 @@ createCanonicalPipelinePass(std::string_view Name, RISCVSubtargetFeatures Featur return std::move(*Position); } -Expected> canonicalPipelinePassNames(const MachineFunction &Function) { +Expected> canonicalPipelinePassNames(const MachineFunction &Function, + const RISCVSubtarget &Subtarget) { MachinePassManager Pipeline; - auto Added = addCanonicalPipeline(Pipeline, Function); + auto Added = addCanonicalPipeline(Pipeline, Function, Subtarget); if (!Added) return std::unexpected(Added.error()); MachinePassManager::PassList Passes = std::move(Pipeline).takePasses(); -- cgit v1.2.3