From fd17b5ede5465baf55026b06bb25104fbc4f1c16 Mon Sep 17 00:00:00 2001 From: jjenista Date: Fri, 20 Jan 2012 01:42:22 +0000 Subject: [PATCH] running new experiments --- .../Analysis/Disjoint/DisjointAnalysis.java | 3 ++ Robust/src/Analysis/Disjoint/ReachGraph.java | 41 ++++++++++++++++++- Robust/src/Analysis/Disjoint/ReachSet.java | 12 ++++++ Robust/src/Analysis/Disjoint/ReachState.java | 5 +++ Robust/src/Benchmarks/oooJava/master-makefile | 12 +++--- Robust/src/IR/State.java | 1 + Robust/src/Main/Main.java | 5 ++- Robust/src/Tests/disjoint/definite3/makefile | 2 +- Robust/src/buildscript | 3 +- 9 files changed, 75 insertions(+), 9 deletions(-) diff --git a/Robust/src/Analysis/Disjoint/DisjointAnalysis.java b/Robust/src/Analysis/Disjoint/DisjointAnalysis.java index 0913d4fb..3023faf5 100644 --- a/Robust/src/Analysis/Disjoint/DisjointAnalysis.java +++ b/Robust/src/Analysis/Disjoint/DisjointAnalysis.java @@ -930,6 +930,9 @@ public class DisjointAnalysis implements HeapAnalysis { treport += "\nFixed point algorithm visited "+totalMethodVisits+ " methods and "+totalNodeVisits+" nodes."; } + if( state.DISJOINT_COUNT_GRAPH_ELEMENTS ) { + treport += "\n"+getPartial( mdSourceEntry ).countGraphElements()+"\n"; + } String justtime = String.format("%.2f", dt); System.out.println(treport); diff --git a/Robust/src/Analysis/Disjoint/ReachGraph.java b/Robust/src/Analysis/Disjoint/ReachGraph.java index 9a327eeb..1e065cd9 100644 --- a/Robust/src/Analysis/Disjoint/ReachGraph.java +++ b/Robust/src/Analysis/Disjoint/ReachGraph.java @@ -2310,7 +2310,9 @@ public class ReachGraph { } } - assert hrnCalleeAndOutContext.reachHasOnlyOOC(); + if( !DISABLE_GLOBAL_SWEEP ) { + assert hrnCalleeAndOutContext.reachHasOnlyOOC(); + } rg.addRefEdge(hrnCalleeAndOutContext, hrnDstCallee, @@ -5407,4 +5409,41 @@ public class ReachGraph { return null; } + + + public String countGraphElements() { + long numNodes = 0; + long numEdges = 0; + long numNodeStates = 0; + long numEdgeStates = 0; + long numNodeStateNonzero = 0; + long numEdgeStateNonzero = 0; + + for( HeapRegionNode node : id2hrn.values() ) { + numNodes++; + numNodeStates += node.getAlpha().numStates(); + numNodeStateNonzero += node.getAlpha().numNonzeroTuples(); + + // all edges in the graph point TO a heap node, so scanning + // all referencers of all nodes gets every edge + Iterator refItr = node.iteratorToReferencers(); + while( refItr.hasNext() ) { + RefEdge edge = refItr.next(); + + numEdges++; + numEdgeStates += edge.getBeta().numStates(); + numEdgeStateNonzero += edge.getBeta().numNonzeroTuples(); + } + } + + return + "################################################\n"+ + "Nodes = "+numNodes+"\n"+ + "Edges = "+numEdges+"\n"+ + "Node states = "+numNodeStates+"\n"+ + "Edge states = "+numEdgeStates+"\n"+ + "Node non-zero tuples = "+numNodeStateNonzero+"\n"+ + "Edge non-zero tuples = "+numEdgeStateNonzero+"\n"+ + "################################################\n"; + } } diff --git a/Robust/src/Analysis/Disjoint/ReachSet.java b/Robust/src/Analysis/Disjoint/ReachSet.java index e7fe5134..10021600 100644 --- a/Robust/src/Analysis/Disjoint/ReachSet.java +++ b/Robust/src/Analysis/Disjoint/ReachSet.java @@ -260,4 +260,16 @@ public class ReachSet extends Canonical { return s+"]"; } + + public long numStates() { + return reachStates.size(); + } + + public long numNonzeroTuples() { + long n = 0; + for( ReachState state: reachStates ) { + n += state.numNonzeroTuples(); + } + return n; + } } diff --git a/Robust/src/Analysis/Disjoint/ReachState.java b/Robust/src/Analysis/Disjoint/ReachState.java index 36897df2..537a44a0 100644 --- a/Robust/src/Analysis/Disjoint/ReachState.java +++ b/Robust/src/Analysis/Disjoint/ReachState.java @@ -173,4 +173,9 @@ public class ReachState extends Canonical { } return toStringPreds(); } + + + public long numNonzeroTuples() { + return reachTuples.size(); + } } diff --git a/Robust/src/Benchmarks/oooJava/master-makefile b/Robust/src/Benchmarks/oooJava/master-makefile index 54e60989..679ef949 100644 --- a/Robust/src/Benchmarks/oooJava/master-makefile +++ b/Robust/src/Benchmarks/oooJava/master-makefile @@ -77,13 +77,16 @@ DISJOINT= -disjoint -disjoint-k 1 -enable-assertions $(DRELEASEMODE) #-disjoint- # EX: (skip first 10 visits, capture the next 3, then halt) # -disjoint-debug-snap-method Remove 10 3 true -DISJOINTDEBUG= -disjoint -disjoint-k 1 -enable-assertions $(DRELEASEMODE) -# -disjoint-disable-predicates \ +DISJOINTDEBUG= -disjoint -disjoint-k 1 -enable-assertions $(DRELEASEMODE) \ + -justanalyze \ + -disjoint-count-graph-elements +# -disjoint-disable-global-sweep \ +# -disjoint-disable-strong-update # -disjoint-summarize-per-class +# -disjoint-disable-predicates \ +# # -disjoint-write-dots final # -do-definite-reach-analysis \ -# -disjoint-disable-global-sweep \ -# -disjoint-disable-strong-update \ # -disjoint-debug-scheduling # -disjoint-debug-callsite Barneshut.Insert Barneshut.run 50 500 true # -disjoint-debug-snap-method ArrayIndexedGraph.createNode 1 100 true \ @@ -97,7 +100,6 @@ DISJOINTDEBUG= -disjoint -disjoint-k 1 -enable-assertions $(DRELEASEMODE) # -disjoint-debug-snap-method FileInputStream.readLine 1 1000 true # -disjoint-write-all-node-graphs # -# -justanalyze \ # -disjoint-debug-callsite String.toString String.valueOf 1 1000 true \ # -disjoint-desire-determinism # -disjoint-debug-callsite Demand.add Lateral.compute 1 1000 true diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index d2099705..c2cc209f 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -126,6 +126,7 @@ public class State { public boolean DISJOINTDEBUGSCHEDULING=false; public boolean DISJOINT_WRITE_ALL_NODE_FINAL_GRAPHS=false; public boolean DISJOINT_COUNT_VISITS=false; + public boolean DISJOINT_COUNT_GRAPH_ELEMENTS=false; public boolean POINTSTO_CHECK_V_RUNTIME=false; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index e0520b19..bc1177cd 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -308,9 +308,12 @@ public class Main { state.DISJOINT_SUMMARIZE_PER_CLASS = true; - } else if( option.equals("-count-visits") ) { + } else if( option.equals("-disjoint-count-visits") ) { state.DISJOINT_COUNT_VISITS = true; + } else if( option.equals("-disjoint-count-graph-elements") ) { + state.DISJOINT_COUNT_GRAPH_ELEMENTS = true; + } else if (option.equals("-optional")) state.OPTIONAL=true; diff --git a/Robust/src/Tests/disjoint/definite3/makefile b/Robust/src/Tests/disjoint/definite3/makefile index 462f41d4..603f5056 100644 --- a/Robust/src/Tests/disjoint/definite3/makefile +++ b/Robust/src/Tests/disjoint/definite3/makefile @@ -4,7 +4,7 @@ SOURCE_FILES=test.java BUILDSCRIPT=../../../buildscript -DISJOINT= -disjoint -disjoint-k 1 -enable-assertions -do-definite-reach-analysis +DISJOINT= -disjoint -disjoint-k 1 -enable-assertions -do-definite-reach-analysis -disjoint-count-graph-elements -disjoint-write-dots final BSFLAGS= -justanalyze -mainclass $(PROGRAM) -heapsize-mb 1024 -noloop -joptimize -debug #-flatirusermethods diff --git a/Robust/src/buildscript b/Robust/src/buildscript index e2255884..2483ac8e 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -50,7 +50,8 @@ echo -disjoint-dvisit-stack-callees-on-top alternate stack strat echo -disjoint-dvisit-pqueue use prio. q strat to visit descriptors echo -disjoint-desire-determinism set above interproc for determinism echo -disjoint-debug-scheduling debug when methods are scheduled for analysis -echo -count-visits for counting visits in the fixed point algorithm to evaluate convergence behavior +echo -disjoint-count-visits for counting visits in the fixed point algorithm to evaluate convergence behavior +echo -disjoint-count-graph-elements nodes, edges and states in final graph for main method context echo echo -do-definite-reach-analysis enable improved precision for disjoint reachability analysis echo -disjoint-disable-global-sweep -- 2.34.1