aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV/RISCVSubtarget.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-24 16:37:25 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-24 16:37:25 +0800
commit540c73a2f450af3d0aec6e039fab054471efdbb1 (patch)
tree9b260322eaeeac8b8741a30a273f7d407b683e5e /backend/lib/Target/RISCV/RISCVSubtarget.cpp
parent936ac5647f82def050e6654d44d24a88906f4d7a (diff)
downloadrcc-project-540c73a2f450af3d0aec6e039fab054471efdbb1.tar.gz
rcc-project-540c73a2f450af3d0aec6e039fab054471efdbb1.tar.xz
[RISCV] Match LLVM frame lowering semantics
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVSubtarget.cpp')
-rw-r--r--backend/lib/Target/RISCV/RISCVSubtarget.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/backend/lib/Target/RISCV/RISCVSubtarget.cpp b/backend/lib/Target/RISCV/RISCVSubtarget.cpp
index c30c898..499219b 100644
--- a/backend/lib/Target/RISCV/RISCVSubtarget.cpp
+++ b/backend/lib/Target/RISCV/RISCVSubtarget.cpp
@@ -102,6 +102,15 @@ constexpr std::array OptionNames{
} // namespace
+Expected<RISCVABI> parseRISCVABI(std::string_view Name) {
+ if (Name == "lp64")
+ return RISCVABI::LP64;
+ if (Name == "lp64d")
+ return RISCVABI::LP64D;
+ return makeUnexpected(ErrorCode::InvalidInvocation,
+ "RISC-V backend does not support target ABI '" + std::string(Name) + "'");
+}
+
Expected<RISCVSubtargetFeatures>
RISCVSubtargetFeatures::fromFeatureList(std::span<const std::string> Features) {
std::uint16_t Enabled = extensionBit(RISCVExtension::I);
@@ -185,8 +194,8 @@ bool RISCVSubtargetFeatures::hasFeature(std::string_view Feature) const noexcept
}
RISCVSubtarget::RISCVSubtarget(RISCVSubtargetFeatures Features, RelocationModel Relocation,
- CodeModel Code)
- : Features(Features), Relocation(Relocation), Code(Code),
+ CodeModel Code, RISCVABI ABI)
+ : Features(Features), Relocation(Relocation), Code(Code), ABI(ABI),
SchedulingHooks(createSchedulingHooks(Features)) {
auto Model = createSchedulingModel(*SchedulingHooks);
if (!Model)