diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 19:36:06 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 19:36:06 +0800 |
| commit | b7716aba458fb3d49742f7a3c169deee7345396e (patch) | |
| tree | 85a8f99a8bd06e9dfbe6e7973c3440f2db7110af /backend/lib/Target/RISCV/RISCVPipeline.cpp | |
| parent | e7bf0d93d40ad86902d9a8636d24420b5abd2937 (diff) | |
| download | rcc-project-b7716aba458fb3d49742f7a3c169deee7345396e.tar.gz rcc-project-b7716aba458fb3d49742f7a3c169deee7345396e.tar.xz | |
[RISCV] Honor invocation subtarget features
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVPipeline.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVPipeline.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/backend/lib/Target/RISCV/RISCVPipeline.cpp b/backend/lib/Target/RISCV/RISCVPipeline.cpp index 8d05bba..05d26b3 100644 --- a/backend/lib/Target/RISCV/RISCVPipeline.cpp +++ b/backend/lib/Target/RISCV/RISCVPipeline.cpp @@ -25,8 +25,9 @@ template <typename PassT, typename... ArgumentT> return Pipeline.addPass(std::make_unique<PassT>(std::forward<ArgumentT>(Arguments)...)); } -[[nodiscard]] Expected<void> addInitialPipeline(MachinePassManager &Pipeline) { - auto Added = addPass<LegalizerPass>(Pipeline, legalizerInfo()); +[[nodiscard]] Expected<void> addInitialPipeline(MachinePassManager &Pipeline, + RISCVSubtargetFeatures Features) { + auto Added = addPass<LegalizerPass>(Pipeline, createLegalizerInfo(Features)); if (!Added) return std::unexpected(Added.error()); Added = addPass<RegisterBankSelectPass>(Pipeline, registerBankInfo()); @@ -52,8 +53,9 @@ template <typename PassT, typename... ArgumentT> return addPass<PBQPAllocatorPass>(Pipeline, registerAllocationInfo()); } -[[nodiscard]] Expected<void> addCompleteRegistry(MachinePassManager &Pipeline) { - auto Added = addInitialPipeline(Pipeline); +[[nodiscard]] Expected<void> addCompleteRegistry(MachinePassManager &Pipeline, + RISCVSubtargetFeatures Features) { + auto Added = addInitialPipeline(Pipeline, Features); if (!Added) return std::unexpected(Added.error()); Added = addSSAExitPipeline(Pipeline); @@ -68,8 +70,13 @@ template <typename PassT, typename... ArgumentT> } // namespace Expected<void> addCanonicalPipeline(MachinePassManager &Pipeline, const MachineFunction &Function) { + return addCanonicalPipeline(Pipeline, Function, RISCVSubtargetFeatures::rv64gc()); +} + +Expected<void> addCanonicalPipeline(MachinePassManager &Pipeline, const MachineFunction &Function, + RISCVSubtargetFeatures Features) { if (!Function.properties().has(MachineFunctionProperty::Legalized)) { - auto Added = addPass<LegalizerPass>(Pipeline, legalizerInfo()); + auto Added = addPass<LegalizerPass>(Pipeline, createLegalizerInfo(Features)); if (!Added) return std::unexpected(Added.error()); } @@ -112,10 +119,15 @@ Expected<void> addCanonicalPipeline(MachinePassManager &Pipeline, const MachineF } Expected<std::unique_ptr<MachineFunctionPass>> createCanonicalPipelinePass(std::string_view Name) { + return createCanonicalPipelinePass(Name, RISCVSubtargetFeatures::rv64gc()); +} + +Expected<std::unique_ptr<MachineFunctionPass>> +createCanonicalPipelinePass(std::string_view Name, RISCVSubtargetFeatures Features) { if (Name.empty()) return makeUnexpected(ErrorCode::InvalidArgument, "pipeline pass name cannot be empty"); MachinePassManager Registry; - auto Added = addCompleteRegistry(Registry); + auto Added = addCompleteRegistry(Registry, Features); if (!Added) return std::unexpected(Added.error()); MachinePassManager::PassList Passes = std::move(Registry).takePasses(); |
