//===- PPCMachineScheduler.h - Custom PowerPC MI scheduler --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Custom PowerPC MI scheduler. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H #define LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H #include "llvm/CodeGen/MachineScheduler.h" namespace llvm { /// A MachineSchedStrategy implementation for PowerPC pre RA scheduling. class PPCPreRASchedStrategy : public GenericScheduler { public: PPCPreRASchedStrategy(const MachineSchedContext *C) : GenericScheduler(C) {} protected: void tryCandidate(SchedCandidate &Cand, SchedCandidate &TryCand, SchedBoundary *Zone) const override; private: bool biasAddiLoadCandidate(SchedCandidate &Cand, SchedCandidate &TryCand, SchedBoundary &Zone) const; }; /// A MachineSchedStrategy implementation for PowerPC post RA scheduling. class PPCPostRASchedStrategy : public PostGenericScheduler { public: PPCPostRASchedStrategy(const MachineSchedContext *C) : PostGenericScheduler(C) {} protected: void initialize(ScheduleDAGMI *Dag) override; SUnit *pickNode(bool &IsTopNode) override; void enterMBB(MachineBasicBlock *MBB) override; void leaveMBB() override; void tryCandidate(SchedCandidate &Cand, SchedCandidate &TryCand) override; bool biasAddiCandidate(SchedCandidate &Cand, SchedCandidate &TryCand) const; }; } // end namespace llvm #endif // LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H