From: jjenista Date: Wed, 20 Jan 2010 05:43:36 +0000 (+0000) Subject: fixed a bug in not-available set calculation for MLP X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b46b6b83dbca2584f656063a6c0ec3f46f18044e;p=IRC.git fixed a bug in not-available set calculation for MLP --- diff --git a/Robust/src/Analysis/MLP/MLPAnalysis.java b/Robust/src/Analysis/MLP/MLPAnalysis.java index eb7e1c85..f23c74b5 100644 --- a/Robust/src/Analysis/MLP/MLPAnalysis.java +++ b/Robust/src/Analysis/MLP/MLPAnalysis.java @@ -92,6 +92,8 @@ public class MLPAnalysis { private Hashtable< FlatNode, Set > notAvailableResults; private Hashtable< FlatNode, CodePlan > codePlans; + private Hashtable< FlatSESEEnterNode, Set > notAvailableIntoSESE; + private Hashtable< FlatEdge, FlatWriteDynamicVarNode > wdvNodesToSpliceIn; private Hashtable< MethodContext, HashSet> mapMethodContextToLiveInAllocationSiteSet; @@ -159,6 +161,8 @@ public class MLPAnalysis { notAvailableResults = new Hashtable< FlatNode, Set >(); codePlans = new Hashtable< FlatNode, CodePlan >(); wdvNodesToSpliceIn = new Hashtable< FlatEdge, FlatWriteDynamicVarNode >(); + + notAvailableIntoSESE = new Hashtable< FlatSESEEnterNode, Set >(); mapMethodContextToLiveInAllocationSiteSet = new Hashtable< MethodContext, HashSet>(); @@ -858,6 +862,16 @@ public class MLPAnalysis { case FKind.FlatSESEEnterNode: { FlatSESEEnterNode fsen = (FlatSESEEnterNode) fn; assert fsen.equals( currentSESE ); + + // keep a copy of what's not available into the SESE + // and restore it at the matching exit node + Set notAvailCopy = new HashSet(); + Iterator tdItr = notAvailSet.iterator(); + while( tdItr.hasNext() ) { + notAvailCopy.add( tdItr.next() ); + } + notAvailableIntoSESE.put( fsen, notAvailCopy ); + notAvailSet.clear(); } break; @@ -865,7 +879,13 @@ public class MLPAnalysis { FlatSESEExitNode fsexn = (FlatSESEExitNode) fn; FlatSESEEnterNode fsen = fsexn.getFlatEnter(); assert currentSESE.getChildren().contains( fsen ); + notAvailSet.addAll( fsen.getOutVarSet() ); + + Set notAvailIn = notAvailableIntoSESE.get( fsen ); + assert notAvailIn != null; + notAvailSet.addAll( notAvailIn ); + } break; case FKind.FlatMethod: {