diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-01 14:50:04 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-01 14:50:04 +0800 |
| commit | cfdbcc469f9691bd9dce3b0b86982a63d86ca6b7 (patch) | |
| tree | 19f4ad856c3e4900a0501ab2cad41981b49569b5 /backend/lib/CodeGen/MachineVerifier.cpp | |
| parent | a69d14b8ebc028dddc689658b08d42d3e83f5e38 (diff) | |
| download | rcc-project-cfdbcc469f9691bd9dce3b0b86982a63d86ca6b7.tar.gz rcc-project-cfdbcc469f9691bd9dce3b0b86982a63d86ca6b7.tar.xz | |
[CodeGen] Add target state and compilation status
Diffstat (limited to 'backend/lib/CodeGen/MachineVerifier.cpp')
| -rw-r--r-- | backend/lib/CodeGen/MachineVerifier.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/backend/lib/CodeGen/MachineVerifier.cpp b/backend/lib/CodeGen/MachineVerifier.cpp index 50c1001..0c05a07 100644 --- a/backend/lib/CodeGen/MachineVerifier.cpp +++ b/backend/lib/CodeGen/MachineVerifier.cpp @@ -34,6 +34,11 @@ public: if (Function.name().empty() || !Function.stableID().isValid()) return fail("function identity is invalid"); + if (Function.targetState().hasValue()) { + auto TargetStateResult = Function.targetState().verify(); + if (!TargetStateResult) + return failWith("target function state", TargetStateResult.error()); + } auto CatalogResult = catalogArenaObjects(); if (!CatalogResult) return CatalogResult; @@ -46,6 +51,9 @@ public: auto LayoutResult = verifyBlockLayout(); if (!LayoutResult) return LayoutResult; + auto CompilationStatusResult = verifyCompilationStatus(); + if (!CompilationStatusResult) + return CompilationStatusResult; auto JumpTableResult = Function.jumpTableInfo().verify(); if (!JumpTableResult) return failWith("jump table info", JumpTableResult.error()); @@ -319,6 +327,20 @@ private: return {}; } + [[nodiscard]] Expected<void> verifyCompilationStatus() const { + const MachineCompilationStatus &Status = Function.compilationStatus(); + auto Verification = Status.verify(); + if (!Verification) + return failWith("compilation status", Verification.error()); + + const MachineCompilationFailure *Failure = Status.failure(); + if (Failure != nullptr && Failure->FailureInstruction && + !LinkedInstructionIDs.contains(*Failure->FailureInstruction)) { + return fail("compilation failure references a detached or unknown instruction"); + } + return {}; + } + [[nodiscard]] Expected<void> verifyLiveInstruction(const MachineInstr &Instruction) { auto LocalResult = verifyInstructionLocalState(Instruction); if (!LocalResult) |
