ScheduleDAGInstrs.h revision c9a5b9e38b442c2ae6b115213a07df3fcd14708d
1//==- llvm/CodeGen/ScheduleDAGInstrs.h - MachineInstr Scheduling -*- C++ -*-==// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file implements the ScheduleDAGInstrs class, which implements 11// scheduling for a MachineInstr-based dependency graph. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_CODEGEN_SCHEDULEDAGINSTRS_H 16#define LLVM_CODEGEN_SCHEDULEDAGINSTRS_H 17 18#include "llvm/CodeGen/ScheduleDAG.h" 19 20namespace llvm { 21 class MachineLoopInfo; 22 class MachineDominatorTree; 23 24 class ScheduleDAGInstrs : public ScheduleDAG { 25 const MachineLoopInfo &MLI; 26 const MachineDominatorTree &MDT; 27 28 public: 29 ScheduleDAGInstrs(MachineBasicBlock *bb, 30 const TargetMachine &tm, 31 const MachineLoopInfo &mli, 32 const MachineDominatorTree &mdt); 33 34 virtual ~ScheduleDAGInstrs() {} 35 36 /// NewSUnit - Creates a new SUnit and return a ptr to it. 37 /// 38 SUnit *NewSUnit(MachineInstr *MI) { 39#ifndef NDEBUG 40 const SUnit *Addr = &SUnits[0]; 41#endif 42 SUnits.push_back(SUnit(MI, (unsigned)SUnits.size())); 43 assert(Addr == &SUnits[0] && "SUnits std::vector reallocated on the fly!"); 44 SUnits.back().OrigNode = &SUnits.back(); 45 return &SUnits.back(); 46 } 47 48 /// BuildSchedGraph - Build SUnits from the MachineBasicBlock that we are 49 /// input. 50 virtual void BuildSchedGraph(); 51 52 /// ComputeLatency - Compute node latency. 53 /// 54 virtual void ComputeLatency(SUnit *SU); 55 56 virtual MachineBasicBlock *EmitSchedule(); 57 58 /// Schedule - Order nodes according to selected style, filling 59 /// in the Sequence member. 60 /// 61 virtual void Schedule() = 0; 62 63 virtual void dumpNode(const SUnit *SU) const; 64 65 virtual std::string getGraphNodeLabel(const SUnit *SU) const; 66 }; 67} 68 69#endif 70