diff options
Diffstat (limited to 'backend/include/rcc/MIR')
| -rw-r--r-- | backend/include/rcc/MIR/EmbeddedIR.h | 9 | ||||
| -rw-r--r-- | backend/include/rcc/MIR/MIDebugSyntax.h | 9 | ||||
| -rw-r--r-- | backend/include/rcc/MIR/MIParser.h | 1 |
3 files changed, 19 insertions, 0 deletions
diff --git a/backend/include/rcc/MIR/EmbeddedIR.h b/backend/include/rcc/MIR/EmbeddedIR.h index 522a217..99f1493 100644 --- a/backend/include/rcc/MIR/EmbeddedIR.h +++ b/backend/include/rcc/MIR/EmbeddedIR.h @@ -6,6 +6,7 @@ #include "rcc/Support/TextDiagnostic.h" #include <cstddef> +#include <cstdint> #include <functional> #include <optional> #include <span> @@ -52,6 +53,10 @@ public: return IsDefinition; } + [[nodiscard]] bool isUnnamed() const noexcept { + return IsUnnamed; + } + [[nodiscard]] std::span<const EmbeddedIRReference> blocks() const noexcept { return Blocks; } @@ -80,9 +85,12 @@ private: std::string Name; TextRange NameRange; bool IsDefinition = false; + bool IsUnnamed = false; + std::uint64_t NextUnnamedSlot = 0; std::vector<EmbeddedIRReference> Blocks; std::vector<EmbeddedIRReference> Allocas; std::vector<EmbeddedIRReference> Values; + std::vector<EmbeddedIRReference> LocalReferences; std::unordered_map<std::string, std::size_t, StringHash, std::equal_to<>> BlockNameToIndex; std::unordered_map<std::string, std::size_t, StringHash, std::equal_to<>> AllocaNameToIndex; std::unordered_map<std::string, std::size_t, StringHash, std::equal_to<>> ValueNameToIndex; @@ -131,6 +139,7 @@ public: } [[nodiscard]] const EmbeddedIRFunction *function(std::string_view Name) const noexcept; + [[nodiscard]] const EmbeddedIRFunction *unnamedFunction(std::size_t Ordinal) const noexcept; [[nodiscard]] const EmbeddedIRReference *globalObject(std::string_view Name) const noexcept; [[nodiscard]] const EmbeddedIRMetadataDefinition *metadata(std::string_view Name) const noexcept; [[nodiscard]] const EmbeddedIRTypeDefinition * diff --git a/backend/include/rcc/MIR/MIDebugSyntax.h b/backend/include/rcc/MIR/MIDebugSyntax.h index a8427dc..4952128 100644 --- a/backend/include/rcc/MIR/MIDebugSyntax.h +++ b/backend/include/rcc/MIR/MIDebugSyntax.h @@ -5,6 +5,8 @@ #include <cstdint> #include <optional> +#include <span> +#include <string> #include <string_view> namespace rcc::mir { @@ -12,6 +14,13 @@ namespace rcc::mir { [[nodiscard]] std::optional<std::uint64_t> parseDIExpressionOpcodeName(std::string_view Name) noexcept; +[[nodiscard]] std::optional<std::uint64_t> +parseDIExpressionAttributeEncodingName(std::string_view Name) noexcept; + +[[nodiscard]] std::string invalidDIExpressionElementMessage(std::string_view Name); + +[[nodiscard]] std::string formatDIExpression(std::span<const std::uint64_t> Elements); + } // namespace rcc::mir #endif // RCC_MIR_MIDEBUGSYNTAX_H diff --git a/backend/include/rcc/MIR/MIParser.h b/backend/include/rcc/MIR/MIParser.h index 116a97f..16af534 100644 --- a/backend/include/rcc/MIR/MIParser.h +++ b/backend/include/rcc/MIR/MIParser.h @@ -65,6 +65,7 @@ struct MIParserContext final { std::vector<MIJumpTableSlot> JumpTables; std::vector<MIMetadataSlot> Metadata; std::vector<MISyncScopeSlot> SyncScopes; + std::function<bool(std::string_view)> HasIRBlock; std::function<Expected<SyncScopeID>(std::string_view)> InternSyncScope; std::function<Expected<std::uint32_t>(std::uint32_t)> PointerSizeInBits; std::uint32_t DefaultPointerSizeInBits = 0; |
