diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-15 04:26:05 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-15 04:26:05 +0800 |
| commit | 6f67b5ba63e0993d6aa9002c8c59fcf13148b869 (patch) | |
| tree | d371a490482ecb69621485361ec7cc0405edc7e1 /backend/lib/Target/RISCV | |
| parent | 1ff4fb953820c823ae8d5035c75bf43bf85e9c3c (diff) | |
| download | rcc-project-6f67b5ba63e0993d6aa9002c8c59fcf13148b869.tar.gz rcc-project-6f67b5ba63e0993d6aa9002c8c59fcf13148b869.tar.xz | |
[RISCV][GlobalISel] Preserve Zbb sign extensions
Diffstat (limited to 'backend/lib/Target/RISCV')
| -rw-r--r-- | backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp | 4 | ||||
| -rw-r--r-- | backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp index 975fc9b..06eea7b 100644 --- a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp +++ b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp @@ -284,7 +284,7 @@ foldConstantExtension(MachineInstr &Instruction, MachineFunction &Function, Gene } // namespace -RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &Subtarget) { +RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &Subtarget) : Subtarget(Subtarget) { const LowLevelType S8 = *LowLevelType::makeCategoryNeutralScalar(8); const LowLevelType S16 = *LowLevelType::makeCategoryNeutralScalar(16); const LowLevelType S32 = *LowLevelType::makeCategoryNeutralScalar(32); @@ -754,6 +754,8 @@ Expected<void> RISCVLegalizerInfo::legalizeCustom(LegalizerHelper &Helper, return std::unexpected(DestinationType.error()); if (DestinationType->minimumBitWidth() == 64 && *Size == 32) return {}; + if (Subtarget.features().has(RISCVExtension::Zbb) && (*Size == 8 || *Size == 16)) + return {}; return Helper.lower(Instruction, LegalizationDecision{ .Action = LegalizationAction::Lower, .TypeIndex = 0, diff --git a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h index 7e84764..43a18a1 100644 --- a/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h +++ b/backend/lib/Target/RISCV/GISel/RISCVLegalizerInfo.h @@ -18,6 +18,9 @@ public: MachineInstr &Instruction) const override; [[nodiscard]] bool isSExtCheaperThanZExt(LowLevelType SourceType, LowLevelType DestinationType) const override; + +private: + const RISCVSubtarget &Subtarget; }; } // namespace rcc::riscv |
