Changed pi policy to only create pi nodes for integer variables.

This commit is contained in:
Stephan Gocht 2016-01-08 14:10:55 +01:00
parent 448c8c5f86
commit b75d93cb1c
3 changed files with 15 additions and 9 deletions

View File

@ -21,7 +21,7 @@ import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.ipa.callgraph.impl.Everywhere;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ssa.AllDueToBranchePiPolicy;
import com.ibm.wala.ssa.AllIntegerDueToBranchePiPolicy;
import com.ibm.wala.ssa.DefaultIRFactory;
import com.ibm.wala.ssa.IR;
import com.ibm.wala.ssa.IRFactory;
@ -71,7 +71,7 @@ public class ArrayboundsAnalysisTest {
irFactory = new DefaultIRFactory();
options = new AnalysisOptions();
options.getSSAOptions().setPiNodePolicy(new AllDueToBranchePiPolicy());
options.getSSAOptions().setPiNodePolicy(new AllIntegerDueToBranchePiPolicy());
}
public static IR getIr(IMethod method) {

View File

@ -27,7 +27,7 @@ import com.ibm.wala.ipa.cfg.exceptionpruning.filter.CombinedExceptionFilter;
import com.ibm.wala.ipa.cfg.exceptionpruning.filter.NullPointerExceptionFilter;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ssa.AllDueToBranchePiPolicy;
import com.ibm.wala.ssa.AllIntegerDueToBranchePiPolicy;
import com.ibm.wala.ssa.DefaultIRFactory;
import com.ibm.wala.ssa.IR;
import com.ibm.wala.ssa.IRFactory;
@ -96,7 +96,7 @@ public class PruneArrayOutOfBoundExceptionEdge {
irFactory = new DefaultIRFactory();
options = new AnalysisOptions();
options.getSSAOptions().setPiNodePolicy(new AllDueToBranchePiPolicy());
options.getSSAOptions().setPiNodePolicy(new AllIntegerDueToBranchePiPolicy());
}
private static IR getIr(IMethod method) {

View File

@ -10,6 +10,7 @@
*******************************************************************************/
package com.ibm.wala.ssa;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -21,7 +22,7 @@ import com.ibm.wala.util.collections.Pair;
*
* @author Stephan Gocht <stephan@gobro.de>
*/
public class AllDueToBranchePiPolicy implements SSAPiNodePolicy {
public class AllIntegerDueToBranchePiPolicy implements SSAPiNodePolicy {
@Override
public Pair<Integer, SSAInstruction> getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) {
@ -45,10 +46,15 @@ public class AllDueToBranchePiPolicy implements SSAPiNodePolicy {
@Override
public List<Pair<Integer, SSAInstruction>> getPis(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2,
SymbolTable symbolTable) {
final LinkedList<Pair<Integer, SSAInstruction>> result = new LinkedList<>();
for (int i = 0; i < cond.getNumberOfUses(); i++) {
result.add(Pair.make(cond.getUse(i), (SSAInstruction) cond));
if (cond.isIntegerComparison()) {
final LinkedList<Pair<Integer, SSAInstruction>> result = new LinkedList<>();
for (int i = 0; i < cond.getNumberOfUses(); i++) {
result.add(Pair.make(cond.getUse(i), (SSAInstruction) cond));
}
return result;
} else {
return Collections.emptyList();
}
return result;
}
}