PandA-2024.02
complete_bb_graph.cpp
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  */
40 #include "complete_bb_graph.hpp"
41 
42 #include "Parameter.hpp" // for Parameter, ParameterConstRef
43 #include "exceptions.hpp" // for THROW_UNREACHABLE
44 #include "hash_helper.hpp" // for hash
45 #include "string_manipulation.hpp" // for GET_CLASS
46 
47 CompleteBBGraph::CompleteBBGraph(const application_managerRef _AppM, const unsigned int _function_index,
48  const DesignFlowManagerConstRef _design_flow_manager,
49  const ParameterConstRef _parameters)
50  : FunctionFrontendFlowStep(_AppM, _function_index, COMPLETE_BB_GRAPH, _design_flow_manager, _parameters)
51 {
52  composed = true;
53  debug_level = parameters->get_class_debug_level(GET_CLASS(*this));
54 }
55 
57 
60 {
62  switch(relationship_type)
63  {
65  {
66  relationships.insert(std::make_pair(BLOCK_FIX, SAME_FUNCTION));
67  relationships.insert(std::make_pair(MULTI_WAY_IF, SAME_FUNCTION));
68  relationships.insert(std::make_pair(PHI_OPT, SAME_FUNCTION));
69  relationships.insert(std::make_pair(REMOVE_ENDING_IF, SAME_FUNCTION));
70  relationships.insert(std::make_pair(SHORT_CIRCUIT_TAF, SAME_FUNCTION));
71  relationships.insert(std::make_pair(SWITCH_FIX, SAME_FUNCTION));
72  relationships.insert(std::make_pair(SPLIT_RETURN, SAME_FUNCTION));
73  if(!parameters->getOption<int>(OPT_gcc_openmp_simd))
74  {
75  relationships.insert(std::make_pair(BITVALUE_RANGE, SAME_FUNCTION));
76  relationships.insert(std::make_pair(BITVALUE_RANGE, CALLED_FUNCTIONS));
77  }
78  break;
79  }
81  {
82  break;
83  }
85  {
86  relationships.insert(std::make_pair(SDC_CODE_MOTION, SAME_FUNCTION));
87  relationships.insert(std::make_pair(DEAD_CODE_ELIMINATION, SAME_FUNCTION));
88  relationships.insert(std::make_pair(DEAD_CODE_ELIMINATION, CALLED_FUNCTIONS));
89  relationships.insert(std::make_pair(LUT_TRANSFORMATION, SAME_FUNCTION));
90  relationships.insert(std::make_pair(CSE_STEP, SAME_FUNCTION));
91  relationships.insert(std::make_pair(DETERMINE_MEMORY_ACCESSES, SAME_FUNCTION));
92  break;
93  }
94  default:
95  THROW_UNREACHABLE("Relationship type does not exist");
96  }
97  return relationships;
98 }
99 
101 {
103 }
CompleteBBGraph(const application_managerRef AppM, const unsigned int function_index, const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
Constructor.
#define GET_CLASS(obj)
Macro returning the actual type of an object.
RelationshipType
The relationship type.
Source must be executed to satisfy target.
exceptions managed by PandA
Auxiliary methods for manipulating string.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
bool composed
True if this step represents a composition of design flow steps (e.g., a flow); must be set by specia...
DesignFlowStep_Status InternalExec() override
Execute this step.
const ParameterConstRef parameters
Set of input parameters.
DesignFlowStep_Status
The status of a step.
~CompleteBBGraph() override
Destructor.
This class models the ending of execution of all steps which can modify control flow graph of basic b...
This file collects some hash functors.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
this class is used to manage the command-line or XML options.
int debug_level
The debug level.
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.

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