[llvm] [llvm] Support multiple save/restore points in mir (PR #119357)
Elizaveta Noskova via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 23 08:34:08 PDT 2025
================
@@ -1077,6 +1075,54 @@ bool MIRParserImpl::initializeConstantPool(PerFunctionMIParsingState &PFS,
return false;
}
+// Return true if basic block was incorrectly specified in MIR
+bool MIRParserImpl::initializeSaveRestorePoints(
+ PerFunctionMIParsingState &PFS, const yaml::SaveRestorePoints &YamlSRPoints,
+ bool IsSavePoints) {
+ SMDiagnostic Error;
+ MachineBasicBlock *MBB = nullptr;
+ llvm::SaveRestorePoints SRPoints;
+ std::vector<Register> Registers;
+
+ if (std::holds_alternative<std::vector<yaml::SaveRestorePointEntry>>(
+ YamlSRPoints)) {
+ const auto &VectorRepr =
+ std::get<std::vector<yaml::SaveRestorePointEntry>>(YamlSRPoints);
+ if (VectorRepr.empty())
+ return false;
+ for (const auto &Entry : VectorRepr) {
+ const auto &MBBSource = Entry.Point;
+ if (parseMBBReference(PFS, MBB, MBBSource.Value))
+ return true;
+
+ Registers.clear();
+ for (auto &RegStr : Entry.Registers) {
+ Register Reg;
+ if (parseNamedRegisterReference(PFS, Reg, RegStr.Value, Error))
+ return error(Error, RegStr.SourceRange);
+ Registers.push_back(Reg);
+ }
+ SRPoints.insert(std::make_pair(MBB, Registers));
+ }
+ } else {
+ yaml::StringValue StringRepr = std::get<yaml::StringValue>(YamlSRPoints);
+ if (StringRepr.Value.empty())
+ return false;
+ if (parseMBBReference(PFS, MBB, StringRepr))
+ return true;
+ SRPoints.insert(std::make_pair(MBB, Registers));
----------------
enoskova-sc wrote:
addressed
https://github.com/llvm/llvm-project/pull/119357
More information about the llvm-commits
mailing list