static final class IndexPropagation.ArrayCell extends DF_AbstractCell
An ArrayCell represents a set of value number pairs, indicating that the elements indexed by these value numbers are available for a certain array type.
For example, suppose p
is an int[]
, with value number
v(p)
.
Then the value number pair <p,5>
for heap variable I[
means
that p[5]
is available.
Note: this implementation does not scale, and is not terribly efficient.
Modifier and Type | Field and Description |
---|---|
private static int |
CAPACITY
a bound on the size of a lattice cell.
|
private HeapVariable<?> |
key
The heap variable this lattice cell tracks information for.
|
private ValueNumberPair[] |
numbers
a set of value number pairs comparising this lattice cell.
|
private int |
size
The number of value number pairs in this cell.
|
private boolean |
TOP
Does this lattice cell represent TOP?
|
Constructor and Description |
---|
ArrayCell(HeapVariable<?> key)
Create a lattice cell corresponding to a heap variable.
|
Modifier and Type | Method and Description |
---|---|
(package private) void |
add(int v1,
int v2)
Add a value number pair to this cell.
|
(package private) void |
clear()
Clear all value numbers from this cell.
|
(package private) boolean |
contains(int v1,
int v2)
Does this cell contain the value number pair v1, v2?
|
(package private) ValueNumberPair[] |
copyValueNumbers()
Return a deep copy of the value numbers in this cell
|
(package private) HeapVariable<?> |
getKey() |
(package private) boolean |
isBOTTOM()
Does this cell represent the BOTTOM element in the dataflow lattice?
|
(package private) boolean |
isTOP()
Does this cell represent the TOP element in the dataflow lattice?
|
(package private) void |
remove(int v1,
int v2)
Remove a value number pair from this cell.
|
(package private) void |
setBOTTOM()
Set the value of this cell to BOTTOM.
|
static boolean |
setsDiffer(ValueNumberPair[] set1,
ValueNumberPair[] set2)
Do two sets of value number pairs differ?
|
(package private) void |
setTOP(boolean b)
Mark this cell as representing (or not) the TOP element in the
dataflow lattice.
|
String |
toString()
Return a string representation of this cell
|
private static final int CAPACITY
private ValueNumberPair[] numbers
private int size
private final HeapVariable<?> key
private boolean TOP
ArrayCell(HeapVariable<?> key)
key
- the heap variable associated with this cell.HeapVariable<?> getKey()
boolean isTOP()
boolean isBOTTOM()
void setTOP(boolean b)
b
- should this cell contain TOP?void setBOTTOM()
boolean contains(int v1, int v2)
v1
- first value numberv2
- second value numbervoid add(int v1, int v2)
v1
- first value numberv2
- second value numbervoid remove(int v1, int v2)
v1
- first value numberv2
- second value numbervoid clear()
ValueNumberPair[] copyValueNumbers()
public String toString()
toString
in interface DF_LatticeCell
toString
in class Object
public static boolean setsDiffer(ValueNumberPair[] set1, ValueNumberPair[] set2)
SIDE EFFECT: sorts the sets
set1
- first set to compareset2
- second set to compare