OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
ProgramPass Class Reference

#include <ProgramPass.hh>

Inheritance diagram for ProgramPass:
Inheritance graph
Collaboration diagram for ProgramPass:
Collaboration graph

Public Member Functions

 ProgramPass (InterPassData &data)
 
virtual ~ProgramPass ()
 
virtual void handleProgram (TTAProgram::Program &program, const TTAMachine::Machine &targetMachine)
 
- Public Member Functions inherited from SchedulerPass
 SchedulerPass (InterPassData &data)
 
virtual ~SchedulerPass ()
 
InterPassDatainterPassData ()
 
virtual std::string shortDescription () const =0
 
virtual std::string longDescription () const
 

Static Public Member Functions

static void executeProcedurePass (TTAProgram::Program &program, const TTAMachine::Machine &targetMachine, ProcedurePass &procedurePass)
 

Detailed Description

Interface for scheduler passes that handle fully-linked programs.

Definition at line 52 of file ProgramPass.hh.

Constructor & Destructor Documentation

◆ ProgramPass()

ProgramPass::ProgramPass ( InterPassData data)

Constructor.

Definition at line 50 of file ProgramPass.cc.

50 :
51 SchedulerPass(data) {
52}

◆ ~ProgramPass()

ProgramPass::~ProgramPass ( )
virtual

Destructor.

Definition at line 57 of file ProgramPass.cc.

57 {
58}

Member Function Documentation

◆ executeProcedurePass()

void ProgramPass::executeProcedurePass ( TTAProgram::Program program,
const TTAMachine::Machine targetMachine,
ProcedurePass procedurePass 
)
static

Executes the given procedure pass on each procedure of the given program in the original program order.

A helper function for implementing most simplest types of program passes.

Parameters
programThe program to handle.
machineThe target machine if any. (NullMachine::instance() if target machine is irrelevant).
procedurePassThe procedure pass to execute.
Exceptions
Incase handling is unsuccesful for any reason (cfg might still get modified).

Definition at line 74 of file ProgramPass.cc.

76 {
77 auto totalTimeStart = std::chrono::steady_clock::now();
78
79 FunctionNameList proceduresToProcess, proceduresToIgnore;
80 if (procedurePass.interPassData().hasDatum("FUNCTIONS_TO_PROCESS")) {
81 proceduresToProcess = dynamic_cast<FunctionNameList&>(
82 procedurePass.interPassData().datum("FUNCTIONS_TO_PROCESS"));
83 } else if (procedurePass.interPassData().hasDatum("FUNCTIONS_TO_IGNORE")) {
84 proceduresToIgnore =
85 dynamic_cast<FunctionNameList&>(
86 procedurePass.interPassData().datum("FUNCTIONS_TO_IGNORE"));
87 }
88
89 std::size_t proceduresDone = 0;
90 // always call procedureCount() again because a pass might have
91 // added a new procedure to the program that needs to be handled
92 for (int procIndex = 0; procIndex < program.procedureCount();
93 ++procIndex) {
94 TTAProgram::Procedure& proc = program.procedure(procIndex);
95
96 if (proceduresToProcess.size() > 0 &&
97 proceduresToProcess.find(proc.name()) ==
98 proceduresToProcess.end())
99 continue;
100
101 if (proceduresToIgnore.size() > 0 &&
102 proceduresToIgnore.find(proc.name()) !=
103 proceduresToIgnore.end())
104 continue;
105
106 auto currentTimeStart = std::chrono::steady_clock::now();
107 std::size_t totalProcedures = 0;
108 if (Application::verboseLevel() > 0) {
109
110 if (proceduresToProcess.size() > 0) {
111 totalProcedures = proceduresToProcess.size();
112 } else {
113 totalProcedures = program.procedureCount();
114 }
115
116 totalProcedures -= proceduresToIgnore.size();
118 << std::endl
119 << "procedure: " << proc.name()
120 << (boost::format(" (%d/%d)")
121 % (proceduresDone + 1) % totalProcedures).str();
122 }
123 procedurePass.handleProcedure(proc, targetMachine);
124 ++proceduresDone;
125
126 if (Application::verboseLevel() > 0) {
127 long currentElapsed =
128 std::chrono::duration_cast<std::chrono::seconds>(
129 std::chrono::steady_clock::now() - currentTimeStart)
130 .count();
131 long totalElapsed =
132 std::chrono::duration_cast<std::chrono::seconds>(
133 std::chrono::steady_clock::now() - totalTimeStart)
134 .count();
135 long eta = static_cast<long>(
136 (totalElapsed / proceduresDone) *
137 (totalProcedures - proceduresDone));
139 << (boost::format(" %d min %d s. Total %d min %d s. ETA in "
140 "%d min %d s") %
141 (currentElapsed / 60) % (currentElapsed % 60) %
142 (totalElapsed / 60) % (totalElapsed % 60) % (eta / 60) %
143 (eta % 60))
144 .str()
145 << std::endl;
146 }
147 }
148}
find Finds info of the inner loops in the program
static int verboseLevel()
static std::ostream & logStream()
bool hasDatum(const std::string &key) const
InterPassDatum & datum(const std::string &key)
virtual void handleProcedure(TTAProgram::Procedure &procedure, const TTAMachine::Machine &targetMachine)
InterPassData & interPassData()
TCEString name() const
Definition Procedure.hh:66

References InterPassData::datum(), ProcedurePass::handleProcedure(), InterPassData::hasDatum(), SchedulerPass::interPassData(), Application::logStream(), TTAProgram::Procedure::name(), program, and Application::verboseLevel().

Referenced by PreOptimizer::handleProgram(), handleProgram(), SimpleIfConverter::handleProgram(), and BBSchedulerController::handleProgram().

Here is the call graph for this function:

◆ handleProgram()

void ProgramPass::handleProgram ( TTAProgram::Program program,
const TTAMachine::Machine targetMachine 
)
virtual

Reimplemented in PreOptimizer, SimpleIfConverter, and BBSchedulerController.

Definition at line 151 of file ProgramPass.cc.

152 {
153 ProcedurePass* procPass = dynamic_cast<ProcedurePass*>(this);
154 if (procPass != NULL) {
155 executeProcedurePass(program, targetMachine, *procPass);
156 } else {
157 abortWithError("Program pass is not also a procedure pass so you "
158 "must overload handleProgram method!");
159 }
160}
#define abortWithError(message)
static void executeProcedurePass(TTAProgram::Program &program, const TTAMachine::Machine &targetMachine, ProcedurePass &procedurePass)

References abortWithError, executeProcedurePass(), and program.

Here is the call graph for this function:

The documentation for this class was generated from the following files: