PandA-2024.02
|
#include <CSE.hpp>
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 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... | |
|
private |
CSE::CSE | ( | const ParameterConstRef | _parameters, |
const application_managerRef | _AppM, | ||
unsigned int | _function_id, | ||
const DesignFlowManagerConstRef | _design_flow_manager | ||
) |
Constructor.
Header include.
_Param | is the set of the parameters |
_AppM | is the application manager |
function_id | is the identifier of the function |
design_flow_manager | is 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().
|
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 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.
|
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().
|
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().
|
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.
|
overridevirtual |
perform CSE analysis
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().
|
private |
when true PHI_OPT step has to restart
Definition at line 99 of file CSE.hpp.
Referenced by ComputeFrontendRelationships(), and InternalExec().
|
private |
The scheduling solution.
Definition at line 93 of file CSE.hpp.
Referenced by Initialize(), and InternalExec().
|
private |