43 #ifndef MULTI_WAY_IF_HPP 44 #define MULTI_WAY_IF_HPP 84 void MergeCondCond(
const blocRef& pred_bb,
const blocRef& curr_bb);
91 void MergeCondMulti(
const blocRef& pred_bb,
const blocRef& curr_bb);
98 void MergeMultiCond(
const blocRef& pred_bb,
const blocRef& curr_bb);
112 void UpdateCfg(
const blocRef& pred_bb,
const blocRef& curr_bb);
119 void FixCfg(
const blocRef& pred_bb,
const blocRef& succ_bb);
statement_list * sl
The statement list of the analyzed function.
This struct specifies the field bloc (basic block).
multi_way_if(const ParameterConstRef _Param, const application_managerRef _AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
void MergeMultiMulti(const blocRef &pred_bb, const blocRef &curr_bb)
Merge two gimple_multi_way_if in a single one.
void MergeCondCond(const blocRef &pred_bb, const blocRef &curr_bb)
Merge two basic blocks both ending with gimple_cond_K.
~multi_way_if() override
Destructor.
This struct specifies the statement_list node.
void UpdateCfg(const blocRef &pred_bb, const blocRef &curr_bb)
Update the basic block control flow graph data structure.
RelationshipType
The relationship type.
This class manages the tree structures extracted from the raw file.
bool bb_modified
Modified file.
void MergeCondMulti(const blocRef &pred_bb, const blocRef &curr_bb)
Build the gimple_multi_way_if by mergin a gimple_cond with a gimple_multi_way_if. ...
This class contains the base representation for a generic frontend flow step which works on a single ...
Abstract pure class for the tree structure.
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
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.
void FixCfg(const blocRef &pred_bb, const blocRef &succ_bb)
Insert a basic block on an edge.
void MergeMultiCond(const blocRef &pred_bb, const blocRef &curr_bb)
Merge a gimple_cond in a gimple_multi_way_if.
bool HasToBeExecuted() const override
Check if this step has actually to be executed.
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
DesignFlowStep_Status
The status of a step.
Structure the original short circuit.
Template definition of refcount.
tree_manipulationRef tree_man
The tree manipulation.
const unsigned int function_id
The index of the function to be analyzed.
tree_managerRef TM
The tree manager.
DesignFlowStep_Status InternalExec() override
Restructures the unstructured code.
This class creates a layer to add nodes and to manipulate the tree_nodes manager. ...