Set<EdgeKey> edgeKeysForLoad;
Set<EdgeKey> edgeKeysRemoved;
Set<EdgeKey> edgeKeysAdded;
+ Set<DefiniteReachState.FdEntry> edgesToElideFromProp;
//Stores the flatnode's reach graph at enter
ReachGraph rgOnEnter = new ReachGraph();
boolean strongUpdate = false;
- alreadyReachable = false;
- edgeKeysRemoved = null;
- edgeKeysAdded = null;
+ alreadyReachable = false;
+ edgeKeysRemoved = null;
+ edgeKeysAdded = null;
+ edgesToElideFromProp = null;
if( doDefiniteReachAnalysis ) {
- alreadyReachable = definiteReachAnalysis.isAlreadyReachable( rhs, lhs, fn );
- edgeKeysRemoved = new HashSet<EdgeKey>();
- edgeKeysAdded = new HashSet<EdgeKey>();
+ alreadyReachable = definiteReachAnalysis.isAlreadyReachable( rhs, lhs, fn );
+ edgeKeysRemoved = new HashSet<EdgeKey>();
+ edgeKeysAdded = new HashSet<EdgeKey>();
+ edgesToElideFromProp = definiteReachAnalysis.edgesToElidePropagation( lhs, rhs, fn );
}
// before transfer func, possibly inject
fn,
alreadyReachable,
edgeKeysRemoved,
- edgeKeysAdded );
+ edgeKeysAdded,
+ edgesToElideFromProp );
if( doDefiniteReachAnalysis ) {
definiteReachAnalysis.store( fn,
lhs,
tdElement = lhs.getType().dereference();
fdElement = getArrayField(tdElement);
- alreadyReachable = false;
- edgeKeysRemoved = null;
- edgeKeysAdded = null;
+ alreadyReachable = false;
+ edgeKeysRemoved = null;
+ edgeKeysAdded = null;
+ edgesToElideFromProp = null;
if( doDefiniteReachAnalysis ) {
- alreadyReachable = definiteReachAnalysis.isAlreadyReachable( rhs, lhs, fn );
- edgeKeysRemoved = new HashSet<EdgeKey>();
- edgeKeysAdded = new HashSet<EdgeKey>();
+ alreadyReachable = definiteReachAnalysis.isAlreadyReachable( rhs, lhs, fn );
+ edgeKeysRemoved = new HashSet<EdgeKey>();
+ edgeKeysAdded = new HashSet<EdgeKey>();
+ edgesToElideFromProp = definiteReachAnalysis.edgesToElidePropagation( lhs, rhs, fn );
}
// before transfer func, possibly inject
fn,
alreadyReachable,
edgeKeysRemoved,
- edgeKeysAdded );
+ edgeKeysAdded,
+ edgesToElideFromProp );
}
if( doDefiniteReachAnalysis ) {