Class NullTestPiPolicy
java.lang.Object
com.ibm.wala.ssa.NullTestPiPolicy
- All Implemented Interfaces:
SSAPiNodePolicy
A pi node policy with the following rule:
If we have the following code:
S1: if (c op null) { ... }
replace it with:
S1: if (c op null) { v2 = PI(c, S1) .... }
This renaming allows SSA-based analysis to reason about the nullness of v2 depending on the
outcome of the branch.-
Method Summary
Modifier and TypeMethodDescriptionstatic NullTestPiPolicygetPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) Do we need to introduce a new name for some value immediately after a call?getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) Do we need to introduce a new name for some value after deciding on an outcome for a conditional branch instruction?getPis(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable)
-
Method Details
-
createNullTestPiPolicy
-
getPi
public Pair<Integer, SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) Description copied from interface:SSAPiNodePolicyDo we need to introduce a new name for some value after deciding on an outcome for a conditional branch instruction?If so, returns a pair consisting of the value number needing renaming, and the instruction which should be recorded as the cause of the pi instruction
- Specified by:
getPiin interfaceSSAPiNodePolicy- Parameters:
cond- the conditional branch instruction in questiondef1- theSSAInstructionthat defs cond.getUse(0), or null if nonedef2- theSSAInstructionthat defs cond.getUse(1), or null if nonesymbolTable- current state of the symbol table for the IR under construction- Returns:
- description of the necessary pi instruction, or null if no pi instruction is needed.
-
getPi
public Pair<Integer, SSAInstruction> getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable) Description copied from interface:SSAPiNodePolicyDo we need to introduce a new name for some value immediately after a call?If so, returns a pair consisting of the value number needing renaming, and the instruction which should be recorded as the cause of the pi instruction
- Specified by:
getPiin interfaceSSAPiNodePolicy- Parameters:
call- the call instruction in questionsymbolTable- current state of the symbol table for the IR under construction- Returns:
- description of the necessary pi instruction, or null if no pi instruction is needed.
-
getPis
public List<Pair<Integer, SSAInstruction>> getPis(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable) - Specified by:
getPisin interfaceSSAPiNodePolicy
-