PandA-2024.02
operations_cfg_computation.hpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
43 #ifndef OPERATIONS_CFG_COMPUTATION_HPP
44 #define OPERATIONS_CFG_COMPUTATION_HPP
45 
46 #include "custom_map.hpp"
48 #include "refcount.hpp"
49 #include <list>
50 #include <string>
51 
61 //
66 {
67  private:
69  std::map<unsigned int, std::string> label_decl_map;
70 
72  std::map<unsigned int, std::string> first_statement;
73 
75  std::list<std::string> start_nodes;
76 
78  std::string actual_name;
79 
86  std::string get_first_node(const tree_nodeRef& tn, const std::string& f_name) const;
87 
91  void clean_start_nodes();
92 
97  void insert_start_node(const std::string& start_node);
98 
103  bool empty_start_nodes() const;
104 
109  void init_start_nodes(const std::string& start_node);
110 
120  void connect_start_nodes(const operations_graph_constructorRef ogc, const std::string& next, bool true_edge = false,
121  bool false_edge = false, unsigned int nodeid = 0);
122 
131  void build_operation_recursive(const tree_managerRef TM, const operations_graph_constructorRef ogc,
132  const tree_nodeRef tn, const std::string& f_name, unsigned int bb_index);
133 
139  ComputeFrontendRelationships(const DesignFlowStep::RelationshipType relationship_type) const override;
140 
141  public:
149  unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager);
150 
154  ~operations_cfg_computation() override;
155 
161 
165  void Initialize() override;
166 };
167 
168 #endif
DesignFlowStep_Status InternalExec() override
Computes the operations CFG graph data structure.
class providing methods to manage an operations graph.
RelationshipType
The relationship type.
This class manages the tree structures extracted from the raw file.
~operations_cfg_computation() override
Destructor.
std::map< unsigned int, std::string > label_decl_map
relation between label declaration and first statement id
void connect_start_nodes(const operations_graph_constructorRef ogc, const std::string &next, bool true_edge=false, bool false_edge=false, unsigned int nodeid=0)
Connect start_node with the next node.
void build_operation_recursive(const tree_managerRef TM, const operations_graph_constructorRef ogc, const tree_nodeRef tn, const std::string &f_name, unsigned int bb_index)
Builds recursively the operation for a given tree node.
This class contains the base representation for a generic frontend flow step which works on a single ...
void clean_start_nodes()
Clean the list of start nodes.
redefinition of map to manage ordered/unordered structures
Abstract pure class for the tree structure.
Definition: tree_node.hpp:139
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
operations_cfg_computation(const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
REF_FORWARD_DECL(operations_cfg_computation)
std::string actual_name
store the name of the current vertex
std::map< unsigned int, std::string > first_statement
relation between basic block and first statement id
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
DesignFlowStep_Status
The status of a step.
bool empty_start_nodes() const
Return true if start_node is empty.
Template definition of refcount.
const unsigned int function_id
The index of the function to be analyzed.
void insert_start_node(const std::string &start_node)
Insert a start node to the list of start nodes.
const application_managerRef AppM
The application manager.
Compute the control flow graph for the operations.
std::string get_first_node(const tree_nodeRef &tn, const std::string &f_name) const
Return the name of the first node given a tree node.
void init_start_nodes(const std::string &start_node)
Initialize the list of start nodes.
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.
std::list< std::string > start_nodes
store the name of the nodes at which the next node should be attached.

Generated on Mon Feb 12 2024 13:02:52 for PandA-2024.02 by doxygen 1.8.13