Main Page Modules Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages
procLocation Class Reference#include <location.h>
Inheritance diagram for procLocation:
List of all members.
Member Enumeration Documentation
enum Location::LocationKind [inherited]
|
|
|
Kind of location.
- Enumeration values:
-
Statement |
|
BasicBlock |
|
Procedure |
|
Definition at line 93 of file location.h. |
Constructor & Destructor Documentation
procLocation::procLocation |
( |
stmtLocation * |
parent, |
|
|
procNode * |
proc, |
|
|
bool |
context_insensitive = false |
|
) |
|
|
|
Definition at line 784 of file location.cc.
References _basicblocks, Location::_subtree_id, basicblock_location_map_p, procNode::body(), Location::current_subtree_id, Location::current_tree_number, procNode::entry(), basicblockLocation::last(), lookup_block(), Main, Location::next_tree_number(), basicblockNode::parent(), Location::proc_count, progress_counter, remove_from_tree(), Location::set_dominator(), Location::set_tree_min(), stmt_list, stmt_list_p, and blockNode::stmts(). |
procLocation::~procLocation |
( |
|
) |
[virtual] |
|
Member Function Documentation
void procLocation::adjust_depth |
( |
|
) |
[virtual] |
|
void Location::clear_dominator |
( |
|
) |
[inherited] |
|
void Location::decrement_children |
( |
|
) |
[inline, inherited] |
|
bool Location::dominates |
( |
const Location * |
dom, |
|
|
const Location * |
cur |
|
) |
[static, inherited] |
|
Location* Location::dominator |
( |
|
) |
const [inline, inherited] |
|
void Location::finish |
( |
|
) |
[inherited] |
|
void Location::increment_children |
( |
|
) |
[inline, inherited] |
|
bool Location::is_prefix |
( |
const Location * |
prefix, |
|
|
const Location * |
longer |
|
) |
[static, inherited] |
|
procLocation* procLocation::main |
( |
|
) |
[inline, static] |
|
unsigned int Location::next_tree_number |
( |
|
) |
[inline, static, protected, inherited] |
|
int Location::num_children |
( |
|
) |
const [inline, inherited] |
|
Location* Location::parent |
( |
|
) |
const [inline, inherited] |
|
procLocation * procLocation::parent_proc |
( |
|
) |
const |
|
void procLocation::print |
( |
ostream & |
o |
) |
const [virtual] |
|
void procLocation::print_path |
( |
ostream & |
o |
) |
const [virtual] |
|
procNode* procLocation::proc |
( |
|
) |
const [inline] |
|
|
Definition at line 497 of file location.h.
Referenced by Pointers::analyze(), Pointers::analyze_procedure(), Pointers::assignment_operator(), basicblockLocation::basicblockLocation(), Pointers::compute_accuracy(), memoryModel::create_memory_object(), UnificationBasedPtr::createProcBlock(), memoryBlock::def_at(), Pointers::determine_call_targets(), Pointers::eval(), mergePoints::find_merge_points(), memoryBlock::in_scope(), stmtLocation::is_present(), memoryModel::lookup(), memoryBlock::name(), stmtLocation::print_callsite(), Pointers::self_assignment(), procedureInfo::setup_call_at(), and stmtLocation::setup_cs_call(). |
procLocation * Location::procedure |
( |
Location * |
where |
) |
[static, inherited] |
|
|
Find the enclosing procedure.
Definition at line 395 of file location.cc.
References Location::BasicBlock, stmtLocation::block_location(), Location::kind(), basicblockLocation::proc_location(), Location::Procedure, and Location::Statement.
Referenced by Pointers::compute_accuracy(), memoryModel::create_memory_object(), Pointers::determine_call_targets(), Pointers::eval(), memoryModel::lookup(), and memoryBlock::name(). |
void procLocation::remove_from_tree |
( |
|
) |
|
|
void Location::set_dominator |
( |
Location * |
d |
) |
[inherited] |
|
void Location::set_tree_max |
( |
unsigned int |
m |
) |
[inline, inherited] |
|
void Location::set_tree_min |
( |
unsigned int |
m |
) |
[inline, inherited] |
|
void Location::stats |
( |
|
) |
[static, inherited] |
|
stmtLocation* procLocation::stmt_location |
( |
|
) |
const [inline] |
|
bool Location::strictly_dominates |
( |
const Location * |
dom, |
|
|
const Location * |
cur |
|
) |
[static, inherited] |
|
unsigned int Location::subtree_id |
( |
|
) |
const [inline, inherited] |
|
unsigned int Location::tree_max |
( |
|
) |
const [inline, inherited] |
|
unsigned int Location::tree_min |
( |
|
) |
const [inline, inherited] |
|
void Location::visit |
( |
|
) |
[inherited] |
|
Friends And Related Function Documentation
ostream& operator<< |
( |
ostream & |
o, |
|
|
const Location & |
loc |
|
) |
[friend, inherited] |
|
Member Data Documentation
Location* Location::_dominator [protected, inherited]
|
|
unsigned int Location::_kind [protected, inherited]
|
|
|
The kind of location.
There are only three kinds, so we only need two bits.
Definition at line 129 of file location.h.
Referenced by Location::kind(). |
unsigned int Location::_num_children [protected, inherited]
|
|
|
Number of dominator children.
This is the number of locations immediately dominated by this one. We use this number to control the depth-first tree numbering algorithm. When the number is greater than one, we know that we still have dominator subtrees to number. Each time we finish a subtree, we decrement this number on the immediate dominator. When it reaches zero, the whole subtree is numbered.
We limit this field to 8 bits, which only allows a node to immediately dominate 256 other nodes. This is probably way higher than it needs to be, but we'll play it safe.
Definition at line 170 of file location.h.
Referenced by Location::decrement_children(), Location::increment_children(), and Location::num_children(). |
Location* Location::_parent [protected, inherited]
|
|
|
Parent.
A pointer to the containing location (strictly in terms of program structure). For stmtLocations, this points to the containing basic block. For basicblockLocations, it points to the procLocation. For procLocations, it points to the callsite stmtLocation (if there is one).
Reimplemented in Path.
Definition at line 123 of file location.h.
Referenced by adjust_depth(), basicblockLocation::adjust_depth(), stmtLocation::adjust_depth(), stmtLocation::block_location(), parent_proc(), basicblockLocation::proc_location(), remove_from_tree(), and stmt_location(). |
procNode* const procLocation::_proc [private]
|
|
unsigned int Location::_subtree_id [protected, inherited]
|
|
unsigned int Location::_tree_max [protected, inherited]
|
|
unsigned int Location::_tree_min [protected, inherited]
|
|
|
Tree numbering
These two numbers implement the tree numbering scheme (from communication from Mark Wegman) that allows a constant time interprocedural dominance test. The scheme works as follows: we perform a depth-first traversal of the dominator tree, both pre-order and post-order, assigning consecutive numbers to "tree min" value on the way down, and the "tree max" value on the way up.
This numbering results in the following invariant: the min-max range of each node contains the min-max ranges of all nodes that it dominates.
Since we compute this numbering on-line, we need to test dominance for nodes on the way down the tree. This means we have to do without a tree max value in some cases. Therefore, we have a special case: the tree max defaults to MAX_INT until it is given a specific value.
These number can get large, so we use full 32-bit ints (limits us to 4 billion program locations).
Definition at line 203 of file location.h. |
unsigned int Location::block_count = 0 [static, inherited]
|
|
unsigned int Location::current_subtree_id = 0 [static, protected, inherited]
|
|
unsigned int Location::current_tree_number = 0 [static, protected, inherited]
|
|
unsigned int Location::dom_calls = 0 [static, inherited]
|
|
procLocation * procLocation::Main = 0 [static, private]
|
|
unsigned int Location::proc_count = 0 [static, inherited]
|
|
unsigned int Location::stmt_count = 0 [static, inherited]
|
|
The documentation for this class was generated from the following files:
|