PandA-2024.02
Public Member Functions | Private Member Functions
short_circuit_taf Class Reference

STL include. More...

#include <short_circuit_taf.hpp>

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

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 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

STL include.

Structure the original short circuit

Definition at line 71 of file short_circuit_taf.hpp.

Constructor & Destructor Documentation

◆ short_circuit_taf()

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.

Parameters
Paramis the set of the parameters
AppMis the application manager
function_idis the identifier of the function
DesignFlowManagerConstRefis 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().

Here is the call graph for this function:

◆ ~short_circuit_taf()

short_circuit_taf::~short_circuit_taf ( )
overridedefault

Destructor.

Referenced by short_circuit_taf().

Here is the caller graph for this function:

Member Function Documentation

◆ check_merging_candidate()

bool short_circuit_taf::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 
)
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().

Here is the caller graph for this function:

◆ check_phis()

bool short_circuit_taf::check_phis ( unsigned int  curr_bb,
const std::map< unsigned int, blocRef > &  list_of_bloc 
)
private

check if phi could create problem to the short circuit collapsing

Parameters
curr_bbis the basic block that merge the two or more flows
list_of_blocis the list of basic blocks
Returns
true in case the short circuit merging can be performed

Definition at line 627 of file short_circuit_taf.cpp.

References GET_CONST_NODE, and phi.

Referenced by InternalExec().

Here is the caller graph for this function:

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > short_circuit_taf::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

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.

Here is the call graph for this function:

◆ create_gimple_cond()

bool short_circuit_taf::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 
)
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().

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

◆ HasToBeExecuted()

bool short_circuit_taf::HasToBeExecuted ( ) const
overridevirtual

◆ Initialize()

void short_circuit_taf::Initialize ( )
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.

◆ InternalExec()

DesignFlowStep_Status short_circuit_taf::InternalExec ( )
overridevirtual

◆ restructure_CFG()

void short_circuit_taf::restructure_CFG ( unsigned int  bb1,
unsigned int  bb2,
unsigned int  merging_candidate,
std::map< unsigned int, blocRef > &  list_of_bloc 
)
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().

Here is the caller graph for this function:

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

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