revamp pi node construction
git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2404 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
parent
1a72f854b3
commit
0019894a1b
|
@ -26,6 +26,8 @@ import com.ibm.wala.ipa.callgraph.CallGraph;
|
|||
import com.ibm.wala.ipa.callgraph.Entrypoint;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.ssa.SSAPiNodePolicy;
|
||||
import com.ibm.wala.types.ClassLoaderReference;
|
||||
import com.ibm.wala.types.Descriptor;
|
||||
import com.ibm.wala.types.MemberReference;
|
||||
|
@ -76,20 +78,21 @@ public class PiNodeCallGraphTest extends WalaTestCase {
|
|||
Iterable<Entrypoint> entrypoints = com.ibm.wala.ipa.callgraph.impl.Util.makeMainEntrypoints(scope, cha,
|
||||
TestConstants.PI_TEST_MAIN);
|
||||
AnalysisOptions options = CallGraphTestUtil.makeAnalysisOptions(scope, entrypoints);
|
||||
options.getSSAOptions().setUsePiNodes(usePiNodes);
|
||||
SSAPiNodePolicy policy = usePiNodes ? SSAOptions.getAllBuiltInPiNodes() : null;
|
||||
options.getSSAOptions().setPiNodePolicy(policy);
|
||||
|
||||
return CallGraphTestUtil.buildZeroCFA(options, new AnalysisCache(), cha, scope, false);
|
||||
}
|
||||
|
||||
private void checkCallAssertions(CallGraph cg, int desiredNumberOfTargets, int desiredNumberOfCalls) {
|
||||
|
||||
int numberOfCalls = 0;
|
||||
Set<CGNode> callerNodes = HashSetFactory.make();
|
||||
callerNodes.addAll(cg.getNodes(thisBinaryRef));
|
||||
callerNodes.addAll(cg.getNodes(thatBinaryRef));
|
||||
Assertions._assert(callerNodes.size() == 2);
|
||||
|
||||
for (Iterator<CGNode> nodes = callerNodes.iterator(); nodes.hasNext();) {
|
||||
CGNode n = (CGNode) nodes.next();
|
||||
for (CGNode n : callerNodes) {
|
||||
for (Iterator<CallSiteReference> sites = n.iterateCallSites(); sites.hasNext();) {
|
||||
CallSiteReference csRef = (CallSiteReference) sites.next();
|
||||
if (csRef.getDeclaredTarget().equals(unary2Ref)) {
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.ibm.wala.ipa.callgraph.impl.Everywhere;
|
|||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.ISSABasicBlock;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.util.StringStuff;
|
||||
import com.ibm.wala.util.config.AnalysisScopeReader;
|
||||
|
@ -56,7 +57,7 @@ public class CFGTest extends WalaTestCase {
|
|||
}
|
||||
AnalysisOptions options = new AnalysisOptions();
|
||||
AnalysisCache cache = new AnalysisCache();
|
||||
options.getSSAOptions().setUsePiNodes(true);
|
||||
options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());
|
||||
IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions());
|
||||
|
||||
ControlFlowGraph<ISSABasicBlock> cfg = ir.getControlFlowGraph();
|
||||
|
|
|
@ -24,6 +24,8 @@ import com.ibm.wala.ipa.cha.ClassHierarchy;
|
|||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.SSAInstruction;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.ssa.SSAPiNodePolicy;
|
||||
import com.ibm.wala.types.Descriptor;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.types.Selector;
|
||||
|
@ -100,7 +102,7 @@ public class LocalNamesTest extends WalaTestCase {
|
|||
.findOrCreateUTF8("([Ljava/lang/String;)V")));
|
||||
|
||||
AnalysisOptions options = new AnalysisOptions();
|
||||
options.getSSAOptions().setUsePiNodes(true);
|
||||
options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());
|
||||
IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions());
|
||||
|
||||
for (int offsetIndex = 0; offsetIndex < ir.getInstructions().length; offsetIndex++) {
|
||||
|
@ -121,15 +123,15 @@ public class LocalNamesTest extends WalaTestCase {
|
|||
}
|
||||
|
||||
public void testLocalNamesWithoutPiNodes() {
|
||||
boolean save = options.getSSAOptions().getUsePiNodes();
|
||||
options.getSSAOptions().setUsePiNodes(false);
|
||||
SSAPiNodePolicy save = options.getSSAOptions().getPiNodePolicy();
|
||||
options.getSSAOptions().setPiNodePolicy(null);
|
||||
MethodReference mref = scope.findMethod(AnalysisScope.APPLICATION, "LcornerCases/Locals", Atom.findOrCreateUnicodeAtom("foo"),
|
||||
new ImmutableByteArray(UTF8Convert.toUTF8("([Ljava/lang/String;)V")));
|
||||
assertNotNull("method not found", mref);
|
||||
IMethod imethod = cha.resolveMethod(mref);
|
||||
assertNotNull("imethod not found", imethod);
|
||||
IR ir = cache.getIRFactory().makeIR(imethod, Everywhere.EVERYWHERE, options.getSSAOptions());
|
||||
options.getSSAOptions().setUsePiNodes(save);
|
||||
options.getSSAOptions().setPiNodePolicy(save);
|
||||
|
||||
// v1 should be the parameter "a" at pc 0
|
||||
String[] names = ir.getLocalNames(0, 1);
|
||||
|
@ -149,15 +151,15 @@ public class LocalNamesTest extends WalaTestCase {
|
|||
}
|
||||
|
||||
public void testLocalNamesWithPiNodes() {
|
||||
boolean save = options.getSSAOptions().getUsePiNodes();
|
||||
options.getSSAOptions().setUsePiNodes(true);
|
||||
SSAPiNodePolicy save = options.getSSAOptions().getPiNodePolicy();
|
||||
options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());
|
||||
MethodReference mref = scope.findMethod(AnalysisScope.APPLICATION, "LcornerCases/Locals", Atom.findOrCreateUnicodeAtom("foo"),
|
||||
new ImmutableByteArray(UTF8Convert.toUTF8("([Ljava/lang/String;)V")));
|
||||
assertNotNull("method not found", mref);
|
||||
IMethod imethod = cha.resolveMethod(mref);
|
||||
assertNotNull("imethod not found", imethod);
|
||||
IR ir = cache.getIRFactory().makeIR(imethod, Everywhere.EVERYWHERE, options.getSSAOptions());
|
||||
options.getSSAOptions().setUsePiNodes(save);
|
||||
options.getSSAOptions().setPiNodePolicy(save);
|
||||
|
||||
// v1 should be the parameter "a" at pc 0
|
||||
String[] names = ir.getLocalNames(0, 1);
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.ibm.wala.ipa.cha.ClassHierarchy;
|
|||
import com.ibm.wala.properties.WalaProperties;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.ISSABasicBlock;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.util.StringStuff;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
@ -84,7 +85,6 @@ public class GVControlDependenceGraph {
|
|||
}
|
||||
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, new File(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
|
||||
|
||||
|
||||
ClassHierarchy cha = ClassHierarchy.make(scope);
|
||||
|
||||
MethodReference mr = StringStuff.makeMethodReference(methodSig);
|
||||
|
@ -94,7 +94,7 @@ public class GVControlDependenceGraph {
|
|||
Assertions.UNREACHABLE("could not resolve " + mr);
|
||||
}
|
||||
AnalysisOptions options = new AnalysisOptions();
|
||||
options.getSSAOptions().setUsePiNodes(true);
|
||||
options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());
|
||||
AnalysisCache cache = new AnalysisCache();
|
||||
IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions() );
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.ibm.wala.ipa.callgraph.impl.Everywhere;
|
|||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.properties.WalaProperties;
|
||||
import com.ibm.wala.ssa.IR;
|
||||
import com.ibm.wala.ssa.SSAOptions;
|
||||
import com.ibm.wala.types.MethodReference;
|
||||
import com.ibm.wala.util.StringStuff;
|
||||
import com.ibm.wala.util.debug.Assertions;
|
||||
|
@ -92,7 +93,7 @@ public class GVWalaIR {
|
|||
Assertions.UNREACHABLE("could not resolve " + mr);
|
||||
}
|
||||
AnalysisOptions options = new AnalysisOptions();
|
||||
options.getSSAOptions().setUsePiNodes(true);
|
||||
options.getSSAOptions().setPiNodePolicy(SSAOptions.getAllBuiltInPiNodes());
|
||||
AnalysisCache cache = new AnalysisCache();
|
||||
IR ir = cache.getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions());
|
||||
|
||||
|
|
Loading…
Reference in New Issue