From 8721893d3ba605f5374d9c0c7987af6110355638 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 12 Aug 2026 20:39:04 +0800 Subject: [CodeGen] Add TargetInstrInfo ownership --- backend/lib/CodeGen/CMakeLists.txt | 5 ++++- backend/lib/CodeGen/MachineBranchOptimization.cpp | 8 ++++---- backend/lib/CodeGen/MachineBranchRelaxation.cpp | 4 ++-- backend/lib/CodeGen/MachineFallthrough.cpp | 4 ++-- backend/lib/CodeGen/MachineFinalization.cpp | 2 +- backend/lib/CodeGen/MachinePseudoExpansion.cpp | 10 +++++----- backend/lib/CodeGen/MachineTailDuplication.cpp | 6 +++--- backend/lib/CodeGen/MachineTailMerge.cpp | 6 +++--- backend/lib/CodeGen/TargetInstrInfo.cpp | 9 +++++++++ 9 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 backend/lib/CodeGen/TargetInstrInfo.cpp (limited to 'backend/lib/CodeGen') diff --git a/backend/lib/CodeGen/CMakeLists.txt b/backend/lib/CodeGen/CMakeLists.txt index e584131..3a1f34c 100644 --- a/backend/lib/CodeGen/CMakeLists.txt +++ b/backend/lib/CodeGen/CMakeLists.txt @@ -75,6 +75,7 @@ set( RegisterMask.cpp TargetConstant.cpp TargetCallLowering.cpp + TargetInstrInfo.cpp TargetDescription.cpp TargetFunctionState.cpp TargetMIRTextInfo.cpp @@ -166,7 +167,7 @@ set( "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/StableID.h" "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetConstant.h" "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetCallLowering.h" - "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetBranchInfo.h" + "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetInstrInfo.h" "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetDescription.h" "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetFunctionState.h" "${RCC_BACKEND_SOURCE_DIR}/include/rcc/CodeGen/TargetMIRTextInfo.h" @@ -279,6 +280,7 @@ rcc_backend_register_format_files( "${CMAKE_CURRENT_SOURCE_DIR}/RegisterMask.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetConstant.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetCallLowering.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/TargetInstrInfo.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetDescription.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetFunctionState.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetMIRTextInfo.cpp" @@ -357,6 +359,7 @@ rcc_backend_register_tidy_files( "${CMAKE_CURRENT_SOURCE_DIR}/RegisterMask.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetConstant.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetCallLowering.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/TargetInstrInfo.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetDescription.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetFunctionState.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/TargetMIRTextInfo.cpp" diff --git a/backend/lib/CodeGen/MachineBranchOptimization.cpp b/backend/lib/CodeGen/MachineBranchOptimization.cpp index 6c6ac51..19127ea 100644 --- a/backend/lib/CodeGen/MachineBranchOptimization.cpp +++ b/backend/lib/CodeGen/MachineBranchOptimization.cpp @@ -12,8 +12,8 @@ #include "rcc/CodeGen/MachineInstr.h" #include "rcc/CodeGen/MachineJumpTableInfo.h" #include "rcc/CodeGen/MachineLiveness.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -107,7 +107,7 @@ namespace { [[nodiscard]] Expected foldConstantBranches(MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info) { + const TargetInstrInfo &Info) { bool Changed = false; MachineCFGUpdater CFG = Function.cfgUpdater(); for (MachineBasicBlock *Block = Function.firstBlock(); Block != nullptr; Block = Block->next()) { @@ -198,7 +198,7 @@ namespace { [[nodiscard]] Expected isForwardingBlock(MachineBasicBlock &Block, MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info) { + const TargetInstrInfo &Info) { if (&Block == Function.firstBlock() || Block.successors().size() != 1 || Block.successors().front().Block == nullptr || Block.successors().front().Block == &Block || hasObservableBlockIdentity(Block, Function)) { @@ -222,7 +222,7 @@ namespace { [[nodiscard]] Expected threadForwardingBlocks(MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info, + const TargetInstrInfo &Info, std::size_t MaximumEdges) { MachineCFGUpdater CFG = Function.cfgUpdater(); std::size_t ThreadedEdges = 0; diff --git a/backend/lib/CodeGen/MachineBranchRelaxation.cpp b/backend/lib/CodeGen/MachineBranchRelaxation.cpp index b2a330a..9ffb821 100644 --- a/backend/lib/CodeGen/MachineBranchRelaxation.cpp +++ b/backend/lib/CodeGen/MachineBranchRelaxation.cpp @@ -7,8 +7,8 @@ #include "rcc/CodeGen/MachineFunctionCloner.h" #include "rcc/CodeGen/MachineInstr.h" #include "rcc/CodeGen/MachineLiveness.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -63,7 +63,7 @@ struct MachineLayout final { [[nodiscard]] Expected computeLayout(MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info) { + const TargetInstrInfo &Info) { MachineLayout Result; std::uint64_t Offset = 0; for (MachineBasicBlock *Block = Function.firstBlock(); Block != nullptr; Block = Block->next()) { diff --git a/backend/lib/CodeGen/MachineFallthrough.cpp b/backend/lib/CodeGen/MachineFallthrough.cpp index 06d70ef..a853f96 100644 --- a/backend/lib/CodeGen/MachineFallthrough.cpp +++ b/backend/lib/CodeGen/MachineFallthrough.cpp @@ -7,8 +7,8 @@ #include "rcc/CodeGen/MachineFunctionCloner.h" #include "rcc/CodeGen/MachineLiveness.h" #include "rcc/CodeGen/MachineLivenessRepair.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -43,7 +43,7 @@ namespace { [[nodiscard]] Expected> normalizeFallthroughs(MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info) { + const TargetInstrInfo &Info) { std::vector ChangedBlocks; for (MachineBasicBlock *Block = Function.firstBlock(); Block != nullptr; Block = Block->next()) { MachineBasicBlock *LayoutSuccessor = Block->next(); diff --git a/backend/lib/CodeGen/MachineFinalization.cpp b/backend/lib/CodeGen/MachineFinalization.cpp index 8523bb8..8947b86 100644 --- a/backend/lib/CodeGen/MachineFinalization.cpp +++ b/backend/lib/CodeGen/MachineFinalization.cpp @@ -7,8 +7,8 @@ #include "rcc/CodeGen/MachineFunction.h" #include "rcc/CodeGen/MachineInstr.h" #include "rcc/CodeGen/MachineOperand.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include diff --git a/backend/lib/CodeGen/MachinePseudoExpansion.cpp b/backend/lib/CodeGen/MachinePseudoExpansion.cpp index 022c63e..b97d926 100644 --- a/backend/lib/CodeGen/MachinePseudoExpansion.cpp +++ b/backend/lib/CodeGen/MachinePseudoExpansion.cpp @@ -11,8 +11,8 @@ #include "rcc/CodeGen/MachineLiveness.h" #include "rcc/CodeGen/MachineOperand.h" #include "rcc/CodeGen/MachineRegisterInfo.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -41,7 +41,7 @@ using BlockSizeSnapshot = std::vector blockSize(const MachineBasicBlock &Block, const MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &BranchInfo) { + const TargetInstrInfo &BranchInfo) { std::uint64_t Size = 0; for (const MachineInstr *Instruction = Block.firstInstruction(); Instruction != nullptr; Instruction = Instruction->next()) { @@ -58,7 +58,7 @@ using BlockSizeSnapshot = std::vector snapshotBlockSizes(const MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &BranchInfo) { + const TargetInstrInfo &BranchInfo) { BlockSizeSnapshot Result; for (const MachineBasicBlock *Block = Function.firstBlock(); Block != nullptr; Block = Block->next()) { @@ -248,7 +248,7 @@ prepareImplementation(MachineFunction &Function, const TargetDescription &Target [[nodiscard]] Expected expandImplementation(MachineFunction &Function, const TargetDescription &Target, const TargetPseudoExpansionInfo &Info, MachinePseudoExpansionPhase Phase, - const TargetBranchInfo *BranchInfo, MachineActionReplay &Actions) { + const TargetInstrInfo *BranchInfo, MachineActionReplay &Actions) { const ResourceSnapshot Before = snapshotResources(Function); std::optional SizesBefore; if (Phase == MachinePseudoExpansionPhase::TargetLate) { @@ -380,7 +380,7 @@ runPreparationTransaction(MachineFunction &Function, const TargetDescription &Ta [[nodiscard]] Expected runExpansionTransaction(MachineFunction &Function, const TargetDescription &Target, const TargetPseudoExpansionInfo &Info, MachinePseudoExpansionPhase Phase, - const TargetBranchInfo *BranchInfo, MachineAnalysisManager &Analyses) { + const TargetInstrInfo *BranchInfo, MachineAnalysisManager &Analyses) { auto Trial = cloneMachineFunction( Function, Target, MachineFunctionCloneOptions{.NewStableID = Function.stableID(), .NewName = std::nullopt}); diff --git a/backend/lib/CodeGen/MachineTailDuplication.cpp b/backend/lib/CodeGen/MachineTailDuplication.cpp index 40d448f..a4b31b2 100644 --- a/backend/lib/CodeGen/MachineTailDuplication.cpp +++ b/backend/lib/CodeGen/MachineTailDuplication.cpp @@ -13,8 +13,8 @@ #include "rcc/CodeGen/MachineLiveness.h" #include "rcc/CodeGen/MachineMemOperand.h" #include "rcc/CodeGen/MachineOperand.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -163,7 +163,7 @@ struct TailCandidate final { [[nodiscard]] Expected> analyzeTail(MachineBasicBlock &Tail, MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info, std::size_t MaximumInstructions) { + const TargetInstrInfo &Info, std::size_t MaximumInstructions) { if (&Tail == Function.firstBlock() || Tail.predecessors().size() < 2 || Tail.successors().size() != 1 || Tail.successors().front().Block == nullptr || hasProtectedIdentity(Tail, Function)) { @@ -201,7 +201,7 @@ analyzeTail(MachineBasicBlock &Tail, MachineFunction &Function, const TargetDesc [[nodiscard]] Expected duplicateTailIntoPredecessor(const TailCandidate &Candidate, MachineBasicBlock &Tail, MachineBasicBlock &Predecessor, MachineFunction &Function, - const TargetDescription &Target, const TargetBranchInfo &Info) { + const TargetDescription &Target, const TargetInstrInfo &Info) { if (Predecessor.successors().size() != 1 || Predecessor.successors().front().Block != &Tail) { return false; } diff --git a/backend/lib/CodeGen/MachineTailMerge.cpp b/backend/lib/CodeGen/MachineTailMerge.cpp index b754978..c8aad80 100644 --- a/backend/lib/CodeGen/MachineTailMerge.cpp +++ b/backend/lib/CodeGen/MachineTailMerge.cpp @@ -14,8 +14,8 @@ #include "rcc/CodeGen/MachineMemOperand.h" #include "rcc/CodeGen/MachineOperand.h" #include "rcc/CodeGen/RegisterMask.h" -#include "rcc/CodeGen/TargetBranchInfo.h" #include "rcc/CodeGen/TargetDescription.h" +#include "rcc/CodeGen/TargetInstrInfo.h" #include #include @@ -243,7 +243,7 @@ template MachineBasicBlock &Duplicate, MachineFunction &Function, const TargetDescription &Target, - const TargetBranchInfo &Info) { + const TargetInstrInfo &Info) { auto Analysis = Info.analyzeBranch(Predecessor, Function, Target); if (!Analysis) return std::unexpected(Analysis.error()); @@ -264,7 +264,7 @@ template [[nodiscard]] Expected redirectPredecessor(MachineBasicBlock &Predecessor, MachineBasicBlock &Duplicate, MachineBasicBlock &Canonical, MachineFunction &Function, - const TargetDescription &Target, const TargetBranchInfo &Info) { + const TargetDescription &Target, const TargetInstrInfo &Info) { auto Analysis = Info.analyzeBranch(Predecessor, Function, Target); if (!Analysis) return std::unexpected(Analysis.error()); diff --git a/backend/lib/CodeGen/TargetInstrInfo.cpp b/backend/lib/CodeGen/TargetInstrInfo.cpp new file mode 100644 index 0000000..14e56ad --- /dev/null +++ b/backend/lib/CodeGen/TargetInstrInfo.cpp @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "rcc/CodeGen/TargetInstrInfo.h" + +namespace rcc { + +TargetInstrInfo::~TargetInstrInfo() = default; + +} // namespace rcc -- cgit v1.2.3