new Canonical hash and equals, also running with assertions disabled, barely improved
authorjjenista <jjenista>
Thu, 25 Mar 2010 21:56:13 +0000 (21:56 +0000)
committerjjenista <jjenista>
Thu, 25 Mar 2010 21:56:13 +0000 (21:56 +0000)
13 files changed:
Robust/src/Analysis/Disjoint/AllocSite.java
Robust/src/Analysis/Disjoint/Canonical.java
Robust/src/Analysis/Disjoint/ChangeSet.java
Robust/src/Analysis/Disjoint/ChangeTuple.java
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
Robust/src/Analysis/Disjoint/ExistPred.java
Robust/src/Analysis/Disjoint/ExistPredSet.java
Robust/src/Analysis/Disjoint/ReachSet.java
Robust/src/Analysis/Disjoint/ReachState.java
Robust/src/Analysis/Disjoint/ReachTuple.java
Robust/src/Benchmarks/disjoint/makefile
Robust/src/IR/State.java
Robust/src/Main/Main.java

index ee97eb522ca3e0ee9be9917e9210e6bf352de1c0..37b07b21b0691c8ad72b05bf6c55ffedd6001b9b 100644 (file)
@@ -235,6 +235,19 @@ public class AllocSite extends Canonical {
     return s;
   }
 
