diff options
Diffstat (limited to 'backend/lib/CodeGen')
4 files changed, 8 insertions, 11 deletions
diff --git a/backend/lib/CodeGen/MachineBranchRelaxation.cpp b/backend/lib/CodeGen/MachineBranchRelaxation.cpp index 4df4cc8..83ad38c 100644 --- a/backend/lib/CodeGen/MachineBranchRelaxation.cpp +++ b/backend/lib/CodeGen/MachineBranchRelaxation.cpp @@ -29,7 +29,7 @@ struct MachineLayout final { static const MachinePassContract Contract = [] { MachinePassContract Value{ .Name = "branch-relaxation", - .Requires = {MachineFunctionProperty::TracksLiveness}, + .Requires = {}, .Sets = {}, .Clears = {}, .RequiredAnalyses = {}, @@ -100,10 +100,6 @@ const MachinePassContract &MachineBranchRelaxationPass::contract() const noexcep Expected<MachinePassResult> MachineBranchRelaxationPass::run(MachineFunction &Function, const TargetDescription &Target, MachineFunctionAnalysisManager &Analyses) { - if (!Function.properties().containsAll(contract().Requires)) { - return makeUnexpected(ErrorCode::VerificationError, - "branch relaxation requires tracked liveness"); - } auto Trial = cloneMachineFunction( Function, Target, MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt}); diff --git a/backend/lib/CodeGen/MachineOptimizationPipeline.cpp b/backend/lib/CodeGen/MachineOptimizationPipeline.cpp index 812d78c..e61dfdc 100644 --- a/backend/lib/CodeGen/MachineOptimizationPipeline.cpp +++ b/backend/lib/CodeGen/MachineOptimizationPipeline.cpp @@ -93,7 +93,8 @@ addPostRegisterAllocationPipeline(MachineFunctionPassManager &Pipeline, Added = addPass<MachineShrinkWrappingPass>(Pipeline, TargetInfo.FrameLowering); if (!Added) return std::unexpected(Added.error()); - Added = addPass<PrologueEpilogueInsertionPass>(Pipeline, TargetInfo.FrameLowering); + Added = addPass<PrologueEpilogueInsertionPass>(Pipeline, TargetInfo.FrameLowering, + TargetInfo.FrameOptions); if (!Added) return std::unexpected(Added.error()); Added = addPass<MachineBranchOptimizationPass>(Pipeline, TargetInfo.InstrInfo); diff --git a/backend/lib/CodeGen/MachinePseudoExpansion.cpp b/backend/lib/CodeGen/MachinePseudoExpansion.cpp index ef981f5..3d169cc 100644 --- a/backend/lib/CodeGen/MachinePseudoExpansion.cpp +++ b/backend/lib/CodeGen/MachinePseudoExpansion.cpp @@ -169,7 +169,6 @@ using BlockSizeSnapshot = std::vector<std::pair<MachineBlockStableID, std::uint6 MachinePassContract Value{ .Name = "target-late-pseudo-expansion", .Requires = {MachineFunctionProperty::NoPHIs, MachineFunctionProperty::NoVRegs, - MachineFunctionProperty::TracksLiveness, MachineFunctionProperty::FrameFinalized, MachineFunctionProperty::NoFrameIndices}, .Sets = {}, diff --git a/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp b/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp index 4dc40c0..1a244ed 100644 --- a/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp +++ b/backend/lib/CodeGen/PrologueEpilogueInsertion.cpp @@ -55,7 +55,7 @@ Expected<MachinePassResult> PrologueEpilogueInsertionPass::run(MachineFunction & MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt}); if (!Trial) return std::unexpected(withErrorContext(Trial.error(), "frame transaction setup failed: ")); - auto TrialRun = runImplementation(*Trial->ClonedFunction, Target); + auto TrialRun = runImplementation(*Trial->ClonedFunction, Target, {}); if (!TrialRun) return std::unexpected( withErrorContext(TrialRun.error(), "frame transaction rejected input: ")); @@ -75,7 +75,7 @@ Expected<MachinePassResult> PrologueEpilogueInsertionPass::run(MachineFunction & withErrorContext(Verified.error(), "frame transaction postcondition failed: ")); } - auto Result = runImplementation(Function, Target); + auto Result = runImplementation(Function, Target, Options); if (!Result) { return std::unexpected(withErrorContext( Result.error(), "frame lowering diverged after successful transaction preflight: ")); @@ -85,8 +85,9 @@ Expected<MachinePassResult> PrologueEpilogueInsertionPass::run(MachineFunction & Expected<MachinePassResult> PrologueEpilogueInsertionPass::runImplementation(MachineFunction &Function, - const TargetDescription &Target) const { - auto Prepared = Info->prepareFrame(Function, Target); + const TargetDescription &Target, + FrameLoweringOptions RunOptions) const { + auto Prepared = Info->prepareFrame(Function, Target, RunOptions); if (!Prepared) return std::unexpected(Prepared.error()); |
