43 #ifndef IR_LOWERING_HPP 44 #define IR_LOWERING_HPP 118 const std::string& srcp_default);
121 const std::string& srcp_default,
bool temp_addr);
124 int data_bitsize,
const std::list<tree_nodeRef>::const_iterator it_los,
125 const blocRef&
block,
const std::string& srcp_default);
135 std::pair<unsigned int, blocRef>
block,
136 std::list<tree_nodeRef>::const_iterator it_los,
bool temp_addr);
146 std::list<tree_nodeRef>::const_iterator& it_los,
gimple_assign* ga,
148 const std::string& srcp_default,
const std::string& step_name);
This struct specifies the integer_cst node.
bool reached_max_transformation_limit(const tree_nodeRef &stmt)
check if the max transformation limit has been reached
This struct specifies the field bloc (basic block).
void ComputeRelationships(DesignFlowStepSet &relationship, const DesignFlowStep::RelationshipType relationship_type) override
Compute the relationships of a step with other steps.
tree_nodeRef expand_mult_const(const tree_nodeRef &op0, unsigned long long int val, const struct algorithm &alg, enum mult_variant &variant, const tree_nodeRef &stmt, const blocRef &block, const tree_nodeRef &type, const std::string &srcp_default)
A subroutine of expand_mult, used for constant multiplications.
RelationshipType
The relationship type.
This class manages the tree structures extracted from the raw file.
This structure records a sequence of operations.
IR_lowering(const ParameterConstRef Param, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
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.
This class contains the base representation for a generic frontend flow step which works on a single ...
tree_nodeRef expand_MC(const tree_nodeRef &op0, const integer_cst *ic_node, const tree_nodeRef &old_target, const tree_nodeRef &stmt, const blocRef &block, const tree_nodeRef &type_expr, const std::string &srcp_default)
Abstract pure class for the tree structure.
Base class for step of design flow.
This struct specifies the gimple_assign node (GCC 4.3 tree node).
tree_managerRef TM
The tree manager.
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
mult_variant
Indicates the type of fixup needed after a constant multiplication.
void division_by_a_constant(const std::pair< unsigned int, blocRef > &block, std::list< tree_nodeRef >::const_iterator &it_los, gimple_assign *ga, const tree_nodeRef &op1, enum kind code1, bool &restart_analysis, const std::string &srcp_default, const std::string &step_name)
Low-level memory addressing.
redefinition of set to manage ordered/unordered structures
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
This class contains the base representation for a generic frontend flow step.
tree_nodeRef expand_smod_pow2(const tree_nodeRef &op0, unsigned long long int d, const tree_nodeRef &stmt, const blocRef &block, const tree_nodeRef &type, const std::string &srcp_default)
Expand signed modulus of OP0 by a power of two D in mode MODE.
DesignFlowStep_Status
The status of a step.
Compute the control flow graph for the operations.
bool expand_target_mem_ref(target_mem_ref461 *tmr, const tree_nodeRef &stmt, const blocRef &block, const std::string &srcp_default, bool temp_addr)
This struct specifies the block node.
tree_manipulationRef tree_man
The IR manipulation.
Template definition of refcount.
const unsigned int function_id
The index of the function to be analyzed.
const application_managerRef AppM
The application manager.
tree_nodeRef expand_mult_highpart(const tree_nodeRef &op0, unsigned long long int ml, const tree_nodeRef &type_expr, int data_bitsize, const std::list< tree_nodeRef >::const_iterator it_los, const blocRef &block, const std::string &srcp_default)
tree_nodeRef expand_sdiv_pow2(const tree_nodeRef &op0, unsigned long long int d, const tree_nodeRef &stmt, const blocRef &block, const tree_nodeRef &type, const std::string &srcp_default)
Expand signed division of OP0 by a power of two D in mode MODE.
tree_nodeRef array_ref_lowering(array_ref *AR, const std::string &srcp_default, std::pair< unsigned int, blocRef > block, std::list< tree_nodeRef >::const_iterator it_los, bool temp_addr)
DesignFlowStep_Status InternalExec() override
traverse the data structure to simplify and make more homogeneous as possible.
~IR_lowering() override
Destructor.
This class creates a layer to add nodes and to manipulate the tree_nodes manager. ...