80                    const DesignFlowManagerConstRef _design_flow_manager)
    92    switch(relationship_type)
    96          relationships.insert(std::make_pair(PARM_DECL_TAKEN_ADDRESS, 
SAME_FUNCTION));
    97          relationships.insert(std::make_pair(FIX_STRUCTS_PASSED_BY_VALUE, 
SAME_FUNCTION));
   113    return relationships;
   118    const auto TM = 
AppM->get_tree_manager();
   127    const auto fd = GetPointer<function_decl>(curr_tn);
   128    const auto sl = GetPointer<statement_list>(
GET_NODE(fd->body));
   129    const std::string srcp_default = fd->include_name + 
":" + 
STR(fd->line_number) + 
":" + 
STR(fd->column_number);
   133    for(
const auto& 
arg : fd->list_of_args)
   138    for(
const auto& bb : sl->list_of_bloc)
   140       for(
const auto& stmt : bb.second->CGetStmtList())
   144       for(
const auto& 
phi : bb.second->CGetPhiList())
   151    for(
const auto& 
arg : fd->list_of_args)
   155          const auto pd = GetPointer<const parm_decl>(
GET_NODE(
arg));
   164    const auto modified = afterParm2SSA != beforeParm2SSA;
   176    const auto TM = 
AppM->get_tree_manager();
   179                   "-->Analyzing recursively " + curr_tn->get_kind_text() + 
" " + 
STR(
GET_INDEX_NODE(tn)) + 
": " +
   180                       curr_tn->ToString());
   181    switch(curr_tn->get_kind())
   184       case aggr_init_expr_K:
   186          const auto ce = GetPointerS<call_expr>(curr_tn);
   187          for(
const auto& 
arg : ce->args)
   195          const auto ce = GetPointerS<gimple_call>(curr_tn);
   196          for(
const auto& 
arg : ce->args)
   202       case gimple_assign_K:
   204          const auto gm = GetPointerS<gimple_assign>(curr_tn);
   207             if(!gm->init_assignment)
   230          const auto sn = GetPointerS<ssa_name>(curr_tn);
   233             const auto defStmt = sn->CGetDefStmt();
   234             if(
GET_NODE(sn->var)->get_kind() == parm_decl_K && 
GET_NODE(defStmt)->get_kind() == gimple_nop_K)
   251             current = GetPointerS<tree_list>(
GET_NODE(current))->chan;
   257          if(curr_tn->get_kind() == addr_expr_K)
   259             if(already_visited_ae.find(
GET_INDEX_NODE(tn)) != already_visited_ae.end())
   265          const auto ue = GetPointerS<unary_expr>(curr_tn);
   271          const auto be = GetPointerS<binary_expr>(curr_tn);
   278          const auto te = GetPointerS<ternary_expr>(curr_tn);
   292          const auto qe = GetPointerS<quaternary_expr>(curr_tn);
   310          const auto le = GetPointerS<lut_expr>(curr_tn);
   345          const auto co = GetPointerS<constructor>(curr_tn);
   346          for(
const auto& idx_valu : co->list_of_idx_valu)
   354          const auto gc = GetPointerS<gimple_cond>(curr_tn);
   358       case gimple_switch_K:
   360          auto se = GetPointer<gimple_switch>(curr_tn);
   364       case gimple_multi_way_if_K:
   366          const auto gmwi = GetPointerS<gimple_multi_way_if>(curr_tn);
   367          for(
const auto& cond : gmwi->list_of_cond)
   376       case gimple_return_K:
   378          const auto re = GetPointerS<gimple_return>(curr_tn);
   387          const auto fe = GetPointerS<gimple_for>(curr_tn);
   395          const auto we = GetPointerS<gimple_while>(curr_tn);
   401          const auto gp = GetPointerS<gimple_phi>(curr_tn);
   402          for(
const auto& def_edge_pair : gp->list_of_def_edge)
   413       case target_mem_ref_K:
   415          const auto tmr = GetPointerS<target_mem_ref>(curr_tn);
   430       case target_mem_ref461_K:
   432          const auto tmr = GetPointerS<target_mem_ref461>(curr_tn);
   455       case function_decl_K:
   458       case template_decl_K:
   462       case case_label_expr_K:
   466       case gimple_pragma_K:
   475       case gimple_predict_K:
   476       case identifier_node_K:
   478       case namespace_decl_K:
   480       case placeholder_expr_K:
   481       case statement_list_K:
   482       case translation_unit_decl_K:
 #define GET_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
 
