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

#include <build_virtual_phi.hpp>

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

Public Member Functions

 BuildVirtualPhi (const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~BuildVirtualPhi () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 Performs the loops analysis. More...
 
void ComputeRelationships (DesignFlowStepSet &relationship, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. 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...
 
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...
 
virtual void Initialize ()
 Initialize the step (i.e., like a constructor, but executed just before exec. 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

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 tree_managerRef TM
 The tree manager. 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 57 of file build_virtual_phi.hpp.

Constructor & Destructor Documentation

◆ BuildVirtualPhi()

BuildVirtualPhi::BuildVirtualPhi ( const application_managerRef  _AppM,
unsigned int  _function_id,
const DesignFlowManagerConstRef  _design_flow_manager,
const ParameterConstRef  _parameters 
)

Constructor.

Header include.

Parameters
AppMis the application manager
function_idis the node id of the function analyzed.
design_flow_manageris the design flow manager
parametersis the set of input parameters

. include algorithms/loops_detection include behavior include parser/compiler include tree includes

Definition at line 74 of file build_virtual_phi.cpp.

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

Here is the call graph for this function:

◆ ~BuildVirtualPhi()

BuildVirtualPhi::~BuildVirtualPhi ( )
overridedefault

Destructor.

Referenced by BuildVirtualPhi().

Here is the caller graph for this function:

Member Function Documentation

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > BuildVirtualPhi::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 120 of file build_virtual_phi.cpp.

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

◆ ComputeRelationships()

void BuildVirtualPhi::ComputeRelationships ( DesignFlowStepSet relationship,
const DesignFlowStep::RelationshipType  relationship_type 
)
overridevirtual

Compute the relationships of a step with other steps.

Parameters
dependenciesis where relationships will be stored
relationship_typeis the type of relationship to be computed

Precedence step whose symbolic application frontend flow step has to be executed can be considered as dependence step

This is managed by FrontendFlowStep::ComputeRelationships

This is managed by FrontendFlowStep::ComputeRelationships

Reimplemented from FunctionFrontendFlowStep.

Definition at line 85 of file build_virtual_phi.cpp.

References FrontendFlowStep::AppM, FunctionFrontendFlowStep::ComputeRelationships(), FunctionFrontendFlowStep::ComputeSignature(), DesignFlowStep::DEPENDENCE_RELATIONSHIP, DesignFlowStep::design_flow_manager, FunctionFrontendFlowStep::function_id, FunctionFrontendFlowStep::GetSignature(), DesignFlowStep::INVALIDATION_RELATIONSHIP, Wrefcount< T >::lock(), NULL_VERTEX, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SUCCESS, THROW_ASSERT, and THROW_UNREACHABLE.

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status BuildVirtualPhi::InternalExec ( )
overridevirtual

Performs the loops analysis.

Cache of created phi - first key is the used ssa - second key is the basic block where is created

Cache of reaching defs - first key is the used ssa - second key is the basic block to be considered

For each virtual operand its definition

The set of nodes which overwrite a vop

Computing definitions and overwriting

clean not reachable vuses

here we may have a Use-Def or a Def-Use. They are both perfectly fine.

Check uses

The index of the loop to be considered (the most internal loops which contains the definition and all the uses

The depth of the loop to be considered

The set of basic block uses

The set of statement uses

The set of false uses

Check if this use can be ignored because of transitive reduction

Use is in the considered loop

Use is in a more nested loop

Use is in a less nested loop

It is possible that the use is not reachable; this is due to the gcc alias oracle

Build the gimple nop where volatile ssa is defined

Set of basic blocks belonging to the loop

Set of basic blocks to be analyzed

Loop 0 must be managed in a different way

Remove all basic blocks from which no use can be reached

The phi is necessary only if there are different reaching definition

Phi must always be built in header loop if definition is inside the loop

Check if this is a irreducible loop

If loop is irreducible, than we have to consider the definition coming from sp_back_edge since it can be different: different definitions can enter in the loop in the different enter points

If this is the basic block definition or contains a use

Check if phi has to be created because of different definitions coming from outside the loop

Implements FunctionFrontendFlowStep.

Definition at line 154 of file build_virtual_phi.cpp.

References FrontendFlowStep::AppM, block::block(), BUILTIN_SRCP, CFG_SELECTOR, tree_helper::CGetType(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, FB_CFG_SELECTOR, FunctionBehavior::FBB, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, GET_INDEX_NODE, GET_NODE, INDENT_DBG_MEX, index, tree_node::index, DesignFlowStep::parameters, phi, test_panda::restart, STR, SUCCESS, lenet_tvm::target, THROW_ASSERT, TM, TOK, TOK_SCPE, TOK_SRCP, and tree_node::ToString().

Here is the call graph for this function:

Field Documentation

◆ TM

const tree_managerRef BuildVirtualPhi::TM
private

The tree manager.

Definition at line 61 of file build_virtual_phi.hpp.

Referenced by InternalExec().


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

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