From b7716aba458fb3d49742f7a3c169deee7345396e Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Tue, 11 Aug 2026 19:36:06 +0800 Subject: [RISCV] Honor invocation subtarget features --- backend/lib/Target/RISCV/RISCVCodeGen.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'backend/lib/Target/RISCV/RISCVCodeGen.cpp') diff --git a/backend/lib/Target/RISCV/RISCVCodeGen.cpp b/backend/lib/Target/RISCV/RISCVCodeGen.cpp index 8676a2b..0bd3298 100644 --- a/backend/lib/Target/RISCV/RISCVCodeGen.cpp +++ b/backend/lib/Target/RISCV/RISCVCodeGen.cpp @@ -2879,9 +2879,15 @@ buildIncomingConversion(MachineFunction &Function, const TargetDescription &Targ class RISCVLegalizerInfo final : public TargetLegalizerInfo { public: + explicit RISCVLegalizerInfo(RISCVSubtargetFeatures Features) : Features(Features) {} + [[nodiscard]] Expected classify(const MachineInstr &Instruction, const MachineFunction &Function, const TargetDescription &) const override { + if (!Features.has(RISCVExtension::I)) { + return makeUnexpected(ErrorCode::InternalError, + "RISC-V legalizer requires the base I extension"); + } if (!isGenericOpcode(Instruction.opcode())) return LegalizationAction::Legal; @@ -3560,6 +3566,9 @@ public: return makeUnexpected(ErrorCode::Unsupported, "RISC-V legalizer has no lowering rule for this instruction"); } + +private: + RISCVSubtargetFeatures Features; }; class RISCVRegisterBankInfo final : public TargetRegisterBankInfo { @@ -6284,10 +6293,14 @@ private: } // namespace const TargetLegalizerInfo &legalizerInfo() noexcept { - static const RISCVLegalizerInfo Value; + static const RISCVLegalizerInfo Value(RISCVSubtargetFeatures::rv64gc()); return Value; } +std::unique_ptr createLegalizerInfo(RISCVSubtargetFeatures Features) { + return std::make_unique(Features); +} + const TargetRegisterBankInfo ®isterBankInfo() noexcept { static const RISCVRegisterBankInfo Value; return Value; -- cgit v1.2.3