#define DEBUG_LEVEL_VERY_PEDANTIC
extremely verbose debugging print is performed. 
 
parm2ssa(const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int _function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor. 
 
#define INDENT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;. 
 
File containing functions and utilities to support the printing of debug messagges. 
 
Step successfully executed. 
 
#define CASE_BINARY_EXPRESSION
This macro collects all case labels for binary_expr objects. 
 
#define GET_CLASS(obj)
Macro returning the actual type of an object. 
 
Definition of the class representing a generic C application. 
 
struct definition of the source position. 
 
RelationshipType
The relationship type. 
 
Source must be executed to satisfy target. 
 
exceptions managed by PandA 
 
~parm2ssa() override
Destructor. 
 
#define GET_INDEX_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
 
Data structure describing a basic block at tree level. 
 
redefinition of map to manage ordered/unordered structures 
 
static std::string GetMangledFunctionName(const function_decl *fd)
Return the mangled function name. 
 
virtual enum kind get_kind() const =0
Virtual function returning the type of the actual class. 
 
#define STR(s)
Macro which performs a lexical_cast to a string. 
 
Auxiliary methods for manipulating string. 
 
Pre-analysis step computing the relation between parm_decl and the associated ssa_name. 
 
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached 
 
#define CASE_QUATERNARY_EXPRESSION
This macro collects all case labels for quaternary_expr objects. 
 
#define CASE_UNARY_EXPRESSION
This macro collects all case labels for unary_expr objects. 
 
Target must be reexecuted. 
 
Classes specification of the tree_node data structures. 
 
const ParameterConstRef parameters
Set of input parameters. 
 
DesignFlowStep_Status
The status of a step. 
 
Class defining some useful functions to create tree nodes and to manipulate the tree manager...
 
#define DEBUG_LEVEL_NONE
no debugging print is performed. 
 
#define CASE_TYPE_NODES
This macro collects all case labels for type objects. 
 
This file collects some utility functions. 
 
const unsigned int function_id
The index of the function to be analyzed. 
 
const application_managerRef AppM
The application manager. 
 
Class specification of the tree_reindex support class. 
 
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
 
#define THROW_ERROR_CODE(code, str_expr)
helper function used to throw an error with a code error 
 
void recursive_analysis(const tree_nodeRef &tn, const std::string &srcp, CustomUnorderedSet< unsigned int > &already_visited_ae)
Recursive tree node analysis. 
 
Classes specification of the tree_node data structures not present in the gcc. 
 
this class is used to manage the command-line or XML options. 
 
#define CASE_CPP_NODES
This macro collects all case labels for cpp nodes. 
 
tree_nodeRef create_ssa_name(const tree_nodeConstRef &var, const tree_nodeConstRef &type, const tree_nodeConstRef &min, const tree_nodeConstRef &max, bool volatile_flag=false, bool virtual_flag=false) const
MISCELLANEOUS_OBJ_TREE_NODES. 
 
refcount< tree_node > tree_nodeRef
RefCount type definition of the tree_node class structure. 
 
int debug_level
The debug level. 
 
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. 
 
#define GET_INDEX_CONST_NODE(t)
 
This class creates a layer to add nodes and to manipulate the tree_nodes manager. ...
 
DesignFlowStep_Status InternalExec() override
Computes the relation between parameters and their SSA obj. 
 
#define CASE_TERNARY_EXPRESSION
This macro collects all case labels for ternary_expr objects. 
 
Class specification of the manager of the tree structures extracted from the raw file. 
 
A brief description of the C++ Header File. 
 
const FunctionBehaviorRef function_behavior
The function behavior of the function to be analyzed. 
 
#define CASE_PRAGMA_NODES
This macro collects all case labels for pragma objects. 
 
#define THROW_ASSERT(cond, str_expr)
helper function used to check an assert and if needed to throw an error in a standard way ...