47 #include "config_HAVE_TREE_MANIPULATION_BUILT.hpp" 49 #include "config_HAVE_TREE_PARSER_BUILT.hpp" 67 #include <boost/preprocessor/facilities/empty.hpp> 68 #include <boost/preprocessor/seq/for_each.hpp> 70 #include <unordered_map> 73 #include "config_HAVE_ASSERTS.hpp" 76 #define VISIT_TREE_NODE_MACRO(r, data, elem) \ 77 void elem::visit(tree_node_visitor* const v) const \ 79 unsigned int mask = ALL_VISIT; \ 81 VISIT_SC(mask, data, visit(v)); \ 86 static std::unordered_map<std::string, enum kind> to_kind = []() {
87 std::unordered_map<std::string, enum kind> out;
90 #define NAME_KIND(r, data, elem) \ 92 name = name.substr(19); \ 93 name = name.substr(name.front() == ' ', name.find(')') - (name.front() == ' ')); \ 94 out[name] = BOOST_PP_CAT(elem, _K); 109 for(
const auto& sk : out)
112 "Kind name string should not contain spaces: '" + sk.first +
"'");
122 static std::unordered_map<enum kind, std::string> to_string = []() {
123 std::unordered_map<enum kind, std::string> out;
126 #define KIND_NAME(r, data, elem) \ 128 name = name.substr(19); \ 129 name = name.substr(name.front() == ' ', name.find(')') - (name.front() == ' ')); \ 130 out[BOOST_PP_CAT(elem, _K)] = name; 145 for(
const auto& ks : out)
148 "Kind name string should not contain spaces: '" + ks.second +
"'");
167 (boolean_type)(CharType)(nullptr_type)(lang_type)(offset_type)(qual_union_type)(set_type)(
169 #undef VISIT_TREE_NODE_MACRO 179 std::stringstream temp;
180 temp <<
"@" <<
index <<
" ";
188 tn->
visit(&gimple_writer);
272 artificial_flag(
false),
274 operating_system_flag(
false),
275 library_system_flag(
false),
276 libbambu_flag(
false),
319 GetPointerS<const ssa_name>(
GET_CONST_NODE(_vdef))->virtual_flag),
329 return vuses.insert(vuse).second;
335 GetPointerS<const ssa_name>(
GET_CONST_NODE(vover))->virtual_flag),
337 return vovers.insert(vover).second;
480 auto vend = list_of_access_binf.end();
481 for(
auto i = list_of_access_binf.begin(); i != vend; ++i)
489 list_of_access_binf.emplace_back(access, binf);
507 if(variable ==
"anything")
511 else if(variable ==
"escaped")
515 else if(variable ==
"ipa_escaped")
519 else if(variable ==
"nonlocal")
523 else if(variable ==
"null")
561 res +=
"ipa_escaped ";
573 res +=
GET_NODE(var)->ToString() +
" ";
600 this->
args.push_back(arg);
630 this->
args.push_back(arg);
688 auto vend = list_of_idx_valu.end();
689 for(
auto i = list_of_idx_valu.begin(); i != vend; ++i)
739 operator_flag(
false),
742 reverse_restrict_flag(
false),
743 writing_memory(
false),
744 reading_memory(
false),
745 pipeline_enabled(
false),
746 simple_pipeline(
false),
748 #if HAVE_FROM_PRAGMA_BUILT
750 omp_body_loop(
false),
756 undefined_flag(
false),
888 #if HAVE_TREE_MANIPULATION_BUILT 890 :
tree_node(node_id), operator_flag(
false), strg(std::move(_strg))
896 :
tree_node(node_id), operator_flag(_operator_flag)
902 :
tree_node(node_id), operator_flag(
false), strg(_strg)
907 :
tree_node(node_id), operator_flag(_operator_flag)
1003 const auto sn = GetPointer<ssa_name>(
GET_NODE(def_edge.first));
1020 if(def_edge == old_def_edge)
1024 auto sn = GetPointer<ssa_name>(
GET_NODE(def_edge.first));
1030 def_edge = new_def_edge;
1033 auto sn = GetPointer<ssa_name>(
GET_NODE(def_edge.first));
1050 for(
const auto& def_edge : new_list_of_def_edge)
1063 if(*def_edge == to_be_removed)
1067 const auto sn = GetPointer<ssa_name>(
GET_NODE(to_be_removed.first));
1078 to_be_removed.first->ToString() +
"(" +
STR(to_be_removed.second) +
") not found in " +
ToString());
1141 td = GetPointer<type_decl>(
GET_NODE(name));
1163 for(i = 0; i < list_of_flds.size(); i++)
1165 fd = GetPointer<field_decl>(
GET_NODE(list_of_flds[i]));
1168 fld_offset = fd->
offset();
1174 if(fld_offset == offset)
1176 return list_of_flds[i];
1236 volatile_flag(
false),
1237 virtual_flag(
false),
1238 default_flag(
false),
1261 std::string error_message;
1262 error_message +=
"There are " +
STR(
def_stmts.size()) +
" definitions for " +
ToString() +
":";
1265 error_message +=
"\n" +
STR(def_stmt);
1282 size_t vuse_count = 0;
1285 const auto gn = GetPointerS<const gimple_node>(
GET_CONST_NODE(use_stmt));
1286 vuse_count +=
static_cast<size_t>(std::count_if(gn->vuses.begin(), gn->vuses.end(),
1288 vuse_count +=
static_cast<size_t>(std::count_if(gn->vovers.begin(), gn->vovers.end(),
1290 vuse_count +=
static_cast<size_t>(gn->memuse && gn->memuse->index ==
index);
1293 const auto gp = GetPointerS<const gimple_phi>(
GET_CONST_NODE(use_stmt));
1294 vuse_count +=
static_cast<size_t>(
1295 std::count_if(gp->CGetDefEdgesList().begin(), gp->CGetDefEdgesList().end(),
1304 std::cout <<
"vssa: " <<
ToString() << std::endl;
1305 const auto gn = GetPointerS<const gimple_node>(
GET_CONST_NODE(use_stmt));
1308 std::cout <<
"vdef: " <<
GET_CONST_NODE(gn->vdef)->ToString() << std::endl;
1310 for(
const auto& vuse : gn->vuses)
1312 std::cout <<
"vuse: " <<
GET_CONST_NODE(vuse)->ToString() << std::endl;
1314 for(
const auto& vover : gn->vovers)
1316 std::cout <<
"vover: " <<
GET_CONST_NODE(vover)->ToString() << std::endl;
1320 std::cout <<
"memdef: " <<
GET_CONST_NODE(gn->memdef)->ToString() << std::endl;
1324 std::cout <<
"memuse: " <<
GET_CONST_NODE(gn->memuse)->ToString() << std::endl;
1350 size_t ret_value = 0;
1353 ret_value += use_stmt.second;
1364 for(
const auto& current_use_stmt :
use_stmts)
1367 STR(current_use_stmt.second) +
" uses in (" +
STR(current_use_stmt.first->index) +
") " +
1368 STR(current_use_stmt.first));
1382 list_of_bloc[a->number] = a;
1391 auto mend = list_of_bloc.end();
1392 for(
auto i = list_of_bloc.begin(); i != mend; ++i)
1509 static_static_flag(
false),
1513 addr_not_taken(
false),
1516 register_flag(
false),
1517 readonly_flag(
false)
1613 TreeNodeConstEqualTo::TreeNodeConstEqualTo()
#define GET_NODE(t)
Macro used to hide implementation details when accessing a tree_node from another tree_node...
struct definition of the type_decl tree node.
void set_initiation_time(int time)
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void AddDefEdge(const tree_managerRef &TM, const DefEdge &def_edge)
Add a defedge.
This struct specifies a point-to solution.
const TreeNodeSet CGetDefStmts() const
Return the set of definition statements.
const TreeNodeMap< size_t > & CGetUseStmts() const
Return the use stmts.
const DefEdgeList & CGetDefEdgesList() const
Return the list of def edges.
tree_nodeRef size
size field holds the size of datum, in bits.
() label_decl()() modop_expr() new_expr() placeholder_expr()() boolean_type() CharType() nullptr_type() lang_type() offset_type() qual_union_type() set_type() template_type_parm() typename_type(void_type)) void tree_node
#define INDENT_DBG_MEX(dbgLevel, curDbgLevel, mex)
We are producing a debug version of the program, so the message is printed;.
bool operator()(const tree_nodeRef &x, const tree_nodeRef &y) const
Compare position of two const tree nodes.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
const tree_nodeRef CGetDefStmt() const
Return the def stmt (checking that is unique)
() label_decl()() modop_expr() new_expr() placeholder_expr() template_id_expr(vec_new_expr)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
bool is_destructor() const
Return true if there is TOK_DESTRUCTOR in the list of attributes.
tree_nodeRef unql
unql field, in any member of such a chain, points to the start of the chain.
virtual ~srcp()
Destructor.
File containing functions and utilities to support the printing of debug messagges.
decl_node(unsigned int i)
Constructor.
#define VISIT_SC(mask, superclass, method)
macro used to visit the super class
tree_nodeRef tmpl_parms
tmpl_parms holds template parameters It is a TREE_LIST, his VALU field is a TREE_VEC whose LIST_OF_OP...
bool is_constructor()
return true if is a declaration of constructor
tree_nodeRef name
name field contains info on the name used in the program for this type.It is either a TYPE_DECL node...
std::string ToString() const
Print this node as string in gimple format.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool anything
True if it is not possible to determine where the pointer points to.
friend std::ostream & operator<<(std::ostream &os, const tree_node *tn)
Friend definition of the << operator.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef op1
The second operand of the binary expression.
char base
This version is stamped on May 10, 2016.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef name
name field contains an identifier_node used to represent a name.
#define MISCELLANEOUS_OBJ_TREE_NODES
struct definition of the source position.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool is_fully_resolved() const
this function check if the point-to set resolved w.r.t.
tree_nodeRef orig
For any sort of a ..._DECL node, this points to the original (abstract) decl node which this decl is ...
DefEdgeList list_of_def_edge
store the list pairs: <def, edge>.
tree_nodeRef size
size field contains a tree that is an expression for the size in bits.
This class manages the tree structures extracted from the raw file.
TreeNodeSet def_stmts
in case ssa_name is not volatile the statement which defines it; statements could be more than one be...
tree_nodeRef var
var is the variable being referenced (macro SSA_NAME_VAR).
bool is_a_singleton() const
this function check if the point-to set is a singleton or not
gimple_phi(unsigned int i)
Constructor.
static std::string GetString(const enum kind k)
Given a kind, return the corresponding string.
identifier_node(unsigned int node_id, std::string _strg, tree_manager *TM)
constructors
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
std::list< DefEdge > DefEdgeList
The type of the def edge list.
virtual void visit(tree_node_visitor *const v) const
virtual function used to traverse the tree_node data structure.
tree_nodeRef get_field(integer_cst_t offset)
returns tree_nodeRef of the field specified by offset
#define DECL_NODE_TREE_NODES
tree_nodeRef mngl
mngl field contains the name of the object as the assembler will see it.
tree_nodeRef size
size field holds the size of datum, in bits.
#define PANDA_EXTENSION_TREE_NODES
bool is_private() const
returns true if there is a TOK_PRIVATE in the list of attributes
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
virtual void visit(tree_node_visitor *const v) const
virtual function used to traverse the tree_node data structure.
A simple interface to token object of the raw files.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef fn
fn field is the initial declaration for this function declaration
struct definition of the unary node structures.
TreeNodeSorter()
Constructor.
tree_nodeRef op0
The first operand of the binary expression.
tree_nodeRef scpe
The function to which this gimple_node belongs.
virtual void visit(tree_node_visitor *const v) const
virtual function used to traverse the tree_node data structure.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the ternary node structures.
bool is_private()
returns true if is a declaration of a private function
tree_nodeRef tmpl_args
tmpl_args holds template instantiations It is a TREE_VEC whose LIST_OF_OP holds template instantiatio...
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the function_type tree node.
std::vector< tree_nodeRef > args
The arguments of the gimple_call.
tree_nodeRef argt
argt field is the type in which the argument is actually passed, which may be different from its type...
void AddDefStmt(const tree_nodeRef &def)
Add a def stmt.
Data structure describing a basic block at tree level.
tree_nodeRef chan
chan field: the decls in one binding context are chained through this field.
bool is_public()
returns true if is a declaration of a public function
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
TreeNodeSet()
Constructor.
bool is_call() const
returns true if there is a TOK_CALL in the list of attributes
void AddUseStmt(const tree_nodeRef &use_stmt)
Add use of this SSA.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
Abstract pure class for the tree structure.
tree_nodeRef res
res is the new SSA_NAME node created by the PHI node.
virtual enum kind get_kind() const =0
Virtual function returning the type of the actual class.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
call_expr(unsigned int i)
constructor
#define STR(s)
Macro which performs a lexical_cast to a string.
Auxiliary methods for manipulating string.
std::vector< tree_nodeRef > args
The arguments of the call_expr.
#define KIND_NAME(r, data, elem)
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void AddArg(const tree_nodeRef &arg)
Add an argument to the list of arguments.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
ssa_name(unsigned int i)
constructor
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef scpe
context/scope of the type object.
tree_nodeRef memuse
whole memory operand use
gimple_assign(unsigned int i)
constructor
bool is_protected() const
returns true if there is a TOK_PROTECTED in the list of attributes
TreeNodeSet vovers
vovers of this statement
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
virtual ~PointToSolution()
Destructor.
() label_decl() using_decl(translation_unit_decl)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
WeightedNode(unsigned int i)
Constructor.
bool ipa_escaped
True if the points to includes the IPA escaped solution.
struct definition of the Quaternary node structures.
TreeNodeConstSorter()
Constructor.
std::set< Key, Compare, Alloc > OrderedSetStd
unsigned int bb_index
The basic block to which this gimple_node belongs.
TreeNodeMap< size_t > use_stmts
The uses of this SSA: it is a map since the same SSA can be used multiple times in the same statement...
size_t CGetNumberUses() const
Return the number of uses.
#define SEQ_VISIT_MEMBER(mask, seq, seqbasetype, method, visitor_type, visitor_obj)
macro used to traverse non empty sequences
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
static const uint32_t k[]
This struct specifies super class for constant nodes.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
var_decl(unsigned int i)
constructor
void AddArg(const tree_nodeRef &arg)
Add an argument to the list of arguments.
void SetDefEdgeList(const tree_managerRef &TM, DefEdgeList new_list_of_def_edge)
Set the def edge list removing the ond one.
void SetVdef(const tree_nodeRef &vdef)
Add a vdef.
bool escaped
True if the points to includes the local escaped solution.
parm_decl(unsigned int i)
constructor
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
#define QUATERNARY_EXPRESSION_TREE_NODES
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
const unsigned int index
Represent the index read from the raw file and the index-1 of the vector of tree_node associated to t...
bool AddVuse(const tree_nodeRef &vuse)
Add a vuse.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool is_member() const
Return true if there is TOK_MEMBER in the list of attributes.
tree_nodeRef body
body field is the saved representation of the body of the entire function.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
bool simple_pipeline
True if the pipeline does not contain any unbounded operation.
std::pair< tree_nodeRef, unsigned int > DefEdge
The type of the def edge.
aggr_init_expr(unsigned int i)
constructor
tree_nodeRef GetTreeReindex(const unsigned int i)
Return a tree_reindex wrapping the i-th tree_node.
#define MISCELLANEOUS_EXPR_TREE_NODES
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the function_decl tree node.
unsigned offset[NUM_VERTICES+1]
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the field_decl tree node.
#define GET_CONST_NODE(t)
tree_nodeRef predicate
The predicate.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
Classes specification of the tree_node data structures.
#define VISIT_MEMBER(mask, ref_obj, method)
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void SetSSAUsesComputed()
Set that uses of ssa have been computed.
bool is_simple_pipeline()
#define TYPE_NODE_TREE_NODES
#define ALL_VISIT
constant used to allow member visit
struct definition of the field attr on function_decl, field_decl, var_decl tree node.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef memdef
whole memory operand def
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
PointToSolutionRef use_set
point to solution
This file collects some utility functions.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
std::vector< tree_nodeRef > list_of_args
args field holds a chain of parm_decl nodes for the arguments.
struct definition of common part of WeightedNode (gimple_assign, expr_node)
TreeVocabularyTokenTypes_TokenEnum
std::string ToString() const
Print this point-to solution.
bool is_protected()
returns true if is a declaration of a protected function
#define VISIT_TREE_NODE_MACRO(r, data, elem)
Autoheader include.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void AddArg(const tree_nodeRef &a)
Add a parameter to the list of the paramters.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool operator_flag
it is true when the function_decl is an operator
virtual void visit(tree_node_visitor *const v) const
virtual function used to traverse the tree_node data structure.
#define VISIT_MEMBER_NAMED(ref_obj_name, mask, ref_obj, method)
macro used to visit a non null member
void init(int bucket[BUCKETSIZE])
int initiation_time
Used for pipelined with unbounded operations.
struct definition of the common part of an expression
void add_bloc(const blocRef &a)
Add a value to list of basic block.
bool virtual_flag
flag for virtual SSA
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool is_public() const
returns true if there is a TOK_PUBLIC in the list of attributes
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
bool nonlocal
True if the points to includes any global memory.
bool is_destructor()
Return true if is a declaration of Destructor.
tree_nodeRef init
init field holds the value to initialize a variable to.
PointToSolutionRef clobbered_set
The clobbered set of this gimple node.
void RemoveDefEdge(const tree_managerRef &TM, const DefEdge &to_be_removed)
Remove a defedge.
struct definition of the type node structures.
BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO, tree_node,(ctor_initializer)(trait_expr)) BOOST_PP_SEQ_FOR_EACH(VISIT_TREE_NODE_MACRO
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
Class specification of the tree_reindex support class.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
gimple_call(unsigned int i)
constructor
function_decl(unsigned int i)
constructor
This struct specifies the call_expr node.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
type_node(unsigned int i)
constructor
void add_access_binf(const tree_nodeRef &binf, TreeVocabularyTokenTypes_TokenEnum access)
Add a pair <access, binf> to the list of access binf.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
tree_nodeRef min
minimum values this SSA may reach
tree_node(unsigned int i)
Constructor.
bool updated_ssa_uses
True if SSA uses are updated.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
int get_initiation_time()
gimple_node(unsigned int i)
Constructor.
struct definition of the common part of a gimple with virtual operands
#define UNARY_EXPRESSION_TREE_NODES
bool operator()(const tree_nodeConstRef &x, const tree_nodeConstRef &y) const
Compare position of two const tree nodes.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void set_pipelining(bool v)
#define THROW_ERROR_CODE(code, str_expr)
helper function used to throw an error with a code error
PointToSolutionRef use_set
The point-to set used by this gimple node.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
bool AddVover(const tree_nodeRef &vover)
Add a vover.
PointToSolution()
Constructor.
tree_nodeRef type
type field holds the data type of the object, when relevant.
std::string get_maybe_name() const
returns the name of the struct represented by this node if there is one else returns the string #UNKN...
bool is_bitfield() const
returns true if there is a TOK_BITFIELD in the list of attributes
bool pipeline_enabled
True if pipelining is enabled for the function.
bool null
True if the points to includes nothing.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
refcount< tree_node > tree_nodeRef
RefCount type definition of the tree_node class structure.
std::string strg
Store the identifier string associated with the identifier_node.
gimple_predict(unsigned int index)
Constructor.
TreeNodeConstSet()
Constructor.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
TreeNodeSet vuses
vuses of this statement
tree_nodeRef vdef
vdef of this statement
#define NAME_KIND(r, data, elem)
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
#define TERNARY_EXPRESSION_TREE_NODES
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
x
Return the smallest n such that 2^n >= _x.
static integer_cst_t GetConstValue(const tree_nodeConstRef &tn, bool is_signed=true)
Get value from integer constant.
void ReplaceDefEdge(const tree_managerRef &TM, const DefEdge &old_def_edge, const DefEdge &new_def_edge)
Replace a defedge.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
std::vector< tree_nodeRef > variables
Set of variables that this pointer may point to.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
tree_nodeRef type
starting from GCC 4.7.2 ssa_name has a type
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
#define BINARY_EXPRESSION_TREE_NODES
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the binary node structures.
tree_nodeRef smt_ann
symbol_memory_tag annotation
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
virtual ~attr()
Destructor.
void RemoveUse(const tree_nodeRef &use_stmt)
Remove a use of this SSA.
bool is_operator() const
returns true if is a declaration of an operator
tree_nodeRef smt_ann
symbol_memory_tag annotation
void add_identifier_node(unsigned int nodeID, const std::string &str)
Add an identifier_node to the corresponding unique table.
bool is_pipelined()
returns true if is a declaration of a pipelined function
void Add(const std::string &variable)
Add a symbolic variable to this point to set.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
tree_nodeRef scpe
scope declaration
tree_nodeRef inline_body
java inline body
bool is_constructor() const
Return true if there is TOK_CONSTRUCTOR in the list of attributes.
tree_nodeRef max
maximum values this SSA may reach
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
struct definition of the declaration node structures.
Class specification of the manager of the tree structures extracted from the raw file.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
virtual function used to traverse the tree_node data structure.
tree_nodeRef fn
fn is the operand 0 of the call expression: this is the function
#define CONST_OBJ_TREE_NODES
void SetDefStmt(const tree_nodeRef &def)
Set the def stmt erasing the old definitions.
bool is_new() const
returns true if there is a TOK_NEW in the list of attributes
void set_simple_pipeline(bool v)
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
void visit(tree_node_visitor *const v) const override
Redefinition of get_kind_text.
#define THROW_ASSERT(cond, str_expr)
helper function used to check an assert and if needed to throw an error in a standard way ...