Package com.ibm.wala.cfg
Class InducedCFG
- java.lang.Object
-
- com.ibm.wala.cfg.AbstractCFG<SSAInstruction,InducedCFG.BasicBlock>
-
- com.ibm.wala.cfg.InducedCFG
-
- All Implemented Interfaces:
ControlFlowGraph<SSAInstruction,InducedCFG.BasicBlock>
,Constants
,EdgeManager<InducedCFG.BasicBlock>
,Graph<InducedCFG.BasicBlock>
,NodeManager<InducedCFG.BasicBlock>
,NumberedEdgeManager<InducedCFG.BasicBlock>
,NumberedGraph<InducedCFG.BasicBlock>
,NumberedNodeManager<InducedCFG.BasicBlock>
,Iterable<InducedCFG.BasicBlock>
- Direct Known Subclasses:
AstInducedCFG
public class InducedCFG extends AbstractCFG<SSAInstruction,InducedCFG.BasicBlock>
AControlFlowGraph
computed from a set ofSSAInstruction
instructions. This is a funny CFG ... we assume that there are always fallthru edges, even from throws and returns. It is extremely fragile and unsuited for flow-sensitive analysis. Someday this should be nuked.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
InducedCFG.BasicBlock
class
InducedCFG.BranchVisitor
This visitor identifies basic block boundaries induced by branch instructions.class
InducedCFG.PEIVisitor
-
Field Summary
-
Fields inherited from interface com.ibm.wala.shrikeBT.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_InvokeDynamic, CONSTANT_Long, CONSTANT_MethodHandle, CONSTANT_MethodRef, CONSTANT_MethodType, CONSTANT_NameAndType, CONSTANT_String, CONSTANT_Utf8, indexedTypes, indexedTypes_T, MAYBE, NO, OP_aaload, OP_aastore, OP_aconst_null, OP_aload, OP_aload_0, OP_aload_1, OP_aload_2, OP_aload_3, OP_anewarray, OP_areturn, OP_arraylength, OP_astore, OP_astore_0, OP_astore_1, OP_astore_2, OP_astore_3, OP_athrow, OP_baload, OP_bastore, OP_bipush, OP_caload, OP_castore, OP_checkcast, OP_d2f, OP_d2i, OP_d2l, OP_dadd, OP_daload, OP_dastore, OP_dcmpg, OP_dcmpl, OP_dconst_0, OP_dconst_1, OP_ddiv, OP_dload, OP_dload_0, OP_dload_1, OP_dload_2, OP_dload_3, OP_dmul, OP_dneg, OP_drem, OP_dreturn, OP_dstore, OP_dstore_0, OP_dstore_1, OP_dstore_2, OP_dstore_3, OP_dsub, OP_dup, OP_dup_x1, OP_dup_x2, OP_dup2, OP_dup2_x1, OP_dup2_x2, OP_f2d, OP_f2i, OP_f2l, OP_fadd, OP_faload, OP_fastore, OP_fcmpg, OP_fcmpl, OP_fconst_0, OP_fconst_1, OP_fconst_2, OP_fdiv, OP_fload, OP_fload_0, OP_fload_1, OP_fload_2, OP_fload_3, OP_fmul, OP_fneg, OP_frem, OP_freturn, OP_fstore, OP_fstore_0, OP_fstore_1, OP_fstore_2, OP_fstore_3, OP_fsub, OP_getfield, OP_getstatic, OP_goto, OP_goto_w, OP_i2b, OP_i2c, OP_i2d, OP_i2f, OP_i2l, OP_i2s, OP_iadd, OP_iaload, OP_iand, OP_iastore, OP_iconst_0, OP_iconst_1, OP_iconst_2, OP_iconst_3, OP_iconst_4, OP_iconst_5, OP_iconst_m1, OP_idiv, OP_if_acmpeq, OP_if_acmpne, OP_if_icmpeq, OP_if_icmpge, OP_if_icmpgt, OP_if_icmple, OP_if_icmplt, OP_if_icmpne, OP_ifeq, OP_ifge, OP_ifgt, OP_ifle, OP_iflt, OP_ifne, OP_ifnonnull, OP_ifnull, OP_iinc, OP_iload, OP_iload_0, OP_iload_1, OP_iload_2, OP_iload_3, OP_imul, OP_ineg, OP_instanceof, OP_invokedynamic, OP_invokeinterface, OP_invokespecial, OP_invokestatic, OP_invokevirtual, OP_ior, OP_irem, OP_ireturn, OP_ishl, OP_ishr, OP_istore, OP_istore_0, OP_istore_1, OP_istore_2, OP_istore_3, OP_isub, OP_iushr, OP_ixor, OP_jsr, OP_jsr_w, OP_l2d, OP_l2f, OP_l2i, OP_ladd, OP_laload, OP_land, OP_lastore, OP_lcmp, OP_lconst_0, OP_lconst_1, OP_ldc, OP_ldc_w, OP_ldc2_w, OP_ldiv, OP_lload, OP_lload_0, OP_lload_1, OP_lload_2, OP_lload_3, OP_lmul, OP_lneg, OP_lookupswitch, OP_lor, OP_lrem, OP_lreturn, OP_lshl, OP_lshr, OP_lstore, OP_lstore_0, OP_lstore_1, OP_lstore_2, OP_lstore_3, OP_lsub, OP_lushr, OP_lxor, OP_monitorenter, OP_monitorexit, OP_multianewarray, OP_new, OP_newarray, OP_nop, OP_pop, OP_pop2, OP_putfield, OP_putstatic, OP_ret, OP_return, OP_saload, OP_sastore, OP_sipush, OP_swap, OP_tableswitch, OP_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TYPE_boolean, TYPE_boolean_index, TYPE_byte, TYPE_byte_index, TYPE_char, TYPE_char_index, TYPE_Class, TYPE_double, TYPE_double_index, TYPE_Error, TYPE_Exception, TYPE_float, TYPE_float_index, TYPE_int, TYPE_int_index, TYPE_long, TYPE_long_index, TYPE_MethodHandle, TYPE_MethodType, TYPE_null, TYPE_Object, TYPE_Object_index, TYPE_RuntimeException, TYPE_short, TYPE_short_index, TYPE_String, TYPE_Throwable, TYPE_unknown, TYPE_void, YES
-
-
Constructor Summary
Constructors Constructor Description InducedCFG(SSAInstruction[] instructions, IMethod method, Context context)
TODO: we do not yet support induced CFGS with exception handlers.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object o)
Collection<SSAPhiInstruction>
getAllPhiInstructions()
InducedCFG.BasicBlock
getBlockForInstruction(int index)
int
getIndexFromIIndex(int iindex)
Get the position of a instruction with a given iindex in the internal list.SSAInstruction[]
getInstructions()
int
getProgramCounter(int index)
Since this CFG is synthetic, for now we assume the instruction index is the same as the program counterint
hashCode()
protected InducedCFG.BranchVisitor
makeBranchVisitor(boolean[] r)
protected InducedCFG.PEIVisitor
makePEIVisitor(boolean[] r)
String
toString()
-
Methods inherited from class com.ibm.wala.cfg.AbstractCFG
addEdge, addExceptionalEdge, addNode, addNormalEdge, containsNode, entry, exit, getCatchBlocks, getExceptionalPredecessors, getExceptionalSuccessors, getExceptionalToExit, getMaxNumber, getMethod, getNode, getNormalPredecessors, getNormalSuccessors, getNormalToExit, getNumber, getNumberOfExceptionalIn, getNumberOfExceptionalOut, getNumberOfExceptionalOut, getNumberOfNodes, getNumberOfNormalIn, getNumberOfNormalOut, getPredNodeCount, getPredNodeNumbers, getPredNodes, getSuccNodeCount, getSuccNodeNumbers, getSuccNodes, hasEdge, hasExceptionalEdge, hasNormalEdge, init, isCatchBlock, iterateNodes, iterator, removeAllIncidentEdges, removeEdge, removeIncomingEdges, removeNode, removeNodeAndEdges, removeOutgoingEdges, setCatchBlock
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
InducedCFG
public InducedCFG(SSAInstruction[] instructions, IMethod method, Context context)
TODO: we do not yet support induced CFGS with exception handlers. NOTE: SIDE EFFECT!!! ... nulls out phi instructions and pi instructions in the instruction array!- Throws:
IllegalArgumentException
- if instructions is null
-
-
Method Detail
-
hashCode
public int hashCode()
- Specified by:
hashCode
in classAbstractCFG<SSAInstruction,InducedCFG.BasicBlock>
-
equals
public boolean equals(Object o)
- Specified by:
equals
in classAbstractCFG<SSAInstruction,InducedCFG.BasicBlock>
-
getInstructions
public SSAInstruction[] getInstructions()
- Returns:
- the instructions of this CFG, as an array.
-
makeBranchVisitor
protected InducedCFG.BranchVisitor makeBranchVisitor(boolean[] r)
-
makePEIVisitor
protected InducedCFG.PEIVisitor makePEIVisitor(boolean[] r)
-
getBlockForInstruction
public InducedCFG.BasicBlock getBlockForInstruction(int index)
- Parameters:
index
- an instruction index- Returns:
- the basic block which contains this instruction.
-
toString
public String toString()
- Overrides:
toString
in classAbstractCFG<SSAInstruction,InducedCFG.BasicBlock>
-
getProgramCounter
public int getProgramCounter(int index)
Since this CFG is synthetic, for now we assume the instruction index is the same as the program counter- Parameters:
index
- an instruction index- Returns:
- the program counter (bytecode index) corresponding to that instruction
- See Also:
ControlFlowGraph.getProgramCounter(int)
-
getIndexFromIIndex
public int getIndexFromIIndex(int iindex)
Get the position of a instruction with a given iindex in the internal list.- Parameters:
iindex
- The iindex used when generating the SSAInstruction- Returns:
- index into the internal list of instructions
- Throws:
IllegalStateException
- if no instruction exists with iindex or it's not in the internal array (Phi)
-
getAllPhiInstructions
public Collection<SSAPhiInstruction> getAllPhiInstructions()
-
-