@@ -137,34 +137,19 @@ namespace {
137137// / Post-process the DAG to create cluster edges between instrs that may
138138// / be fused by the processor into a single operation.
139139class MacroFusion : public ScheduleDAGMutation {
140- std::vector<MacroFusionPredTy> Predicates ;
140+ ShouldSchedulePredTy shouldScheduleAdjacent ;
141141 bool FuseBlock;
142142 bool scheduleAdjacentImpl (ScheduleDAGInstrs &DAG, SUnit &AnchorSU);
143143
144144public:
145- MacroFusion (ArrayRef<MacroFusionPredTy> Predicates, bool FuseBlock)
146- : Predicates(Predicates.begin(), Predicates.end()), FuseBlock(FuseBlock) {
147- }
145+ MacroFusion (ShouldSchedulePredTy shouldScheduleAdjacent, bool FuseBlock)
146+ : shouldScheduleAdjacent(shouldScheduleAdjacent), FuseBlock(FuseBlock) {}
148147
149148 void apply (ScheduleDAGInstrs *DAGInstrs) override ;
150-
151- bool shouldScheduleAdjacent (const TargetInstrInfo &TII,
152- const TargetSubtargetInfo &STI,
153- const MachineInstr *FirstMI,
154- const MachineInstr &SecondMI);
155149};
156150
157151} // end anonymous namespace
158152
159- bool MacroFusion::shouldScheduleAdjacent (const TargetInstrInfo &TII,
160- const TargetSubtargetInfo &STI,
161- const MachineInstr *FirstMI,
162- const MachineInstr &SecondMI) {
163- return llvm::any_of (Predicates, [&](MacroFusionPredTy Predicate) {
164- return Predicate (TII, STI, FirstMI, SecondMI);
165- });
166- }
167-
168153void MacroFusion::apply (ScheduleDAGInstrs *DAG) {
169154 if (FuseBlock)
170155 // For each of the SUnits in the scheduling block, try to fuse the instr in
@@ -212,15 +197,17 @@ bool MacroFusion::scheduleAdjacentImpl(ScheduleDAGInstrs &DAG, SUnit &AnchorSU)
212197}
213198
214199std::unique_ptr<ScheduleDAGMutation>
215- llvm::createMacroFusionDAGMutation (ArrayRef<MacroFusionPredTy> Predicates) {
216- if (EnableMacroFusion)
217- return std::make_unique<MacroFusion>(Predicates, true );
200+ llvm::createMacroFusionDAGMutation (
201+ ShouldSchedulePredTy shouldScheduleAdjacent) {
202+ if (EnableMacroFusion)
203+ return std::make_unique<MacroFusion>(shouldScheduleAdjacent, true );
218204 return nullptr ;
219205}
220206
221- std::unique_ptr<ScheduleDAGMutation> llvm::createBranchMacroFusionDAGMutation (
222- ArrayRef<MacroFusionPredTy> Predicates) {
223- if (EnableMacroFusion)
224- return std::make_unique<MacroFusion>(Predicates, false );
207+ std::unique_ptr<ScheduleDAGMutation>
208+ llvm::createBranchMacroFusionDAGMutation (
209+ ShouldSchedulePredTy shouldScheduleAdjacent) {
210+ if (EnableMacroFusion)
211+ return std::make_unique<MacroFusion>(shouldScheduleAdjacent, false );
225212 return nullptr ;
226213}
0 commit comments