[llvm] [Sched] Auto add MacroFusion mutation if enabled (PR #72227)
Wang Pengcheng via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 6 19:20:44 PST 2024
https://github.com/wangpc-pp updated https://github.com/llvm/llvm-project/pull/72227
>From 3d72edf26cbb766e1d64c4b4e8a36bfb1855dc0c Mon Sep 17 00:00:00 2001
From: wangpc <wangpengcheng.pp at bytedance.com>
Date: Thu, 9 Nov 2023 19:11:59 +0800
Subject: [PATCH] [Sched] Add MacroFusion mutation if fusions are not empty
We can get the fusions list by `getMacroFusions` and if it is not
empty, then we will add the MacroFusionMutation automatically.
---
llvm/lib/CodeGen/MachineScheduler.cpp | 17 +++++++++++++++--
llvm/lib/Target/RISCV/RISCVTargetMachine.cpp | 17 -----------------
2 files changed, 15 insertions(+), 19 deletions(-)
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp
index c4b6bf3372139..750f739a55990 100644
--- a/llvm/lib/CodeGen/MachineScheduler.cpp
+++ b/llvm/lib/CodeGen/MachineScheduler.cpp
@@ -3804,6 +3804,12 @@ ScheduleDAGMILive *llvm::createGenericSchedLive(MachineSchedContext *C) {
// data and pass it to later mutations. Have a single mutation that gathers
// the interesting nodes in one pass.
DAG->addMutation(createCopyConstrainDAGMutation(DAG->TII, DAG->TRI));
+
+ const TargetSubtargetInfo &STI = C->MF->getSubtarget();
+ // Add MacroFusion mutation if fusions are not empty.
+ const auto &MacroFusions = STI.getMacroFusions();
+ if (!MacroFusions.empty())
+ DAG->addMutation(createMacroFusionDAGMutation(MacroFusions));
return DAG;
}
@@ -3953,8 +3959,15 @@ void PostGenericScheduler::schedNode(SUnit *SU, bool IsTopNode) {
}
ScheduleDAGMI *llvm::createGenericSchedPostRA(MachineSchedContext *C) {
- return new ScheduleDAGMI(C, std::make_unique<PostGenericScheduler>(C),
- /*RemoveKillFlags=*/true);
+ ScheduleDAGMI *DAG =
+ new ScheduleDAGMI(C, std::make_unique<PostGenericScheduler>(C),
+ /*RemoveKillFlags=*/true);
+ const TargetSubtargetInfo &STI = C->MF->getSubtarget();
+ // Add MacroFusion mutation if fusions are not empty.
+ const auto &MacroFusions = STI.getMacroFusions();
+ if (!MacroFusions.empty())
+ DAG->addMutation(createMacroFusionDAGMutation(MacroFusions));
+ return DAG;
}
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
index 2285c99d79010..4d062c0705dad 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
@@ -362,26 +362,9 @@ class RISCVPassConfig : public TargetPassConfig {
DAG->addMutation(createLoadClusterDAGMutation(
DAG->TII, DAG->TRI, /*ReorderWhileClustering=*/true));
}
- const auto &MacroFusions = ST.getMacroFusions();
- if (!MacroFusions.empty()) {
- DAG = DAG ? DAG : createGenericSchedLive(C);
- DAG->addMutation(createMacroFusionDAGMutation(MacroFusions));
- }
return DAG;
}
- ScheduleDAGInstrs *
- createPostMachineScheduler(MachineSchedContext *C) const override {
- const RISCVSubtarget &ST = C->MF->getSubtarget<RISCVSubtarget>();
- const auto &MacroFusions = ST.getMacroFusions();
- if (!MacroFusions.empty()) {
- ScheduleDAGMI *DAG = createGenericSchedPostRA(C);
- DAG->addMutation(createMacroFusionDAGMutation(MacroFusions));
- return DAG;
- }
- return nullptr;
- }
-
void addIRPasses() override;
bool addPreISel() override;
bool addInstSelector() override;
More information about the llvm-commits
mailing list