MethodInfo[] callees = ch.resolveCall(cs);\r
if (callees.length > 0) {\r
for (MethodInfo callee: callees) {\r
-// System.out.println(m.toLongString() + " may call " + callee.toLongString());\r
+// System.out.println(" [inside] " + m.toLongString() + " may call " + callee.toLongString());\r
}\r
} else {\r
-// System.out.println(m.toString() + " may call " + cs.toString());\r
+// System.out.println(" [outside] " + m.toString() + " may call " + cs.toString());\r
}\r
}\r
}\r
+++ /dev/null
-package demo.soba;\r
-\r
-import demo.util.MemoryInfo;\r
-import soba.core.ClassInfo;\r
-import soba.core.JavaProgram;\r
-import soba.core.MethodInfo;\r
-import soba.util.IntPairProc;\r
-import soba.util.files.ClasspathUtil;\r
-import soba.util.graph.DirectedGraph;\r
-\r
-public class ControlDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- args = new String[]{"bin/demo/testdata"};\r
- \r
- long start = System.currentTimeMillis();\r
- \r
- JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
- for (ClassInfo c: program.getClasses()) {\r
- for (MethodInfo m: c.getMethods()) {\r
- DirectedGraph cd = m.getControlDependence();\r
- cd.forEachEdge(new IntPairProc() {\r
- @Override\r
- public boolean execute(int elem1, int elem2) {\r
-// System.out.println(elem1 + " -> " + elem2);\r
- return true;\r
- }\r
- });\r
- }\r
- }\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- }\r
-\r
-}\r
+++ /dev/null
-package demo.soba;\r
-\r
-import demo.util.MemoryInfo;\r
-import soba.core.ClassInfo;\r
-import soba.core.JavaProgram;\r
-import soba.core.MethodInfo;\r
-import soba.core.method.DataDependence;\r
-import soba.core.method.DataFlowEdge;\r
-import soba.util.files.ClasspathUtil;\r
-\r
-public class DataDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- args = new String[]{"bin/demo/testdata"};\r
- \r
- long start = System.currentTimeMillis();\r
- \r
- JavaProgram program = new JavaProgram(ClasspathUtil.getClassList(args));\r
- for (ClassInfo c: program.getClasses()) {\r
- for (MethodInfo m: c.getMethods()) {\r
- DataDependence dd = m.getDataDependence();\r
- for (DataFlowEdge e: dd.getEdges()) {\r
-// System.out.println(e.toString());\r
- }\r
- }\r
- }\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- }\r
-\r
-}\r
import soot.Body;\r
import soot.BodyTransformer;\r
import soot.PackManager;\r
-import soot.PhaseOptions;\r
import soot.Transform;\r
import soot.toolkits.graph.ExceptionalUnitGraph;\r
import soot.toolkits.graph.UnitGraph;\r
PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
@Override\r
protected void internalTransform(Body body, String phase, Map options) {\r
- try {\r
- UnitGraph graph = new ExceptionalUnitGraph(body);\r
- ProgramDependenceGraph pdg = new HashMutablePDG(graph);\r
- for (PDGNode node1: pdg.getNodes()) {\r
- for (PDGNode node2: pdg.getDependents(node1)) {\r
-// System.out.println(node1.toShortString() + " -> " + node2.toShortString());\r
- }\r
+ UnitGraph graph = new ExceptionalUnitGraph(body);\r
+ ProgramDependenceGraph pdg = new HashMutablePDG(graph);\r
+ for (PDGNode node1: pdg.getNodes()) {\r
+ for (PDGNode node2: pdg.getDependents(node1)) {\r
+// System.out.println(node1.toShortString() + " -> " + node2.toShortString());\r
}\r
- } catch (RuntimeException e) {\r
- System.err.println(body.getMethod());\r
}\r
}\r
}));\r
- PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
\r
long start = System.currentTimeMillis();\r
soot.Main.main(args);\r
+++ /dev/null
-package demo.soot;\r
-\r
-import java.io.File;\r
-import java.util.Arrays;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import soot.Body;\r
-import soot.BodyTransformer;\r
-import soot.PackManager;\r
-import soot.PhaseOptions;\r
-import soot.Transform;\r
-import soot.toolkits.graph.ExceptionalUnitGraph;\r
-import soot.toolkits.graph.UnitGraph;\r
-import soot.toolkits.graph.pdg.ConditionalPDGNode;\r
-import soot.toolkits.graph.pdg.HashMutablePDG;\r
-import soot.toolkits.graph.pdg.PDGNode;\r
-import soot.toolkits.graph.pdg.ProgramDependenceGraph;\r
-import demo.util.DemoUtil;\r
-import demo.util.MemoryInfo;\r
-\r
-public class ControlDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- List<String> argsList = Arrays.asList(new String[]{\r
- "-cp",\r
- "bin" + File.pathSeparator + \r
- "bin/demo/testdata" + File.pathSeparator + \r
- DemoUtil.RT_PATH + File.pathSeparator +\r
- DemoUtil.JCE_PATH,\r
- "-whole-program",\r
- "-main-class",\r
- "demo.testdata.TestClass",//main-class\r
-// "-app",\r
-// "demo.testdata.TestClass",\r
-// "demo.testdata.TestClass",//argument classes\r
- "-p",\r
- "cg.cha",\r
- "apponly:true,verbose:true",\r
- "demo.testdata.TestClass"\r
-// "-keep-line-number"\r
- });\r
- \r
- PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
- @Override\r
- protected void internalTransform(Body body, String phase, Map options) {\r
- try {\r
- UnitGraph graph = new ExceptionalUnitGraph(body);\r
- ProgramDependenceGraph pdg = new HashMutablePDG(graph);\r
- for (PDGNode node1: pdg.getNodes()) {\r
- // Extracts only control-dependence edges\r
- if (node1 instanceof ConditionalPDGNode) {\r
- for (PDGNode node2: pdg.getDependents(node1)) {\r
-// System.out.println(node1.toShortString() + " -> " + node2.toShortString());\r
- }\r
- }\r
- }\r
- } catch (RuntimeException e) {\r
- System.err.println(body.getMethod());\r
- }\r
- }\r
- }));\r
-// Options.v().set_verbose(true);\r
- PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
- \r
- args = argsList.toArray(new String[0]);\r
-\r
- long start = System.currentTimeMillis();\r
- soot.Main.main(args);\r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- }\r
-\r
-}\r
+++ /dev/null
-package demo.soot;\r
-\r
-import java.io.File;\r
-import java.util.Arrays;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import demo.util.DemoUtil;\r
-import demo.util.MemoryInfo;\r
-import soot.Body;\r
-import soot.BodyTransformer;\r
-import soot.Local;\r
-import soot.PackManager;\r
-import soot.PhaseOptions;\r
-import soot.Transform;\r
-import soot.Unit;\r
-import soot.Value;\r
-import soot.ValueBox;\r
-import soot.toolkits.graph.BriefUnitGraph;\r
-import soot.toolkits.graph.ExceptionalUnitGraph;\r
-import soot.toolkits.graph.UnitGraph;\r
-import soot.toolkits.scalar.LiveLocals;\r
-import soot.toolkits.scalar.LocalDefs;\r
-import soot.toolkits.scalar.SimpleLiveLocals;\r
-import soot.toolkits.scalar.SmartLocalDefs;\r
-\r
-public class DataDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- List<String> argsList = Arrays.asList(new String[]{\r
- "-cp",\r
- "bin" + File.pathSeparator + \r
- "bin/demo/testdata" + File.pathSeparator + \r
- DemoUtil.RT_PATH + File.pathSeparator +\r
- DemoUtil.JCE_PATH,\r
- "-whole-program",\r
- "-main-class",\r
- "demo.testdata.TestClass",//main-class\r
-// "-app",\r
-// "demo.testdata.TestClass",\r
-// "demo.testdata.TestClass",//argument classes\r
- "-p",\r
- "cg.cha",\r
- "apponly:true,verbose:true",\r
- "demo.testdata.TestClass"\r
-// "-keep-line-number"\r
- });\r
- \r
- PackManager.v().getPack("jap").add(new Transform("jap.myTransform", new BodyTransformer() {\r
- @Override\r
- protected void internalTransform(Body body, String phase, Map options) {\r
-// UnitGraph graph = new ExceptionalUnitGraph(body);\r
- UnitGraph graph = new BriefUnitGraph(body);\r
- LiveLocals live = new SimpleLiveLocals(graph);\r
- LocalDefs defs = new SmartLocalDefs(graph, live);\r
-\r
- for (Unit u: body.getUnits()) {\r
- for (ValueBox vb: u.getUseBoxes()) {\r
- Value v = vb.getValue();\r
- if (v instanceof Local) {\r
- List<Unit> defUnits = defs.getDefsOfAt((Local) v, u);\r
- for (Unit def: defUnits) {\r
-// System.out.println(def.toString() + " -> " + u.toString());\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }));\r
-// Options.v().set_verbose(true);\r
- PhaseOptions.v().setPhaseOption("jap.npc", "on");\r
- \r
- args = argsList.toArray(new String[0]);\r
- \r
- long start = System.currentTimeMillis();\r
- soot.Main.main(args);\r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- }\r
-\r
-}\r
\r
public class ClassHierarchyPerformance {\r
\r
- public static void main(String[] args) {\r
- try {\r
- long start = System.currentTimeMillis();\r
- \r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
- Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
- AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
- CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
- CallGraph cg = builder.makeCallGraph(options, null);\r
- for (Iterator<CGNode> itr = cg.iterator(); itr.hasNext();) {\r
- CGNode caller = itr.next();\r
- for (Iterator<CGNode> callees = cg.getSuccNodes(caller); callees.hasNext();) {\r
- CGNode callee = callees.next();\r
- IMethod callerMethod = caller.getMethod();\r
- IMethod calleeMethod = callee.getMethod();\r
-// System.out.println(callerMethod.toString() + " -> " + calleeMethod.toString());\r
- }\r
+ public static void main(String[] args) throws Exception {\r
+ long start = System.currentTimeMillis();\r
+\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+ CallGraphBuilder builder = Util.makeZeroCFABuilder(options, new AnalysisCache(), cha, scope);\r
+ CallGraph cg = builder.makeCallGraph(options, null);\r
+ for (Iterator<CGNode> itr = cg.iterator(); itr.hasNext();) {\r
+ CGNode caller = itr.next();\r
+ for (Iterator<CGNode> callees = cg.getSuccNodes(caller); callees.hasNext();) {\r
+ CGNode callee = callees.next();\r
+ IMethod callerMethod = caller.getMethod();\r
+ IMethod calleeMethod = callee.getMethod();\r
+// System.out.println(callerMethod.toString() + " -> " + calleeMethod.toString());\r
}\r
- long end = System.currentTimeMillis();\r
- \r
- System.err.println((end - start) + " [ms]");\r
- System.err.println(MemoryInfo.getMemoryInfo());\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
}\r
+ long end = System.currentTimeMillis();\r
+\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
}\r
\r
}\r
\r
public class ControlAndDataDependencePerformance {\r
\r
- public static void main(String[] args) {\r
- try {\r
- long start = System.currentTimeMillis();\r
- \r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
- Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
- AnalysisCache cache = new AnalysisCache();\r
- AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
- CallGraphBuilder builder = Util.makeZeroCFABuilder(options, cache, cha, scope);\r
- CallGraph cg = builder.makeCallGraph(options, null);\r
- PointerAnalysis<InstanceKey> pa = null;\r
+ public static void main(String[] args) throws Exception {\r
+ long start = System.currentTimeMillis();\r
\r
- for (int i = 0; i < cg.getMaxNumber(); i++) {\r
- CGNode node = cg.getNode(i);\r
- DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
- ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
- ModRef modRef = ModRef.make();\r
- HeapExclusions exclusions = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
- PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
- for (Iterator<Statement> statements = pdg.iterator(); statements.hasNext();) {\r
- Statement s1 = statements.next();\r
- for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
- Statement s2 = succs.next();\r
-// System.out.println(s1.toString() + " -> " + s2.toString());\r
- }\r
+ AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(args[0], (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
+ ClassHierarchy cha = ClassHierarchy.make(scope);\r
+ Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
+ AnalysisCache cache = new AnalysisCache();\r
+ AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
+ CallGraphBuilder builder = Util.makeZeroCFABuilder(options, cache, cha, scope);\r
+ CallGraph cg = builder.makeCallGraph(options, null);\r
+ PointerAnalysis<InstanceKey> pa = null;\r
+\r
+ for (int i = 0; i < cg.getMaxNumber(); i++) {\r
+ CGNode node = cg.getNode(i);\r
+ DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
+ ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
+ ModRef modRef = ModRef.make();\r
+ HeapExclusions exclusions = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
+ Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
+ PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
+ for (Iterator<Statement> statements = pdg.iterator(); statements.hasNext();) {\r
+ Statement s1 = statements.next();\r
+ for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
+ Statement s2 = succs.next();\r
+// System.out.println(s1.toString() + " -> " + s2.toString());\r
}\r
}\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.err.println((end - start) + " [ms]");\r
- System.err.println(MemoryInfo.getMemoryInfo());\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
}\r
+\r
+ long end = System.currentTimeMillis();\r
+\r
+ System.err.println((end - start) + " [ms]");\r
+ System.err.println(MemoryInfo.getMemoryInfo());\r
}\r
\r
}\r
+++ /dev/null
-package demo.wala;\r
-\r
-import java.util.Iterator;\r
-\r
-import com.ibm.wala.cfg.cdg.ControlDependenceGraph;\r
-import com.ibm.wala.classLoader.IClass;\r
-import com.ibm.wala.classLoader.IMethod;\r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
-import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
-import com.ibm.wala.ipa.callgraph.impl.Everywhere;\r
-import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.ssa.IR;\r
-import com.ibm.wala.ssa.ISSABasicBlock;\r
-import com.ibm.wala.ssa.SSAInstruction;\r
-import com.ibm.wala.ssa.SSAOptions;\r
-import com.ibm.wala.util.config.AnalysisScopeReader;\r
-import com.ibm.wala.util.debug.Assertions;\r
-import com.ibm.wala.util.io.FileProvider;\r
-\r
-import demo.util.DemoUtil;\r
-\r
-public class ControlDependenceBasicBlockPeformance {\r
-\r
- public static void main(String[] args) {\r
- try {\r
- String appJar = "bin/demo/testdata";\r
- \r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
-\r
- for (Iterator<IClass> itr = cha.iterator(); itr.hasNext();) {\r
- IClass c = itr.next();\r
- for (IMethod m: c.getAllMethods()) {\r
- AnalysisOptions options = new AnalysisOptions();\r
- options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());\r
- AnalysisCache cache = new AnalysisCache();\r
- IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );\r
- if (ir == null) {\r
- Assertions.UNREACHABLE("Null IR for " + m);\r
- }\r
- ControlDependenceGraph<SSAInstruction, ISSABasicBlock> cdg = new ControlDependenceGraph<>(ir.getControlFlowGraph());\r
- for (int i = 0; i < cdg.getMaxNumber(); i++) {\r
- ISSABasicBlock b1 = cdg.getNode(i);\r
- for (Iterator<ISSABasicBlock> succs = cdg.getSuccNodes(b1); succs.hasNext();) {\r
- ISSABasicBlock b2 = succs.next();\r
-// System.out.println(b1.toString() + " -> " + b2.toString());\r
- }\r
- }\r
- }\r
- }\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
-}\r
+++ /dev/null
-package demo.wala;\r
-\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
-import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
-import com.ibm.wala.ipa.callgraph.CGNode;\r
-import com.ibm.wala.ipa.callgraph.CallGraph;\r
-import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
-import com.ibm.wala.ipa.callgraph.Entrypoint;\r
-import com.ibm.wala.ipa.callgraph.impl.Util;\r
-import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
-import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
-import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
-import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.ipa.modref.ModRef;\r
-import com.ibm.wala.ipa.slicer.HeapExclusions;\r
-import com.ibm.wala.ipa.slicer.PDG;\r
-import com.ibm.wala.ipa.slicer.Statement;\r
-import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
-import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
-import com.ibm.wala.util.config.AnalysisScopeReader;\r
-import com.ibm.wala.util.intset.OrdinalSet;\r
-import com.ibm.wala.util.io.FileProvider;\r
-\r
-import demo.util.DemoUtil;\r
-import demo.util.MemoryInfo;\r
-\r
-public class ControlDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- try {\r
- long start = System.currentTimeMillis();\r
- \r
- String appJar = "bin/demo/testdata";\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
- \r
- Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
- AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-\r
- // build the call graph\r
- CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
- CallGraph cg = cgb.makeCallGraph(options, null);\r
- PointerAnalysis<InstanceKey> pa = null;\r
-\r
- for (int i = 0; i < cg.getMaxNumber(); i++) {\r
- CGNode node = cg.getNode(i);\r
- DataDependenceOptions dOptions = DataDependenceOptions.NONE;\r
- ControlDependenceOptions cOptions = ControlDependenceOptions.NO_EXCEPTIONAL_EDGES;\r
- ModRef modRef = ModRef.make();\r
- HeapExclusions exclusions = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
- PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
- \r
- for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
- Statement s1 = itr.next();\r
- for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
- Statement s2 = succs.next();\r
-// System.out.println(s1.toString() + " -> " + s2.toString());\r
- }\r
- }\r
- }\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
-}\r
+++ /dev/null
-package demo.wala;\r
-\r
-import java.util.Iterator;\r
-import java.util.Map;\r
-\r
-import com.ibm.wala.ipa.callgraph.AnalysisCache;\r
-import com.ibm.wala.ipa.callgraph.AnalysisOptions;\r
-import com.ibm.wala.ipa.callgraph.AnalysisScope;\r
-import com.ibm.wala.ipa.callgraph.CGNode;\r
-import com.ibm.wala.ipa.callgraph.CallGraph;\r
-import com.ibm.wala.ipa.callgraph.CallGraphBuilder;\r
-import com.ibm.wala.ipa.callgraph.Entrypoint;\r
-import com.ibm.wala.ipa.callgraph.impl.Util;\r
-import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;\r
-import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;\r
-import com.ibm.wala.ipa.callgraph.propagation.PointerKey;\r
-import com.ibm.wala.ipa.cha.ClassHierarchy;\r
-import com.ibm.wala.ipa.modref.ModRef;\r
-import com.ibm.wala.ipa.slicer.HeapExclusions;\r
-import com.ibm.wala.ipa.slicer.PDG;\r
-import com.ibm.wala.ipa.slicer.Slicer.ControlDependenceOptions;\r
-import com.ibm.wala.ipa.slicer.Slicer.DataDependenceOptions;\r
-import com.ibm.wala.ipa.slicer.Statement;\r
-import com.ibm.wala.util.config.AnalysisScopeReader;\r
-import com.ibm.wala.util.intset.OrdinalSet;\r
-import com.ibm.wala.util.io.FileProvider;\r
-\r
-import demo.util.DemoUtil;\r
-import demo.util.MemoryInfo;\r
-\r
-public class DataDependencePerformance {\r
-\r
- public static void main(String[] args) {\r
- try {\r
- long start = System.currentTimeMillis();\r
- \r
- String appJar = "bin/demo/testdata";\r
- AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, (new FileProvider()).getFile(DemoUtil.REGRESSION_EXCLUSIONS));\r
-\r
- ClassHierarchy cha = ClassHierarchy.make(scope);\r
- \r
- Iterable<Entrypoint> entrypoints = Util.makeMainEntrypoints(scope, cha);\r
- AnalysisOptions options = new AnalysisOptions(scope, entrypoints);\r
-\r
- // build the call graph\r
- CallGraphBuilder cgb = Util.makeZeroCFABuilder(options, new AnalysisCache(),cha, scope, null, null);\r
- CallGraph cg = cgb.makeCallGraph(options, null);\r
- PointerAnalysis<InstanceKey> pa = cgb.getPointerAnalysis();\r
-\r
- for (int i = 0; i < cg.getMaxNumber(); i++) {\r
- CGNode node = cg.getNode(i);\r
- DataDependenceOptions dOptions = DataDependenceOptions.NO_HEAP_NO_EXCEPTIONS;\r
- ControlDependenceOptions cOptions = ControlDependenceOptions.NONE;\r
- ModRef modRef = ModRef.make();\r
- HeapExclusions exclusions = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> mod = null;\r
- Map<CGNode, OrdinalSet<PointerKey>> ref = null;\r
- PDG pdg = new PDG(node, pa, mod, ref, dOptions, cOptions, exclusions, cg, modRef);\r
- \r
- for (Iterator<Statement> itr = pdg.iterator(); itr.hasNext();) {\r
- Statement s1 = itr.next();\r
- for (Iterator<Statement> succs = pdg.getSuccNodes(s1); succs.hasNext();) {\r
- Statement s2 = succs.next();\r
-// System.out.println(s1.toString() + " -> " + s2.toString());\r
- }\r
- }\r
- }\r
- \r
- long end = System.currentTimeMillis();\r
- \r
- System.out.println((end - start) + " [ms]");\r
- System.out.println(MemoryInfo.getMemoryInfo());\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
-}\r