From 76d89700953ddd81cf31ab8f260eddf67e93aa85 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Fri, 7 Aug 2026 01:27:41 +0800 Subject: [MIR] Complete document parsing and printing Implement the single LLVM-compatible MIR document path with structured\nembedded-IR references, YAML mappings, constants, and deterministic printing.\n\nKeep pointer LLT widths DataLayout-derived, reject layout-dependent output\nwhen embedded IR is omitted, and record the fixed-baseline compatibility\ncontract and regression coverage. --- backend/include/rcc/CodeGen/MachineMetadata.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'backend/include/rcc/CodeGen/MachineMetadata.h') diff --git a/backend/include/rcc/CodeGen/MachineMetadata.h b/backend/include/rcc/CodeGen/MachineMetadata.h index 95033f6..df56b76 100644 --- a/backend/include/rcc/CodeGen/MachineMetadata.h +++ b/backend/include/rcc/CodeGen/MachineMetadata.h @@ -62,6 +62,11 @@ class MachineMetadataElement final { public: MachineMetadataElement() = default; + struct NullValue final { + friend constexpr bool operator==(NullValue Left, NullValue Right) noexcept = default; + }; + + [[nodiscard]] static MachineMetadataElement null(); [[nodiscard]] static Expected reference(MachineMetadataReference Reference); [[nodiscard]] static MachineMetadataElement string(std::string Value); @@ -78,14 +83,19 @@ public: return std::get_if(&Storage); } + [[nodiscard]] bool isNull() const noexcept { + return std::holds_alternative(Storage); + } + friend bool operator==(const MachineMetadataElement &Left, const MachineMetadataElement &Right) = default; private: + explicit MachineMetadataElement(NullValue Value) : Storage(Value) {} explicit MachineMetadataElement(MachineMetadataReference Reference) : Storage(Reference) {} explicit MachineMetadataElement(std::string Value) : Storage(std::move(Value)) {} - std::variant Storage; + std::variant Storage; }; struct MachineMetadataNode final { -- cgit v1.2.3