54 lines · c
1//===- PPCMachineScheduler.h - Custom PowerPC MI scheduler --*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Custom PowerPC MI scheduler.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H14#define LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H15 16#include "llvm/CodeGen/MachineScheduler.h"17 18namespace llvm {19 20/// A MachineSchedStrategy implementation for PowerPC pre RA scheduling.21class PPCPreRASchedStrategy : public GenericScheduler {22public:23 PPCPreRASchedStrategy(const MachineSchedContext *C) :24 GenericScheduler(C) {}25protected:26 bool tryCandidate(SchedCandidate &Cand, SchedCandidate &TryCand,27 SchedBoundary *Zone) const override;28 29private:30 bool biasAddiLoadCandidate(SchedCandidate &Cand,31 SchedCandidate &TryCand,32 SchedBoundary &Zone) const;33};34 35/// A MachineSchedStrategy implementation for PowerPC post RA scheduling.36class PPCPostRASchedStrategy : public PostGenericScheduler {37public:38 PPCPostRASchedStrategy(const MachineSchedContext *C) :39 PostGenericScheduler(C) {}40 41protected:42 void initialize(ScheduleDAGMI *Dag) override;43 SUnit *pickNode(bool &IsTopNode) override;44 void enterMBB(MachineBasicBlock *MBB) override;45 void leaveMBB() override;46 47 bool tryCandidate(SchedCandidate &Cand, SchedCandidate &TryCand) override;48 bool biasAddiCandidate(SchedCandidate &Cand, SchedCandidate &TryCand) const;49};50 51} // end namespace llvm52 53#endif // LLVM_LIB_TARGET_POWERPC_POWERPCMACHINESCHEDULER_H54