aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/ModuloScheduling/MSSchedule.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/ModuloScheduling/MSSchedule.h')
-rw-r--r--lib/CodeGen/ModuloScheduling/MSSchedule.h63
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