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

#include <cond_expr_restructuring.hpp>

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

Public Member Functions

 CondExprRestructuring (const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
 ~CondExprRestructuring () 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 IsCondExprGimple (const tree_nodeConstRef tn) const
 Return true if tree node is a gimple_assign with a cond_expr in the right part. More...
 
tree_nodeRef IsCondExprChain (const tree_nodeConstRef tn, const bool first, bool is_third_node) const
 Given a gimple_assign with cond_expr in the right part and one of its operand 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 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

Definition at line 55 of file cond_expr_restructuring.hpp.

Constructor & Destructor Documentation

◆ CondExprRestructuring()

CondExprRestructuring::CondExprRestructuring ( const application_managerRef  AppM,
unsigned int  function_id,
const DesignFlowManagerConstRef  design_flow_manager,
const ParameterConstRef  parameters 
)

Constructor.

Parameters
AppMis the application manager
function_idis the node id of the function analyzed.
design_flow_manageris the design flow manager
parametersis the set of input parameters

Definition at line 84 of file cond_expr_restructuring.cpp.

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

Here is the call graph for this function:

◆ ~CondExprRestructuring()

CondExprRestructuring::~CondExprRestructuring ( )
overridedefault

Destructor.

Referenced by CondExprRestructuring().

Here is the caller graph for this function:

Member Function Documentation

◆ ComputeFrontendRelationships()

const CustomUnorderedSet< std::pair< FrontendFlowStepType, FrontendFlowStep::FunctionRelationship > > CondExprRestructuring::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 95 of file cond_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.

Here is the call graph for this function:

◆ HasToBeExecuted()

bool CondExprRestructuring::HasToBeExecuted ( ) const
overridevirtual

◆ Initialize()

void CondExprRestructuring::Initialize ( )
overridevirtual

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

Reimplemented from DesignFlowStep.

Definition at line 189 of file cond_expr_restructuring.cpp.

References allocation_information, FrontendFlowStep::AppM, FunctionFrontendFlowStep::function_id, DesignFlowStep::Initialize(), schedule, and TM.

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status CondExprRestructuring::InternalExec ( )
overridevirtual

Performs the loops analysis.

Check if new ending time would not be larger The time in which last operand is ready

As cond expr time we consider the worst among the existing operation in the chain

Inserting first cond expr 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

simplified version

we are going to create a LUT

Inserting last cond expr

Create the assign

Check that the second cond expr is actually dead

Remove the intermediate cond_expr

Removing added statements

Adding old statements

Recomputing schedule

Setting pointer to the previous element

Restarting

Implements FunctionFrontendFlowStep.

Definition at line 200 of file cond_expr_restructuring.cpp.

References allocation_information, FrontendFlowStep::AppM, BUILTIN_SRCP, tree_manager::CGetTreeNode(), tree_helper::CGetType(), counter, tree_manager::CreateUniqueIntegerCst(), 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_INDEX_NODE, GET_NODE, AllocationInformation::GetConnectionTime(), Schedule::GetEndingTime(), FunctionFrontendFlowStep::GetName(), AllocationInformation::GetTimeLatency(), INDENT_DBG_MEX, tree_node::index, IsCondExprChain(), IsCondExprGimple(), max, DesignFlowStep::parameters, schedule, sl, STR, SUCCESS, THROW_ASSERT, TM, ToString(), UNCHANGED, fu_binding::UNKNOWN, Schedule::UpdateTime(), and FunctionFrontendFlowStep::WriteBBGraphDot().

Here is the call graph for this function:

◆ IsCondExprChain()

tree_nodeRef CondExprRestructuring::IsCondExprChain ( const tree_nodeConstRef  tn,
const bool  first,
bool  is_third_node 
) const
private

Given a gimple_assign with cond_expr in the right part and one of its operand it checks:

  • if operand is a ssa_name
  • if operand is defined in the same basic block
  • if operand is defined in a gimple_assign whose right a part is another cond_expr
  • if operand is on the relative critical path (i.e., it delays execution of tn
    Parameters
    tnis the starting gimple_assign
    firstis true if first operand has to be considered, false if second oeprand has to be considered
    Returns
    the chained gimple_assignment if all conditions hold

Definition at line 613 of file cond_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().

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

◆ IsCondExprGimple()

bool CondExprRestructuring::IsCondExprGimple ( const tree_nodeConstRef  tn) const
private

Return true if tree node is a gimple_assign with a cond_expr in the right part.

Parameters
tnis the tree reindex to be considered

Definition at line 603 of file cond_expr_restructuring.cpp.

References GET_CONST_NODE, and GET_NODE.

Referenced by InternalExec().

Here is the caller graph for this function:

Field Documentation

◆ allocation_information

AllocationInformationRef CondExprRestructuring::allocation_information
private

The allocation information.

Definition at line 62 of file cond_expr_restructuring.hpp.

Referenced by Initialize(), and InternalExec().

◆ schedule

ScheduleRef CondExprRestructuring::schedule
private

The schedule.

Definition at line 59 of file cond_expr_restructuring.hpp.

Referenced by Initialize(), InternalExec(), and IsCondExprChain().

◆ TM

tree_managerRef CondExprRestructuring::TM
private

The tree manager.

Definition at line 65 of file cond_expr_restructuring.hpp.

Referenced by Initialize(), InternalExec(), and IsCondExprChain().


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

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