PandA-2024.02
Public Member Functions | Private Types | Private Member Functions | Private Attributes
CSE Class Reference

CSE analysis. More...

#include <CSE.hpp>

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

Public Member Functions

 CSE (const ParameterConstRef _parameters, const application_managerRef _AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
 Constructor. More...
 
 ~CSE () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 perform CSE analysis More...
 
void Initialize () override
 Initialize the step (i.e., like a constructor, but executed just before exec) 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 Types

using CSE_tuple_key_type = std::pair< enum kind, std::vector< unsigned int > >
 define the type of the unique table key 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...
 
tree_nodeRef hash_check (const tree_nodeRef &tn, vertex bb, const statement_list *sl, std::map< vertex, CustomUnorderedMapStable< CSE_tuple_key_type, tree_nodeRef >> &unique_table) const
 check if the statement has an equivalent in the unique table More...
 
bool has_memory_access (const gimple_assign *ga) const
 check if the gimple assignment is a load, store or a memcpy/memset More...
 

Private Attributes

ScheduleRef schedule
 The scheduling solution. More...
 
const tree_managerRef TM
 tree manager More...
 
bool restart_phi_opt
 when true PHI_OPT step has to restart 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

CSE analysis.

Definition at line 89 of file CSE.hpp.

Member Typedef Documentation

◆ CSE_tuple_key_type

using CSE::CSE_tuple_key_type = std::pair<enum kind, std::vector<unsigned int> >
private

define the type of the unique table key

Definition at line 105 of file CSE.hpp.

Constructor & Destructor Documentation

◆ CSE()

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

Constructor.

Header include.

Parameters
_Paramis the set of the parameters
_AppMis the application manager
function_idis the identifier of the function
design_flow_manageris the design flow manager

. include boost include behavior includes algorithm/dominance include design_flows include frontend_analysis HLS include STD include tree include

Definition at line 94 of file CSE.cpp.

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

Here is the call graph for this function:

◆ ~CSE()

CSE::~CSE ( )
overridedefault

Destructor.

Referenced by CSE().

Here is the caller graph for this function:

Member Function Documentation

◆ ComputeFrontendRelationships()

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

References ABORTED, DesignFlowStep::DEPENDENCE_RELATIONSHIP, EMPTY, DesignFlowStep::GetStatus(), DesignFlowStep::INVALIDATION_RELATIONSHIP, NONEXISTENT, DesignFlowStep::parameters, DesignFlowStep::PRECEDENCE_RELATIONSHIP, restart_phi_opt, SAME_FUNCTION, SKIPPED, SUCCESS, THROW_UNREACHABLE, UNCHANGED, UNEXECUTED, UNNECESSARY, and WHOLE_APPLICATION.

Here is the call graph for this function:

◆ has_memory_access()

bool CSE::has_memory_access ( const gimple_assign ga) const
private

check if the gimple assignment is a load, store or a memcpy/memset

check for bit field ref of vector type

Definition at line 402 of file CSE.cpp.

References tree_helper::CGetType(), FunctionFrontendFlowStep::function_behavior, GET_CONST_NODE, GET_INDEX_CONST_NODE, tree_helper::IsArrayEquivType(), tree_helper::IsPointerType(), tree_helper::IsVectorType(), gimple_assign::op0, and gimple_assign::op1.

Referenced by hash_check().

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

◆ hash_check()

tree_nodeRef CSE::hash_check ( const tree_nodeRef tn,
vertex  bb,
const statement_list sl,
std::map< vertex, CustomUnorderedMapStable< CSE_tuple_key_type, tree_nodeRef >> &  unique_table 
) const
private

check if the statement has an equivalent in the unique table

check for LOADs, STOREs, MEMSET, MEMCPY, etc. etc.

We add type of right part; load from same address with different types must be considered different

If there are virtual uses, not only they must be the same, but also the basic block must be the same

Check if the virtual is defined in the same basic block

Definition at line 481 of file CSE.cpp.

References test_panda::arg, tree_helper::CGetType(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, GET_CONST_NODE, GET_INDEX_CONST_NODE, has_memory_access(), INDENT_DBG_MEX, tree_node::index, statement_list::list_of_bloc, max, DesignFlowStep::parameters, tree_helper::Size(), STR, THROW_ASSERT, and tree_node::ToString().

Referenced by InternalExec().

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

◆ Initialize()

void CSE::Initialize ( )
overridevirtual

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

Reimplemented from DesignFlowStep.

Definition at line 166 of file CSE.cpp.

References FrontendFlowStep::AppM, FunctionFrontendFlowStep::function_id, and schedule.

◆ InternalExec()

DesignFlowStep_Status CSE::InternalExec ( )
overridevirtual

perform CSE analysis

Returns
the exit status of this step

define a map relating variables and columns

store the GCC BB graph ala boost::graph

add vertices

add edges

add a connection between entry and exit thus avoiding problems with non terminating code

CSE on basic blocks

Implements FunctionFrontendFlowStep.

Definition at line 177 of file CSE.cpp.

References FrontendFlowStep::AppM, B, CFG_SELECTOR, BBGraph::CGetBBNodeInfo(), tree_helper::CGetType(), D_SELECTOR, DesignFlowStep::debug_level, DEBUG_LEVEL_VERBOSE, DEBUG_LEVEL_VERY_PEDANTIC, bloc::ENTRY_BLOCK_ID, bloc::EXIT_BLOCK_ID, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, GET_INDEX_CONST_NODE, GET_NODE, tree_helper::GetConstValue(), FunctionFrontendFlowStep::GetName(), hash_check(), INDENT_DBG_MEX, DesignFlowStep::parameters, restart_phi_opt, schedule, sl, STR, SUCCESS, THROW_ASSERT, TM, ToString(), UNCHANGED, and Schedule::UpdateTime().

Here is the call graph for this function:

Field Documentation

◆ restart_phi_opt

bool CSE::restart_phi_opt
private

when true PHI_OPT step has to restart

Definition at line 99 of file CSE.hpp.

Referenced by ComputeFrontendRelationships(), and InternalExec().

◆ schedule

ScheduleRef CSE::schedule
private

The scheduling solution.

Definition at line 93 of file CSE.hpp.

Referenced by Initialize(), and InternalExec().

◆ TM

const tree_managerRef CSE::TM
private

tree manager

Definition at line 96 of file CSE.hpp.

Referenced by InternalExec().


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

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