aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-26 23:28:39 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-26 23:28:39 +0800
commita72a7a4323fb6eef8e15cc2f1229bcca14879e94 (patch)
tree5768e6cd3ad0a025128d9bf7f76a8ee7afe22c12
parent7b3dcced70be227bb43e71d84d11a2f15fb25072 (diff)
downloadrcc-project-a72a7a4323fb6eef8e15cc2f1229bcca14879e94.tar.gz
rcc-project-a72a7a4323fb6eef8e15cc2f1229bcca14879e94.tar.xz
[CodeGen] Centralize machine pass property validation
-rw-r--r--backend/lib/CodeGen/GlobalISel/Combiner.cpp3
-rw-r--r--backend/lib/CodeGen/GlobalISel/InstructionSelect.cpp15
-rw-r--r--backend/lib/CodeGen/GlobalISel/Legalizer.cpp15
-rw-r--r--backend/lib/CodeGen/GlobalISel/RegBankSelect.cpp15
-rw-r--r--backend/lib/CodeGen/LiveVariables.cpp5
-rw-r--r--backend/lib/CodeGen/MachineBranchOptimization.cpp4
-rw-r--r--backend/lib/CodeGen/MachineCSE.cpp4
-rw-r--r--backend/lib/CodeGen/MachineCombiner.cpp4
-rw-r--r--backend/lib/CodeGen/MachineCopyPropagation.cpp4
-rw-r--r--backend/lib/CodeGen/MachineDCE.cpp5
-rw-r--r--backend/lib/CodeGen/MachineFinalization.cpp7
-rw-r--r--backend/lib/CodeGen/MachineLICM.cpp7
-rw-r--r--backend/lib/CodeGen/MachineMemoryFolding.cpp4
-rw-r--r--backend/lib/CodeGen/MachinePeepholeOptimizer.cpp5
-rw-r--r--backend/lib/CodeGen/MachinePseudoExpansion.cpp10
-rw-r--r--backend/lib/CodeGen/MachineSink.cpp7
-rw-r--r--backend/lib/CodeGen/PHIElimination.cpp13
-rw-r--r--backend/lib/CodeGen/PrologueEpilogueInsertion.cpp6
-rw-r--r--backend/lib/CodeGen/RegAllocBasic.cpp3
-rw-r--r--backend/lib/CodeGen/RegAllocFast.cpp3
-rw-r--r--backend/lib/CodeGen/RegAllocGreedy.cpp4
-rw-r--r--backend/lib/CodeGen/RegAllocInternal.h10
-rw-r--r--backend/lib/CodeGen/RegAllocPBQP.cpp3
-rw-r--r--backend/lib/CodeGen/TwoAddressInstructionPass.cpp13
24 files changed, 0 insertions, 169 deletions
diff --git a/backend/lib/CodeGen/GlobalISel/Combiner.cpp b/backend/lib/CodeGen/GlobalISel/Combiner.cpp
index 6d65a50..08b471a 100644
--- a/backend/lib/CodeGen/GlobalISel/Combiner.cpp
+++ b/backend/lib/CodeGen/GlobalISel/Combiner.cpp
@@ -21,9 +21,6 @@ const MachinePassContract &GlobalISelCombinerPass::contract() const noexcept {
Expected<MachinePassResult> GlobalISelCombinerPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires))
- return makeUnexpected(ErrorCode::VerificationError,
- "GlobalISel combiner input does not satisfy its stage contract");
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/GlobalISel/InstructionSelect.cpp b/backend/lib/CodeGen/GlobalISel/InstructionSelect.cpp
index 995a9a0..66bbff2 100644
--- a/backend/lib/CodeGen/GlobalISel/InstructionSelect.cpp
+++ b/backend/lib/CodeGen/GlobalISel/InstructionSelect.cpp
@@ -152,17 +152,6 @@ void combineFingerprint(std::uint64_t &State, std::uint64_t Value) noexcept {
return Result;
}
-[[nodiscard]] Expected<void> requireProperties(const MachineFunction &Function,
- const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- "pass '" + Contract.Name +
- "' requires properties: " + Missing.toString());
- }
- return {};
-}
-
[[nodiscard]] Error passFailure(std::string Message,
ErrorCode Code = ErrorCode::VerificationError) {
return Error(Code, std::move(Message));
@@ -225,10 +214,6 @@ Expected<MachinePassResult> InstructionSelect::run(MachineFunction &Function,
if (Info == nullptr)
return std::unexpected(passFailure("instruction select has no target behavior interface",
ErrorCode::InvalidArgument));
- auto Required = requireProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/GlobalISel/Legalizer.cpp b/backend/lib/CodeGen/GlobalISel/Legalizer.cpp
index 8f3f06f..ca31d56 100644
--- a/backend/lib/CodeGen/GlobalISel/Legalizer.cpp
+++ b/backend/lib/CodeGen/GlobalISel/Legalizer.cpp
@@ -177,17 +177,6 @@ private:
return PostOrder;
}
-[[nodiscard]] Expected<void> requireProperties(const MachineFunction &Function,
- const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- "pass '" + Contract.Name +
- "' requires properties: " + Missing.toString());
- }
- return {};
-}
-
[[nodiscard]] Error passFailure(std::string Message,
ErrorCode Code = ErrorCode::VerificationError) {
return Error(Code, std::move(Message));
@@ -267,10 +256,6 @@ Expected<MachinePassResult> Legalizer::run(MachineFunction &Function,
if (Info == nullptr)
return std::unexpected(
passFailure("legalizer has no target behavior interface", ErrorCode::InvalidArgument));
- auto Required = requireProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
if (AbortMode != GlobalISelAbortMode::Enable) {
if (AbortMode != GlobalISelAbortMode::Disable &&
AbortMode != GlobalISelAbortMode::DisableWithDiagnostic) {
diff --git a/backend/lib/CodeGen/GlobalISel/RegBankSelect.cpp b/backend/lib/CodeGen/GlobalISel/RegBankSelect.cpp
index a5747c3..3b7932b 100644
--- a/backend/lib/CodeGen/GlobalISel/RegBankSelect.cpp
+++ b/backend/lib/CodeGen/GlobalISel/RegBankSelect.cpp
@@ -56,17 +56,6 @@ registerConfigurationFingerprint(const MachineRegisterInfo &RegInfo) noexcept {
return Result;
}
-[[nodiscard]] Expected<void> requireProperties(const MachineFunction &Function,
- const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- "pass '" + Contract.Name +
- "' requires properties: " + Missing.toString());
- }
- return {};
-}
-
[[nodiscard]] Expected<void> restoreRegisterConfiguration(
MachineRegisterInfo &RegInfo,
const std::vector<std::pair<Register, std::pair<std::optional<RegisterBankID>,
@@ -299,10 +288,6 @@ Expected<MachinePassResult> RegBankSelect::run(MachineFunction &Function,
if (Info == nullptr)
return std::unexpected(passFailure("register-bank select has no target behavior interface",
ErrorCode::InvalidArgument));
- auto Required = requireProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
MachinePassResult Result;
MachineRegisterInfo &RegInfo = Function.registerInfo();
const std::uint64_t RegisterConfigurationBefore = registerConfigurationFingerprint(RegInfo);
diff --git a/backend/lib/CodeGen/LiveVariables.cpp b/backend/lib/CodeGen/LiveVariables.cpp
index 3c91cfb..5efdbd4 100644
--- a/backend/lib/CodeGen/LiveVariables.cpp
+++ b/backend/lib/CodeGen/LiveVariables.cpp
@@ -923,11 +923,6 @@ const MachinePassContract &RebuildMachineLivenessPass::contract() const noexcept
Expected<MachinePassResult> RebuildMachineLivenessPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- const MachineFunctionProperties Missing = contract().Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- "RebuildMachineLiveness requires properties: " + Missing.toString());
- }
auto Applied = rebuildMachineLiveness(Function, Target);
if (!Applied)
return std::unexpected(Applied.error());
diff --git a/backend/lib/CodeGen/MachineBranchOptimization.cpp b/backend/lib/CodeGen/MachineBranchOptimization.cpp
index 07a67ed..e03b0d9 100644
--- a/backend/lib/CodeGen/MachineBranchOptimization.cpp
+++ b/backend/lib/CodeGen/MachineBranchOptimization.cpp
@@ -581,10 +581,6 @@ const MachinePassContract &MachineBranchOptimizationPass::contract() const noexc
Expected<MachinePassResult> MachineBranchOptimizationPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "branch folding requires PHI-free MachineIR");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineCSE.cpp b/backend/lib/CodeGen/MachineCSE.cpp
index 30129bc..50dca0e 100644
--- a/backend/lib/CodeGen/MachineCSE.cpp
+++ b/backend/lib/CodeGen/MachineCSE.cpp
@@ -293,10 +293,6 @@ const MachinePassContract &MachineCSEPass::contract() const noexcept {
Expected<MachinePassResult> MachineCSEPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "machine CSE requires selected SSA MachineIR");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineCombiner.cpp b/backend/lib/CodeGen/MachineCombiner.cpp
index 1c0bc62..55bdc00 100644
--- a/backend/lib/CodeGen/MachineCombiner.cpp
+++ b/backend/lib/CodeGen/MachineCombiner.cpp
@@ -204,10 +204,6 @@ const MachinePassContract &MachineCombinerPass::contract() const noexcept {
Expected<MachinePassResult> MachineCombinerPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "machine combiner input does not satisfy its pass contract");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineCopyPropagation.cpp b/backend/lib/CodeGen/MachineCopyPropagation.cpp
index b4fce2b..f5736b8 100644
--- a/backend/lib/CodeGen/MachineCopyPropagation.cpp
+++ b/backend/lib/CodeGen/MachineCopyPropagation.cpp
@@ -303,10 +303,6 @@ const MachinePassContract &MachineCopyPropagationPass::contract() const noexcept
Expected<MachinePassResult>
MachineCopyPropagationPass::run(MachineFunction &Function, const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "machine COPY propagation has unmet stage properties");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineDCE.cpp b/backend/lib/CodeGen/MachineDCE.cpp
index 87c15d9..6681bc1 100644
--- a/backend/lib/CodeGen/MachineDCE.cpp
+++ b/backend/lib/CodeGen/MachineDCE.cpp
@@ -111,11 +111,6 @@ const MachinePassContract &MachineDCEPass::contract() const noexcept {
Expected<MachinePassResult> MachineDCEPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "machine DCE requires a selected machine function");
- }
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineFinalization.cpp b/backend/lib/CodeGen/MachineFinalization.cpp
index a9e08d5..6f16d97 100644
--- a/backend/lib/CodeGen/MachineFinalization.cpp
+++ b/backend/lib/CodeGen/MachineFinalization.cpp
@@ -92,9 +92,6 @@ const MachinePassContract &FinalizeEmissionPseudosPass::contract() const noexcep
Expected<MachinePassResult> FinalizeEmissionPseudosPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires))
- return makeUnexpected(ErrorCode::VerificationError,
- "emission-pseudo finalization requires finalized allocated MIR");
for (MachineInstr *Instruction : Function.allInstructions()) {
if (Instruction == nullptr || Instruction->parent() == nullptr)
continue;
@@ -125,10 +122,6 @@ const MachinePassContract &FinalEncodabilityVerifierPass::contract() const noexc
Expected<MachinePassResult> FinalEncodabilityVerifierPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires))
- return makeUnexpected(ErrorCode::FinalEncodabilityFailed,
- "final encodability requires NoExecutablePseudos and finalized MIR");
-
std::unordered_map<const MachineBasicBlock *, std::uint64_t> BlockOffsets;
std::unordered_map<const MachineInstr *, std::uint64_t> InstructionOffsets;
std::uint64_t Offset = 0;
diff --git a/backend/lib/CodeGen/MachineLICM.cpp b/backend/lib/CodeGen/MachineLICM.cpp
index 870810b..6d76d5d 100644
--- a/backend/lib/CodeGen/MachineLICM.cpp
+++ b/backend/lib/CodeGen/MachineLICM.cpp
@@ -321,13 +321,6 @@ const MachinePassContract &MachineLICMPass::contract() const noexcept {
Expected<MachinePassResult> MachineLICMPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(
- ErrorCode::VerificationError,
- Stage == MachineCodeMotionStage::SelectedSSA
- ? "machine LICM requires selected SSA MachineIR"
- : "post-RA machine LICM requires allocated tracked-liveness MachineIR");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachineMemoryFolding.cpp b/backend/lib/CodeGen/MachineMemoryFolding.cpp
index 75200f8..388f72c 100644
--- a/backend/lib/CodeGen/MachineMemoryFolding.cpp
+++ b/backend/lib/CodeGen/MachineMemoryFolding.cpp
@@ -181,10 +181,6 @@ const MachinePassContract &MachineMemoryFoldingPass::contract() const noexcept {
Expected<MachinePassResult> MachineMemoryFoldingPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "memory folding requires selected SSA MachineIR");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachinePeepholeOptimizer.cpp b/backend/lib/CodeGen/MachinePeepholeOptimizer.cpp
index f874699..16c935d 100644
--- a/backend/lib/CodeGen/MachinePeepholeOptimizer.cpp
+++ b/backend/lib/CodeGen/MachinePeepholeOptimizer.cpp
@@ -41,11 +41,6 @@ const MachinePassContract &MachinePeepholeOptimizerPass::contract() const noexce
Expected<MachinePassResult> MachinePeepholeOptimizerPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "machine peephole optimizer requires SSA MachineIR");
- }
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/MachinePseudoExpansion.cpp b/backend/lib/CodeGen/MachinePseudoExpansion.cpp
index 67a8ef8..36a4b75 100644
--- a/backend/lib/CodeGen/MachinePseudoExpansion.cpp
+++ b/backend/lib/CodeGen/MachinePseudoExpansion.cpp
@@ -406,10 +406,6 @@ const MachinePassContract &PreRATargetPseudoExpansionPass::contract() const noex
Expected<MachinePassResult>
PreRATargetPseudoExpansionPass::run(MachineFunction &Function, const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(ErrorCode::VerificationError,
- "pre-RA pseudo expansion requires selected SSA-exited MIR");
- }
return runExpansionTransaction(Function, Target, *Info, MachinePseudoExpansionPhase::PreRA,
nullptr, Analyses);
}
@@ -421,9 +417,6 @@ const MachinePassContract &PreparePostRAPseudosPass::contract() const noexcept {
Expected<MachinePassResult>
PreparePostRAPseudosPass::run(MachineFunction &Function, const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires))
- return makeUnexpected(ErrorCode::VerificationError,
- "post-RA pseudo preparation requires selected MachineIR");
return runPreparationTransaction(Function, Target, *Info, Analyses);
}
@@ -445,9 +438,6 @@ const MachinePassContract &TargetLatePseudoExpansionPass::contract() const noexc
Expected<MachinePassResult>
TargetLatePseudoExpansionPass::run(MachineFunction &Function, const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires))
- return makeUnexpected(ErrorCode::VerificationError,
- "target-late pseudo expansion requires finalized allocated MIR");
return runExpansionTransaction(Function, Target, *Info, MachinePseudoExpansionPhase::TargetLate,
BranchInfo, Analyses);
}
diff --git a/backend/lib/CodeGen/MachineSink.cpp b/backend/lib/CodeGen/MachineSink.cpp
index 7840115..1c2d2b7 100644
--- a/backend/lib/CodeGen/MachineSink.cpp
+++ b/backend/lib/CodeGen/MachineSink.cpp
@@ -343,13 +343,6 @@ const MachinePassContract &MachineSinkPass::contract() const noexcept {
Expected<MachinePassResult> MachineSinkPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- if (!Function.properties().containsAll(contract().Requires)) {
- return makeUnexpected(
- ErrorCode::VerificationError,
- Stage == MachineCodeMotionStage::SelectedSSA
- ? "machine sink requires SSA MachineIR"
- : "post-RA machine sink requires allocated tracked-liveness MachineIR");
- }
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/PHIElimination.cpp b/backend/lib/CodeGen/PHIElimination.cpp
index f57a950..2c536f5 100644
--- a/backend/lib/CodeGen/PHIElimination.cpp
+++ b/backend/lib/CodeGen/PHIElimination.cpp
@@ -64,15 +64,6 @@ struct PhiPlan final {
std::vector<PhiIncoming> IncomingValues;
};
-[[nodiscard]] Expected<void> requireProperties(const MachineFunction &Function,
- const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (Missing.empty())
- return {};
- return makeUnexpected(ErrorCode::VerificationError,
- Contract.Name + " requires properties: " + Missing.toString());
-}
-
[[nodiscard]] bool isPhi(const MachineInstr &Instruction, const TargetDescription &Target) {
const InstructionDescriptor *Descriptor = Target.instructionDescriptor(Instruction.opcode());
return Descriptor != nullptr && Descriptor->Flags.has(InstructionFlag::Phi);
@@ -486,10 +477,6 @@ const MachinePassContract &PHIEliminationPass::contract() const noexcept {
Expected<MachinePassResult> PHIEliminationPass::run(MachineFunction &Function,
const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- auto Required = requireProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp b/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp
index 1a244ed..568ee68 100644
--- a/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp
+++ b/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp
@@ -44,12 +44,6 @@ Expected<MachinePassResult> PrologueEpilogueInsertionPass::run(MachineFunction &
if (Info == nullptr)
return makeUnexpected(ErrorCode::InvalidArgument,
"PrologueEpilogueInsertion requires target frame lowering");
- const MachineFunctionProperties Missing = contract().Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- "PrologueEpilogueInsertion requires properties: " + Missing.toString());
- }
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});
diff --git a/backend/lib/CodeGen/RegAllocBasic.cpp b/backend/lib/CodeGen/RegAllocBasic.cpp
index 2e2222f..5cb5035 100644
--- a/backend/lib/CodeGen/RegAllocBasic.cpp
+++ b/backend/lib/CodeGen/RegAllocBasic.cpp
@@ -101,9 +101,6 @@ Expected<MachinePassResult> BasicAllocatorPass::run(MachineFunction &Function,
MachineFunctionAnalysisManager &Analyses) {
if (Info == nullptr)
return makeUnexpected(ErrorCode::InvalidArgument, "BasicAllocator requires target behavior");
- auto Required = regalloc_detail::requireAllocationProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
auto Trial = regalloc_detail::cloneForAllocation(Function, Target);
if (!Trial)
return std::unexpected(Trial.error());
diff --git a/backend/lib/CodeGen/RegAllocFast.cpp b/backend/lib/CodeGen/RegAllocFast.cpp
index 7fb1471..9448558 100644
--- a/backend/lib/CodeGen/RegAllocFast.cpp
+++ b/backend/lib/CodeGen/RegAllocFast.cpp
@@ -571,9 +571,6 @@ Expected<MachinePassResult> FastAllocatorPass::run(MachineFunction &Function,
MachineFunctionAnalysisManager &Analyses) {
if (Info == nullptr)
return makeUnexpected(ErrorCode::InvalidArgument, "FastAllocator requires target behavior");
- auto Required = regalloc_detail::requireAllocationProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
auto Trial = regalloc_detail::cloneForAllocation(Function, Target);
if (!Trial)
return std::unexpected(Trial.error());
diff --git a/backend/lib/CodeGen/RegAllocGreedy.cpp b/backend/lib/CodeGen/RegAllocGreedy.cpp
index c00e753..317c297 100644
--- a/backend/lib/CodeGen/RegAllocGreedy.cpp
+++ b/backend/lib/CodeGen/RegAllocGreedy.cpp
@@ -215,10 +215,6 @@ Expected<MachinePassResult> GreedyAllocatorPass::run(MachineFunction &Function,
MachineFunctionAnalysisManager &Analyses) {
if (Info == nullptr)
return makeUnexpected(ErrorCode::InvalidArgument, "greedy allocator requires target behavior");
- auto Required = regalloc_detail::requireAllocationProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
auto Trial = regalloc_detail::cloneForAllocation(Function, Target);
if (!Trial)
return std::unexpected(Trial.error());
diff --git a/backend/lib/CodeGen/RegAllocInternal.h b/backend/lib/CodeGen/RegAllocInternal.h
index 52840cf..3da6387 100644
--- a/backend/lib/CodeGen/RegAllocInternal.h
+++ b/backend/lib/CodeGen/RegAllocInternal.h
@@ -222,16 +222,6 @@ reserveFunctionRegisters(MachineFunction &Function, std::span<const PhysicalRegi
return Result;
}
-[[nodiscard]] inline Expected<void>
-requireAllocationProperties(const MachineFunction &Function, const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (!Missing.empty()) {
- return makeUnexpected(ErrorCode::VerificationError,
- Contract.Name + " requires properties: " + Missing.toString());
- }
- return {};
-}
-
[[nodiscard]] inline Expected<void> verifyAllocationTrial(MachineFunction &Function,
const TargetDescription &Target,
const MachinePassContract &Contract) {
diff --git a/backend/lib/CodeGen/RegAllocPBQP.cpp b/backend/lib/CodeGen/RegAllocPBQP.cpp
index 5b187d8..792ae10 100644
--- a/backend/lib/CodeGen/RegAllocPBQP.cpp
+++ b/backend/lib/CodeGen/RegAllocPBQP.cpp
@@ -296,9 +296,6 @@ Expected<MachinePassResult> PBQPAllocatorPass::run(MachineFunction &Function,
MachineFunctionAnalysisManager &Analyses) {
if (Info == nullptr)
return makeUnexpected(ErrorCode::InvalidArgument, "PBQPAllocator requires target behavior");
- auto Required = regalloc_detail::requireAllocationProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
auto Trial = regalloc_detail::cloneForAllocation(Function, Target);
if (!Trial)
return std::unexpected(Trial.error());
diff --git a/backend/lib/CodeGen/TwoAddressInstructionPass.cpp b/backend/lib/CodeGen/TwoAddressInstructionPass.cpp
index b9e1443..b0b7e5b 100644
--- a/backend/lib/CodeGen/TwoAddressInstructionPass.cpp
+++ b/backend/lib/CodeGen/TwoAddressInstructionPass.cpp
@@ -32,15 +32,6 @@ struct RegisterValue final {
std::uint32_t TargetFlags = 0;
};
-[[nodiscard]] Expected<void> requireProperties(const MachineFunction &Function,
- const MachinePassContract &Contract) {
- const MachineFunctionProperties Missing = Contract.Requires.missingFrom(Function.properties());
- if (Missing.empty())
- return {};
- return makeUnexpected(ErrorCode::VerificationError,
- Contract.Name + " requires properties: " + Missing.toString());
-}
-
[[nodiscard]] RegisterOperandFlags generatedDefFlags(RegisterOperandFlags Original) noexcept {
RegisterOperandFlags Result;
if (Original.has(RegisterOperandFlag::Undef))
@@ -457,10 +448,6 @@ const MachinePassContract &TwoAddressInstructionPass::contract() const noexcept
Expected<MachinePassResult>
TwoAddressInstructionPass::run(MachineFunction &Function, const TargetDescription &Target,
MachineFunctionAnalysisManager &Analyses) {
- auto Required = requireProperties(Function, contract());
- if (!Required)
- return std::unexpected(Required.error());
-
auto Trial = cloneMachineFunction(
Function, Target,
MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt});