From 19adc9faf38e634c6d4fa3b38de8e4afc3ed8b8e Mon Sep 17 00:00:00 2001 From: jjenista Date: Wed, 29 Apr 2009 23:59:09 +0000 Subject: [PATCH] stable, something still wrong with calculating out-sets --- Robust/src/Analysis/MLP/MLPAnalysis.java | 26 +++++++++++++++++++++-- Robust/src/IR/Flat/FlatSESEEnterNode.java | 12 +++++------ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Robust/src/Analysis/MLP/MLPAnalysis.java b/Robust/src/Analysis/MLP/MLPAnalysis.java index ec22eb0b..17ed7a27 100644 --- a/Robust/src/Analysis/MLP/MLPAnalysis.java +++ b/Robust/src/Analysis/MLP/MLPAnalysis.java @@ -71,8 +71,10 @@ public class MLPAnalysis { } - // 2nd pass + // 2nd pass, results are saved in FlatSESEEnterNode, so + // intermediate results, for safety, are discarded livenessAnalysisBackward( rootSESE ); + livenessResults = null; // 3rd pass @@ -90,7 +92,8 @@ public class MLPAnalysis { // 4th pass, compute liveness contribution from // virtual reads discovered in variable pass livenessResults = new Hashtable< FlatNode, Set >(); - livenessAnalysisBackward( rootSESE ); + livenessAnalysisBackward( rootSESE ); + livenessResults = null; // 5th pass @@ -265,6 +268,11 @@ public class MLPAnalysis { while( tItr.hasNext() ) { System.out.println( " "+tItr.next() ); } + System.out.println( "and out-set:" ); + tItr = fsen.getOutVarSet().iterator(); + while( tItr.hasNext() ) { + System.out.println( " "+tItr.next() ); + } System.out.println( "" ); } } @@ -275,10 +283,24 @@ public class MLPAnalysis { switch( fn.kind() ) { default: { + VarSrcTokTable table = variableResults.get( fn ); + // handle effects of statement in reverse, writes then reads TempDescriptor [] writeTemps = fn.writesTemps(); for( int i = 0; i < writeTemps.length; ++i ) { liveIn.remove( writeTemps[i] ); + + if( table != null ) { + Iterator vstItr = table.get( writeTemps[i] ).iterator(); + while( vstItr.hasNext() ) { + VariableSourceToken vst = vstItr.next(); + + if( !vst.getSESE().equals( currentSESE ) ) { + currentSESE.addOutVar( writeTemps[i] ); + break; + } + } + } } TempDescriptor [] readTemps = fn.readsTemps(); diff --git a/Robust/src/IR/Flat/FlatSESEEnterNode.java b/Robust/src/IR/Flat/FlatSESEEnterNode.java index b1f81e92..11da4cb8 100644 --- a/Robust/src/IR/Flat/FlatSESEEnterNode.java +++ b/Robust/src/IR/Flat/FlatSESEEnterNode.java @@ -11,7 +11,7 @@ public class FlatSESEEnterNode extends FlatNode { protected FlatSESEEnterNode parent; protected Set children; protected Set inVars; - protected Set outVars; + protected Set outVars; protected FlatMethod enclosing; public FlatSESEEnterNode( SESENode sn ) { @@ -19,7 +19,7 @@ public class FlatSESEEnterNode extends FlatNode { treeNode = sn; children = new HashSet(); inVars = new HashSet(); - outVars = new HashSet(); + outVars = new HashSet(); } public void rewriteUse() { @@ -48,15 +48,15 @@ public class FlatSESEEnterNode extends FlatNode { inVars.add( td ); } - public void addOutVar( VariableSourceToken vst ) { - outVars.add( vst ); + public void addOutVar( TempDescriptor td ) { + outVars.add( td ); } public void addInVarSet( Set s ) { inVars.addAll( s ); } - public void addOutVarSet( Set s ) { + public void addOutVarSet( Set s ) { outVars.addAll( s ); } @@ -64,7 +64,7 @@ public class FlatSESEEnterNode extends FlatNode { return inVars; } - public Set getOutVarSet() { + public Set getOutVarSet() { return outVars; } -- 2.34.1