Class NullTestPiPolicy

  • All Implemented Interfaces:
    SSAPiNodePolicy

    public class NullTestPiPolicy
    extends Object
    implements 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 Detail

      • createNullTestPiPolicy

        public static NullTestPiPolicy createNullTestPiPolicy()
      • 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 interface SSAPiNodePolicy
        Parameters:
        cond - the conditional branch instruction in question
        def1 - the SSAInstruction that defs cond.getUse(0), or null if none
        def2 - the SSAInstruction that defs cond.getUse(1), or null if none
        symbolTable - 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 interface SSAPiNodePolicy
        Parameters:
        call - the call instruction in question
        symbolTable - 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.