108 const std::map<bit_lattice, std::map<bit_lattice, std::map<bit_lattice, std::deque<bit_lattice>>>>
   405 const std::map<bit_lattice, std::map<bit_lattice, std::map<bit_lattice, std::deque<bit_lattice>>>>
   822                   "-->Pointer resizing starting from " + 
TM->CGetTreeNode(output_id)->ToString());
   825    unsigned long long address_bitsize;
   828       auto* hm = GetPointer<HLS_manager>(
AppM);
   833             unsigned long long int max_addr =
   836             for(address_bitsize = 1; max_addr > (1ull << address_bitsize); ++address_bitsize)
   841             if(address_bitsize < 4)
   846             auto vd = GetPointer<const var_decl>(
TM->CGetTreeNode(var));
   847             if(hm->Rmem->get_base_address(var, 
function_id) == 0 && vd)
   849                auto align = vd->algn;
   870             address_bitsize = hm->get_address_bitsize();
   876          address_bitsize = 
AppM->get_address_bitsize();
   885    return address_bitsize;
   890    const auto vd = GetPointer<const var_decl>(
GET_CONST_NODE(ae->op));
   895    auto align = vd->algn;
   914    return found ? 
index : 0;
   918                      const DesignFlowManagerConstRef dfm)
   932    switch(relationship_type)
   937          relationships.insert(std::make_pair(CALL_GRAPH_BUILTIN_CALL, 
SAME_FUNCTION));
   938          relationships.insert(std::make_pair(COMPUTE_IMPLICIT_CALLS, 
SAME_FUNCTION));
   939          relationships.insert(std::make_pair(DETERMINE_MEMORY_ACCESSES, 
SAME_FUNCTION));
   941          relationships.insert(std::make_pair(EXTRACT_GIMPLE_COND_OP, 
SAME_FUNCTION));
   942          relationships.insert(std::make_pair(FIX_STRUCTS_PASSED_BY_VALUE, 
SAME_FUNCTION));
   943          relationships.insert(std::make_pair(FUNCTION_CALL_TYPE_CLEANUP, 
SAME_FUNCTION));
   944          relationships.insert(std::make_pair(IR_LOWERING, 
SAME_FUNCTION));
   945          relationships.insert(std::make_pair(PARM2SSA, 
SAME_FUNCTION));
   948             relationships.insert(std::make_pair(SOFT_FLOAT_CG_EXT, 
SAME_FUNCTION));
   950          relationships.insert(std::make_pair(UN_COMPARISON_LOWERING, 
SAME_FUNCTION));
   951          relationships.insert(std::make_pair(USE_COUNTING, 
SAME_FUNCTION));
   965    return relationships;
   975    const auto bambu_frontend_flow_signature =
   980    THROW_ASSERT(tn->get_kind() == function_decl_K, 
"Node is not a function");
   981    const auto fd = GetPointerS<const function_decl>(tn);
   983    const auto sl = GetPointerS<const statement_list>(
GET_CONST_NODE(fd->body));
   990    for(
const auto& 
block : 
sl->list_of_bloc)
   992       inverse_vertex_map.insert(
   997    for(
const auto& curr_bb_pair : 
sl->list_of_bloc)
   999       const auto curr_bbi = curr_bb_pair.first;
  1000       const auto curr_bb = curr_bb_pair.second;
  1001       for(
const auto& lop : curr_bb->list_of_pred)
  1003          THROW_ASSERT(static_cast<bool>(inverse_vertex_map.count(lop)),
  1004                       "BB" + 
STR(lop) + 
" (successor of BB" + 
STR(curr_bbi) + 
") does not exist");
  1005          bb_graphs_collection->AddEdge(inverse_vertex_map.at(lop), inverse_vertex_map.at(curr_bbi), 
CFG_SELECTOR);
  1008       for(
const auto& los : curr_bb->list_of_succ)
  1012             bb_graphs_collection->AddEdge(inverse_vertex_map.at(curr_bbi), inverse_vertex_map.at(los), 
CFG_SELECTOR);
  1016       if(curr_bb->list_of_succ.empty())
  1018          bb_graphs_collection->AddEdge(inverse_vertex_map.at(curr_bbi), inverse_vertex_map.at(
bloc::EXIT_BLOCK_ID),
  1030    for(
const auto& it : bb_dominators.get_dominator_map())
  1034          bb_graphs_collection->AddEdge(it.second, it.first, 
D_SELECTOR);
  1037    dt->
GetBBGraphInfo()->bb_index_map = std::move(inverse_vertex_map);
  1039    std::list<vertex> v_topological;
  1043    std::transform(v_topological.begin(), v_topological.end(), std::back_inserter(
bb_topological),
  1103    for(
const auto& m : 
map)
  1106                      "var_uid: " + 
STR(m.first) + 
":" + BH->PrintVariable(m.first) +
  1116    for(
const auto& b : 
best)
  1118       const auto tn_id = b.first;
  1119       const auto tn = 
TM->GetTreeNode(tn_id);
  1120       const auto kind = tn->get_kind();
  1121       if(
kind == ssa_name_K)
  1123          auto ssa = GetPointerS<ssa_name>(tn);
  1126             if(!
AppM->ApplyNewTransformation())
  1131                            "Variable: " + ssa->ToString() + 
" bitstring: " + ssa->bit_values + 
" -> " +
  1140       else if(
kind == function_decl_K)
  1142          auto fd = GetPointerS<function_decl>(tn);
  1145             if(!
AppM->ApplyNewTransformation())
  1157       else if(
kind == integer_cst_K || 
kind == real_cst_K)
  1163          THROW_ERROR(
"unexpected condition: variable of kind " + tn->get_kind_text());
  1178    const auto CGMan = 
AppM->CGetCallGraphManager();
  1179    const auto cg = CGMan->CGetCallGraph();
  1182    const auto rbf = CGMan->GetReachedBodyFunctions();
  1184    boost::tie(oe_it, oe_end) = boost::out_edges(v, *cg);
  1185    for(; oe_it != oe_end; oe_it++)
  1187       const auto call_edge_info = cg->CGetFunctionEdgeInfo(*oe_it);
  1188       for(
const auto& i : call_edge_info->direct_call_points)
  1190          const auto called_id = CGMan->get_function(
boost::target(*oe_it, *cg));
  1194             THROW_ASSERT(
AppM->CGetFunctionBehavior(called_id)->CGetBehavioralHelper()->get_function_name() == 
MEMCPY,
  1196                              " calls function " +
  1197                              AppM->CGetFunctionBehavior(called_id)->CGetBehavioralHelper()->get_function_name() +
  1198                              " with an artificial call: this should not happen");
  1201          if(rbf.find(called_id) != rbf.end())
  1209    const auto fd = GetPointerS<const function_decl>(tn);
  1214    for(
const auto& parm_decl_node : fd->list_of_args)
  1222       const auto parmssa = 
TM->CGetTreeNode(parmssa_id);
  1223       const auto p = GetPointerS<const ssa_name>(parmssa);
  1224       const auto b = p->CGetUseStmts().empty() ?
  1228       best[parmssa_id] = b;
  1246                      "Function returning " + (fret_type_node ? 
STR(fret_type_node) : 
"void") + 
" not considered");
  1251       if(fd->bit_values.empty())
  1287          for(
const auto& stmt : 
B->CGetStmtList())
  1290             if(stmt_node->get_kind() == gimple_assign_K)
  1292                const auto ga = GetPointerS<const gimple_assign>(stmt_node);
  1296                if(lhs->get_kind() == ssa_name_K)
  1300                                  "Analyzing " + stmt_node->get_kind_text() + 
"(" + 
STR(stmt_node->index) +
  1301                                      "): " + 
STR(stmt_node));
  1309                                     "---variable " + 
STR(GetPointerS<const ssa_name>(lhs)) + 
" of type " +
  1322                      if(ga_op1_kind == array_ref_K || ga_op1_kind == mem_ref_K || ga_op1_kind == target_mem_ref_K ||
  1323                         ga_op1_kind == target_mem_ref461_K || ga_op1_kind == var_decl_K)
  1325                         const auto hm = GetPointer<const HLS_manager>(
AppM);
  1327                         const auto var_node = 
TM->GetTreeNode(base_index);
  1328                         auto vd = GetPointer<var_decl>(var_node);
  1330                            AppM->get_written_objects().find(base_index) == 
AppM->get_written_objects().end() && hm &&
  1331                            hm->Rmem && hm->Rmem->get_enable_hls_bit_value() &&
  1332                            function_behavior->is_variable_mem(base_index) && hm->Rmem->is_sds_var(base_index) && vd &&
  1335                            std::deque<bit_lattice> current_inf;
  1360                            best[lhs_nid] = current_inf;
  1368                            AppM->get_written_objects().find(base_index) != 
AppM->get_written_objects().end() && hm &&
  1369                            hm->Rmem && hm->Rmem->get_enable_hls_bit_value() &&
  1370                            function_behavior->is_variable_mem(base_index) && hm->Rmem->is_private_memory(base_index) &&
  1371                            hm->Rmem->is_sds_var(base_index))
  1375                               if(!private_variables.count(base_index))
  1377                                  std::deque<bit_lattice> current_inf;
  1406                                      "---Computed the init bitstring for " +
  1409                                  for(
const auto& cur_var : hm->Rmem->get_source_values(base_index))
  1411                                     const auto cur_node = 
