aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/Description
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 23:44:57 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 23:44:57 +0800
commite6cd1347cc2c76babe56842e1b7bd05d68fe9584 (patch)
treed00769b50841cbcea907b76ac006b366147325dc /backend/lib/Target/Description
parent234d7d3bec020103e46daaff39d207d978479730 (diff)
downloadrcc-project-e6cd1347cc2c76babe56842e1b7bd05d68fe9584.tar.gz
rcc-project-e6cd1347cc2c76babe56842e1b7bd05d68fe9584.tar.xz
[RISCV] Model typed floating-point register views
Diffstat (limited to 'backend/lib/Target/Description')
-rw-r--r--backend/lib/Target/Description/TargetDescriptionGenerator.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/backend/lib/Target/Description/TargetDescriptionGenerator.cpp b/backend/lib/Target/Description/TargetDescriptionGenerator.cpp
index dd3545b..bd0e794 100644
--- a/backend/lib/Target/Description/TargetDescriptionGenerator.cpp
+++ b/backend/lib/Target/Description/TargetDescriptionGenerator.cpp
@@ -1840,14 +1840,12 @@ private:
std::unordered_set<std::uint32_t> IDs;
std::unordered_set<std::string> Symbols;
std::unordered_set<std::string> Names;
- std::unordered_set<std::uint32_t> DwarfRegisters;
for (const SourceRegister &Register : Input.Registers) {
if (Register.ID == 0 || !isIdentifier(Register.Symbol) || Register.Name.empty() ||
!IDs.insert(Register.ID).second || !Symbols.insert(Register.Symbol).second ||
- !Names.insert(lowerASCII(Register.Name)).second ||
- !DwarfRegisters.insert(Register.DwarfRegister).second || Register.Units.empty()) {
- fail(Register.Range, "registers require nonzero unique IDs, symbols, canonical names, "
- "DWARF numbers, and units");
+ !Names.insert(lowerASCII(Register.Name)).second || Register.Units.empty()) {
+ fail(Register.Range,
+ "registers require nonzero unique IDs, symbols, canonical names, and units");
return false;
}
RegisterBySymbol.emplace(Register.Symbol, Register.ID);
@@ -2900,9 +2898,11 @@ void emitImmediatePredicate(std::ostream &Output, const NormalizedImmediatePredi
Output << "})},\n";
}
Output << " };\n Description.CFIRegisters = {\n";
+ std::unordered_set<std::uint32_t> CanonicalDwarfRegisters;
for (const NormalizedRegister &Register : Model.Registers) {
+ const bool IsCanonical = CanonicalDwarfRegisters.insert(Register.DwarfRegister).second;
Output << " {physical(PhysicalRegisterID::" << Register.Symbol << "), "
- << Register.DwarfRegister << ", true},\n";
+ << Register.DwarfRegister << ", " << (IsCanonical ? "true" : "false") << "},\n";
}
Output << " };\n}\n\n";