#include "Support/StringExtras.h"
#include "Support/STLExtras.h"
#include <iostream>
-#include <swig.h>
+//#include <swig.h>
#include "llvm/iOperators.h"
#include "llvm/iOther.h"
#include "llvm/iPHINode.h"
#include "llvm/Type.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/Target/MachineSchedInfo.h"
+#include "llvm/Target/TargetSchedInfo.h"
#define UNIDELAY 1
#define min(a, b) ((a) < (b) ? (a) : (b))
void ModuloSchedGraph::addDefUseEdges(const BasicBlock* bb)
{
//collect def instructions, store them in vector
- const MachineInstrInfo& mii = target.getInstrInfo();
+ // const TargetInstrInfo& mii = target.getInstrInfo();
+ const TargetInstrInfo& mii = target.getInstrInfo();
typedef std::vector<ModuloSchedGraphNode*> DefVec;
DefVec defVec;
RegToRefVecMap& regToRefVecMap,
ValueToDefVecMap& valueToDefVecMap)
{
- //const MachineInstrInfo& mii=target.getInstrInfo();
+ //const TargetInstrInfo& mii=target.getInstrInfo();
//Build graph nodes for each LLVM instruction and gather def/use info.
//Do both together in a single pass over all machine instructions.
this->dump(bb);
if(!isLoop(bb)){
- modSched_os <<" dumping non-loop BB:"<<endl;
+ modSched_os <<" dumping non-loop BB:\n";
dump(bb);
}
if( isLoop(bb))
}
void ModuloSchedGraph::dumpResourceUsage(std::vector< pair<int,int> > &ru)
{
- MachineSchedInfo& msi = (MachineSchedInfo&)target.getSchedInfo();
+ TargetSchedInfo& msi = (TargetSchedInfo&)target.getSchedInfo();
std::vector<pair<int,int> > resourceNumVector = msi.resourceNumVector;
modSched_os <<"resourceID\t"<<"resourceNum"<<"\n";
int ModuloSchedGraph::computeResII(const BasicBlock* bb)
{
- const MachineInstrInfo& mii = target.getInstrInfo();
- const MachineSchedInfo& msi = target.getSchedInfo();
+ const TargetInstrInfo& mii = target.getInstrInfo();
+ const TargetSchedInfo& msi = target.getSchedInfo();
int ResII;
std::vector<pair<int,int> > resourceUsage; //pair<int resourceid, int resourceUsageTimes_in_the_whole_block>
#include "../InstrSched/SchedGraphCommon.h"
#include "llvm/Instruction.h"
#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetInstrInfo.h"
#include <iostream>
using std::pair;
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
-#include "llvm/CodeGen/MachineCodeForBasicBlock.h"
-#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
+//#include "llvm/CodeGen/MachineCodeForBasicBlock.h"
+//#include "llvm/CodeGen/MachineCodeForMethod.h"
+#include "llvm/CodeGen/MachineFunction.h"
+//#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
#include "llvm/Target/TargetMachine.h"
#include "llvm/BasicBlock.h"
#include "llvm/Instruction.h"
#include <algorithm>
#include "ModuloSchedGraph.h"
#include "ModuloScheduling.h"
-#include "llvm/Target/MachineSchedInfo.h"
+#include "llvm/Target/TargetSchedInfo.h"
#include "llvm/BasicBlock.h"
#include "llvm/iTerminators.h"
#include "llvm/iPHINode.h"
#include "llvm/Constants.h"
#include <iostream>
-#include <swig.h>
+//#include <swig.h>
#include <fstream>
#include "llvm/CodeGen/InstrSelection.h"
modSched_os<<"*************************computing modulo schedule ************************\n";
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
//number of issue slots in the in each cycle
int numIssueSlots=msi.maxNumIssueTotal;
}
//clear memory from the last round and initialize if necessary
-void ModuloScheduling::clearInitMem(const MachineSchedInfo& msi){
+void ModuloScheduling::clearInitMem(const TargetSchedInfo& msi){
unsigned numIssueSlots = msi.maxNumIssueTotal;
//clear nodeScheduled from the last round
if( ModuloSchedDebugLevel >= ModuloSched_PrintScheduleProcess){
- modSched_os<< "***** new round with II= "<<II<<" *******************"<<endl;
+ modSched_os<< "***** new round with II= "<<II<<" *******************"<<"\n";
modSched_os<< " **************clear the vector nodeScheduled**************** \n";
}
nodeScheduled.clear();
bool ModuloScheduling::ScheduleNode(ModuloSchedGraphNode* node,unsigned start, unsigned end, NodeVec& nodeScheduled)
{
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned int numIssueSlots=msi.maxNumIssueTotal;
if( ModuloSchedDebugLevel >= ModuloSched_PrintScheduleProcess)
const Instruction* instr=node->getInst();
MachineCodeForInstruction& tempMvec= MachineCodeForInstruction::get(instr);
bool resourceConflict=false;
- const MachineInstrInfo &mii=msi.getInstrInfo();
+ const TargetInstrInfo &mii=msi.getInstrInfo();
if(coreSchedule.size() < core_i+1 || !coreSchedule[core_i][core_j]){
//this->dumpResourceUsageTable();
//-----------------------------------------------------------------------
void ModuloScheduling::dumpSchedule(std::vector< std::vector<ModuloSchedGraphNode*> > thisSchedule){
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned numIssueSlots=msi.maxNumIssueTotal;
for(unsigned i=0;i< numIssueSlots;i++)
- modSched_os <<"\t#";
+ modSched_os <<"\t#";
modSched_os<<"\n";
for(unsigned i=0;i < thisSchedule.size();i++)
{
modSched_os<<"\t";
modSched_os<<"\n";
}
-
+
}
void ModuloScheduling::dumpScheduling(){
modSched_os<<"dump schedule:"<<"\n";
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned numIssueSlots=msi.maxNumIssueTotal;
for(unsigned i=0;i< numIssueSlots;i++)
modSched_os <<"\t#";
if(ModuloSchedDebugLevel>= ModuloSched_PrintSchedule){
modSched_fb.open("moduloSchedDebugInfo.output", ios::out);
- modSched_os<<"******************Modula Scheduling debug information*************************"<<endl;
+ modSched_os<<"******************Modula Scheduling debug information*************************"<<"\n ";
}
ModuloSchedGraphSet* graphSet = new ModuloSchedGraphSet(&F,target);
#include "ModuloSchedGraph.h"
#include <iostream>
+#include <vector>
+
+using std::vector;
class ModuloScheduling:NonCopyable {
private:
//*******************internel functions*******************************
private:
//clear memory from the last round and initialize if necessary
- void clearInitMem(const MachineSchedInfo& );
+ void clearInitMem(const TargetSchedInfo& );
//compute schedule and coreSchedule with the current II
bool computeSchedule();
#include "Support/StringExtras.h"
#include "Support/STLExtras.h"
#include <iostream>
-#include <swig.h>
+//#include <swig.h>
#include "llvm/iOperators.h"
#include "llvm/iOther.h"
#include "llvm/iPHINode.h"
#include "llvm/Type.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/Target/MachineSchedInfo.h"
+#include "llvm/Target/TargetSchedInfo.h"
#define UNIDELAY 1
#define min(a, b) ((a) < (b) ? (a) : (b))
void ModuloSchedGraph::addDefUseEdges(const BasicBlock* bb)
{
//collect def instructions, store them in vector
- const MachineInstrInfo& mii = target.getInstrInfo();
+ // const TargetInstrInfo& mii = target.getInstrInfo();
+ const TargetInstrInfo& mii = target.getInstrInfo();
typedef std::vector<ModuloSchedGraphNode*> DefVec;
DefVec defVec;
RegToRefVecMap& regToRefVecMap,
ValueToDefVecMap& valueToDefVecMap)
{
- //const MachineInstrInfo& mii=target.getInstrInfo();
+ //const TargetInstrInfo& mii=target.getInstrInfo();
//Build graph nodes for each LLVM instruction and gather def/use info.
//Do both together in a single pass over all machine instructions.
this->dump(bb);
if(!isLoop(bb)){
- modSched_os <<" dumping non-loop BB:"<<endl;
+ modSched_os <<" dumping non-loop BB:\n";
dump(bb);
}
if( isLoop(bb))
}
void ModuloSchedGraph::dumpResourceUsage(std::vector< pair<int,int> > &ru)
{
- MachineSchedInfo& msi = (MachineSchedInfo&)target.getSchedInfo();
+ TargetSchedInfo& msi = (TargetSchedInfo&)target.getSchedInfo();
std::vector<pair<int,int> > resourceNumVector = msi.resourceNumVector;
modSched_os <<"resourceID\t"<<"resourceNum"<<"\n";
int ModuloSchedGraph::computeResII(const BasicBlock* bb)
{
- const MachineInstrInfo& mii = target.getInstrInfo();
- const MachineSchedInfo& msi = target.getSchedInfo();
+ const TargetInstrInfo& mii = target.getInstrInfo();
+ const TargetSchedInfo& msi = target.getSchedInfo();
int ResII;
std::vector<pair<int,int> > resourceUsage; //pair<int resourceid, int resourceUsageTimes_in_the_whole_block>
#include "../InstrSched/SchedGraphCommon.h"
#include "llvm/Instruction.h"
#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetInstrInfo.h"
#include <iostream>
using std::pair;
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
-#include "llvm/CodeGen/MachineCodeForBasicBlock.h"
-#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
+//#include "llvm/CodeGen/MachineCodeForBasicBlock.h"
+//#include "llvm/CodeGen/MachineCodeForMethod.h"
+#include "llvm/CodeGen/MachineFunction.h"
+//#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
#include "llvm/Target/TargetMachine.h"
#include "llvm/BasicBlock.h"
#include "llvm/Instruction.h"
#include <algorithm>
#include "ModuloSchedGraph.h"
#include "ModuloScheduling.h"
-#include "llvm/Target/MachineSchedInfo.h"
+#include "llvm/Target/TargetSchedInfo.h"
#include "llvm/BasicBlock.h"
#include "llvm/iTerminators.h"
#include "llvm/iPHINode.h"
#include "llvm/Constants.h"
#include <iostream>
-#include <swig.h>
+//#include <swig.h>
#include <fstream>
#include "llvm/CodeGen/InstrSelection.h"
modSched_os<<"*************************computing modulo schedule ************************\n";
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
//number of issue slots in the in each cycle
int numIssueSlots=msi.maxNumIssueTotal;
}
//clear memory from the last round and initialize if necessary
-void ModuloScheduling::clearInitMem(const MachineSchedInfo& msi){
+void ModuloScheduling::clearInitMem(const TargetSchedInfo& msi){
unsigned numIssueSlots = msi.maxNumIssueTotal;
//clear nodeScheduled from the last round
if( ModuloSchedDebugLevel >= ModuloSched_PrintScheduleProcess){
- modSched_os<< "***** new round with II= "<<II<<" *******************"<<endl;
+ modSched_os<< "***** new round with II= "<<II<<" *******************"<<"\n";
modSched_os<< " **************clear the vector nodeScheduled**************** \n";
}
nodeScheduled.clear();
bool ModuloScheduling::ScheduleNode(ModuloSchedGraphNode* node,unsigned start, unsigned end, NodeVec& nodeScheduled)
{
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned int numIssueSlots=msi.maxNumIssueTotal;
if( ModuloSchedDebugLevel >= ModuloSched_PrintScheduleProcess)
const Instruction* instr=node->getInst();
MachineCodeForInstruction& tempMvec= MachineCodeForInstruction::get(instr);
bool resourceConflict=false;
- const MachineInstrInfo &mii=msi.getInstrInfo();
+ const TargetInstrInfo &mii=msi.getInstrInfo();
if(coreSchedule.size() < core_i+1 || !coreSchedule[core_i][core_j]){
//this->dumpResourceUsageTable();
//-----------------------------------------------------------------------
void ModuloScheduling::dumpSchedule(std::vector< std::vector<ModuloSchedGraphNode*> > thisSchedule){
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned numIssueSlots=msi.maxNumIssueTotal;
for(unsigned i=0;i< numIssueSlots;i++)
- modSched_os <<"\t#";
+ modSched_os <<"\t#";
modSched_os<<"\n";
for(unsigned i=0;i < thisSchedule.size();i++)
{
modSched_os<<"\t";
modSched_os<<"\n";
}
-
+
}
void ModuloScheduling::dumpScheduling(){
modSched_os<<"dump schedule:"<<"\n";
- const MachineSchedInfo& msi=target.getSchedInfo();
+ const TargetSchedInfo& msi=target.getSchedInfo();
unsigned numIssueSlots=msi.maxNumIssueTotal;
for(unsigned i=0;i< numIssueSlots;i++)
modSched_os <<"\t#";
if(ModuloSchedDebugLevel>= ModuloSched_PrintSchedule){
modSched_fb.open("moduloSchedDebugInfo.output", ios::out);
- modSched_os<<"******************Modula Scheduling debug information*************************"<<endl;
+ modSched_os<<"******************Modula Scheduling debug information*************************"<<"\n ";
}
ModuloSchedGraphSet* graphSet = new ModuloSchedGraphSet(&F,target);
#include "ModuloSchedGraph.h"
#include <iostream>
+#include <vector>
+
+using std::vector;
class ModuloScheduling:NonCopyable {
private:
//*******************internel functions*******************************
private:
//clear memory from the last round and initialize if necessary
- void clearInitMem(const MachineSchedInfo& );
+ void clearInitMem(const TargetSchedInfo& );
//compute schedule and coreSchedule with the current II
bool computeSchedule();