Skip to content

Commit

Permalink
[Sched] Auto add MacroFusion mutation if enabled
Browse files Browse the repository at this point in the history
We can get the information by `enableMacroFusion`.
  • Loading branch information
wangpc-pp committed Nov 21, 2023
1 parent 31d8a99 commit e2bdff1
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 24 deletions.
15 changes: 13 additions & 2 deletions llvm/lib/CodeGen/MachineScheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3791,6 +3791,11 @@ 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 MacroFusionDAGMutation if enabled.
if (STI.enableMacroFusion())
DAG->addMutation(createMacroFusionDAGMutation(STI.getMacroFusions()));
return DAG;
}

Expand Down Expand Up @@ -3940,8 +3945,14 @@ 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 MacroFusionDAGMutation if enabled.
if (STI.enableMacroFusion())
DAG->addMutation(createMacroFusionDAGMutation(STI.getMacroFusions()));
return DAG;
}

//===----------------------------------------------------------------------===//
Expand Down
22 changes: 0 additions & 22 deletions llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,28 +343,6 @@ class RISCVPassConfig : public TargetPassConfig {
return getTM<RISCVTargetMachine>();
}

ScheduleDAGInstrs *
createMachineScheduler(MachineSchedContext *C) const override {
const RISCVSubtarget &ST = C->MF->getSubtarget<RISCVSubtarget>();
if (ST.enableMacroFusion()) {
ScheduleDAGMILive *DAG = createGenericSchedLive(C);
DAG->addMutation(createMacroFusionDAGMutation(ST.getMacroFusions()));
return DAG;
}
return nullptr;
}

ScheduleDAGInstrs *
createPostMachineScheduler(MachineSchedContext *C) const override {
const RISCVSubtarget &ST = C->MF->getSubtarget<RISCVSubtarget>();
if (ST.enableMacroFusion()) {
ScheduleDAGMI *DAG = createGenericSchedPostRA(C);
DAG->addMutation(createMacroFusionDAGMutation(ST.getMacroFusions()));
return DAG;
}
return nullptr;
}

void addIRPasses() override;
bool addPreISel() override;
bool addInstSelector() override;
Expand Down

0 comments on commit e2bdff1

Please sign in to comment.