aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 20:39:04 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 20:39:04 +0800
commit8721893d3ba605f5374d9c0c7987af6110355638 (patch)
treee734a1358a80fbb4dbdc62f1575475da51fabcb8 /backend/lib/CodeGen
parent2ef71f86a2b3e23967e8af08ba1eaaa950f0e1b5 (diff)
downloadrcc-project-8721893d3ba605f5374d9c0c7987af6110355638.tar.gz
rcc-project-8721893d3ba605f5374d9c0c7987af6110355638.tar.xz
[CodeGen] Add TargetInstrInfo ownership
Diffstat (limited to 'backend/lib/CodeGen')
-rw-r--r--backend/lib/CodeGen/CMakeLists.txt5
-rw-r--r--backend/lib/CodeGen/MachineBranchOptimization.cpp8
-rw-r--r--backend/lib/CodeGen/MachineBranchRelaxation.cpp4
-rw-r--r--backend/lib/CodeGen/MachineFallthrough.cpp4
-rw-r--r--backend/lib/CodeGen/MachineFinalization.cpp2
-rw-r--r--backend/lib/CodeGen/MachinePseudoExpansion.cpp10
-rw-r--r--backend/lib/CodeGen/MachineTailDuplication.cpp6
-rw-r--r--backend/lib/CodeGen/MachineTailMerge.cpp6
-rw-r--r--backend/lib/CodeGen/TargetInstrInfo.cpp9
9 files changed, 33 insertions, 21 deletions
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 <algorithm>
#include <cstddef>
@@ -107,7 +107,7 @@ namespace {
[[nodiscard]] Expected<bool> 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<bool> 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<bool> 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 <cstddef>
#include <cstdint>
@@ -63,7 +63,7 @@ struct MachineLayout final {
[[nodiscard]] Expected<MachineLayout> 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 <optional>
#include <string>
@@ -43,7 +43,7 @@ namespace {
[[nodiscard]] Expected<std::vector<MachineBasicBlock *>>
normalizeFallthroughs(MachineFunction &Function, const TargetDescription &Target,
- const TargetBranchInfo &Info) {
+ const TargetInstrInfo &Info) {
std::vector<MachineBasicBlock *> 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 <cstdint>
#include <limits>
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 <cstddef>
#include <cstdint>
@@ -41,7 +41,7 @@ using BlockSizeSnapshot = std::vector<std::pair<MachineBlockStableID, std::uint6
[[nodiscard]] Expected<std::uint64_t> 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<std::pair<MachineBlockStableID, std::uint6
[[nodiscard]] Expected<BlockSizeSnapshot> 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<MachinePassResult>
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<BlockSizeSnapshot> SizesBefore;
if (Phase == MachinePseudoExpansionPhase::TargetLate) {
@@ -380,7 +380,7 @@ runPreparationTransaction(MachineFunction &Function, const TargetDescription &Ta
[[nodiscard]] Expected<MachinePassResult>
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 <algorithm>
#include <cstddef>
@@ -163,7 +163,7 @@ struct TailCandidate final {
[[nodiscard]] Expected<std::optional<TailCandidate>>
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<bool>
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 <algorithm>
#include <cstddef>
@@ -243,7 +243,7 @@ template <typename MaskOperandT>
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 <typename MaskOperandT>
[[nodiscard]] Expected<bool>
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