4 import java.util.Arrays;
5 import java.util.HashSet;
8 import java.util.Hashtable;
10 public class Liveness {
11 /* This methods takes in a FlatMethod and returns a map from a
12 * FlatNode to the set of live temps for that FlatNode.*/
14 public static Hashtable<FlatNode, Set<TempDescriptor>> computeLiveTemps(FlatMethod fm) {
15 Hashtable<FlatNode, Set<TempDescriptor>> nodetotemps=new Hashtable<FlatNode, Set<TempDescriptor>>();
17 Set<FlatNode> toprocess=fm.getNodeSet();
19 while(!toprocess.isEmpty()) {
20 FlatNode fn=toprocess.iterator().next();
23 List<TempDescriptor> reads=Arrays.asList(fn.readsTemps());
24 List<TempDescriptor> writes=Arrays.asList(fn.writesTemps());
26 HashSet<TempDescriptor> tempset=new HashSet<TempDescriptor>();
27 for(int i=0; i<fn.numNext(); i++) {
28 FlatNode fnnext=fn.getNext(i);
29 if (nodetotemps.containsKey(fnnext))
30 tempset.addAll(nodetotemps.get(fnnext));
32 tempset.removeAll(writes);
33 tempset.addAll(reads);
34 if (!nodetotemps.containsKey(fn)||
35 !nodetotemps.get(fn).equals(tempset)) {
36 nodetotemps.put(fn, tempset);
37 for(int i=0; i<fn.numPrev(); i++)
38 toprocess.add(fn.getPrev(i));