From f5d91cf7e8345f4d4cd4747acfedbf6af80339b7 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 26 Jun 2009 19:39:08 +0000 Subject: [PATCH] lots of bug fixes --- Robust/src/Analysis/Liveness.java | 2 +- .../Analysis/Locality/DelayComputation.java | 13 +++++++++---- Robust/src/Analysis/ReachingDefs.java | 6 +++++- Robust/src/IR/Flat/FlatGlobalConvNode.java | 5 ++++- Robust/src/IR/Flat/FlatMethod.java | 18 ++++++++++++++++++ Robust/src/IR/Flat/FlatNode.java | 6 ++++-- Robust/src/IR/Flat/TempDescriptor.java | 7 +++++++ Robust/src/Runtime/STM/stmlookup.c | 2 ++ 8 files changed, 50 insertions(+), 9 deletions(-) diff --git a/Robust/src/Analysis/Liveness.java b/Robust/src/Analysis/Liveness.java index 6fe3a671..5e9c7d99 100644 --- a/Robust/src/Analysis/Liveness.java +++ b/Robust/src/Analysis/Liveness.java @@ -9,7 +9,7 @@ import java.util.Hashtable; public class Liveness { /* This methods takes in a FlatMethod and returns a map from a - * FlatNode to the set of live temps for that FlatNode.*/ + * FlatNode to the set of temps that are live into the FlatNode.*/ public static Hashtable> computeLiveTemps(FlatMethod fm) { Hashtable> nodetotemps=new Hashtable>(); diff --git a/Robust/src/Analysis/Locality/DelayComputation.java b/Robust/src/Analysis/Locality/DelayComputation.java index 5e0ffd1d..93b0489b 100644 --- a/Robust/src/Analysis/Locality/DelayComputation.java +++ b/Robust/src/Analysis/Locality/DelayComputation.java @@ -102,7 +102,8 @@ public class DelayComputation { secondpart.retainAll(atomicnodes); Set liveinto=new HashSet(); - Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm); + + Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm)); for(Iterator fnit=secondpart.iterator();fnit.hasNext();) { FlatNode fn=fnit.next(); @@ -131,8 +132,8 @@ public class DelayComputation { FlatMethod fm=state.getMethodFlat(md); Set exits=faen.getExits(); Hashtable> livemap=Liveness.computeLiveTemps(fm); - Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm); - + Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm, Liveness.computeLiveTemps(fm)); + Set atomicnodes=faen.getReachableSet(faen.getExits()); Set secondpart=new HashSet(getNotReady(lb)); @@ -176,7 +177,7 @@ public class DelayComputation { FlatMethod fm=state.getMethodFlat(md); Set exits=faen.getExits(); Hashtable> livemap=Liveness.computeLiveTemps(fm); - Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm); + Hashtable>> reachingdefs=ReachingDefs.computeReachingDefs(fm, livemap); Set atomicnodes=faen.getReachableSet(faen.getExits()); @@ -195,6 +196,10 @@ public class DelayComputation { for(Iterator tmpit=tempset.iterator();tmpit.hasNext();) { TempDescriptor tmp=tmpit.next(); Set fnset=reachmap.get(tmp); + if (fnset==null) { + System.out.println("null temp set for"+fn+" tmp="+tmp); + System.out.println(fm.printMethod()); + } for(Iterator fnit2=fnset.iterator();fnit2.hasNext();) { FlatNode fn2=fnit2.next(); if (secondpart.contains(fn2)) { diff --git a/Robust/src/Analysis/ReachingDefs.java b/Robust/src/Analysis/ReachingDefs.java index 56095d08..411017a7 100644 --- a/Robust/src/Analysis/ReachingDefs.java +++ b/Robust/src/Analysis/ReachingDefs.java @@ -10,7 +10,7 @@ public class ReachingDefs { /* This methods takes in a FlatMethod and returns a map from a * FlatNode to the set of live temps for that FlatNode.*/ - public static Hashtable>> computeReachingDefs(FlatMethod fm) { + public static Hashtable>> computeReachingDefs(FlatMethod fm, Hashtable> livemap) { Hashtable>> nodetotemps=new Hashtable>>(); Set toprocess=fm.getNodeSet(); @@ -21,12 +21,16 @@ public class ReachingDefs { Hashtable> tempset=new Hashtable>(); + Set livetempset=livemap.get(fn); + for(int i=0; i> prevtable=nodetotemps.get(fnprev); for(Iterator tmpit=prevtable.keySet().iterator();tmpit.hasNext();) { TempDescriptor tmp=tmpit.next(); + if (!livetempset.contains(tmp)) + continue; if (!tempset.containsKey(tmp)) tempset.put(tmp, new HashSet()); tempset.get(tmp).addAll(prevtable.get(tmp)); diff --git a/Robust/src/IR/Flat/FlatGlobalConvNode.java b/Robust/src/IR/Flat/FlatGlobalConvNode.java index f03815c8..3076a2e5 100644 --- a/Robust/src/IR/Flat/FlatGlobalConvNode.java +++ b/Robust/src/IR/Flat/FlatGlobalConvNode.java @@ -64,6 +64,9 @@ public class FlatGlobalConvNode extends FlatNode { } public TempDescriptor [] readsTemps() { - return new TempDescriptor[] {src}; + if (!makePtr&&!convert) + return new TempDescriptor[0]; + else + return new TempDescriptor[] {src}; } } diff --git a/Robust/src/IR/Flat/FlatMethod.java b/Robust/src/IR/Flat/FlatMethod.java index 6fdc29bb..96a83ade 100644 --- a/Robust/src/IR/Flat/FlatMethod.java +++ b/Robust/src/IR/Flat/FlatMethod.java @@ -94,6 +94,22 @@ public class FlatMethod extends FlatNode { return flatExit; } + public void check() { + Set set=getNodeSet(); + for(Iterator setit=set.iterator();setit.hasNext();) { + FlatNode fn=setit.next(); + for(int i=0;i getNodeSet() { @@ -106,6 +122,8 @@ public class FlatMethod extends FlatNode { visited.add(fn); for(int i=0; i (dc_c_threshold)) { //Resize -- 2.34.1