From: bdemsky Date: Fri, 27 Mar 2009 00:26:40 +0000 (+0000) Subject: hack loop optimizations X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1220a6644e80369b6bfd5b4c3d3b59d69b2f2980;p=IRC.git hack loop optimizations --- diff --git a/Robust/src/Analysis/Locality/LocalityAnalysis.java b/Robust/src/Analysis/Locality/LocalityAnalysis.java index e4279892..c1811e5b 100644 --- a/Robust/src/Analysis/Locality/LocalityAnalysis.java +++ b/Robust/src/Analysis/Locality/LocalityAnalysis.java @@ -576,11 +576,6 @@ public class LocalityAnalysis { currtable.put(fon.getDest(), srcvalue); } - void processOffsetNode(FlatOffsetNode fon, Hashtable currtable) { - /* Just propagate value */ - currtable.put(fon.getDst(), LOCAL); - } - void processCastNode(FlatCastNode fcn, Hashtable currtable) { currtable.put(fcn.getDst(), currtable.get(fcn.getSrc())); } @@ -593,6 +588,10 @@ public class LocalityAnalysis { currtable.put(fln.getDst(), LOCAL); } + void processOffsetNode(FlatOffsetNode fln, Hashtable currtable) { + currtable.put(fln.getDst(), LOCAL); + } + void processReturnNode(LocalityBinding lb, FlatReturnNode frn, Hashtable currtable) { if(frn.getReturnTemp()!=null) { Integer returntype=currtable.get(frn.getReturnTemp()); diff --git a/Robust/src/Analysis/Loops/DomTree.java b/Robust/src/Analysis/Loops/DomTree.java new file mode 100644 index 00000000..aef079de --- /dev/null +++ b/Robust/src/Analysis/Loops/DomTree.java @@ -0,0 +1,100 @@ +package Analysis.Loops; +import java.util.Set; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Vector; +import java.util.Stack; +import IR.Flat.FlatNode; + +public class DomTree { + Hashtable domtable; + Vector vec; + Hashtable vecindex; + Hashtable> childtree; + + public DomTree(FlatMethod fm) { + analyze(fm); + } + + public FlatNode idom(FlatNode fn) { + return domtable.get(fn); + } + + public Set children(FlatNode fn) { + return childtree(fn); + } + + public void analyze(FlatMethod fm) { + DFS(fm); + domtable=new Hashtable(); + domtable.put(fm,fm); + HashSet set=new HashSet (); + set.add(fm); + childtree.put(fm,set); + + boolean changed=true; + while(changed) { + changed=false; + for(int i=vec.size()-2;i>=0;i--) { + FlatNode fn=vec.elementAt(i); + FlatNode dom=null; + for(int j=0;j()); + childtree.get(dom).add(fn); + changed=true; + } + } + } + } + + public FlatNode intersect(FlatNode fa, FlatNode fb) { + int ifa=vecindex.get(fa).intValue(); + int ifb=vecindex.get(fb).intValue(); + while(ifa!=ifb) { + while (ifa(); + vecindex=new Hashtable(); + HashSet visited=new HashSet(); + Stack stack=new Stack(); + stack.push(fm); + visited.add(next); + mainloop: + while(!stack.isEmpty()) { + FlatNode fn=stack.peek(); + for(int i=0;i