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:
sjfink 2008-01-16 22:25:23 +00:00
parent 1a72f854b3
commit 0019894a1b
5 changed files with 21 additions and 14 deletions

View File

@ -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)) {

View File

@ -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();

View File

@ -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);

View File

@ -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() );

View File

@ -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());