65 unsigned int _function_id,
66 const DesignFlowManagerConstRef _design_flow_manager)
79 switch(relationship_type)
83 relationships.insert(std::make_pair(LOOPS_COMPUTATION,
SAME_FUNCTION));
105 auto loop_end = loops.end();
106 for(
auto loop = loops.begin(); loop != loop_end; ++loop)
108 if((*loop)->GetId() == 0)
114 for(
auto sp_back_edge : (*loop)->get_sp_back_edges())
116 vertex from_bb = sp_back_edge.first;
117 vertex to_bb = sp_back_edge.second;
126 if(
parameters->getOption<
bool>(OPT_print_dot))
135 std::list<vertex> vertices;
138 catch(
const char* msg)
142 helper->
get_function_name() +
" cannot be synthesized: irreducible loops are not yet supported");
144 catch(
const std::string& msg)
148 helper->
get_function_name() +
" cannot be synthesized: irreducible loops are not yet supported");
150 catch(
const std::exception& ex)
154 helper->
get_function_name() +
" cannot be synthesized: irreducible loops are not yet supported");
160 helper->
get_function_name() +
" cannot be synthesized: irreducible loops are not yet supported");
#define DEBUG_LEVEL_VERY_PEDANTIC
extremely verbose debugging print is performed.
#define INDENT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;.
Basic block control flow graph.
File containing functions and utilities to support the printing of debug messagges.
#define GET_CLASS(obj)
Macro returning the actual type of an object.
~bb_feedback_edges_computation() override
Destructor.
std::string get_function_name() const
Return the name of the function.
Definition of the class representing a generic C application.
RelationshipType
The relationship type.
Source must be executed to satisfy target.
This class provides methods to build a basic blocks graph.
Data structure describing a basic block at tree level.
#define STR(s)
Macro which performs a lexical_cast to a string.
Auxiliary methods for manipulating string.
#define FB_CFG_SELECTOR
Feedback control flow edge selector.
const CustomUnorderedSet< std::pair< FrontendFlowStepType, FunctionRelationship > > ComputeFrontendRelationships(const DesignFlowStep::RelationshipType relationship_type) const override
Return the set of analyses in relationship with this design step.
bb_feedback_edges_computation(const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Basic block control flow graph with feedback.
Target must be reexecuted.
boost::graph_traits< graph >::vertex_descriptor vertex
vertex definition.
const ParameterConstRef parameters
Set of input parameters.
DesignFlowStep_Status
The status of a step.
#define DEBUG_LEVEL_NONE
no debugging print is performed.
void TopologicalSort(std::list< boost::graph_traits< graphs_collection >::vertex_descriptor > &sorted_vertices) const
Compute the topological order of the graph.
Class specification of the basic_block structure.
This file collects some hash functors.
const BBNodeInfoConstRef CGetBBNodeInfo(const vertex node) const
Return the info associated with a basic block.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
irreducible loops are not currently supported
#define THROW_ERROR_CODE(code, str_expr)
helper function used to throw an error with a code error
interface of loops finding algorithm
this class is used to manage the command-line or XML options.
int debug_level
The debug level.
This class provides methods to build an operations graph.
#define CFG_SELECTOR
Control flow graph edge selector.
A brief description of the C++ Header File.
const FunctionBehaviorRef function_behavior
The function behavior of the function to be analyzed.
DesignFlowStep_Status InternalExec() override
Compute the feedback edges for the CFG and the CDG operations graphs (at basic block level)...