Main Page Modules Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages
stmtLocation Class Reference#include <location.h>
Inheritance diagram for stmtLocation:
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
stmtLocation::~stmtLocation |
( |
|
) |
[virtual] |
|
Member Function Documentation
void stmtLocation::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] |
|
bool stmtLocation::is_present |
( |
const procNode * |
proc |
) |
const |
|
unsigned int Location::next_tree_number |
( |
|
) |
[inline, static, protected, inherited] |
|
int Location::num_children |
( |
|
) |
const [inline, inherited] |
|
Location* Location::parent |
( |
|
) |
const [inline, inherited] |
|
void stmtLocation::print |
( |
ostream & |
o |
) |
const [virtual] |
|
void stmtLocation::print_callsite |
( |
ostream & |
o |
) |
const |
|
void stmtLocation::print_path |
( |
ostream & |
o |
) |
const [virtual] |
|
|
Find the enclosing procedure.
Definition at line 395 of file location.cc.
References Location::BasicBlock, 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 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 stmtLocation::setup_cs_call |
( |
procNode * |
proc |
) |
|
|
|
Make a context-sensitive procedure call.
If the callsite doesn't already have a procLocation under it, then create one. OBSOLETE: If the procedure is context insensitive, then just create a dummy procLocation.
Definition at line 522 of file location.cc.
References _all_calls, _calls, Location::clear_dominator(), Location::dominator(), procLocation::last(), procLocation::proc(), procLocation, Location::set_dominator(), Location::set_tree_min(), and Location::visit().
Referenced by procedureInfo::setup_call_at(). |
void Location::stats |
( |
|
) |
[static, inherited] |
|
stmtNode* stmtLocation::stmt |
( |
|
) |
const [inline] |
|
void stmtLocation::stmt |
( |
stmtNode * |
s |
) |
[inline, private] |
|
|
Definition at line 352 of file location.h.
Referenced by memoryBlock::add_to_flow_sensitive_list(), Pointers::at_allocation(), basicblockLocation::basicblockLocation(), Pointers::compute_accuracy(), memoryBlock::def_at(), Pointers::determine_call_targets(), memoryBlock::is_in_flow_sensitive_list(), Pointers::pass_return_value(), Pointers::procedure_call(), precisionAnalyzer::record(), Pointers::record_external_inputs_and_outputs(), precisionAnalyzer::report(), and livenessAnalyzer::setLive(). |
unsigned int stmtLocation::stmt_num |
( |
|
) |
const [inline] |
|
|
Return the number of this statement.
Statements in a basic block are numbered in order, starting with zero.
Definition at line 383 of file location.h. |
void stmtLocation::stmt_num |
( |
unsigned int |
num |
) |
[inline, private] |
|
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
friend class basicblockLocation [friend]
|
|
ostream& operator<< |
( |
ostream & |
o, |
|
|
const Location & |
loc |
|
) |
[friend, inherited] |
|
friend class procLocation [friend]
|
|
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 procLocation::adjust_depth(), basicblockLocation::adjust_depth(), adjust_depth(), block_location(), procLocation::parent_proc(), basicblockLocation::proc_location(), procLocation::remove_from_tree(), and procLocation::stmt_location(). |
unsigned int stmtLocation::_stmt_num [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]
|
|
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:
|