From: jjenista Date: Wed, 15 Apr 2009 16:56:20 +0000 (+0000) Subject: stable version with debug, chasing an analysis bug X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=39c1b8395cd57998f9da5fb9cd62400bd014c965;p=IRC.git stable version with debug, chasing an analysis bug --- diff --git a/Robust/src/Analysis/MLP/MLPAnalysis.java b/Robust/src/Analysis/MLP/MLPAnalysis.java index e79424c4..c64542c4 100644 --- a/Robust/src/Analysis/MLP/MLPAnalysis.java +++ b/Robust/src/Analysis/MLP/MLPAnalysis.java @@ -103,9 +103,6 @@ public class MLPAnalysis { analyzeFlatNodeForward( fn, seseStack ); - // initialize for backward computation in next step - //pointResults.put( fn, new VarSrcTokTable() ); - for( int i = 0; i < fn.numNext(); i++ ) { FlatNode nn = fn.getNext( i ); @@ -129,18 +126,29 @@ public class MLPAnalysis { computeReadAndWriteSetBackward( fsenChild ); } + System.out.println( "backwards on "+fsen ); // start from an SESE exit, visit nodes in reverse up to // SESE enter in a fixed-point scheme, where children SESEs // should already be analyzed and therefore can be skipped // because child SESE enter node has all necessary info Set flatNodesToVisit = new HashSet(); - flatNodesToVisit.add( fsen.getFlatExit() ); + flatNodesToVisit.add( fsen ); + + FlatSESEExitNode fsexn = fsen.getFlatExit(); + for( int i = 0; i < fsexn.numPrev(); i++ ) { + FlatNode nn = fsexn.getPrev( i ); + flatNodesToVisit.add( nn ); + } while( !flatNodesToVisit.isEmpty() ) { FlatNode fn = (FlatNode) flatNodesToVisit.iterator().next(); flatNodesToVisit.remove( fn ); + if( fn.kind() == FKind.FlatSESEExitNode ) { + fn = ((FlatSESEExitNode)fn).getFlatEnter(); + } + VarSrcTokTable prev = pointResults.get( fn ); // merge sets from control flow joins @@ -152,6 +160,10 @@ public class MLPAnalysis { VarSrcTokTable curr = analyzeFlatNodeBackward( fn, inUnion, fsen ); + + //System.out.println( "\nConsidering "+fn+" and\n prev="+prev+"\n curr="+curr ); + + // if a new result, schedule backward nodes for analysis if( !curr.equals( prev ) ) { @@ -167,6 +179,8 @@ public class MLPAnalysis { } } + if( pointResults.get( fsen ) == null ) { System.out.println( "UGH" ); } + fsen.addInVarSet( pointResults.get( fsen ).get() ); if( state.MLPDEBUG ) { @@ -224,12 +238,14 @@ public class MLPAnalysis { switch( fn.kind() ) { case FKind.FlatSESEEnterNode: { - FlatSESEEnterNode fsen = (FlatSESEEnterNode) fn; + FlatSESEEnterNode fsen = (FlatSESEEnterNode) fn; + vstTable.addAll( fsen.getInVarSet() ); } break; case FKind.FlatSESEExitNode: { FlatSESEExitNode fsexn = (FlatSESEExitNode) fn; - + + //FlatSESEEnterNode fsen = fsexn.getFlatEnter(); //assert fsen == seseStack.pop(); //seseStack.peek().addInVarSet ( fsen.getInVarSet() ); diff --git a/Robust/src/Analysis/MLP/VarSrcTokTable.java b/Robust/src/Analysis/MLP/VarSrcTokTable.java index 9c3f1c19..296c8ece 100644 --- a/Robust/src/Analysis/MLP/VarSrcTokTable.java +++ b/Robust/src/Analysis/MLP/VarSrcTokTable.java @@ -57,6 +57,13 @@ public class VarSrcTokTable { sv2vst.put( key, s ); } + public void addAll( Set s ) { + Iterator itr = s.iterator(); + while( itr.hasNext() ) { + add( itr.next() ); + } + } + public Set get() { return trueSet; @@ -187,7 +194,7 @@ public class VarSrcTokTable { } trueSet.removeAll( s ); - sv2vst .remove( key ); + sv2vst.remove( key ); } public void remove( VariableSourceToken vst ) { diff --git a/Robust/src/Tests/mlp/tinyTest/test.java b/Robust/src/Tests/mlp/tinyTest/test.java index 72a784e3..239734bb 100644 --- a/Robust/src/Tests/mlp/tinyTest/test.java +++ b/Robust/src/Tests/mlp/tinyTest/test.java @@ -1,19 +1,24 @@ public class Test { public static void main( String args[] ) { + // no code is outside the root sese + // in the main method + sese root { + int n = 10; - int n = 10; - - sese top { - int x = 0; + sese top { + int x = 0; - for( int i = 0; i < 3; ++i ) { - sese iter { - x = x + i; - } - } + for( int i = 0; i < 3; ++i ) { + sese iter { + x = x + i; + } + } + + int j = x + n; + } - int j = x + n; + int z = n + j; } } }