Package com.ibm.wala.ssa
Class InstanceOfPiPolicy
- java.lang.Object
-
- com.ibm.wala.ssa.InstanceOfPiPolicy
-
- All Implemented Interfaces:
SSAPiNodePolicy
public class InstanceOfPiPolicy extends Object implements SSAPiNodePolicy
A pi node policy with the following rule: If we have the following code:S1: c = v1 instanceof T S2: if (c == 0) { ... } replace it with:S1: c = v1 instanceof T S2: if (c == 0) { v2 = PI(v1, S1) .... } The same pattern holds if the test is c == 1. This renaming allows SSA-based analysis to reason about the type of v2 depending on the outcome of the branch.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static InstanceOfPiPolicy
createInstanceOfPiPolicy()
boolean
equals(Object obj)
Pair<Integer,SSAInstruction>
getPi(SSAAbstractInvokeInstruction call, SymbolTable symbolTable)
Do 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 instructionPair<Integer,SSAInstruction>
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? 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 instructionint
hashCode()
-
-
-
Method Detail
-
createInstanceOfPiPolicy
public static InstanceOfPiPolicy createInstanceOfPiPolicy()
-
getPi
public Pair<Integer,SSAInstruction> getPi(SSAConditionalBranchInstruction cond, SSAInstruction def1, SSAInstruction def2, SymbolTable symbolTable)
Description copied from interface:SSAPiNodePolicy
Do 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:
getPi
in interfaceSSAPiNodePolicy
- Parameters:
cond
- the conditional branch instruction in questiondef1
- theSSAInstruction
that defs cond.getUse(0), or null if nonedef2
- theSSAInstruction
that 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:SSAPiNodePolicy
Do 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:
getPi
in 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.
-
-