//===---------------------------- GCNILPSched.cpp - -----------------------===// // // 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 // //===----------------------------------------------------------------------===// // /// \file // //===----------------------------------------------------------------------===// #include "llvm/CodeGen/ScheduleDAG.h" usingnamespacellvm; #define DEBUG_TYPE … namespace { class GCNILPScheduler { … }; } // namespace /// CalcNodeSethiUllmanNumber - Compute Sethi Ullman number. /// Smaller number is the higher priority. static unsigned CalcNodeSethiUllmanNumber(const SUnit *SU, std::vector<unsigned> &SUNumbers) { … } // Lower priority means schedule further down. For bottom-up scheduling, lower // priority SUs are scheduled before higher priority SUs. unsigned GCNILPScheduler::getNodePriority(const SUnit *SU) const { … } /// closestSucc - Returns the scheduled cycle of the successor which is /// closest to the current cycle. static unsigned closestSucc(const SUnit *SU) { … } /// calcMaxScratches - Returns an cost estimate of the worse case requirement /// for scratch registers, i.e. number of data dependencies. static unsigned calcMaxScratches(const SUnit *SU) { … } // Return -1 if left has higher priority, 1 if right has higher priority. // Return 0 if latency-based priority is equivalent. static int BUCompareLatency(const SUnit *left, const SUnit *right) { … } const SUnit *GCNILPScheduler::pickBest(const SUnit *left, const SUnit *right) { … } GCNILPScheduler::Candidate* GCNILPScheduler::pickCandidate() { … } void GCNILPScheduler::releasePending() { … } /// Move the scheduler state forward by the specified number of Cycles. void GCNILPScheduler::advanceToCycle(unsigned NextCycle) { … } void GCNILPScheduler::releasePredecessors(const SUnit* SU) { … } std::vector<const SUnit*> GCNILPScheduler::schedule(ArrayRef<const SUnit*> BotRoots, const ScheduleDAG &DAG) { … } namespace llvm { std::vector<const SUnit*> makeGCNILPScheduler(ArrayRef<const SUnit*> BotRoots, const ScheduleDAG &DAG) { … } } // namespace llvm