aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV/RISCVTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVTarget.cpp')
-rw-r--r--backend/lib/Target/RISCV/RISCVTarget.cpp12
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 {