AIRangeDict Class Referencefile AIRangeDict.h Collection of ranges that were generated by abstract interpretation
More...
#include <AIRangeDict.h>
Inheritance diagram for AIRangeDict:
[legend]List of all members.
Detailed Description
file AIRangeDict.h Collection of ranges that were generated by abstract interpretation
Polaris Range - See also:
- AIRangeDict.h
AIRangeDict.h
AIRangeDict.cc
A AIRangeDict object is a repository for variable ranges for a program unit. AI stands for Abstract Interpretation, which is the method used to generate these ranges from the given program unit.
A AIRangeDict object is a repository of the variable ranges for all points of a program unit. Abstract interpretation is used to compute these ranges. Abstract interpretation is a generalization of data flow analysis techniques. It computes the ranges by "executing" the given program unit at compile time, by following the control flow paths of the program, updating the current ranges to reflect the side effects of the statements encountered along these paths, until a fixed point is reached. See Blume and Eigenmann, "Symbolic Range Propagation", for more details.
The computed ranges are stored in a collection of StmtRanges objects. Each StmtRanges object holds all the variable constraints for a single Statement in the program.
By setting "range_block" to 1, the AIRangeDict constructor would automatically clear all ranges whenever it sees a BEGIN BLOCK or END BLOCK assertion when it is computing ranges. This switch should approximate the ranges computed for uninlined programs when run on a partially or fully inlined program. Basically, this switch causes the AIRangeDict to compute less accurate ranges for the sake of speed and memory used.
Setting switch "pc_call_mods" to 1 causes the AIRangeDict constructor to assume that subroutine and function calls only modify thier arguments. That is, global varaibles and subroutine parameters are assumed to be unmodified by a subroutine call unless they also appear in that call's arguments. Results in more accurate ranges. May also result in incorrect ranges, if this assumption does not hold in actuality.
AIRangeDict objects can consume large amounts of time and large amounts of memory. This is because the time and space requirements are O(V*S), where S is the number of statements in a program and V is the number of integer variables in a program. (In actuality, V can be improved to be the average number of integer variables that have constraints.)
Definition at line 72 of file AIRangeDict.h.
Constructor & Destructor Documentation
| AIRangeDict::AIRangeDict |
( |
ProgramUnit & |
pgm, |
|
|
int |
debug = 0 |
|
) |
|
|
Member Function Documentation
| void AIRangeDict::print |
( |
ostream & |
o |
) |
const [virtual] |
|
| void AIRangeDict::pretty_print |
( |
ostream & |
o, |
|
|
const Statement & |
stmt |
|
) |
const [virtual] |
|
| Listable * AIRangeDict::listable_clone |
( |
void |
|
) |
const [virtual] |
|
| int AIRangeDict::structures_OK |
( |
|
) |
const [virtual] |
|
| void AIRangeDict::_del_range |
( |
const Symbol & |
var, |
|
|
const Statement & |
stmt |
|
) |
[protected, virtual] |
|
Friends And Related Function Documentation
The documentation for this class was generated from the following files:
|