3 import java.util.Iterator;
\r
4 import java.util.Map;
\r
6 import com.ibm.wala.ipa.callgraph.AnalysisCache;
\r
7 import com.ibm.wala.ipa.callgraph.AnalysisOptions;
\r
8 import com.ibm.wala.ipa.callgraph.AnalysisScope;
\r
9 import com.ibm.wala.ipa.callgraph.CGNode;
\r
10 import com.ibm.wala.ipa.callgraph.CallGraph;
\r
11 import com.ibm.wala.ipa.callgraph.CallGraphBuilder;
\r
12 import com.ibm.wala.ipa.callgraph.Entrypoint;
\r
13 import com.ibm.wala.ipa.callgraph.impl.Util;
\r
14 import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
\r
15 import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
\r
16 import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
\r
17 import com.ibm.wala.ipa.cha.ClassHierarchy;
\r
18 import com.ibm.wala.ipa.modref.ModRef;
\r
19 import com.ibm.wala.ipa.slicer.HeapExclusions;
\r
20 import com.ibm.wala.ipa.slicer.PDG;
\r
21 import com.ibm.wala.ipa.slicer.Statement;
\r
22 import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;
\r
23 import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;
\r
24 import com.ibm.wala.util.config.AnalysisScopeReader;
\r
25 import com.ibm.wala.util.intset.OrdinalSet;
\r
26 import com.ibm.wala.util.io.FileProvider;
\r
28 import demo.util.DemoUtil;
\r
30 public class ControlAndDataDependencePerformance {
\r
32 public static void main(String[] args) {
\r
34 String appJar = "bin/demo/testdata";
\r
35 // String appJar = "C:\\Users\\t-hatano\\git\\soba-core\\bin";
\r
36 AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));
\r
38 ClassHierarchy cha = ClassHierarchy.make(scope);
\r
40 Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);
\r
41 AnalysisOptions options = new AnalysisOptions(scope, entrypoints);
\r
43 // build the call graph
\r
44 CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);
\r
45 CallGraph cg = cgb.makeCallGraph(options, null);
\r
46 PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();
\r
48 for (int i = 0; i < cg.getMaxNumber(); i++) {
\r
49 CGNode node = cg.getNode(i);
\r
50 DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;
\r
51 ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;
\r
52 ModRef modRef = ModRef.make();
\r
53 HeapExclusions exclusions = null;
\r
54 Map<CGNode, OrdinalSet<PointerKey>> mod = null;
\r
55 Map<CGNode, OrdinalSet<PointerKey>> ref = null;
\r
56 PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);
\r
58 for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {
\r
59 Statement s1 = itr.next();
\r
60 for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {
\r
61 Statement s2 = succs.next();
\r
62 // System.out.println(s1.toString() + " -> " + s2.toString());
\r
66 } catch (Exception e) {
\r
67 e.printStackTrace();
\r