PandA-2024.02
BitValueRange.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  */
44 #include "BitValueRange.hpp"
45 
46 #include "Parameter.hpp"
47 
48 // Behavior include
49 #include "function_behavior.hpp"
50 
52 #include "design_flow_graph.hpp"
53 #include "design_flow_manager.hpp"
55 
56 #include "dbgPrintHelper.hpp" // for DEBUG_LEVEL_
57 #include "string_manipulation.hpp" // for GET_CLASS
58 
60  unsigned int _function_id, const DesignFlowManagerConstRef _design_flow_manager)
61  : FunctionFrontendFlowStep(_AppM, _function_id, BITVALUE_RANGE, _design_flow_manager, _parameters)
62 {
63  debug_level = parameters->get_class_debug_level(GET_CLASS(*this), DEBUG_LEVEL_NONE);
64 }
65 
67 
70 {
72  switch(relationship_type)
73  {
75  {
76  if(!parameters->getOption<int>(OPT_gcc_openmp_simd))
77  {
78  relationships.insert(std::make_pair(BIT_VALUE_OPT, SAME_FUNCTION));
79  }
80  relationships.insert(std::make_pair(BITVALUE_RANGE, CALLED_FUNCTIONS));
81  if(parameters->isOption(OPT_hls_div) && parameters->getOption<std::string>(OPT_hls_div) != "none")
82  {
83  relationships.insert(std::make_pair(HLS_DIV_CG_EXT, SAME_FUNCTION));
84  }
85  relationships.insert(std::make_pair(RANGE_ANALYSIS, WHOLE_APPLICATION));
86  relationships.insert(std::make_pair(USE_COUNTING, SAME_FUNCTION));
87  break;
88  }
90  {
91  break;
92  }
94  {
96  {
97  if(!parameters->getOption<int>(OPT_gcc_openmp_simd))
98  {
99  relationships.insert(std::make_pair(BIT_VALUE, SAME_FUNCTION));
100  }
101  if(parameters->isOption(OPT_hls_div) && parameters->getOption<std::string>(OPT_hls_div) != "none")
102  {
103  relationships.insert(std::make_pair(HLS_DIV_CG_EXT, SAME_FUNCTION));
104  }
105  }
106  break;
107  }
108  default:
109  THROW_UNREACHABLE("");
110  }
111  return relationships;
112 }
113 
115 {
116  const auto design_flow_step =
117  GetPointerS<const FrontendFlowStepFactory>(design_flow_manager.lock()->CGetDesignFlowStepFactory("Frontend"))
118  ->CreateFunctionFrontendFlowStep(FrontendFlowStepType::BIT_VALUE_OPT, function_id);
119  design_flow_step->Initialize();
120  const auto return_status = design_flow_step->Exec();
121  return_status == DesignFlowStep_Status::SUCCESS ? function_behavior->UpdateBBVersion() : 0;
122  return return_status;
123 }
124 
126 {
128 }
File containing functions and utilities to support the printing of debug messagges.
#define GET_CLASS(obj)
Macro returning the actual type of an object.
RelationshipType
The relationship type.
Source must be executed to satisfy target.
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.
Class performing some optimizations on the IR exploiting Bit Value analysis but executed after Range ...
Auxiliary methods for manipulating string.
bool HasToBeExecuted() const override
Check if this step has actually to be executed.
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
Classes to describe design flow graph.
DesignFlowStep_Status InternalExec() override
Optimize IR after the RA has been executed.
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager.
DesignFlowStep_Status GetStatus() const
Return the status of this design step.
const ParameterConstRef parameters
Set of input parameters.
DesignFlowStep_Status
The status of a step.
#define DEBUG_LEVEL_NONE
no debugging print is performed.
Wrapper of design_flow.
~BitValueRange() override
Destructor.
refcount< T > lock() const
Definition: refcount.hpp:212
const unsigned int function_id
The index of the function to be analyzed.
BitValueRange(const ParameterConstRef _Param, const application_managerRef _AppM, unsigned int function_id, const DesignFlowManagerConstRef design_flow_manager)
Constructor.
This class contains the methods to create a frontend flow step.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
bool HasToBeExecuted() const override
Check if this step has actually to be executed.
this class is used to manage the command-line or XML options.
unsigned int bitvalue_version
The version of the bitvalue information on which this step has been applied.
int debug_level
The debug level.
A brief description of the C++ Header File.
const FunctionBehaviorRef function_behavior
The function behavior of the function to be analyzed.

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