72 unsigned int _function_id,
73 const DesignFlowManagerConstRef _design_flow_manager)
94 switch(relationship_type)
98 relationships.insert(std::make_pair(ADD_BB_ECFG_EDGES,
SAME_FUNCTION));
99 relationships.insert(std::make_pair(BB_FEEDBACK_EDGES_IDENTIFICATION,
SAME_FUNCTION));
112 return relationships;
124 std::deque<vertex> container;
125 boost::topological_sort(*ecfg, std::back_inserter(container));
126 std::deque<vertex>::const_iterator it, it_end;
127 it_end = container.end();
128 for(it = container.begin(); it != it_end; ++it)
131 " Examining basic block " + std::to_string(ecfg->
CGetBBNodeInfo(*it)->block->number));
133 for(boost::tie(eo, eo_end) = boost::out_edges(*it, *ecfg); eo != eo_end; eo++)
136 bb_reachability[*it].insert(previous);
137 bb_reachability[*it].insert(bb_reachability[previous].begin(), bb_reachability[previous].end());
141 feedback_bb_reachability = bb_reachability;
147 for(first_level_loop = first_level_loops.begin(); first_level_loop != first_level_loop_end; ++first_level_loop)
150 (*first_level_loop)->get_recursively_bb(loop_blocks);
152 for(loop_block = loop_blocks.begin(); loop_block != loop_block_end; ++loop_block)
154 feedback_bb_reachability[*loop_block].insert(loop_blocks.begin(), loop_blocks.end());
#define DEBUG_LEVEL_VERY_PEDANTIC
extremely verbose debugging print is performed.
boost::graph_traits< graph >::out_edge_iterator OutEdgeIterator
out_edge_iterator definition.
File containing functions and utilities to support the printing of debug messagges.
#define PRINT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;.
BBReachabilityComputation(const ParameterConstRef Param, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
#define GET_CLASS(obj)
Macro returning the actual type of an object.
Definition of the class representing a generic C application.
RelationshipType
The relationship type.
Source must be executed to satisfy target.
~BBReachabilityComputation() override
Destructor.
Class specification of the graph structures.
Basic block control flow graph with edges imposing that basic block inside a loop are executed before...
Data structure describing a basic block at tree level.
unsigned int bb_version
The version of the basic block intermediate representation on which this step has been applied...
Analysis step computing reachability between basic blocks.
redefinition of map to manage ordered/unordered structures
Auxiliary methods for manipulating string.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Target must be reexecuted.
redefinition of set to manage ordered/unordered structures
boost::graph_traits< graph >::vertex_descriptor vertex
vertex definition.
DesignFlowStep_Status
The status of a step.
#define DEBUG_LEVEL_NONE
no debugging print is performed.
DesignFlowStep_Status InternalExec() override
Computes the reachability between operations according to the control flow graph WITHOUT feedback...
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...
interface of loops finding algorithm
this class is used to manage the command-line or XML options.
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.
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
int debug_level
The debug level.
A brief description of the C++ Header File.
const FunctionBehaviorRef function_behavior
The function behavior of the function to be analyzed.