| //===----- SchedulePostRAList.cpp - list scheduler ------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This implements a top-down list scheduler, using standard algorithms. |
| // The basic approach uses a priority queue of available nodes to schedule. |
| // One at a time, nodes are taken from the priority queue (thus in priority |
| // order), checked for legality to schedule, and emitted if legal. |
| // |
| // Nodes may not be legal to schedule either due to structural hazards (e.g. |
| // pipeline or resource constraints) or because an input to the instruction has |
| // not completed execution. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #define DEBUG_TYPE "post-RA-sched" |
| #include "llvm/CodeGen/Passes.h" |
| #include "llvm/CodeGen/MachineFunctionPass.h" |
| #include "llvm/Support/Compiler.h" |
| #include "llvm/Support/Debug.h" |
| using namespace llvm; |
| |
| namespace { |
| class VISIBILITY_HIDDEN SchedulePostRATDList : public MachineFunctionPass { |
| public: |
| static char ID; |
| SchedulePostRATDList() : MachineFunctionPass(&ID) {} |
| private: |
| MachineFunction *MF; |
| const TargetMachine *TM; |
| public: |
| const char *getPassName() const { |
| return "Post RA top-down list latency scheduler (STUB)"; |
| } |
| |
| bool runOnMachineFunction(MachineFunction &Fn); |
| }; |
| char SchedulePostRATDList::ID = 0; |
| } |
| |
| bool SchedulePostRATDList::runOnMachineFunction(MachineFunction &Fn) { |
| DOUT << "SchedulePostRATDList\n"; |
| MF = &Fn; |
| TM = &MF->getTarget(); |
| |
| // Loop over all of the basic blocks |
| for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end(); |
| MBB != MBBe; ++MBB) |
| ; |
| |
| return true; |
| } |
| |
| |
| //===----------------------------------------------------------------------===// |
| // Public Constructor Functions |
| //===----------------------------------------------------------------------===// |
| |
| FunctionPass *llvm::createPostRAScheduler() { |
| return new SchedulePostRATDList(); |
| } |