PandA-2024.02
Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
FunctionCallOpt Class Reference

#include <FunctionCallOpt.hpp>

Inheritance diagram for FunctionCallOpt:
Inheritance graph
[legend]
Collaboration diagram for FunctionCallOpt:
Collaboration graph
[legend]

Public Member Functions

 FunctionCallOpt (const ParameterConstRef Param, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
 Constructor. More...
 
 ~FunctionCallOpt () override
 Destructor. More...
 
void Initialize () override
 Initialize the step (i.e., like a constructor, but executed just before exec. More...
 
DesignFlowStep_Status InternalExec () override
 Computes the operations CFG graph data structure. More...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. More...
 
- Public Member Functions inherited from FunctionFrontendFlowStep
 FunctionFrontendFlowStep (const application_managerRef AppM, const unsigned int function_id, const FrontendFlowStepType frontend_flow_step_type, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~FunctionFrontendFlowStep () override
 Destructor. More...
 
void ComputeRelationships (DesignFlowStepSet &relationship, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. More...
 
std::string GetSignature () const override
 Return the signature of this step. More...
 
std::string GetName () const override
 Return the name of this design step. More...
 
DesignFlowStep_Status Exec () final
 Execute the step. More...
 
unsigned int CGetBBVersion () const
 
unsigned int GetBitValueVersion () const
 
void PrintInitialIR () const override
 Dump the initial intermediate representation. More...
 
void PrintFinalIR () const override
 Dump the final intermediate representation. More...
 
- Public Member Functions inherited from FrontendFlowStep
 FrontendFlowStep (const application_managerRef AppM, const FrontendFlowStepType frontend_flow_step_type, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~FrontendFlowStep () override
 Destructor. More...
 
virtual std::string GetKindText () const
 Return the name of the type of this frontend flow step. More...
 
DesignFlowStepFactoryConstRef CGetDesignFlowStepFactory () const override
 Return the factory to create this type of steps. More...
 
void PrintTreeManager (const bool before) const
 Dump the tree manager. More...
 
- Public Member Functions inherited from DesignFlowStep
 DesignFlowStep (const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
virtual ~DesignFlowStep ()
 Destructor. More...
 
DesignFlowStep_Status GetStatus () const
 Return the status of this design step. More...
 
virtual void WriteDot (std::ostream &out) const
 Write the label for a dot graph. More...
 
bool IsComposed () const
 Returns if this step is composed. More...
 
int CGetDebugLevel () const
 Return the debug level of the step. More...
 

Static Public Member Functions

static void RequestCallOpt (const tree_nodeConstRef &call_stmt, unsigned int caller_id, FunctionOptType opt)
 Request optimization for given call statement. More...
 
- Static Public Member Functions inherited from FunctionFrontendFlowStep
static const std::string ComputeSignature (const FrontendFlowStepType frontend_flow_step_type, const unsigned int function_id)
 Compute the signature of a function frontend flow step. More...
 
- Static Public Member Functions inherited from FrontendFlowStep
static void CreateSteps (const DesignFlowManagerConstRef design_flow_manager, const CustomUnorderedSet< std::pair< FrontendFlowStepType, FunctionRelationship >> &frontend_relationships, const application_managerConstRef application_manager, DesignFlowStepSet &relationships)
 Create the relationship steps of a step with other steps starting from already specified dependencies between frontend flow steps. More...
 
static const std::string EnumToKindText (const FrontendFlowStepType frontend_flow_step_type)
 Given a frontend flow step type, return the name of the type. More...
 

Static Public Attributes

static CustomSet< unsigned int > always_inline
 Set of always inlined functions. More...
 
static CustomSet< unsigned int > never_inline
 Set of never inlined functions. More...
 

Private Member Functions

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. More...
 
size_t compute_cost (const statement_list *body, bool &has_simd)
 Compute function body cost based on statements' types. More...
 
size_t detect_loops (const statement_list *body) const
 Check if given function body has loops. More...
 

Static Private Member Functions

static bool HasConstantArgs (const tree_nodeConstRef &call_stmt)
 Check if given call statement performs a call with all constant arguments. More...
 

Private Attributes

CustomMap< unsigned int, unsigned int > caller_bb
 
CustomUnorderedSet< unsigned int > already_visited
 

Static Private Attributes

static CustomMap< unsigned int, CustomSet< std::tuple< unsigned int, FunctionOptType > > > opt_call
 
static size_t inline_max_cost = DEAFULT_MAX_INLINE_CONST
 

Additional Inherited Members

- Public Types inherited from FrontendFlowStep
using FunctionRelationship = enum { ALL_FUNCTIONS, CALLED_FUNCTIONS, CALLING_FUNCTIONS, SAME_FUNCTION, WHOLE_APPLICATION }
 The different relationship type between function analysis. More...
 
- Public Types inherited from DesignFlowStep
enum  RelationshipType { DEPENDENCE_RELATIONSHIP, INVALIDATION_RELATIONSHIP, PRECEDENCE_RELATIONSHIP }
 The relationship type. More...
 
- Protected Member Functions inherited from FunctionFrontendFlowStep
void WriteBBGraphDot (const std::string &filename) const
 Write the current version of statement list in dot format. More...
 
- Protected Attributes inherited from FunctionFrontendFlowStep
const FunctionBehaviorRef function_behavior
 The function behavior of the function to be analyzed. More...
 
const unsigned int function_id
 The index of the function to be analyzed. More...
 
unsigned int bb_version
 The version of the basic block intermediate representation on which this step has been applied. More...
 
unsigned int bitvalue_version
 The version of the bitvalue information on which this step has been applied. More...
 
- Protected Attributes inherited from FrontendFlowStep
const application_managerRef AppM
 The application manager. More...
 
const FrontendFlowStepType frontend_flow_step_type
 The type of this step. More...
 
unsigned int print_counter
 Print counter. More...
 
- Protected Attributes inherited from DesignFlowStep
bool composed
 True if this step represents a composition of design flow steps (e.g., a flow); must be set by specialized constructors. More...
 
const Wrefcount< const DesignFlowManagerdesign_flow_manager
 The design flow manager. More...
 
const ParameterConstRef parameters
 Set of input parameters. More...
 
int debug_level
 The debug level. More...
 
const int output_level
 The output level. More...
 

Detailed Description

Definition at line 65 of file FunctionCallOpt.hpp.

Constructor & Destructor Documentation

◆ FunctionCallOpt()

FunctionCallOpt::FunctionCallOpt ( const ParameterConstRef  Param,
const application_managerRef  AppM,
unsigned int  function_id,
const DesignFlowManagerConstRef  design_flow_manager 
)

Constructor.

Parameters
Paramis the set of the parameters
AppMis the application manager
function_idis the identifier of the function
DesignFlowManagerConstRefis the design flow manager

Definition at line 107 of file FunctionCallOpt.cpp.

References DesignFlowStep::debug_level, DEBUG_LEVEL_NONE, GET_CLASS, and ~FunctionCallOpt().

Here is the call graph for this function:

◆ ~FunctionCallOpt()

FunctionCallOpt::~FunctionCallOpt ( )
overridedefault

Destructor.

Referenced by FunctionCallOpt().

Here is the caller graph for this function:

Member Function Documentation

◆ compute_cost()

size_t FunctionCallOpt::compute_cost ( const statement_list body,
bool has_simd 
)
private

Compute function body cost based on statements' types.

Parameters
bodyfunction body to be considered
Returns
size_t Cost value

Definition at line 572 of file FunctionCallOpt.cpp.

References GET_CONST_NODE, tree_helper::IsConstant(), statement_list::list_of_bloc, and op_costs.

Referenced by InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > FunctionCallOpt::ComputeFrontendRelationships ( const DesignFlowStep::RelationshipType  relationship_type) const
overrideprivatevirtual

Return the set of analyses in relationship with this design step.

Parameters
relationship_typeis the type of relationship to be considered

Implements FrontendFlowStep.

Definition at line 117 of file FunctionCallOpt.cpp.

References CALLED_FUNCTIONS, DesignFlowStep::DEPENDENCE_RELATIONSHIP, DesignFlowStep::GetStatus(), DesignFlowStep::INVALIDATION_RELATIONSHIP, DesignFlowStep::parameters, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SAME_FUNCTION, SUCCESS, THROW_UNREACHABLE, and WHOLE_APPLICATION.

Here is the call graph for this function:

◆ detect_loops()

size_t FunctionCallOpt::detect_loops ( const statement_list body) const
private

Check if given function body has loops.

Parameters
bodyfunction body to be considered
Returns
true If body has loops between its basic blocks
false If no loops where detected in the cfg

store the IR BB graph ala boost::graph

add vertices

add edges

Definition at line 634 of file FunctionCallOpt.cpp.

References FrontendFlowStep::AppM, CFG_SELECTOR, BBGraph::CGetBBNodeInfo(), bloc::ENTRY_BLOCK_ID, bloc::EXIT_BLOCK_ID, FunctionFrontendFlowStep::function_id, graph::GetStronglyConnectedComponents(), statement_list::list_of_bloc, DesignFlowStep::parameters, STR, and THROW_ASSERT.

Referenced by InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasConstantArgs()

bool FunctionCallOpt::HasConstantArgs ( const tree_nodeConstRef call_stmt)
staticprivate

Check if given call statement performs a call with all constant arguments.

Parameters
call_stmtconsidered call statement
Returns
true If all arguments of the call are constants
false If any argument is not constant

Definition at line 543 of file FunctionCallOpt.cpp.

References GET_CONST_NODE, tree_node::GetString(), tree_helper::IsConstant(), STR, THROW_ASSERT, and THROW_UNREACHABLE.

Referenced by InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ HasToBeExecuted()

bool FunctionCallOpt::HasToBeExecuted ( ) const
overridevirtual

Check if this step has actually to be executed.

Returns
true if the step has to be executed

Reimplemented from FunctionFrontendFlowStep.

Definition at line 155 of file FunctionCallOpt.cpp.

References FrontendFlowStep::AppM, caller_bb, and FunctionFrontendFlowStep::HasToBeExecuted().

Here is the call graph for this function:

◆ Initialize()

void FunctionCallOpt::Initialize ( )
overridevirtual

Initialize the step (i.e., like a constructor, but executed just before exec.

Reimplemented from DesignFlowStep.

Definition at line 167 of file FunctionCallOpt.cpp.

References always_inline, FrontendFlowStep::AppM, caller_bb, GET_INDEX_CONST_NODE, INDENT_OUT_MEX, inline_max_cost, inlinedFunctionByDefault, never_inline, DesignFlowStep::output_level, OUTPUT_LEVEL_MINIMUM, PARAMETER_INLINE_MAX_COST, DesignFlowStep::parameters, SplitString(), STR, THROW_ASSERT, and THROW_WARNING.

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status FunctionCallOpt::InternalExec ( )
overridevirtual

◆ RequestCallOpt()

void FunctionCallOpt::RequestCallOpt ( const tree_nodeConstRef call_stmt,
unsigned int  caller_id,
FunctionOptType  opt 
)
static

Request optimization for given call statement.

Parameters
call_stmtthe call statement optimize
caller_idid of the function where the call_stmt is present
opttype of optimization to apply

Definition at line 527 of file FunctionCallOpt.cpp.

References GET_CONST_NODE, GET_INDEX_CONST_NODE, opt_call, and THROW_ASSERT.

Referenced by soft_float_cg_ext::generate_interface(), and soft_float_cg_ext::RecursiveExaminate().

Here is the caller graph for this function:

Field Documentation

◆ already_visited

CustomUnorderedSet<unsigned int> FunctionCallOpt::already_visited
private

Definition at line 74 of file FunctionCallOpt.hpp.

◆ always_inline

CustomSet< unsigned int > FunctionCallOpt::always_inline
static

Set of always inlined functions.

Definition at line 108 of file FunctionCallOpt.hpp.

Referenced by Initialize(), and InternalExec().

◆ caller_bb

CustomMap<unsigned int, unsigned int> FunctionCallOpt::caller_bb
private

Definition at line 72 of file FunctionCallOpt.hpp.

Referenced by HasToBeExecuted(), Initialize(), and InternalExec().

◆ inline_max_cost

size_t FunctionCallOpt::inline_max_cost = DEAFULT_MAX_INLINE_CONST
staticprivate

Definition at line 70 of file FunctionCallOpt.hpp.

Referenced by Initialize(), and InternalExec().

◆ never_inline

CustomSet< unsigned int > FunctionCallOpt::never_inline
static

Set of never inlined functions.

Definition at line 111 of file FunctionCallOpt.hpp.

Referenced by Initialize(), and InternalExec().

◆ opt_call

CustomMap< unsigned int, CustomSet< std::tuple< unsigned int, FunctionOptType > > > FunctionCallOpt::opt_call
staticprivate

Definition at line 68 of file FunctionCallOpt.hpp.

Referenced by InternalExec(), and RequestCallOpt().


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

Generated on Mon Feb 12 2024 13:03:52 for PandA-2024.02 by doxygen 1.8.13