TM->CGetTreeNode(cur_var);
  1416                                                    "---source node: " + 
STR(cur_node) + 
" source is signed: " +
  1417                                                        STR(source_is_signed) + 
" loaded is signed: " + 
STR(lhs_signed));
  1418                                     std::deque<bit_lattice> cur_bitstring;
  1419                                     if(cur_node->get_kind() == ssa_name_K)
  1421                                        const auto ssa = GetPointerS<const ssa_name>(cur_node);
  1425                                                          "---Not handled by bitvalue");
  1431                                                          "---Is handled by bitvalue");
  1435                                     else if(cur_node->get_kind() == integer_cst_K)
  1446                                     if(cur_bitstring.size() != 0)
  1450                                        if(cur_bitstring.size() < source_type_size && source_is_signed != lhs_signed)
  1464                                                       "---bitstring empty --> using U");
  1469                                     current_inf = 
inf(current_inf, cur_bitstring, lhs);
  1475                                     current_inf.pop_front();
  1477                                  if(current_inf.empty())
  1487                                      "---Bit Value: variable " +
  1489                                          " trimmed to bitsize: " + 
STR(vd->bit_values.size()) +
  1490                                          " with bit-value pattern: " + vd->bit_values);
  1491                                  private_variables[base_index] = current_inf;
  1493                               const auto var_inf = private_variables.at(base_index);
  1495                                              "---Init bitstring for a private written memory variable " +
  1497                               best[lhs_nid] = var_inf;
  1503                                  "Analyzed " + stmt_node->get_kind_text() + 
