PandA-2024.02
|
#include <build_virtual_phi.hpp>
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 DesignFlowManager > | design_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... | |
Definition at line 57 of file build_virtual_phi.hpp.
BuildVirtualPhi::BuildVirtualPhi | ( | const application_managerRef | _AppM, |
unsigned int | _function_id, | ||
const DesignFlowManagerConstRef | _design_flow_manager, | ||
const ParameterConstRef | _parameters | ||
) |
Constructor.
Header include.
AppM | is the application manager |
function_id | is the node id of the function analyzed. |
design_flow_manager | is the design flow manager |
parameters | is 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().
|
overridedefault |
|
overrideprivatevirtual |
Return the set of analyses in relationship with this design step.
relationship_type | is 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.
|
overridevirtual |
Compute the relationships of a step with other steps.
dependencies | is where relationships will be stored |
relationship_type | is 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.
|
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().
|
private |
The tree manager.
Definition at line 61 of file build_virtual_phi.hpp.
Referenced by InternalExec().