blob: 892ab7c6081bbdfbf1059b35c498e76f0fed8023 [file] [log] [blame]
Tanya Lattnerebac6452004-05-26 06:27:36 +00001//===-- MSSchedule.h - Schedule ------- -------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// The schedule generated by a scheduling algorithm
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_MSSCHEDULE_H
15#define LLVM_MSSCHEDULE_H
16
17#include "MSchedGraph.h"
18#include <vector>
19
20namespace llvm {
21
22 class MSSchedule {
23 std::map<int, std::vector<MSchedGraphNode*> > schedule;
24 unsigned numIssue;
25
26 //Internal map to keep track of explicit resources
27 std::map<int, std::map<int, int> > resourceNumPerCycle;
28
29 //Check if all resources are free
30 bool resourcesFree(MSchedGraphNode*, int);
31
32 //Resulting kernel
33 std::vector<std::pair<MSchedGraphNode*, int> > kernel;
34
35 public:
36 MSSchedule(int num) : numIssue(num) {}
37 MSSchedule() : numIssue(4) {}
38 bool insert(MSchedGraphNode *node, int cycle);
39 int getStartCycle(MSchedGraphNode *node);
40 void clear() { schedule.clear(); resourceNumPerCycle.clear(); kernel.clear(); }
41 std::vector<std::pair<MSchedGraphNode*, int> >* getKernel() { return &kernel; }
42 bool constructKernel(int II);
43
44
45
46 //iterators
47 typedef std::map<int, std::vector<MSchedGraphNode*> >::iterator schedule_iterator;
48 typedef std::map<int, std::vector<MSchedGraphNode*> >::const_iterator schedule_const_iterator;
49 schedule_iterator begin() { return schedule.begin(); };
50 schedule_iterator end() { return schedule.end(); };
51 void print(std::ostream &os) const;
52
53 typedef std::vector<std::pair<MSchedGraphNode*, int> >::iterator kernel_iterator;
54 typedef std::vector<std::pair<MSchedGraphNode*, int> >::const_iterator kernel_const_iterator;
55 kernel_iterator kernel_begin() { return kernel.begin(); }
56 kernel_iterator kernel_end() { return kernel.end(); }
57
58 };
59
60}
61
62
63#endif