projects
/
IRC.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f23d1be
)
bug fixes for effects analysis
author
jjenista
<jjenista>
Mon, 28 Jun 2010 21:20:05 +0000
(21:20 +0000)
committer
jjenista
<jjenista>
Mon, 28 Jun 2010 21:20:05 +0000
(21:20 +0000)
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
patch
|
blob
|
history
diff --git
a/Robust/src/Analysis/Disjoint/DisjointAnalysis.java
b/Robust/src/Analysis/Disjoint/DisjointAnalysis.java
index e43a39304b1b5b2826002e3aa30cfd3aa491c4d6..c30c3c99db3f2eac337c862f3da842254577a840 100644
(file)
--- a/
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
+++ b/
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
@@
-1017,17
+1017,11
@@
public class DisjointAnalysis {
// nullified in the graph to reduce edges
//rg.nullifyDeadVars( liveness.getLiveInTemps( fmContaining, fn ) );
// nullified in the graph to reduce edges
//rg.nullifyDeadVars( liveness.getLiveInTemps( fmContaining, fn ) );
- /*
- if( doEffectsAnalysis && && fmContaining != fmAnalysisEntry
- rra.isEndOfRegion(fn)){
- rg.clearAccessibleVarSet();
- also need to clear stall mapping
- }
- */
-
TempDescriptor lhs;
TempDescriptor rhs;
FieldDescriptor fld;
TempDescriptor lhs;
TempDescriptor rhs;
FieldDescriptor fld;
+ TypeDescriptor tdElement;
+ FieldDescriptor fdElement;
// use node type to decide what transfer function
// to apply to the reachability graph
// use node type to decide what transfer function
// to apply to the reachability graph
@@
-1095,6
+1089,7
@@
public class DisjointAnalysis {
case FKind.FlatFieldNode:
FlatFieldNode ffn = (FlatFieldNode) fn;
case FKind.FlatFieldNode:
FlatFieldNode ffn = (FlatFieldNode) fn;
+
lhs = ffn.getDst();
rhs = ffn.getSrc();
fld = ffn.getField();
lhs = ffn.getDst();
rhs = ffn.getSrc();
fld = ffn.getField();
@@
-1120,21
+1115,24
@@
public class DisjointAnalysis {
// transfer func
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fld );
// transfer func
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fld );
-
- // after transfer, use updated graph to
- // do effects analysis
- if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
- effectsAnalysis.analyzeFlatFieldNode( rg, rhs, fld );
- }
}
}
+
+ // after transfer, use updated graph to
+ // do effects analysis
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ effectsAnalysis.analyzeFlatFieldNode( rg, rhs, fld );
+ }
break;
case FKind.FlatSetFieldNode:
FlatSetFieldNode fsfn = (FlatSetFieldNode) fn;
break;
case FKind.FlatSetFieldNode:
FlatSetFieldNode fsfn = (FlatSetFieldNode) fn;
+
lhs = fsfn.getDst();
fld = fsfn.getField();
rhs = fsfn.getSrc();
lhs = fsfn.getDst();
fld = fsfn.getField();
rhs = fsfn.getSrc();
+ boolean strongUpdate = false;
+
if( shouldAnalysisTrack( fld.getType() ) ) {
// before transfer func, possibly inject
if( shouldAnalysisTrack( fld.getType() ) ) {
// before transfer func, possibly inject
@@
-1159,27
+1157,29
@@
public class DisjointAnalysis {
}
// transfer func
}
// transfer func
- boolean strongUpdate = rg.assignTempXFieldFEqualToTempY( lhs, fld, rhs );
-
- // use transformed graph to do effects analysis
- if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
- effectsAnalysis.analyzeFlatSetFieldNode( rg, lhs, fld, strongUpdate );
- }
+ strongUpdate = rg.assignTempXFieldFEqualToTempY( lhs, fld, rhs );
}
}
+
+ // use transformed graph to do effects analysis
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ effectsAnalysis.analyzeFlatSetFieldNode( rg, lhs, fld, strongUpdate );
+ }
break;
case FKind.FlatElementNode:
FlatElementNode fen = (FlatElementNode) fn;
break;
case FKind.FlatElementNode:
FlatElementNode fen = (FlatElementNode) fn;
+
lhs = fen.getDst();
rhs = fen.getSrc();
lhs = fen.getDst();
rhs = fen.getSrc();
- if( shouldAnalysisTrack( lhs.getType() ) ) {
- assert rhs.getType() != null;
- assert rhs.getType().isArray();
+ assert rhs.getType() != null;
+ assert rhs.getType().isArray();
+
+ tdElement = rhs.getType().dereference();
+ fdElement = getArrayField( tdElement );
+
+ if( shouldAnalysisTrack( lhs.getType() ) ) {
- TypeDescriptor tdElement = rhs.getType().dereference();
- FieldDescriptor fdElement = getArrayField( tdElement );
-
// before transfer func, possibly inject
// stall-site taint
if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
// before transfer func, possibly inject
// stall-site taint
if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
@@
-1199,31
+1199,27
@@
public class DisjointAnalysis {
// transfer func
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fdElement );
// transfer func
rg.assignTempXEqualToTempYFieldF( lhs, rhs, fdElement );
-
- // use transformed graph to do effects analysis
- if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
- effectsAnalysis.analyzeFlatFieldNode( rg, rhs, fdElement );
- }
}
}
+
+ // use transformed graph to do effects analysis
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ effectsAnalysis.analyzeFlatFieldNode( rg, rhs, fdElement );
+ }
break;
case FKind.FlatSetElementNode:
FlatSetElementNode fsen = (FlatSetElementNode) fn;
break;
case FKind.FlatSetElementNode:
FlatSetElementNode fsen = (FlatSetElementNode) fn;
- if( arrayReferencees.doesNotCreateNewReaching( fsen ) ) {
- // skip this node if it cannot create new reachability paths
- break;
- }
-
lhs = fsen.getDst();
rhs = fsen.getSrc();
lhs = fsen.getDst();
rhs = fsen.getSrc();
- if( shouldAnalysisTrack( rhs.getType() ) ) {
- assert lhs.getType() != null;
- assert lhs.getType().isArray();
-
- TypeDescriptor tdElement = lhs.getType().dereference();
- FieldDescriptor fdElement = getArrayField( tdElement );
+ assert lhs.getType() != null;
+ assert lhs.getType().isArray();
+
+ tdElement = lhs.getType().dereference();
+ fdElement = getArrayField( tdElement );
+
+ if( shouldAnalysisTrack( rhs.getType() ) ) {
// before transfer func, possibly inject
// stall-site taints
// before transfer func, possibly inject
// stall-site taints
@@
-1246,15
+1242,18
@@
public class DisjointAnalysis {
}
}
}
}
- // transfer func
- rg.assignTempXFieldFEqualToTempY( lhs, fdElement, rhs );
-
- // use transformed graph to do effects analysis
- if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
- effectsAnalysis.analyzeFlatSetFieldNode( rg, lhs, fdElement,
- false );
+ // transfer func, BUT
+ // skip this node if it cannot create new reachability paths
+ if( !arrayReferencees.doesNotCreateNewReaching( fsen ) ) {
+ rg.assignTempXFieldFEqualToTempY( lhs, fdElement, rhs );
}
}
}
}
+
+ // use transformed graph to do effects analysis
+ if( doEffectsAnalysis && fmContaining != fmAnalysisEntry ) {
+ effectsAnalysis.analyzeFlatSetFieldNode( rg, lhs, fdElement,
+ false );
+ }
break;
case FKind.FlatNew:
break;
case FKind.FlatNew: