From 3d72edf26cbb766e1d64c4b4e8a36bfb1855dc0c Mon Sep 17 00:00:00 2001 From: wangpc 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 c4b6bf3372139e7..750f739a559900b 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(C), - /*RemoveKillFlags=*/true); + ScheduleDAGMI *DAG = + new ScheduleDAGMI(C, std::make_unique(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 2285c99d7901007..4d062c0705dad16 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(); - 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;