PandA-2024.02
|
#include <commutative_expr_restructuring.hpp>
Public Member Functions | |
commutative_expr_restructuring (const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters) | |
Constructor. More... | |
~commutative_expr_restructuring () override | |
Destructor. More... | |
DesignFlowStep_Status | InternalExec () override |
Performs the loops analysis. More... | |
void | Initialize () override |
Initialize the step (i.e., like a constructor, but executed just before exec. More... | |
bool | HasToBeExecuted () const override |
Check if this step has actually to be executed. 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... | |
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 Member Functions | |
bool | IsCommExprGimple (const tree_nodeConstRef tn) const |
Return true if tree node is a gimple_assign with a mult_expr/plus_expr in the right part. More... | |
tree_nodeRef | IsCommExprChain (const tree_nodeConstRef tn, const bool first, bool is_third_node) const |
Given a gimple_assign with a commutative operation it checks: 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... | |
Private Attributes | |
ScheduleRef | schedule |
The schedule. More... | |
AllocationInformationRef | allocation_information |
The allocation information. More... | |
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 55 of file commutative_expr_restructuring.hpp.
commutative_expr_restructuring::commutative_expr_restructuring | ( | const application_managerRef | AppM, |
unsigned int | function_id, | ||
const DesignFlowManagerConstRef | design_flow_manager, | ||
const ParameterConstRef | parameters | ||
) |
Constructor.
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 |
Definition at line 138 of file commutative_expr_restructuring.cpp.
References DesignFlowStep::debug_level, DEBUG_LEVEL_NONE, GET_CLASS, DesignFlowStep::parameters, and ~commutative_expr_restructuring().
|
overridedefault |
Destructor.
Referenced by commutative_expr_restructuring().
|
overrideprivatevirtual |
Return the set of analyses in relationship with this design step.
relationship_type | is the type of relationship to be considered |
Not executed
If schedule is not up to date, do not execute this step and invalidate UpdateSchedule
Implements FrontendFlowStep.
Definition at line 84 of file commutative_expr_restructuring.cpp.
References FrontendFlowStep::AppM, FunctionFrontendFlowStep::CGetBBVersion(), FunctionFrontendFlowStep::ComputeSignature(), DesignFlowStep::DEPENDENCE_RELATIONSHIP, DesignFlowStep::design_flow_manager, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, DesignFlowStep::GetStatus(), DesignFlowStep::INVALIDATION_RELATIONSHIP, Wrefcount< T >::lock(), DesignFlowStep::parameters, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SAME_FUNCTION, SUCCESS, and THROW_UNREACHABLE.
|
overridevirtual |
Check if this step has actually to be executed.
Reimplemented from FunctionFrontendFlowStep.
Definition at line 471 of file commutative_expr_restructuring.cpp.
References FrontendFlowStep::AppM, FunctionFrontendFlowStep::CGetBBVersion(), FunctionFrontendFlowStep::ComputeSignature(), DesignFlowStep::design_flow_manager, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, FunctionFrontendFlowStep::HasToBeExecuted(), Wrefcount< T >::lock(), and DesignFlowStep::parameters.
|
overridevirtual |
Initialize the step (i.e., like a constructor, but executed just before exec.
Reimplemented from DesignFlowStep.
Definition at line 460 of file commutative_expr_restructuring.cpp.
References allocation_information, FrontendFlowStep::AppM, FunctionFrontendFlowStep::function_id, DesignFlowStep::Initialize(), schedule, and TM.
|
overridevirtual |
Performs the loops analysis.
Check if new ending time would not be larger The time in which last operand is ready
Inserting first commutative expression after the last one
Create the ssa in the left part
Create the assign
Set the bit value for the intermediate ssa to correctly update execution time
Inserting last commutative expression
Create the assign
Check that the second commutative expression is actually dead
Remove the intermediate commutative expression
Removing added statements
Adding old statements
Recomputing schedule
Setting pointer to the previous element
Restarting
Implements FunctionFrontendFlowStep.
Definition at line 211 of file commutative_expr_restructuring.cpp.
References allocation_information, FrontendFlowStep::AppM, BUILTIN_SRCP, tree_helper::CGetType(), counter, tree_manipulation::create_binary_operation(), tree_manipulation::create_gimple_modify_stmt(), tree_manipulation::create_ssa_name(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, EPSILON, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, Schedule::get_cstep(), GET_INDEX_CONST_NODE, GET_NODE, tree_manager::get_tree_node_const(), AllocationInformation::GetConnectionTime(), Schedule::GetEndingTime(), FunctionFrontendFlowStep::GetName(), AllocationInformation::GetTimeLatency(), INDENT_DBG_MEX, INDENT_OUT_MEX, tree_node::index, IsCommExprChain(), IsCommExprGimple(), max, DesignFlowStep::output_level, OUTPUT_LEVEL_VERBOSE, DesignFlowStep::parameters, schedule, sl, STR, SUCCESS, THROW_ASSERT, TM, ToString(), UNCHANGED, fu_binding::UNKNOWN, Schedule::UpdateTime(), and FunctionFrontendFlowStep::WriteBBGraphDot().
|
private |
Given a gimple_assign with a commutative operation it checks:
tn | is the starting gimple_assign |
first | is true if first operand has to be considered, false if second operand has to be considered |
is_third_node | if has to consider or not the number of uses |
Definition at line 167 of file commutative_expr_restructuring.cpp.
References GET_CONST_NODE, Schedule::get_cstep(), Schedule::get_cstep_end(), GET_NODE, Schedule::GetEndingTime(), Schedule::GetStartingTime(), tree_helper::is_constant(), schedule, and TM.
Referenced by InternalExec().
|
private |
Return true if tree node is a gimple_assign with a mult_expr/plus_expr in the right part.
tn | is the tree reindex to be considered |
Definition at line 149 of file commutative_expr_restructuring.cpp.
References tree_helper::CGetType(), GET_CONST_NODE, and GET_NODE.
Referenced by InternalExec().
|
private |
The allocation information.
Definition at line 62 of file commutative_expr_restructuring.hpp.
Referenced by Initialize(), and InternalExec().
|
private |
The schedule.
Definition at line 59 of file commutative_expr_restructuring.hpp.
Referenced by Initialize(), InternalExec(), and IsCommExprChain().
|
private |
The tree manager.
Definition at line 65 of file commutative_expr_restructuring.hpp.
Referenced by Initialize(), InternalExec(), and IsCommExprChain().