aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/MIR/MIRFunctionParser.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 00:06:12 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 00:06:12 +0800
commit9ae4dec7b8ce79587bde200fa8fadefe7f81d2bf (patch)
tree500839f9086191543365b7b8b07c4fc41c81f03e /backend/lib/MIR/MIRFunctionParser.cpp
parent2872e39af3aa78b7a54b74d104f133aa715d01cb (diff)
downloadrcc-project-9ae4dec7b8ce79587bde200fa8fadefe7f81d2bf.tar.gz
rcc-project-9ae4dec7b8ce79587bde200fa8fadefe7f81d2bf.tar.xz
[MIR] Accept empty optional register fields
Diffstat (limited to 'backend/lib/MIR/MIRFunctionParser.cpp')
-rw-r--r--backend/lib/MIR/MIRFunctionParser.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/backend/lib/MIR/MIRFunctionParser.cpp b/backend/lib/MIR/MIRFunctionParser.cpp
index a59e4bd..68bc0aa 100644
--- a/backend/lib/MIR/MIRFunctionParser.cpp
+++ b/backend/lib/MIR/MIRFunctionParser.cpp
@@ -285,12 +285,17 @@ bool MIRDocumentParser::parseRegisters(const yaml::Node &Root, MachineFunction &
}
if (const yaml::Node *Preferred = mappingValue(*Element, "preferred-register")) {
+ std::string_view PreferredName;
PhysicalRegister Reg;
- if (physicalRegister(*Preferred, Reg))
+ if (scalar(*Preferred, PreferredName, "physical register"))
return true;
- auto AddResult = Function.registerInfo().addAllocationHint(*Created, Reg);
- if (!AddResult)
- return importError(Preferred->range(), AddResult.error());
+ if (!trim(PreferredName).empty()) {
+ if (physicalRegister(PreferredName, Preferred->range(), Reg))
+ return true;
+ auto AddResult = Function.registerInfo().addAllocationHint(*Created, Reg);
+ if (!AddResult)
+ return importError(Preferred->range(), AddResult.error());
+ }
}
if (const yaml::Node *Flags = mappingValue(*Element, "flags")) {
if (requireKind(*Flags, yaml::NodeKind::Sequence, "virtual-register flags"))