PandA-2024.02
|
STL include. More...
#include <short_circuit_taf.hpp>
Public Member Functions | |
short_circuit_taf (const ParameterConstRef _Param, const application_managerRef _AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager) | |
Constructor. More... | |
~short_circuit_taf () override | |
Destructor. More... | |
DesignFlowStep_Status | InternalExec () override |
Restructures the unstructured code. 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 | check_merging_candidate (unsigned int &bb1, unsigned int &bb2, unsigned int merging_candidate, bool &bb1_true, bool &bb2_true, const std::map< unsigned int, blocRef > &list_of_bloc) |
Check if a basic block is a merging BB for a short circuit. More... | |
bool | create_gimple_cond (unsigned int bb1, unsigned int bb2, bool bb1_true, const std::map< unsigned int, blocRef > &list_of_bloc, bool or_type, unsigned int merging_candidate) |
create the or/and expression required by short circuit collapsing More... | |
void | restructure_CFG (unsigned int bb1, unsigned int bb2, unsigned int merging_candidate, std::map< unsigned int, blocRef > &list_of_bloc) |
restructure the CFG eliminating all BBs not needed after short circuit collapsing More... | |
bool | check_phis (unsigned int curr_bb, const std::map< unsigned int, blocRef > &list_of_bloc) |
check if phi could create problem to the short circuit collapsing 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... | |
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... | |
STL include.
Structure the original short circuit
Definition at line 71 of file short_circuit_taf.hpp.
short_circuit_taf::short_circuit_taf | ( | 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 |
DesignFlowManagerConstRef | is the design flow manager |
Behavior include HLS include Parameter include design flow manager include HLS includes parser/compiler include STD include STL include design_flows/technology includes tree includes utility includes
Definition at line 101 of file short_circuit_taf.cpp.
References DesignFlowStep::debug_level, DEBUG_LEVEL_NONE, GET_CLASS, DesignFlowStep::parameters, and ~short_circuit_taf().
|
overridedefault |
|
private |
Check if a basic block is a merging BB for a short circuit.
let bb1 the upper if
let search bb2, the lower if
Definition at line 299 of file short_circuit_taf.cpp.
References DesignFlowStep::debug_level, DEBUG_LEVEL_PEDANTIC, DEBUG_LEVEL_VERY_PEDANTIC, bloc::ENTRY_BLOCK_ID, GET_CONST_NODE, INDENT_DBG_MEX, PRINT_DBG_MEX, STR, and THROW_ASSERT.
Referenced by InternalExec().
|
private |
check if phi could create problem to the short circuit collapsing
curr_bb | is the basic block that merge the two or more flows |
list_of_bloc | is the list of basic blocks |
Definition at line 627 of file short_circuit_taf.cpp.
References GET_CONST_NODE, and phi.
Referenced by InternalExec().
|
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 111 of file short_circuit_taf.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, THROW_UNREACHABLE, and WHOLE_APPLICATION.
|
private |
create the or/and expression required by short circuit collapsing
If there are more than one statements in the basic block containing cond2, then do not merge conditions (in case speculation step should manage the code motion)
identify the first gimple_cond
create the assignment between condition for bb1 and the new ssa var
and then add to the bb1 statement list
fix merging_candidate phis
second, create the gimple assignment
and then add to the statement list
create !cond1
and then add to the bb1 statement list
identify the second gimple_cond
create the assignment between condition for bb2 and the new ssa var
and then add to the bb1 statement list
The expression contained in ce2 must now be the newly created expression, identified by expr_index Temporary remove statement to remove old uses
create (!)cond1 or cond2
Readding the statement
add the statements of bb1 to bb2
add the phi of bb1 to bb2
Definition at line 424 of file short_circuit_taf.cpp.
References FrontendFlowStep::AppM, BUILTIN_SRCP, tree_helper::CGetType(), DesignFlowStep::debug_level, DEBUG_LEVEL_PEDANTIC, DEBUG_LEVEL_VERY_PEDANTIC, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, GET_INDEX_CONST_NODE, GET_NODE, INDENT_DBG_MEX, tree_helper::is_a_vector(), tree_helper::IsBooleanType(), DesignFlowStep::parameters, phi, PRINT_DBG_MEX, STR, THROW_ASSERT, and ToString().
Referenced by InternalExec().
|
overridevirtual |
Check if this step has actually to be executed.
Reimplemented from FunctionFrontendFlowStep.
Definition at line 640 of file short_circuit_taf.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 182 of file short_circuit_taf.cpp.
|
overridevirtual |
Restructures the unstructured code.
compute merging candidates
find the first to merge
cond expr not completely collapsed
Implements FunctionFrontendFlowStep.
Definition at line 186 of file short_circuit_taf.cpp.
References FrontendFlowStep::AppM, check_merging_candidate(), check_phis(), create_gimple_cond(), DesignFlowStep::debug_level, DEBUG_LEVEL_PEDANTIC, DEBUG_LEVEL_VERY_PEDANTIC, bloc::ENTRY_BLOCK_ID, bloc::EXIT_BLOCK_ID, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, GET_NODE, FunctionFrontendFlowStep::GetName(), INDENT_DBG_MEX, DesignFlowStep::parameters, restructure_CFG(), sl, STR, SUCCESS, U, UNCHANGED, and FunctionFrontendFlowStep::WriteBBGraphDot().
|
private |
restructure the CFG eliminating all BBs not needed after short circuit collapsing
fix bb2 predecessor
fix bb1 empty block
check for BB with gimple_multi_way_if
Definition at line 578 of file short_circuit_taf.cpp.
References DesignFlowStep::debug_level, DEBUG_LEVEL_PEDANTIC, GET_NODE, PRINT_DBG_MEX, and STR.
Referenced by InternalExec().