From 27ad6d02ced6d4bfc539a414559909616df81c58 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 26 Jun 2009 06:28:27 +0000 Subject: [PATCH] optimizations --- .../Analysis/Locality/LocalityAnalysis.java | 23 +++++++++++-------- .../Analysis/Locality/LocalityBinding.java | 4 ++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Robust/src/Analysis/Locality/LocalityAnalysis.java b/Robust/src/Analysis/Locality/LocalityAnalysis.java index 7ceab573..abd14d8e 100644 --- a/Robust/src/Analysis/Locality/LocalityAnalysis.java +++ b/Robust/src/Analysis/Locality/LocalityAnalysis.java @@ -1,5 +1,6 @@ package Analysis.Locality; +import Analysis.Liveness; import java.util.*; import Analysis.CallGraph.CallGraph; import IR.SymbolTable; @@ -297,6 +298,7 @@ public class LocalityAnalysis { FlatMethod fm=state.getMethodFlat(md); HashSet tovisit=new HashSet(); tovisit.add(fm.getNext(0)); + { // Build table for initial node Hashtable table=new Hashtable(); @@ -314,9 +316,12 @@ public class LocalityAnalysis { } } + Hashtable> livemap=Liveness.computeLiveTemps(fm); + while(!tovisit.isEmpty()) { FlatNode fn=tovisit.iterator().next(); tovisit.remove(fn); + Set liveset=livemap.get(fn); Hashtable currtable=new Hashtable(); int atomicstate=0; for(int i=0; i prevtable=temptable.get(prevnode); for(Iterator tempit=prevtable.keySet().iterator(); tempit.hasNext();) { TempDescriptor temp=tempit.next(); + if (!liveset.contains(temp)) + continue; Integer tmpint=prevtable.get(temp); Integer oldint=currtable.containsKey(temp) ? currtable.get(temp) : STMEITHER; Integer newint=mergestm(tmpint, oldint); @@ -512,6 +519,7 @@ public class LocalityAnalysis { lb.setParent(currlb); lbtovisit.add(lb); + System.out.println("New lb:"+lb); discovered.put(lb, lb); if (!classtolb.containsKey(lb.getMethod().getClassDesc())) classtolb.put(lb.getMethod().getClassDesc(), new HashSet()); @@ -531,7 +539,7 @@ public class LocalityAnalysis { calldep.put(currlb, new HashSet()); calldep.get(currlb).add(lb); } - if (fc.getReturnTemp()!=null) { + if (fc.getReturnTemp()!=null&&fc.getReturnTemp().getType().isPtr()) { currtable.put(fc.getReturnTemp(), currreturnval); } } @@ -539,18 +547,15 @@ public class LocalityAnalysis { void processFieldNodeSTM(LocalityBinding lb, FlatFieldNode ffn, Hashtable currtable) { Integer type=currtable.get(ffn.getSrc()); TempDescriptor dst=ffn.getDst(); + if (!ffn.getDst().getType().isPtr()) + return; + if (type.equals(SCRATCH)) { currtable.put(dst,SCRATCH); } else if (type.equals(NORMAL)) { - if (ffn.getField().getType().isPrimitive()&&!ffn.getField().getType().isArray()) - currtable.put(dst, SCRATCH); // primitives are local - else - currtable.put(dst, NORMAL); + currtable.put(dst, NORMAL); } else if (type.equals(STMEITHER)) { - if (ffn.getField().getType().isPrimitive()&&!ffn.getField().getType().isArray()) - currtable.put(dst, SCRATCH); // primitives are local - else - currtable.put(dst, STMEITHER); + currtable.put(dst, STMEITHER); } else if (type.equals(STMCONFLICT)) { throw new Error("Access to object that could be either normal or scratch in context:\n"+ffn+" "+lb.getExplanation()); } diff --git a/Robust/src/Analysis/Locality/LocalityBinding.java b/Robust/src/Analysis/Locality/LocalityBinding.java index 52dc1490..58545066 100644 --- a/Robust/src/Analysis/Locality/LocalityBinding.java +++ b/Robust/src/Analysis/Locality/LocalityBinding.java @@ -105,7 +105,7 @@ public class LocalityBinding { else if (isglobal[i].equals(LocalityAnalysis.CONFLICT)) st+="conflict "; else - st+="["+isglobalthis+"]"; + st+="["+isglobal[i]+"]"; return st; } @@ -158,7 +158,7 @@ public class LocalityBinding { return b==null; } else if (b==null) { //a is not null - return false; + return a==null; } else return a.equals(b); } -- 2.34.1