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 ...