diff options
Diffstat (limited to 'lib/CodeGen/ModuloScheduling/MSSchedule.h')
-rw-r--r-- | lib/CodeGen/ModuloScheduling/MSSchedule.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/CodeGen/ModuloScheduling/MSSchedule.h b/lib/CodeGen/ModuloScheduling/MSSchedule.h new file mode 100644 index 0000000000..892ab7c608 --- /dev/null +++ b/lib/CodeGen/ModuloScheduling/MSSchedule.h @@ -0,0 +1,63 @@ +//===-- MSSchedule.h - Schedule ------- -------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// The schedule generated by a scheduling algorithm +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MSSCHEDULE_H +#define LLVM_MSSCHEDULE_H + +#include "MSchedGraph.h" +#include <vector> + +namespace llvm { + + class MSSchedule { + std::map<int, std::vector<MSchedGraphNode*> > schedule; + unsigned numIssue; + + //Internal map to keep track of explicit resources + std::map<int, std::map<int, int> > resourceNumPerCycle; + + //Check if all resources are free + bool resourcesFree(MSchedGraphNode*, int); + + //Resulting kernel + std::vector<std::pair<MSchedGraphNode*, int> > kernel; + + public: + MSSchedule(int num) : numIssue(num) {} + MSSchedule() : numIssue(4) {} + bool insert(MSchedGraphNode *node, int cycle); + int getStartCycle(MSchedGraphNode *node); + void clear() { schedule.clear(); resourceNumPerCycle.clear(); kernel.clear(); } + std::vector<std::pair<MSchedGraphNode*, int> >* getKernel() { return &kernel; } + bool constructKernel(int II); + + + + //iterators + typedef std::map<int, std::vector<MSchedGraphNode*> >::iterator schedule_iterator; + typedef std::map<int, std::vector<MSchedGraphNode*> >::const_iterator schedule_const_iterator; + schedule_iterator begin() { return schedule.begin(); }; + schedule_iterator end() { return schedule.end(); }; + void print(std::ostream &os) const; + + typedef std::vector<std::pair<MSchedGraphNode*, int> >::iterator kernel_iterator; + typedef std::vector<std::pair<MSchedGraphNode*, int> >::const_iterator kernel_const_iterator; + kernel_iterator kernel_begin() { return kernel.begin(); } + kernel_iterator kernel_end() { return kernel.end(); } + + }; + +} + + +#endif |