From d8e96454e07dacf1dc183aea5b89ffd9d7725f19 Mon Sep 17 00:00:00 2001 From: jjenista Date: Thu, 25 Mar 2010 21:56:13 +0000 Subject: [PATCH 1/1] new Canonical hash and equals, also running with assertions disabled, barely improved --- Robust/src/Analysis/Disjoint/AllocSite.java | 13 ++++++++ Robust/src/Analysis/Disjoint/Canonical.java | 33 +++++++++++++++++-- Robust/src/Analysis/Disjoint/ChangeSet.java | 2 +- Robust/src/Analysis/Disjoint/ChangeTuple.java | 2 +- .../Analysis/Disjoint/DisjointAnalysis.java | 6 +++- Robust/src/Analysis/Disjoint/ExistPred.java | 2 +- .../src/Analysis/Disjoint/ExistPredSet.java | 2 +- Robust/src/Analysis/Disjoint/ReachSet.java | 2 +- Robust/src/Analysis/Disjoint/ReachState.java | 2 +- Robust/src/Analysis/Disjoint/ReachTuple.java | 2 +- Robust/src/Benchmarks/disjoint/makefile | 3 +- Robust/src/IR/State.java | 1 + Robust/src/Main/Main.java | 4 +++ 13 files changed, 63 insertions(+), 11 deletions(-) diff --git a/Robust/src/Analysis/Disjoint/AllocSite.java b/Robust/src/Analysis/Disjoint/AllocSite.java index ee97eb52..37b07b21 100644 --- a/Robust/src/Analysis/Disjoint/AllocSite.java +++ b/Robust/src/Analysis/Disjoint/AllocSite.java @@ -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; diff --git a/Robust/src/Analysis/Disjoint/Canonical.java b/Robust/src/Analysis/Disjoint/Canonical.java index bd4b8ee1..ffc68f2b 100644 --- a/Robust/src/Analysis/Disjoint/Canonical.java +++ b/Robust/src/Analysis/Disjoint/Canonical.java @@ -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 op2result = new Hashtable(); diff --git a/Robust/src/Analysis/Disjoint/ChangeSet.java b/Robust/src/Analysis/Disjoint/ChangeSet.java index 50d4a151..0eeb32e1 100644 --- a/Robust/src/Analysis/Disjoint/ChangeSet.java +++ b/Robust/src/Analysis/Disjoint/ChangeSet.java @@ -64,7 +64,7 @@ public class ChangeSet extends Canonical { } - public boolean equals(Object o) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/ChangeTuple.java b/Robust/src/Analysis/Disjoint/ChangeTuple.java index 99bf8326..ce0383c9 100644 --- a/Robust/src/Analysis/Disjoint/ChangeTuple.java +++ b/Robust/src/Analysis/Disjoint/ChangeTuple.java @@ -65,7 +65,7 @@ public class ChangeTuple extends Canonical } - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/DisjointAnalysis.java b/Robust/src/Analysis/Disjoint/DisjointAnalysis.java index 021446d5..48724298 100644 --- a/Robust/src/Analysis/Disjoint/DisjointAnalysis.java +++ b/Robust/src/Analysis/Disjoint/DisjointAnalysis.java @@ -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; diff --git a/Robust/src/Analysis/Disjoint/ExistPred.java b/Robust/src/Analysis/Disjoint/ExistPred.java index 5c9e7d4f..33b5ada0 100644 --- a/Robust/src/Analysis/Disjoint/ExistPred.java +++ b/Robust/src/Analysis/Disjoint/ExistPred.java @@ -315,7 +315,7 @@ public class ExistPred extends Canonical { - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/ExistPredSet.java b/Robust/src/Analysis/Disjoint/ExistPredSet.java index 9e07aee0..913c1df1 100644 --- a/Robust/src/Analysis/Disjoint/ExistPredSet.java +++ b/Robust/src/Analysis/Disjoint/ExistPredSet.java @@ -89,7 +89,7 @@ public class ExistPredSet extends Canonical { } - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/ReachSet.java b/Robust/src/Analysis/Disjoint/ReachSet.java index 97a913f8..01882156 100644 --- a/Robust/src/Analysis/Disjoint/ReachSet.java +++ b/Robust/src/Analysis/Disjoint/ReachSet.java @@ -180,7 +180,7 @@ public class ReachSet extends Canonical { } - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/ReachState.java b/Robust/src/Analysis/Disjoint/ReachState.java index aacd7aac..41b839a4 100644 --- a/Robust/src/Analysis/Disjoint/ReachState.java +++ b/Robust/src/Analysis/Disjoint/ReachState.java @@ -112,7 +112,7 @@ public class ReachState extends Canonical { } - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Analysis/Disjoint/ReachTuple.java b/Robust/src/Analysis/Disjoint/ReachTuple.java index 1d09abfa..409930c7 100644 --- a/Robust/src/Analysis/Disjoint/ReachTuple.java +++ b/Robust/src/Analysis/Disjoint/ReachTuple.java @@ -102,7 +102,7 @@ public class ReachTuple extends Canonical { } - public boolean equals( Object o ) { + public boolean equalsSpecific( Object o ) { if( o == null ) { return false; } diff --git a/Robust/src/Benchmarks/disjoint/makefile b/Robust/src/Benchmarks/disjoint/makefile index 45899d4d..48723059 100644 --- a/Robust/src/Benchmarks/disjoint/makefile +++ b/Robust/src/Benchmarks/disjoint/makefile @@ -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 diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index ba44145e..88ddfca8 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -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; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index a2c20268..7471b415 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -216,7 +216,11 @@ public class Main { } else { throw new Error("disjoint-debug-snap-method requires arguments <# visit to start> <# visits to snap> "); } + + } else if( option.equals( "-disjoint-release-mode" ) ) { + state.DISJOINTRELEASEMODE = true; } + else if (option.equals("-optional")) state.OPTIONAL=true; -- 2.34.1