+  public boolean equalsSpecific( Object o ) {
+    if( o == null ) {
+      return false;
+    }
+
+    if( !(o instanceof AllocSite) ) {
+      return false;
+    }
+
+    AllocSite as = (AllocSite) o;
+
+    return this.id == as.id;
+  }
 
   public int hashCodeSpecific() {
     return id;
index bd4b8ee15429a130e738e521375baaf74afb1317..ffc68f2bac9996f3867930250ed77b5c65f1d52c 100644 (file)
@@ -59,6 +59,30 @@ abstract public class Canonical {
     return canonicalValue;
   }
 
+
+
+  abstract public boolean equalsSpecific( Object o );
+
+  final public boolean equals( Object o ) {
+    if( o == null ) {
+      return false;
+    }
+
+    if( !(o instanceof Canonical) ) {
+      return false;
+    }
+
+    Canonical c = (Canonical) o;
+
+    if( this.canonicalValue == 0 ||
+           c.canonicalValue == 0
+        ) {
+      return equalsSpecific( o );
+    }
+
+    return this.canonicalValue == c.canonicalValue;
+  }
+
   
   // canonical objects should never be modified
   // and therefore have changing hash codes, so
@@ -70,6 +94,13 @@ abstract public class Canonical {
   private boolean hasHash = false;
   private int     oldHash;
   final public int hashCode() {
+    
+    // the quick mode
+    if( DisjointAnalysis.releaseMode && hasHash ) {
+      return oldHash;
+    }
+
+    // the safe mode
     int hash = hashCodeSpecific();
 
     if( hasHash ) {
@@ -85,8 +116,6 @@ abstract public class Canonical {
   }
 
 
-
-
   // mapping of a non-trivial operation to its result
   private static    Hashtable<CanonicalOp, Canonical> 
     op2result = new Hashtable<CanonicalOp, Canonical>();
index 50d4a1515595dde1132527a527338dd5888abbb9..0eeb32e14dfd92be05002c9f94c628dafc5c80bc 100644 (file)
@@ -64,7 +64,7 @@ public class ChangeSet extends Canonical {
   }
 
 
-  public boolean equals(Object o) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 99bf8326633387cddc8a428789bf32ed41ee41ae..ce0383c9ee3cee2b0356058660aa78c110808a27 100644 (file)
@@ -65,7 +65,7 @@ public class ChangeTuple extends Canonical
   }
   
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 021446d5bef5c29f2a09a813ab3724a5653b8711..487242984016f247c802c9e178a843b8c24705b5 100644 (file)
@@ -311,6 +311,9 @@ public class DisjointAnalysis {
          } 
 
 
+  // run in faster mode, only when bugs wrung out!
+  public static boolean releaseMode;
+
   // data from the compiler
   public State            state;
   public CallGraph        callGraph;
@@ -489,7 +492,7 @@ public class DisjointAnalysis {
                        ArrayReferencees arrayReferencees
                        ) throws java.io.IOException {
          
-       analysisComplete = false;
+    analysisComplete = false;
     
     this.state                   = state;
     this.typeUtil                = typeUtil;
@@ -497,6 +500,7 @@ public class DisjointAnalysis {
     this.liveness                = liveness;
     this.arrayReferencees        = arrayReferencees;
     this.allocationDepth         = state.DISJOINTALLOCDEPTH;
+    this.releaseMode             = state.DISJOINTRELEASEMODE;
 
     this.writeFinalDOTs          = state.DISJOINTWRITEDOTS && !state.DISJOINTWRITEALL;
     this.writeAllIncrementalDOTs = state.DISJOINTWRITEDOTS &&  state.DISJOINTWRITEALL;
index 5c9e7d4f9193a0548a61268786754e120bc15b10..33b5ada0a0e3d1ba84633d2151f469ee120dc01a 100644 (file)
@@ -315,7 +315,7 @@ public class ExistPred extends Canonical {
 
 
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 9e07aee09832bf9e564d989c12ab64b21b766b4d..913c1df17fc48488272e1a158cc5a25ee5631e18 100644 (file)
@@ -89,7 +89,7 @@ public class ExistPredSet extends Canonical {
   }
 
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 97a913f8e4080074600159c59b909613dfbe57c8..01882156adc38f8a8743a06661058534fc605652 100644 (file)
@@ -180,7 +180,7 @@ public class ReachSet extends Canonical {
   }
 
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index aacd7aacafeb5b4e5eb4dce190a61633d99165c9..41b839a4bc10b2b8f8b12844ded9598c5745f722 100644 (file)
@@ -112,7 +112,7 @@ public class ReachState extends Canonical {
   }
 
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 1d09abfac7eb8040a221917c151f87bebde20b4f..409930c7d05ce03b148a0cc0acc3e717c23ddd35 100644 (file)
@@ -102,7 +102,7 @@ public class ReachTuple extends Canonical {
   }
 
 
-  public boolean equals( Object o ) {
+  public boolean equalsSpecific( Object o ) {
     if( o == null ) {
       return false;
     }
index 45899d4d7922f41899802307aefd9fe8bc20d04f..487230594ec93d7f8b4bee1d72c96fda04fc34a0 100644 (file)
@@ -16,7 +16,8 @@ BUILDSCRIPT=~/research/Robust/src/buildscript
 #SNAPFLAGS= -disjoint-debug-snap-method innerKMeansSetting 1 20 true
 
 
-BSFLAGS= -recover -justanalyze -disjoint -disjoint-k 1 -disjoint-write-dots final -disjoint-alias-file aliases.txt normal -enable-assertions
+#BSFLAGS= -recover -justanalyze -disjoint -disjoint-k 1 -disjoint-write-dots final -disjoint-alias-file aliases.txt normal -enable-assertions
+BSFLAGS= -recover -justanalyze -disjoint -disjoint-k 1 -disjoint-write-dots final -disjoint-alias-file aliases.txt normal -disjoint-release-mode
 
 all:
        $(BUILDSCRIPT) $(BSFLAGS) $(DEBUGFLAGS) $(SNAPFLAGS) *.java
index ba44145ea2c96b9e01f6e44b703dd0596bae9432..88ddfca88ea7f3f0dec8d616ad43d2b37a9fb3e7 100644 (file)
@@ -69,6 +69,7 @@ public class State {
   public String OWNERSHIPDEBUGCALLER=null;
   
   public boolean DISJOINT=false;
+  public boolean DISJOINTRELEASEMODE=false;
   public int DISJOINTALLOCDEPTH=3;
   public boolean DISJOINTWRITEDOTS=false;
   public boolean DISJOINTWRITEALL=false;
index a2c202688618ed7ab0ca5b521e0790a34d55a965..7471b41530aea60c64d632f8d1c1bfc9ba3544e3 100644 (file)
@@ -216,7 +216,11 @@ public class Main {
         } else {
           throw new Error("disjoint-debug-snap-method requires arguments <method symbol> <# visit to start> <# visits to snap> <T/F stop after>");
         }
+
+      } else if( option.equals( "-disjoint-release-mode" ) ) {
+        state.DISJOINTRELEASEMODE = true;
       }
+      
 
       else if (option.equals("-optional"))
        state.OPTIONAL=true;