From: jjenista Date: Wed, 22 Apr 2009 19:57:50 +0000 (+0000) Subject: variable analysis stable, reports stalls all over--buggy X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=83d457c8f5c22cf6cfff6b9dfc945e3ab1ca1ce7;p=IRC.git variable analysis stable, reports stalls all over--buggy --- diff --git a/Robust/src/Analysis/MLP/MLPAnalysis.java b/Robust/src/Analysis/MLP/MLPAnalysis.java index 8693ab56..d47ec3f8 100644 --- a/Robust/src/Analysis/MLP/MLPAnalysis.java +++ b/Robust/src/Analysis/MLP/MLPAnalysis.java @@ -100,6 +100,17 @@ public class MLPAnalysis { } + // 4th pass + methItr = ownAnalysis.descriptorsToAnalyze.iterator(); + while( methItr.hasNext() ) { + Descriptor d = methItr.next(); + + FlatMethod fm = state.getMethodFlat( d ); + + computeStallsForward( fm ); + } + + double timeEndAnalysis = (double) System.nanoTime(); double dt = (timeEndAnalysis - timeStartAnalysis)/(Math.pow( 10.0, 9.0 ) ); String treport = String.format( "The mlp analysis took %.3f sec.", dt ); @@ -390,4 +401,61 @@ public class MLPAnalysis { return vstTable; } + + + private void computeStallsForward( FlatMethod fm ) { + + // start from flat method top, visit every node in + // method exactly once + Set flatNodesToVisit = new HashSet(); + flatNodesToVisit.add( fm ); + + Set visited = new HashSet(); + + while( !flatNodesToVisit.isEmpty() ) { + Iterator fnItr = flatNodesToVisit.iterator(); + FlatNode fn = fnItr.next(); + + flatNodesToVisit.remove( fn ); + visited.add( fn ); + + Stack seseStack = seseStacks.get( fn ); + assert seseStack != null; + + VarSrcTokTable vstTable = variableResults.get( fn ); + + computeStalls_nodeActions( fn, vstTable, seseStack.peek() ); + + for( int i = 0; i < fn.numNext(); i++ ) { + FlatNode nn = fn.getNext( i ); + + if( !visited.contains( nn ) ) { + flatNodesToVisit.add( nn ); + } + } + } + } + + private void computeStalls_nodeActions( FlatNode fn, + VarSrcTokTable vstTable, + FlatSESEEnterNode currentSESE ) { + switch( fn.kind() ) { + + case FKind.FlatSESEEnterNode: { + FlatSESEEnterNode fsen = (FlatSESEEnterNode) fn; + } break; + + case FKind.FlatSESEExitNode: { + FlatSESEExitNode fsexn = (FlatSESEExitNode) fn; + } break; + + default: { + Set stallSet = + vstTable.getStallSet( currentSESE ); + + System.out.println( fn+" should stall on\n "+stallSet+"\n" ); + } break; + + } // end switch + } } diff --git a/Robust/src/Analysis/MLP/VarSrcTokTable.java b/Robust/src/Analysis/MLP/VarSrcTokTable.java index 18f4e3aa..6b940d4e 100644 --- a/Robust/src/Analysis/MLP/VarSrcTokTable.java +++ b/Robust/src/Analysis/MLP/VarSrcTokTable.java @@ -300,6 +300,20 @@ public class VarSrcTokTable { } + public Set getStallSet( FlatSESEEnterNode curr ) { + + Set out = new HashSet(); + + Iterator cItr = curr.getChildren().iterator(); + while( cItr.hasNext() ) { + FlatSESEEnterNode child = cItr.next(); + out.addAll( get( child ) ); + } + + return out; + } + + public boolean equals( Object o ) { if( o == null ) { return false;