aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/CodeGen/MachineInstr.h
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-04 05:34:15 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-04 05:34:15 +0800
commit183e2354e9fdd107be420cbb185c1d239434aa48 (patch)
treece5c42cb6e9790072d5dcf00d1d55cb7f6573ddc /backend/include/rcc/CodeGen/MachineInstr.h
parent67d6231fba98e776c0f442e5b6908e279c35e346 (diff)
downloadrcc-project-183e2354e9fdd107be420cbb185c1d239434aa48.tar.gz
rcc-project-183e2354e9fdd107be420cbb185c1d239434aa48.tar.xz
[MIR] Add machine instruction parser and printer
Parse MachineFunction bodies in two passes and serialize the same MachineIR model in complete or readable form. Extend instruction attachments and memory operands required by the fixed LLVM MIR grammar, and cover deterministic parse-print round trips.
Diffstat (limited to 'backend/include/rcc/CodeGen/MachineInstr.h')
-rw-r--r--backend/include/rcc/CodeGen/MachineInstr.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/MachineInstr.h b/backend/include/rcc/CodeGen/MachineInstr.h
index 69d7dd7..e7294b4 100644
--- a/backend/include/rcc/CodeGen/MachineInstr.h
+++ b/backend/include/rcc/CodeGen/MachineInstr.h
@@ -13,6 +13,8 @@
#include <functional>
#include <optional>
#include <span>
+#include <string>
+#include <string_view>
#include <utility>
#include <vector>
@@ -154,6 +156,56 @@ public:
DebugInstrNumber = 0;
}
+ [[nodiscard]] std::optional<std::string_view> preInstrSymbol() const noexcept;
+ [[nodiscard]] Expected<void> setPreInstrSymbol(std::string Symbol);
+ void clearPreInstrSymbol() noexcept {
+ PreInstrSymbol.reset();
+ }
+
+ [[nodiscard]] std::optional<std::string_view> postInstrSymbol() const noexcept;
+ [[nodiscard]] Expected<void> setPostInstrSymbol(std::string Symbol);
+ void clearPostInstrSymbol() noexcept {
+ PostInstrSymbol.reset();
+ }
+
+ [[nodiscard]] const std::optional<MachineMetadataReference> &heapAllocMarker() const noexcept {
+ return HeapAllocMarker;
+ }
+ [[nodiscard]] Expected<void> setHeapAllocMarker(MachineMetadataReference Marker);
+ void clearHeapAllocMarker() noexcept {
+ HeapAllocMarker.reset();
+ }
+
+ [[nodiscard]] const std::optional<MachineMetadataReference> &pcSections() const noexcept {
+ return PCSections;
+ }
+ [[nodiscard]] Expected<void> setPCSections(MachineMetadataReference Sections);
+ void clearPCSections() noexcept {
+ PCSections.reset();
+ }
+
+ [[nodiscard]] const std::optional<MachineMetadataReference> &mmra() const noexcept {
+ return MMRA;
+ }
+ [[nodiscard]] Expected<void> setMMRA(MachineMetadataReference Metadata);
+ void clearMMRA() noexcept {
+ MMRA.reset();
+ }
+
+ [[nodiscard]] std::optional<std::uint32_t> cfiType() const noexcept {
+ return CFIType;
+ }
+ [[nodiscard]] Expected<void> setCFIType(std::uint64_t Type);
+ void clearCFIType() noexcept {
+ CFIType.reset();
+ }
+
+ [[nodiscard]] std::optional<std::string_view> deactivationSymbol() const noexcept;
+ [[nodiscard]] Expected<void> setDeactivationSymbol(std::string Symbol);
+ void clearDeactivationSymbol() noexcept {
+ DeactivationSymbol.reset();
+ }
+
private:
MachineInstr(MachineFunction &OwnerFunction, Opcode InstructionOpcode,
MachineInstrStableID StableID);
@@ -177,6 +229,13 @@ private:
std::optional<MachineDebugLocation> DebugLocation;
std::optional<OriginID> Origin;
std::uint32_t DebugInstrNumber = 0;
+ std::optional<std::string> PreInstrSymbol;
+ std::optional<std::string> PostInstrSymbol;
+ std::optional<MachineMetadataReference> HeapAllocMarker;
+ std::optional<MachineMetadataReference> PCSections;
+ std::optional<MachineMetadataReference> MMRA;
+ std::optional<std::uint32_t> CFIType;
+ std::optional<std::string> DeactivationSymbol;
friend class MachineArena;
friend class MachineBasicBlock;