PandA-2024.02
dead_code_elimination.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  */
45 #ifndef DEAD_CODE_ELIMINATION_HPP
46 #define DEAD_CODE_ELIMINATION_HPP
49 
51 #include "refcount.hpp"
52 
54 #include "call_graph.hpp"
55 
57 #include "Parameter.hpp"
58 
60 
68 class statement_list;
69 class gimple_node;
71 
73 {
74  private:
75  std::map<unsigned int, bool> last_writing_memory;
76 
77  std::map<unsigned int, bool> last_reading_memory;
78 
80 
82 
84 
90  ComputeFrontendRelationships(const DesignFlowStep::RelationshipType relationship_type) const override;
91 
92  void kill_uses(const tree_managerRef& TM, const tree_nodeRef& op0) const;
93 
102  tree_nodeRef add_gimple_nop(const tree_managerRef& TM, const tree_nodeRef& cur_stmt, const blocRef& bb);
103 
104  void fix_sdc_motion(tree_nodeRef removedStmt) const;
105 
106  blocRef move2emptyBB(const tree_managerRef& TM, const unsigned int new_bbi, const statement_list* sl,
107  const blocRef& bb_pred, const unsigned int cand_bb_dest, const unsigned int bb_dest) const;
108 
109  public:
118  unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager);
119 
123  ~dead_code_elimination() override;
124 
130 
135  bool HasToBeExecuted() const override;
136 
143  static tree_nodeRef kill_vdef(const tree_managerRef& TM, const tree_nodeRef& vdef);
144 
145  static void fix_sdc_motion(DesignFlowManagerConstRef design_flow_manager, unsigned int function_id,
146  tree_nodeRef removedStmt);
147 };
148 
149 #endif
This struct specifies the field bloc (basic block).
This struct specifies the statement_list node.
Definition: tree_node.hpp:4662
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.
RelationshipType
The relationship type.
This class manages the tree structures extracted from the raw file.
bool HasToBeExecuted() const override
Check if this step has actually to be executed.
tree_nodeRef add_gimple_nop(const tree_managerRef &TM, const tree_nodeRef &cur_stmt, const blocRef &bb)
void fix_sdc_motion(tree_nodeRef removedStmt) const
blocRef move2emptyBB(const tree_managerRef &TM, const unsigned int new_bbi, const statement_list *sl, const blocRef &bb_pred, const unsigned int cand_bb_dest, const unsigned int bb_dest) const
~dead_code_elimination() override
Destructor.
This class contains the base representation for a generic frontend flow step which works on a single ...
dead_code_elimination(const ParameterConstRef _parameters, const application_managerRef AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
Abstract pure class for the tree structure.
Definition: tree_node.hpp:139
void kill_uses(const tree_managerRef &TM, const tree_nodeRef &op0) const
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
DesignFlowStep_Status
The status of a step.
Call graph hierarchy.
REF_FORWARD_DECL(tree_manager)
static tree_nodeRef kill_vdef(const tree_managerRef &TM, const tree_nodeRef &vdef)
Replace virtual ssa definition with gimple nop.
Template definition of refcount.
const unsigned int function_id
The index of the function to be analyzed.
const application_managerRef AppM
The application manager.
std::map< unsigned int, bool > last_writing_memory
struct definition of the common part of a gimple with virtual operands
Definition: tree_node.hpp:1078
std::map< unsigned int, bool > last_reading_memory
this class is used to manage the command-line or XML options.
DesignFlowStep_Status InternalExec() override
Performs dead code elimination.
int sl
Definition: adpcm.c:105

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