From 3cb61d33646a9e46e9b3fd136272313912cf12b2 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Thu, 24 Mar 2011 07:32:41 +0000 Subject: [PATCH] Bug fix...supposed to pass in bsm into Pointer analysis... --- .../src/Analysis/OoOJava/OoOJavaAnalysis.java | 4 +- Robust/src/Analysis/Pointer/Pointer.java | 4 +- .../src/IR/Flat/RuntimeConflictResolver.java | 59 +++++++++---------- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/Robust/src/Analysis/OoOJava/OoOJavaAnalysis.java b/Robust/src/Analysis/OoOJava/OoOJavaAnalysis.java index 8586cf34..3162ab22 100644 --- a/Robust/src/Analysis/OoOJava/OoOJavaAnalysis.java +++ b/Robust/src/Analysis/OoOJava/OoOJavaAnalysis.java @@ -185,7 +185,7 @@ public class OoOJavaAnalysis { // 5th pass, use disjointness with NO FLAGGED REGIONS // to compute taints and effects if (state.POINTER) { - disjointAnalysisTaints = new Pointer(state, typeUtil, callGraph, rblockRel, liveness); + disjointAnalysisTaints = new Pointer(state, typeUtil, callGraph, rblockRel, liveness, buildStateMachines); ((Pointer)disjointAnalysisTaints).doAnalysis(); } else disjointAnalysisTaints = @@ -274,7 +274,7 @@ public class OoOJavaAnalysis { writeConflictGraph(); } catch (IOException e) {} } - + State.logEvent("OoOJavaAnalysis completed"); } diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index 8e44798b..3e30f2c4 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -39,14 +39,14 @@ public class Pointer implements HeapAnalysis{ EffectsAnalysis effectsAnalysis; Accessible accessible; - public Pointer(State state, TypeUtil typeUtil, CallGraph callGraph, RBlockRelationAnalysis taskAnalysis, Liveness liveness) { + public Pointer(State state, TypeUtil typeUtil, CallGraph callGraph, RBlockRelationAnalysis taskAnalysis, Liveness liveness, BuildStateMachines bsm) { this(state, typeUtil); this.callGraph=callGraph; this.OoOJava=true; this.taskAnalysis=taskAnalysis; this.effectsAnalysis=new EffectsAnalysis(); effectsAnalysis.state=state; - effectsAnalysis.buildStateMachines=new BuildStateMachines(); + effectsAnalysis.buildStateMachines=bsm; accessible=new Accessible(state, callGraph, taskAnalysis, liveness); accessible.doAnalysis(); State.logEvent("Done Writing Accessible Analysis"); diff --git a/Robust/src/IR/Flat/RuntimeConflictResolver.java b/Robust/src/IR/Flat/RuntimeConflictResolver.java index 456d0a8d..a6e5246d 100644 --- a/Robust/src/IR/Flat/RuntimeConflictResolver.java +++ b/Robust/src/IR/Flat/RuntimeConflictResolver.java @@ -398,8 +398,7 @@ public class RuntimeConflictResolver { flatname = fn.toString(); } - return "traverse___" + invar.getSafeSymbol() + - removeInvalidChars(flatname) + "___("+varString+");"; + return "traverse___" + invar.getSafeSymbol() + removeInvalidChars(flatname) + "___("+varString+");"; } public String removeInvalidChars(String in) { @@ -451,8 +450,8 @@ public class RuntimeConflictResolver { } private void printMasterTraverserInvocation() { - headerFile.println("\nint tasktraverse(SESEcommon * record);"); - cFile.println("\nint tasktraverse(SESEcommon * record) {"); + headerFile.println("int tasktraverse(SESEcommon * record);"); + cFile.println("int tasktraverse(SESEcommon * record) {"); cFile.println(" if(!CAS(&record->rcrstatus,1,2)) {"); //release traverser reference...no traversal necessary @@ -473,32 +472,26 @@ public class RuntimeConflictResolver { for(int i=0;ircrstatus!=0)"); - } - - if(globalState.NOSTALLTR && isValidToPrune){ - cFile.println(" // " + this.getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)); - }else{ - cFile.println(" " + this.getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)); - } + /* In some cases we don't want to a dynamic traversal if it is + * unlikely to increase parallelism...these are cases where we + * are just enabling a stall site to possible clear faster*/ + + boolean isValidToPrune=true; + for( FlatSESEEnterNode parentSESE: fsen.getParents() ) { + ConflictGraph graph = oooa.getConflictGraph(parentSESE); + String id = tmp + "_sese" + fsen.getPrettyIdentifier(); + ConflictNode node = graph.getId2cn().get(id); + isValidToPrune &= node.IsValidToPrune(); + } + if (i!=0) { + cFile.println(" if (record->rcrstatus!=0)"); + } + + if(globalState.NOSTALLTR && isValidToPrune) { + cFile.println(" /* " + getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)+"*/"); + } else { + cFile.println(" " + getTraverserInvocation(tmp, "rec->"+tmp+", rec", fsen)); + } } //release traverser reference...traversal finished... //executing thread will clean bins for us @@ -515,13 +508,15 @@ public class RuntimeConflictResolver { cFile.println( " case -" + getTraverserID(var, stallsite)+ ": {"); cFile.println( " SESEstall * rec=(SESEstall*) record;"); - cFile.println( " " + this.getTraverserInvocation(var, "rec->___obj___, rec", stallsite)+";"); + cFile.println( " " + getTraverserInvocation(var, "rec->___obj___, rec", stallsite)+";"); cFile.println( " record->rcrstatus=0;"); cFile.println( " }"); cFile.println(" break;"); } - cFile.println(" default:\n printf(\"Invalid SESE ID was passed in: %d.\\n\",record->classID);\n break;"); + cFile.println(" default:"); + cFile.println(" printf(\"Invalid SESE ID was passed in: %d.\\n\",record->classID);"); + cFile.println(" break;"); cFile.println(" }"); cFile.println("}"); } -- 2.34.1