blob: fcf405d72403d266847ecafd73535b6003d8574c [file] [log] [blame]
Tanya Lattner642685a2004-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 Lattnerdbac0cb2004-10-10 22:44:35 +000035 //Max stage count
36 int maxStage;
37
Tanya Lattner341828e2004-11-28 23:36:15 +000038 //add at the right spot in the schedule
39 void addToSchedule(int, MSchedGraphNode*);
40
Tanya Lattner642685a2004-05-26 06:27:36 +000041 public:
42 MSSchedule(int num) : numIssue(num) {}
43 MSSchedule() : numIssue(4) {}
44 bool insert(MSchedGraphNode *node, int cycle);
45 int getStartCycle(MSchedGraphNode *node);
46 void clear() { schedule.clear(); resourceNumPerCycle.clear(); kernel.clear(); }
47 std::vector<std::pair<MSchedGraphNode*, int> >* getKernel() { return &kernel; }
48 bool constructKernel(int II);
Tanya Lattnerdbac0cb2004-10-10 22:44:35 +000049 int getMaxStage() { return maxStage; }
Tanya Lattner642685a2004-05-26 06:27:36 +000050
51
52 //iterators
53 typedef std::map<int, std::vector<MSchedGraphNode*> >::iterator schedule_iterator;
54 typedef std::map<int, std::vector<MSchedGraphNode*> >::const_iterator schedule_const_iterator;
55 schedule_iterator begin() { return schedule.begin(); };
56 schedule_iterator end() { return schedule.end(); };
57 void print(std::ostream &os) const;
58
59 typedef std::vector<std::pair<MSchedGraphNode*, int> >::iterator kernel_iterator;
60 typedef std::vector<std::pair<MSchedGraphNode*, int> >::const_iterator kernel_const_iterator;
61 kernel_iterator kernel_begin() { return kernel.begin(); }
62 kernel_iterator kernel_end() { return kernel.end(); }
63
64 };
65
66}
67
68
69#endif