diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 20:26:56 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 20:26:56 +0800 |
| commit | 38626ed37c9ea78c76c12dae4806b750881fd910 (patch) | |
| tree | f838b8c3b79ec1458d3370411e3b32e892ba02ca /backend/lib/Target/RISCV/RISCVTarget.cpp | |
| parent | cd2e88b9618ba7c2f6fcfac901e81f4a302a34c9 (diff) | |
| download | rcc-project-38626ed37c9ea78c76c12dae4806b750881fd910.tar.gz rcc-project-38626ed37c9ea78c76c12dae4806b750881fd910.tar.xz | |
[RISCV] Add LP64 calling-convention facts
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVTarget.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVTarget.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/backend/lib/Target/RISCV/RISCVTarget.cpp b/backend/lib/Target/RISCV/RISCVTarget.cpp index aabce94..299b5ab 100644 --- a/backend/lib/Target/RISCV/RISCVTarget.cpp +++ b/backend/lib/Target/RISCV/RISCVTarget.cpp @@ -11,6 +11,7 @@ #include <cstdint> #include <initializer_list> #include <memory> +#include <ranges> #include <span> #include <utility> #include <vector> @@ -121,12 +122,17 @@ Expected<TargetDescription> createTargetDescription() { std::move(MIRText)); } -std::shared_ptr<const RegisterMask> createCallPreservedMask() { +std::shared_ptr<const RegisterMask> createCallPreservedMask(CallingConvention Convention) { + const CallingConventionInfo *Info = callingConvention(Convention); + if (Info == nullptr) + return {}; TargetMIRTextInfoDesc Description; appendGeneratedMIRTextInfo(Description); configureFunctionInfoMIRSchema(Description); - assert(!Description.RegisterMasks.empty()); - return Description.RegisterMasks.front().Mask; + const auto Mask = std::ranges::find(Description.RegisterMasks, Info->PreservedMaskName, + &MIRRegisterMaskDesc::Name); + return Mask == Description.RegisterMasks.end() ? std::shared_ptr<const RegisterMask>{} + : Mask->Mask; } std::span<const SchedulingClassInfo> schedulingClasses() noexcept { |
