From: bdemsky Date: Fri, 27 Mar 2009 01:32:11 +0000 (+0000) Subject: DefUse analysis X-Git-Url: http://plrg.eecs.uci.edu/git/?p=IRC.git;a=commitdiff_plain;h=9afc17cac32db8203e37c725e8ac720f33b8f780 DefUse analysis --- diff --git a/Robust/src/Analysis/Loops/UseDef.java b/Robust/src/Analysis/Loops/UseDef.java new file mode 100644 index 00000000..b72a05a9 --- /dev/null +++ b/Robust/src/Analysis/Loops/UseDef.java @@ -0,0 +1,92 @@ +package Analysis.Loops; + +import IR.Flat.*; +import java.util.HashSet; +import java.util.Hashtable; + +public class UseDef{ + Hashtable> defs; + Hashtable> uses; + + public UseDef(FlatMethod fm) { + analyze(fm); + } + + public void analyze(FlatMethod fm) { + Hashtable> tmp=new Hashtable>(); + HashSet toanalyze=new HashSet(); + toanalyze.addAll(fm.getNodeSet()); + while(!toanalyze.isEmpty()) { + FlatNode fn=toanalyze.iterator().next(); + TempDescriptor[] fnwrites=fn.writesTemps(); + + toanalyze.remove(fn); + HashSet s=new HashSet(); + for(int i=0;i prevs=tmp.get(prev); + nexttfp: + for(Iterator tfit=prevs.iterator();tfit.hasNext();) { + TempFlatPair tfp=tfit.next(); + for(int j=0;j fset=fm.getNodeSet(); + defs=new Hashtable>(); + uses=new Hashtable>(); + for(Iterator fnit=fset.iterator();fnit.hasNext();) { + FlatNode fn=fnit.next(); + TempDescriptor[] fnreads=fn.readsTemps(); + Set tfpset=tmp.get(fn); + + for(int i=0;i tfpit=tfpset.iterator();tfpit.hasNext();) { + TempFlatPair tfp=tfpit.next(); + if (tfp.t==readt) { + //have use + if (!uses.containsKey(tfp)) + uses.put(tfp,new HashSet()); + uses.get(tfp).add(fn); + TempFlatPair readtfp=new TempFlatPair(readt,fn); + if (!defs.containsKey(readtfp)) + defs.put(readtfp,new HashSet()); + defs.get(readtfp).add(tfp.f); + } + } + } + } + } +} + +class TempFlatPair { + FlatNode f; + TempDescriptor t; + TempFlatPair(TempDescriptor t, FlatNode f) { + this.t=t; + this.f=f; + } + + public int hashCode() { + return f.hashCode()^t.hashCode(); + } + public boolean equals(Object o) { + TempFlatPair tf=(TempFlatPair)o; + return t.equals(tf.t)&&f.equals(tf.f); + } +} \ No newline at end of file