": " + 
STR(stmt_node));
  1506             else if(stmt_node->get_kind() == gimple_asm_K)
  1508                const auto ga = GetPointerS<const gimple_asm>(stmt_node);
  1511                   const auto tl = GetPointer<const tree_list>(
GET_CONST_NODE(ga->out));
  1512                   THROW_ASSERT(tl->valu, 
"only the first output and so only single output gimple_asm are supported");
  1513                   const auto ssa = GetPointer<const ssa_name>(
GET_CONST_NODE(tl->valu));
  1517                                     "Analyzing " + stmt_node->get_kind_text() + 
"(" + 
STR(stmt_node->index) + 
")");
  1519                                     "---Initializing bitstring for an asm instruction");
  1533    const auto set_value = [&](
unsigned int node_id) {
  1538       auto use_node = 
TM->GetTreeNode(node_id);
  1548       if(use_node->get_kind() == ssa_name_K)
  1550          const auto ssa = GetPointerS<ssa_name>(use_node);
  1557          if(ssa->volatile_flag)
  1559             ssa->bit_values.clear();
  1564             const auto def = ssa->CGetDefStmt();
  1565             if(!def || (ssa->var != 
nullptr && ((
GET_CONST_NODE(def)->get_kind() == gimple_nop_K)) &&
  1568                ssa->bit_values.clear();
  1579                if(
AppM->ApplyNewTransformation())
  1581                   const auto tree_man = 
AppM->get_tree_manager();
  1582                   const auto ssa_node = tree_man->GetTreeReindex(node_id);
  1583                   const auto cst_value = tree_man->CreateUniqueIntegerCst(0, ssa->type);
  1584                   const auto uses = ssa->CGetUseStmts();
  1585                   for(
const auto& stmt_use : uses)
  1587                      tree_man->ReplaceTreeNode(stmt_use.first, ssa_node, cst_value);
  1589                   AppM->RegisterTransformation(
GetName(), ssa_node);
  1597       if(use_node->get_kind() == integer_cst_K)
  1623       for(
const auto& 
phi : 
B->CGetPhiList())
  1628          const auto is_virtual = pn->virtual_flag;
  1633             auto ssa = GetPointer<ssa_name>(
GET_NODE(pn->res));
  1639                                   " not considered id: " + 
STR(res_nid));
  1649                ssa->bit_values.clear();
  1653             if(ssa->CGetUseStmts().empty())
  1656                if(
best.count(res_nid))
  1664                if(ssa->bit_values.empty())
  1672                if(
best.count(res_nid))
  1678                for(
const auto& def_edge : pn->CGetDefEdgesList())
  1687       for(
const auto& stmt : 
B->CGetStmtList())
  1694                             "): " + 
STR(stmt_node));
  1695          if(stmt_node->get_kind() == gimple_assign_K)
  1697             const auto ga = GetPointerS<const gimple_assign>(stmt_node);
  1700             const auto lhs = 
GET_NODE(ga->op0);
  1702             if(lhs->get_kind() == ssa_name_K)
  1704                auto lhs_ssa = GetPointerS<ssa_name>(lhs);
  1717                      lhs_ssa->bit_values.clear();
  1728                   if(lhs_ssa->CGetUseStmts().empty())
  1733                   else if(ga_op1_kind == array_ref_K || ga_op1_kind == mem_ref_K || ga_op1_kind == target_mem_ref_K ||
  1734                           ga_op1_kind == target_mem_ref461_K || ga_op1_kind == var_decl_K)
  1751                   else if(ga_op1_kind == call_expr_K || ga_op1_kind == aggr_init_expr_K)
  1753                      const auto ce = GetPointerS<const call_expr>(
GET_CONST_NODE(ga->op1));
  1757                         const auto ae = GetPointerS<const addr_expr>(addr_node);
  1759                         THROW_ASSERT(fu_decl_node->get_kind() == function_decl_K, 
"node  " + 
STR(fu_decl_node) +
  1760                                                                                       " is not function_decl but " +
  1761                                                                                       fu_decl_node->get_kind_text());
  1765                            const auto called_fd = GetPointer<const function_decl>(fu_decl_node);
  1766                            const auto new_bitvalue =
  1767                                called_fd->bit_values.empty() ?
  1769                                         called_fd->range->getBitValues(
  1773                            if(
best[lhs_nid].empty())
  1775                               best[lhs_nid] = new_bitvalue;
  1779                               best[lhs_nid] = 
sup(new_bitvalue, 
best[lhs_nid], lhs);
  1789                   else if(ga_op1_kind == lut_expr_K)
  1793                   else if(ga_op1_kind == extract_bit_expr_K)
  1799                      if(lhs_ssa->bit_values.empty())
  1804                            u_string.pop_front();
  1807                         best[lhs_nid] = u_string;
  1822          else if(stmt_node->get_kind() == gimple_asm_K)
  1824             const auto ga = GetPointerS<const gimple_asm>(stmt_node);
  1827                const auto tl = GetPointer<const tree_list>(
GET_CONST_NODE(ga->out));
  1828                THROW_ASSERT(tl->valu, 
"only the first output and so only single output gimple_asm are supported");
  1830                auto out_ssa = GetPointer<ssa_name>(out_node);
  1831                if(out_ssa && !out_ssa->CGetUseStmts().empty())
  1842                      out_ssa->bit_values.clear();
  1860                            "---LHS unhandled for statement kind: " + 
STR(stmt_node->index));
  1863          std::vector<std::tuple<unsigned int, unsigned int>> vars_read;
  1866          for(
const auto& var_pair : vars_read)
  1868             const auto ssa_use_node_id = std::get<0>(var_pair);
  1869             set_value(ssa_use_node_id);
  1873                         "Analyzed " + stmt_node->get_kind_text() + 
": " + 
STR(stmt_node));
  1885    for(
const auto& b : 
best)
  1893          const auto position_in_current = 
