diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 23:44:57 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 23:44:57 +0800 |
| commit | e6cd1347cc2c76babe56842e1b7bd05d68fe9584 (patch) | |
| tree | d00769b50841cbcea907b76ac006b366147325dc /backend/lib/Target/Description/TargetDescriptionGenerator.cpp | |
| parent | 234d7d3bec020103e46daaff39d207d978479730 (diff) | |
| download | rcc-project-e6cd1347cc2c76babe56842e1b7bd05d68fe9584.tar.gz rcc-project-e6cd1347cc2c76babe56842e1b7bd05d68fe9584.tar.xz | |
[RISCV] Model typed floating-point register views
Diffstat (limited to 'backend/lib/Target/Description/TargetDescriptionGenerator.cpp')
| -rw-r--r-- | backend/lib/Target/Description/TargetDescriptionGenerator.cpp | 12 |
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"; |
