running new experiments
authorjjenista <jjenista>
Fri, 20 Jan 2012 01:42:22 +0000 (01:42 +0000)
committerjjenista <jjenista>
Fri, 20 Jan 2012 01:42:22 +0000 (01:42 +0000)
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
Robust/src/Analysis/Disjoint/ReachGraph.java
Robust/src/Analysis/Disjoint/ReachSet.java
Robust/src/Analysis/Disjoint/ReachState.java
Robust/src/Benchmarks/oooJava/master-makefile
Robust/src/IR/State.java
Robust/src/Main/Main.java
Robust/src/Tests/disjoint/definite3/makefile
Robust/src/buildscript

index 0913d4fbaee0229a50020a699085bba498afd164..3023faf5d59f7b3f1028050bac5475a48727ffc1 100644 (file)
@@ -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);
     
index 9a327eebecafe7d07d48746a554b09437ecf369d..1e065cd9cec19c141c6bd91b49fae0b10410537e 100644 (file)
@@ -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<RefEdge> 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";
+  }
 }
index e7fe5134b9ebc4e1f7f010e3efb7e7c0c7100eeb..10021600de4accfbfb79c59d914bcf9f6a50d5da 100644 (file)
@@ -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;
+  }
 }
index 36897df2e8010aad98841219184a207f22d8e8bd..537a44a01647296e6daebadf477fbaf4ac5f4fc5 100644 (file)
@@ -173,4 +173,9 @@ public class ReachState extends Canonical {
     }
     return toStringPreds();
   }
+
+
+  public long numNonzeroTuples() {
+    return reachTuples.size();
+  }
 }
index 54e60989b6ce97ebce94a6e90163471b6516d748..679ef949a0c52ac33a85054867a6e7fbaf7aa728 100644 (file)
@@ -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
index d2099705d21516074cb3e718a0f5eb203a2903fb..c2cc209f664db64be3bcaebe1417cafa93271f72 100644 (file)
@@ -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;
 
index e0520b1966ac66f232447840f3ab5117a61b8852..bc1177cd0b153252228492139b03501a09b20926 100644 (file)
@@ -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;
index 462f41d4916fe10d42cf6a945a930ae16dfab82b..603f5056a2f8a694ea400e899042367e8d8d176d 100644 (file)
@@ -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
 
index e22558840f2abbaff3690939f6868e52dc2defb4..2483ac8e81a8e9eef26e35ba38567086e19c023a 100755 (executable)
@@ -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