From a5a2b727c1dd793a1c5766291a4668c73bb253c6 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Sat, 20 Jun 2009 10:47:26 +0000 Subject: [PATCH] check in reaching defs analysis --- Robust/src/Analysis/ReachingDefs.java | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Robust/src/Analysis/ReachingDefs.java diff --git a/Robust/src/Analysis/ReachingDefs.java b/Robust/src/Analysis/ReachingDefs.java new file mode 100644 index 00000000..56095d08 --- /dev/null +++ b/Robust/src/Analysis/ReachingDefs.java @@ -0,0 +1,54 @@ +package Analysis; + +import IR.Flat.*; +import java.util.HashSet; +import java.util.Set; +import java.util.Iterator; +import java.util.Hashtable; + +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) { + Hashtable>> nodetotemps=new Hashtable>>(); + + Set toprocess=fm.getNodeSet(); + + while(!toprocess.isEmpty()) { + FlatNode fn=toprocess.iterator().next(); + toprocess.remove(fn); + + Hashtable> tempset=new Hashtable>(); + + for(int i=0; i> prevtable=nodetotemps.get(fnprev); + for(Iterator tmpit=prevtable.keySet().iterator();tmpit.hasNext();) { + TempDescriptor tmp=tmpit.next(); + if (!tempset.containsKey(tmp)) + tempset.put(tmp, new HashSet()); + tempset.get(tmp).addAll(prevtable.get(tmp)); + } + } + } + + TempDescriptor writes[]=fn.writesTemps(); + for(int i=0;i s=new HashSet(); + s.add(fn); + tempset.put(writes[i],s); + } + + if (!nodetotemps.containsKey(fn)|| + !nodetotemps.get(fn).equals(tempset)) { + nodetotemps.put(fn, tempset); + for(int i=0; i