From 642685a400a723e8c0a34aa10d1e3b1bc0893ab9 Mon Sep 17 00:00:00 2001 From: Tanya Lattner Date: Wed, 26 May 2004 06:27:36 +0000 Subject: Adding scheduling class. llvm-svn: 13783 --- llvm/lib/CodeGen/ModuloScheduling/MSSchedule.h | 63 ++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 llvm/lib/CodeGen/ModuloScheduling/MSSchedule.h (limited to 'llvm/lib/CodeGen/ModuloScheduling/MSSchedule.h') diff --git a/llvm/lib/CodeGen/ModuloScheduling/MSSchedule.h b/llvm/lib/CodeGen/ModuloScheduling/MSSchedule.h new file mode 100644 index 00000000000..892ab7c6081 --- /dev/null +++ b/llvm/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 + +namespace llvm { + + class MSSchedule { + std::map > schedule; + unsigned numIssue; + + //Internal map to keep track of explicit resources + std::map > resourceNumPerCycle; + + //Check if all resources are free + bool resourcesFree(MSchedGraphNode*, int); + + //Resulting kernel + std::vector > 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 >* getKernel() { return &kernel; } + bool constructKernel(int II); + + + + //iterators + typedef std::map >::iterator schedule_iterator; + typedef std::map >::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 >::iterator kernel_iterator; + typedef std::vector >::const_iterator kernel_const_iterator; + kernel_iterator kernel_begin() { return kernel.begin(); } + kernel_iterator kernel_end() { return kernel.end(); } + + }; + +} + + +#endif -- cgit v1.2.3