PandA-2024.02
Public Member Functions | Protected Member Functions | Protected Attributes
string_cst_fix Class Reference

Pre-analysis step. More...

#include <string_cst_fix.hpp>

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

Public Member Functions

 string_cst_fix (const application_managerRef AppM, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~string_cst_fix () override
 Destructor. More...
 
DesignFlowStep_Status Exec () override
 Fixes the var_decl duplication. More...
 
- Public Member Functions inherited from ApplicationFrontendFlowStep
 ApplicationFrontendFlowStep (const application_managerRef AppM, const FrontendFlowStepType frontend_flow_step_type, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~ApplicationFrontendFlowStep () 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...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. 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...
 
void ComputeRelationships (DesignFlowStepSet &relationship, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. 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...
 
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 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...
 

Protected Member Functions

void recursive_analysis (tree_nodeRef &tn, const std::string &srcp)
 Recursive tree node analysis. 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...
 

Protected Attributes

CustomUnorderedSet< unsigned int > already_visited_ae
 Already visited address expression (used to avoid infinite recursion) More...
 
CustomUnorderedMap< unsigned int, tree_nodeRefstring_cst_map
 relation between constant string and read-only variable initialized with the string_cst. 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...
 

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 ApplicationFrontendFlowStep
static const std::string ComputeSignature (const FrontendFlowStepType frontend_flow_step_type)
 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...
 

Detailed Description

Pre-analysis step.

It transforms the raw intermediate representation by removing direct references to string_cst.

Definition at line 68 of file string_cst_fix.hpp.

Constructor & Destructor Documentation

◆ string_cst_fix()

string_cst_fix::string_cst_fix ( const application_managerRef  _AppM,
const DesignFlowManagerConstRef  _design_flow_manager,
const ParameterConstRef  _parameters 
)

Constructor.

Header include.

Parameters
AppMis the application manager
design_flow_manageris the design flow manager
parametersis the set of input parameters

Behavior include Graph include Parameter include STD include STL include Tree include Utility include

Definition at line 78 of file string_cst_fix.cpp.

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

Here is the call graph for this function:

◆ ~string_cst_fix()

string_cst_fix::~string_cst_fix ( )
overridedefault

Destructor.

Referenced by string_cst_fix().

Here is the caller graph for this function:

Member Function Documentation

◆ ComputeFrontendRelationships()

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

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 88 of file string_cst_fix.cpp.

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

◆ Exec()

DesignFlowStep_Status string_cst_fix::Exec ( )
overridevirtual

Fixes the var_decl duplication.

Returns
the exit status of this step

Implements ApplicationFrontendFlowStep.

Definition at line 114 of file string_cst_fix.cpp.

References already_visited_ae, FrontendFlowStep::AppM, test_panda::arg, GET_NODE, phi, recursive_analysis(), sl, STR, string_cst_map, and SUCCESS.

Here is the call graph for this function:

◆ recursive_analysis()

void string_cst_fix::recursive_analysis ( tree_nodeRef tn,
const std::string &  srcp 
)
protected

Recursive tree node analysis.

Removing statements create more problems than what it may solve.

So the solution for bambu is to not synthesize them.

makes the var_decl visible

Definition at line 153 of file string_cst_fix.cpp.

References already_visited_ae, FrontendFlowStep::AppM, test_panda::arg, CASE_BINARY_EXPRESSION, CASE_CPP_NODES, CASE_PRAGMA_NODES, CASE_QUATERNARY_EXPRESSION, CASE_TERNARY_EXPRESSION, CASE_TYPE_NODES, CASE_UNARY_EXPRESSION, DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, GET_INDEX_NODE, tree_node::get_kind(), tree_node::get_kind_text(), GET_NODE, INDENT_DBG_MEX, init(), NODE_NOT_YET_SUPPORTED_EC, DesignFlowStep::parameters, STR, string_cst_map, THROW_ASSERT, THROW_ERROR_CODE, THROW_UNREACHABLE, and tree_node::ToString().

Referenced by Exec().

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

Field Documentation

◆ already_visited_ae

CustomUnorderedSet<unsigned int> string_cst_fix::already_visited_ae
protected

Already visited address expression (used to avoid infinite recursion)

Definition at line 72 of file string_cst_fix.hpp.

Referenced by Exec(), and recursive_analysis().

◆ string_cst_map

CustomUnorderedMap<unsigned int, tree_nodeRef> string_cst_fix::string_cst_map
protected

relation between constant string and read-only variable initialized with the string_cst.

Definition at line 75 of file string_cst_fix.hpp.

Referenced by Exec(), and recursive_analysis().


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

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