3 import java.util.Map;
\r
6 import soot.BodyTransformer;
\r
7 import soot.PackManager;
\r
8 import soot.PhaseOptions;
\r
9 import soot.Transform;
\r
10 import soot.toolkits.graph.ExceptionalUnitGraph;
\r
11 import soot.toolkits.graph.UnitGraph;
\r
12 import soot.toolkits.graph.pdg.HashMutablePDG;
\r
13 import soot.toolkits.graph.pdg.PDGNode;
\r
14 import soot.toolkits.graph.pdg.ProgramDependenceGraph;
\r
15 import demo.util.MemoryInfo;
\r
17 public class ControlAndDataDependencePerformance {
\r
19 public static void main(String[] args) {
\r
20 PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {
\r
22 protected void internalTransform(Body body, String phase, Map options) {
\r
24 UnitGraph graph = new ExceptionalUnitGraph(body);
\r
25 ProgramDependenceGraph pdg = new HashMutablePDG(graph);
\r
26 for (PDGNode node1: pdg.getNodes()) {
\r
27 for (PDGNode node2: pdg.getDependents(node1)) {
\r
28 // System.out.println(node1.toShortString() + " -> " + node2.toShortString());
\r
31 } catch (RuntimeException e) {
\r
32 System.err.println(body.getMethod());
\r
36 PhaseOptions.v().setPhaseOption("jap.npc", "on");
\r
38 long start = System.currentTimeMillis();
\r
39 soot.Main.main(args);
\r
40 long end = System.currentTimeMillis();
\r
42 System.err.println((end - start) + " [ms]");
\r
43 System.err.println(MemoryInfo.getMemoryInfo());
\r