PandA-2024.02
Public Member Functions | Private Member Functions | Private Attributes
VarComputation Class Reference

#include <var_computation.hpp>

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

Public Member Functions

 VarComputation (const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
 Constructor. More...
 
 ~VarComputation () 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 set of read and written variables. 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...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. 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...
 

Private Member Functions

void RecursivelyAnalyze (const vertex op_vertex, const tree_nodeConstRef &tree_node, const FunctionBehavior_VariableAccessType access_type) const
 Recursively analyze a tree_node. More...
 
void AnalyzeVops (const vertex op_vertex, const gimple_node *vops) const
 Analyze virtual operands associated with a gimple node. More...
 
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...
 

Private Attributes

const operations_graph_constructorRef ogc
 The operation graph constructor. More...
 
const OpGraphConstRef cfg
 The control flow graph of the function. More...
 
const BehavioralHelperRef behavioral_helper
 The behavioral helper associated with the function. More...
 

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...
 
- 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...
 
- 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 67 of file var_computation.hpp.

Constructor & Destructor Documentation

◆ VarComputation()

VarComputation::VarComputation ( const ParameterConstRef  _parameters,
const application_managerRef  AppM,
unsigned int  function_id,
const DesignFlowManagerConstRef  design_flow_manager 
)

Constructor.

Parameters
Paramis the set of the parameters
AppMis the reference to the application manager
function_idis the index of the function
design_flow_manageris the design flow manager

Definition at line 78 of file var_computation.cpp.

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

Here is the call graph for this function:

◆ ~VarComputation()

VarComputation::~VarComputation ( )
overridedefault

Destructor.

Referenced by VarComputation().

Here is the caller graph for this function:

Member Function Documentation

◆ AnalyzeVops()

void VarComputation::AnalyzeVops ( const vertex  op_vertex,
const gimple_node vops 
) const
private

Analyze virtual operands associated with a gimple node.

Parameters
op_vertexis the vertex to which gimple node belongs
vopsis the set of virtual operands to be considered

Definition at line 678 of file var_computation.cpp.

References DEFINITION, GET_INDEX_NODE, ogc, OVER, USE, gimple_node::vdef, VIRTUAL, gimple_node::vovers, and gimple_node::vuses.

Referenced by RecursivelyAnalyze().

Here is the caller graph for this function:

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > VarComputation::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 91 of file var_computation.cpp.

References DesignFlowStep::DEPENDENCE_RELATIONSHIP, DesignFlowStep::INVALIDATION_RELATIONSHIP, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SAME_FUNCTION, and THROW_UNREACHABLE.

◆ Initialize()

void VarComputation::Initialize ( )
overridevirtual

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

Reimplemented from DesignFlowStep.

Definition at line 118 of file var_computation.cpp.

References FunctionFrontendFlowStep::bb_version, FunctionBehavior::CFG, and FunctionFrontendFlowStep::function_behavior.

◆ InternalExec()

DesignFlowStep_Status VarComputation::InternalExec ( )
overridevirtual

Computes the set of read and written variables.

Returns
the exit status of this step

Implements FunctionFrontendFlowStep.

Definition at line 138 of file var_computation.cpp.

References cfg, FunctionBehavior::CFG, OpGraph::CGetOpNodeInfo(), FunctionFrontendFlowStep::function_behavior, GET_TYPE, DesignFlowStep::parameters, RecursivelyAnalyze(), SUCCESS, TYPE_VPHI, and UNKNOWN.

Here is the call graph for this function:

◆ RecursivelyAnalyze()

void VarComputation::RecursivelyAnalyze ( const vertex  op_vertex,
const tree_nodeConstRef tree_node,
const FunctionBehavior_VariableAccessType  access_type 
) const
private

Recursively analyze a tree_node.

Parameters
op_vertexis the vertex to which the statement where tree_node is inclued belongs
tree_nodeis the tree node to be examined
access_typeis the type of the access

Needed to correctly support function pointers

add parameter to the vertex

Needed to correctly support function pointers

add parameter to the vertex

Definition at line 180 of file var_computation.cpp.

References ADDRESS, AnalyzeVops(), FrontendFlowStep::AppM, ARG, test_panda::arg, CASE_BINARY_EXPRESSION, CASE_CPP_NODES, CASE_FAKE_NODES, CASE_QUATERNARY_EXPRESSION, CASE_TERNARY_EXPRESSION, CASE_TYPE_NODES, CASE_UNARY_EXPRESSION, cfg, OpGraph::CGetOpGraphInfo(), tree_helper::CGetType(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, DEFINITION, GET_CONST_NODE, tree_node::get_kind(), tree_node::GetString(), INDENT_DBG_MEX, tree_node::index, ogc, OVER, SCALAR, STR, THROW_UNREACHABLE, UNKNOWN, USE, and VIRTUAL.

Referenced by InternalExec().

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

Field Documentation

◆ behavioral_helper

const BehavioralHelperRef VarComputation::behavioral_helper
private

The behavioral helper associated with the function.

Definition at line 77 of file var_computation.hpp.

◆ cfg

const OpGraphConstRef VarComputation::cfg
private

The control flow graph of the function.

Definition at line 74 of file var_computation.hpp.

Referenced by InternalExec(), and RecursivelyAnalyze().

◆ ogc

const operations_graph_constructorRef VarComputation::ogc
private

The operation graph constructor.

Definition at line 71 of file var_computation.hpp.

Referenced by AnalyzeVops(), and RecursivelyAnalyze().


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

Generated on Mon Feb 12 2024 13:04:09 for PandA-2024.02 by doxygen 1.8.13