PandA-2024.02
Public Member Functions | Private Member Functions | Private Attributes
MultipleEntryIfReduction Class Reference

Class performing some optimizations exploiting the reduction of BB with n inputs and m outputs. More...

#include <multiple_entry_if_reduction.hpp>

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

Public Member Functions

 MultipleEntryIfReduction (const ParameterConstRef _Param, const application_managerRef _AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
 Constructor. More...
 
 ~MultipleEntryIfReduction () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 Extract patterns from the IR. 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

double GetAreaCost (const std::list< tree_nodeRef > &list_of_stmt) const
 Estimate the area cost of the statements of a basic block. 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

tree_managerRef TM
 The tree manager. More...
 
tree_manipulationRef tree_man
 The tree manipulation. More...
 
statement_listsl {nullptr}
 The statement list. More...
 
bool bb_modified {false}
 Modified file. More...
 
ScheduleRef schedule
 The scheduling solution. More...
 
AllocationInformationConstRef allocation_information
 The allocation information. 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

Class performing some optimizations exploiting the reduction of BB with n inputs and m outputs.

The block have to contain only phi or conditional statements (such as if and multi way if)

Definition at line 101 of file multiple_entry_if_reduction.hpp.

Constructor & Destructor Documentation

◆ MultipleEntryIfReduction()

MultipleEntryIfReduction::MultipleEntryIfReduction ( const ParameterConstRef  _Param,
const application_managerRef  _AppM,
unsigned int  function_id,
const DesignFlowManagerConstRef  design_flow_manager 
)

Constructor.

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

Definition at line 118 of file multiple_entry_if_reduction.cpp.

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

Here is the call graph for this function:

◆ ~MultipleEntryIfReduction()

MultipleEntryIfReduction::~MultipleEntryIfReduction ( )
overridedefault

Destructor.

Referenced by MultipleEntryIfReduction().

Here is the caller graph for this function:

Member Function Documentation

◆ ComputeFrontendRelationships()

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

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

Here is the call graph for this function:

◆ GetAreaCost()

double MultipleEntryIfReduction::GetAreaCost ( const std::list< tree_nodeRef > &  list_of_stmt) const
private

Estimate the area cost of the statements of a basic block.

Definition at line 1058 of file multiple_entry_if_reduction.cpp.

References allocation_information, DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, AllocationInformation::GetStatementArea(), INDENT_DBG_MEX, and STR.

Referenced by InternalExec().

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

◆ HasToBeExecuted()

bool MultipleEntryIfReduction::HasToBeExecuted ( ) const
overridevirtual

Check if this step has actually to be executed.

Returns
true if the step has to be executed

Reimplemented from FunctionFrontendFlowStep.

Definition at line 178 of file multiple_entry_if_reduction.cpp.

References FunctionFrontendFlowStep::ComputeSignature(), DesignFlowStep::design_flow_manager, FunctionFrontendFlowStep::function_id, Wrefcount< T >::lock(), and DesignFlowStep::parameters.

Here is the call graph for this function:

◆ Initialize()

void MultipleEntryIfReduction::Initialize ( )
overridevirtual

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

Reimplemented from DesignFlowStep.

Definition at line 195 of file multiple_entry_if_reduction.cpp.

References allocation_information, FrontendFlowStep::AppM, bb_modified, tree_manager::CGetTreeNode(), FunctionFrontendFlowStep::function_id, GET_NODE, DesignFlowStep::parameters, sl, TM, and tree_man.

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status MultipleEntryIfReduction::InternalExec ( )
overridevirtual

Extract patterns from the IR.

Returns
the exit status of this step

if the operation had been done

list to save the block to eliminate after the reduction

The basic block graphs

Analyze if a basic block is a possible candidate

We skip basic block containing gimple_call since it would require modification of the call graph

Skip headers

The index of the loop to be considered (the most internal loops which contains the definition and all the uses

The depth of the loop to be considered

Create the copies

Fixing phi: duplicating def_edge of ssa name which are not defined in the current bb

Build list of phis + gimple_nodes

The ssa defined by the statement (left part of gimple assignment and vdef)

The set of basic block uses

The set of statement uses

The set of reaching definition

Cache of created phi - first key is the used ssa - second key is the basic block where is created

Duplicating statement

Defined in a different basic block

The old ssa

Management of vuses for overwrite

Use is in the considered loop

Use is in a more nested loop

Use is in a less nested loop

Set of basic blocks belonging to the loop

Check if there a use of the ssa in the header; if not basic blocks after uses can be removed

Remove all basic blocks from which no use can be reached

Set of basic blocks to be analyzed

True if different definitions reach this bb from all the bbs

If this is the basic block contains a use

If the basic block is the source of a feedback edge, fix the phi in the header

endfor-list_of_bloc

eliminate the blocks (remove them from the tree)

Implements FunctionFrontendFlowStep.

Definition at line 209 of file multiple_entry_if_reduction.cpp.

References FrontendFlowStep::AppM, FunctionBehavior::BB, BB_EXIT, block::block(), tree_manager::CGetTreeNode(), tree_manager::CGetTreeReindex(), tree_helper::CGetType(), tree_helper::ComputeSsaUses(), tree_manipulation::create_phi_node(), tree_manipulation::create_ssa_name(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, FB_CFG_SELECTOR, FunctionBehavior::FBB, FunctionFrontendFlowStep::function_behavior, FunctionFrontendFlowStep::function_id, GET_CONST_NODE, GET_NODE, GetAreaCost(), FunctionFrontendFlowStep::GetName(), tree_manager::GetTreeNode(), tree_manager::GetTreeReindex(), INDENT_DBG_MEX, index, tree_node::index, statement_list::list_of_bloc, max, DesignFlowStep::parameters, phi, tree_manager::ReplaceTreeNode(), sl, STR, SUCCESS, lenet_tvm::target, THROW_ASSERT, THROW_UNREACHABLE, TM, tree_man, and UNCHANGED.

Here is the call graph for this function:

Field Documentation

◆ allocation_information

AllocationInformationConstRef MultipleEntryIfReduction::allocation_information
private

The allocation information.

Definition at line 120 of file multiple_entry_if_reduction.hpp.

Referenced by GetAreaCost(), and Initialize().

◆ bb_modified

bool MultipleEntryIfReduction::bb_modified {false}
private

Modified file.

Definition at line 114 of file multiple_entry_if_reduction.hpp.

Referenced by Initialize().

◆ schedule

ScheduleRef MultipleEntryIfReduction::schedule
private

The scheduling solution.

Definition at line 117 of file multiple_entry_if_reduction.hpp.

◆ sl

statement_list* MultipleEntryIfReduction::sl {nullptr}
private

The statement list.

Definition at line 111 of file multiple_entry_if_reduction.hpp.

Referenced by Initialize(), and InternalExec().

◆ TM

tree_managerRef MultipleEntryIfReduction::TM
private

The tree manager.

Definition at line 105 of file multiple_entry_if_reduction.hpp.

Referenced by Initialize(), and InternalExec().

◆ tree_man

tree_manipulationRef MultipleEntryIfReduction::tree_man
private

The tree manipulation.

Definition at line 108 of file multiple_entry_if_reduction.hpp.

Referenced by Initialize(), and InternalExec().


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

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