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/RISCVCodeGen.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/RISCVCodeGen.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVCodeGen.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
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<LegalizationAction> 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<TargetLegalizerInfo> createLegalizerInfo(RISCVSubtargetFeatures Features) { + return std::make_unique<RISCVLegalizerInfo>(Features); +} + const TargetRegisterBankInfo ®isterBankInfo() noexcept { static const RISCVRegisterBankInfo Value; return Value; |