current.find(b.first);
  1894          if(position_in_current != 
current.end())
  1896             current.erase(position_in_current);
 #define GET_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
std::deque< bit_lattice > string_cst_bitstring(const tree_nodeRef &strcst_tn, unsigned int ssa_node_id) const
auxiliary function used to build the bitstring lattice for read-only string_cst 
static size_t CGetPointerSize(const ParameterConstRef parameters)
Return the size of the pointer in bit. 
#define DEBUG_LEVEL_VERY_PEDANTIC
extremely verbose debugging print is performed. 
Data structure representing the entire HLS information. 
#define INDENT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;. 
std::deque< bit_lattice > create_bitstring_from_constant(integer_cst_t value, unsigned long long len, bool signed_value)
Creates a bitstring from a constant input. 
boost::graph_traits< graph >::out_edge_iterator OutEdgeIterator
out_edge_iterator definition. 
static std::string name_function(const tree_managerConstRef &tm, const unsigned int index)
Return the name of the function. 
static const std::map< bit_lattice, std::map< bit_lattice, std::map< bit_lattice, std::deque< bit_lattice > > > > plus_expr_map
Map storing the implementation of the forward_transfer's plus_expr. 
#define MEMCPY
constant string identifying the operation performed when two objects are memcopied. 
#define PRINT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;. 
#define DEBUG_LEVEL_PEDANTIC
very verbose debugging print is performed. 
Step successfully executed. 
std::deque< bit_lattice > create_x_bitstring(size_t lenght)
Create a bitstring containing bits initialized at <X> 
Definition of the node_info object for the basic_block graph. 
#define GET_CLASS(obj)
Macro returning the actual type of an object. 
BBGraphInfoRef GetBBGraphInfo()
Returns the property associated with the graph. 
bool not_frontend
True if this step is not executed in the frontend. 
Definition of the class representing a generic C application. 
std::string GetName() const override
Return the name of this design step. 
RelationshipType
The relationship type. 
Source must be executed to satisfy target. 
static bool isBetter(const std::string &a_string, const std::string &b_string)
static unsigned long long int align(unsigned long long int address, unsigned long long int alignment)
STL includes. 
static bool is_natural(const tree_managerConstRef &TM, const unsigned int index)
Return true if the treenode is a ssa_name greater or equal to zero. 
CustomOrderedMap< T, U > CustomMap
DesignFlowStep_Status InternalExec() override
perform the bit value analysis 
#define D_SELECTOR
Selectors used only in basic block graphs; numbers continue from cdfg_edge_info.hpp. 
Full implementation of Bit Value analysis as described in BitValue Inference: Detecting and Exploitin...
bool IsHandledByBitvalue(const tree_nodeConstRef &tn) const
Returns true if the type identified by type_id is handled by bitvalue analysis. 
static const unsigned int EXIT_BLOCK_ID
constant identifying the exit basic block 
void backward()
Applies the backward algorithm, as described in the paper, analyzing each assignment statement starti...
#define GET_INDEX_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
Data structure describing a basic block at tree level. 
unsigned int bb_version
The version of the basic block intermediate representation on which this step has been applied...
redefinition of map to manage ordered/unordered structures 
static void get_required_values(std::vector< std::tuple< unsigned int, unsigned int >> &required, const tree_nodeRef &tn)
void print_bitstring_map(const CustomMap< unsigned int, std::deque< bit_lattice >> &map) const
Debugging function used to print the contents of the current and best maps. 
#define STR(s)
Macro which performs a lexical_cast to a string. 
Auxiliary methods for manipulating string. 
bool HasToBeExecuted() const override
Check if this step has actually to be executed. 
static void sign_reduce_bitstring(std::deque< bit_lattice > &bitstring, bool bitstring_is_signed)
Reduce the size of a bitstring erasing all but one most significant zeros in unsigned bitstring and a...
static const std::map< bit_lattice, std::map< bit_lattice, std::map< bit_lattice, std::deque< bit_lattice > > > > minus_expr_map
Map storing the implementation of the forward_transfer's minus_expr. 
void forward()
Applies the forward algorithm, as described in the paper, analyzing each assignment statement followi...
static bool IsSignedIntegerType(const tree_nodeConstRef &type)
Return true if the treenode is of integer type. 
CustomSet< unsigned int > signed_var
Set storing the signed ssa. 
std::string bitstring_to_string(const std::deque< bit_lattice > &bitstring)
Translates a bitstring ( expressed as an std::deque of bit_lattice ) into a string of characters...
~Bit_Value() override
Destructor. 
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached 
Class used to describe a particular graph with basic blocks as nodes. 
std::deque< bit_lattice > inf(const std::deque< bit_lattice > &a, const std::deque< bit_lattice > &b, const unsigned int output_uid) const
Computes the inf between two bitstrings. 
unsigned long long pointer_resizing(unsigned int output_id) const
unsigned map[NUM_VERTICES]
absl::flat_hash_map< T, U, Hash, Eq, Alloc > CustomUnorderedMap
std::deque< bit_lattice > create_u_bitstring(size_t lenght)
Creates a bitstring containing bits initialized at <U> 
unsigned int lsb_to_zero(const addr_expr *ae, bool safe) const
CustomMap< unsigned int, std::deque< bit_lattice > > current
Map of the current bit-values of each variable. 
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec. 
static const std::map< bit_lattice, std::map< bit_lattice, bit_lattice > > bit_and_expr_map
Map storing the implementation of the forward_transfer's bit_and_expr_map. 
Information associated with the whole basic-block graph. 
static const std::map< bit_lattice, std::map< bit_lattice, bit_lattice > > bit_ior_expr_map
Map storing the implementation of the forward_transfer's bit_ior_expr_map. 
Target must be reexecuted. 
redefinition of set to manage ordered/unordered structures 
static unsigned long long size(const tree_managerConstRef tm, unsigned int index)
static const std::string ComputeSignature(const FrontendFlowStepType frontend_flow_step_type)
Compute the signature of a function frontend flow step. 
boost::graph_traits< graph >::vertex_descriptor vertex
vertex definition. 
const Wrefcount< const DesignFlowManager > design_flow_manager
The design flow manager. 
#define GET_CONST_NODE(t)
static unsigned long long Size(const tree_nodeConstRef &t)
const ParameterConstRef parameters
Set of input parameters. 
DesignFlowStep_Status
The status of a step. 
bool update_IR()
Updates the bitvalues of the intermediate representation with the values taken from the input map...
void calculate_dominance_info(enum dominance::cdi_direction dir)
The main entry point into this module. 
#define DEBUG_LEVEL_NONE
no debugging print is performed. 
#define THROW_ERROR(str_expr)
helper function used to throw an error in a standard way 
const tree_managerConstRef TM
bool HasToBeExecuted() const override
Check if this step has actually to be executed. 
This struct specifies the block node. 
This file collects some utility functions. 
bool mix()
Mixes the content of current and best using the sup operation, storing the result in the best map...
void TopologicalSort(std::list< boost::graph_traits< graphs_collection >::vertex_descriptor > &sorted_vertices) const
Compute the topological order of the graph. 
std::deque< bit_lattice > string_to_bitstring(const std::string &s)
inverse of bitstring_to_string 
CustomUnorderedMapUnstable< unsigned int, unsigned int > direct_call_id_to_called_id
Maps the id of a gimple statement to the id of the function called in that statement. 
void initialize()
Initializes best with C type as bitstring, signed_var and arguments using the information taken from ...
std::deque< bit_lattice > sup(const std::deque< bit_lattice > &a, const std::deque< bit_lattice > &b, const unsigned int output_uid) const
Computes the sup between two bitstrings. 
refcount< T > lock() const
const unsigned int function_id
The index of the function to be analyzed. 
const application_managerRef AppM
The application manager. 
Class specification of the tree_reindex support class. 
static const unsigned int ENTRY_BLOCK_ID
constant identifying the entry basic block 
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::vector< blocRef > bb_topological
Topologically ordered basic blocks. 
Class specification of the basic_block structure. 
CustomMap< unsigned int, std::deque< bit_lattice > > best
Map of the best bit-values of each variable. 
std::deque< bit_lattice > constructor_bitstring(const tree_nodeRef &ctor_tn, unsigned int ssa_node_id) const
auxiliary function used to build the bitstring lattice for read-only arrays 
void clear()
Clean up the internal data structures. 
const BBNodeInfoConstRef CGetBBNodeInfo(const vertex node) const
Return the info associated with a basic block. 
Data structures used in operations graph. 
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
static tree_nodeConstRef CGetType(const tree_nodeConstRef &node)
Return the treenode of the type of node. 
static std::deque< bit_lattice > sign_extend_bitstring(const std::deque< bit_lattice > &bitstring, bool bitstring_is_signed, size_t final_size)
Extends a bitstring. 
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. 
static unsigned int get_base_index(const tree_managerConstRef &TM, const unsigned int index)
Retrun the base address of a memory access. 
void clear_current()
Clears all the entry in the current map, except for the input arguments. 
static integer_cst_t GetConstValue(const tree_nodeConstRef &tn, bool is_signed=true)
Get value from integer constant. 
int debug_level
The debug level. 
CustomUnorderedSet< unsigned int > arguments
Contains the input parameters of the function that's being analyzed. 
#define GET_INDEX_CONST_NODE(t)
#define CFG_SELECTOR
Control flow graph edge selector. 
static tree_nodeConstRef GetFunctionReturnType(const tree_nodeConstRef &function, bool void_as_null=true)
Return the return type of a function. 
static const std::map< bit_lattice, std::map< bit_lattice, bit_lattice > > bit_xor_expr_map
Map storing the implementation of the forward_transfer's bit_xor_expr_map. 
Bit_Value(const ParameterConstRef Param, const application_managerRef AM, unsigned int f_id, const DesignFlowManagerConstRef dfm)
Constructor. 
refcount< BBGraphInfo > BBGraphInfoRef
refcount definition of the class 
This class contains the base representation for a generic frontend flow step which works on the whole...
Datastructure to represent memory information in high-level synthesis. 
Class specification of the manager of the tree structures extracted from the raw file. 
HLS specialization of generic_device. 
A brief description of the C++ Header File. 
const FunctionBehaviorRef function_behavior
The function behavior of the function to be analyzed. 
This structure defines graphs where nodes are basic_blocks. 
#define THROW_ASSERT(cond, str_expr)
helper function used to check an assert and if needed to throw an error in a standard way ...
Implementation of the wrapper to Gcc for C sources.