Adding scheduling class.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13783 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/ModuloScheduling/MSSchedule.h b/lib/CodeGen/ModuloScheduling/MSSchedule.h
new file mode 100644
index 0000000..892ab7c
--- /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