blob: 248a74859177bba025d342287da52d3a4459e36d [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
Tanya Lattner420025b2004-10-10 22:44:35 +000035 //Max stage count
36 int maxStage;
37
Tanya Lattnerebac6452004-05-26 06:27:36 +000038 public:
39 MSSchedule(int num) : numIssue(num) {}
40 MSSchedule() : numIssue(4) {}
41 bool insert(MSchedGraphNode *node, int cycle);
42 int getStartCycle(MSchedGraphNode *node);
43 void clear() { schedule.clear(); resourceNumPerCycle.clear(); kernel.clear(); }
44 std::vector<std::pair<MSchedGraphNode*, int> >* getKernel() { return &kernel; }
45 bool constructKernel(int II);
Tanya Lattner420025b2004-10-10 22:44:35 +000046 int getMaxStage() { return maxStage; }
Tanya Lattnerebac6452004-05-26 06:27:36 +000047
48
49 //iterators
50 typedef std::map<int, std::vector<MSchedGraphNode*> >::iterator schedule_iterator;
51 typedef std::map<int, std::vector<MSchedGraphNode*> >::const_iterator schedule_const_iterator;
52 schedule_iterator begin() { return schedule.begin(); };
53 schedule_iterator end() { return schedule.end(); };
54 void print(std::ostream &os) const;
55
56 typedef std::vector<std::pair<MSchedGraphNode*, int> >::iterator kernel_iterator;
57 typedef std::vector<std::pair<MSchedGraphNode*, int> >::const_iterator kernel_const_iterator;
58 kernel_iterator kernel_begin() { return kernel.begin(); }
59 kernel_iterator kernel_end() { return kernel.end(); }
60
61 };
62
63}
64
65
66#endif