de.uka.ipd.sdq.ByCounter.utils
Class EquivalenceClassesOpcodeMapper

java.lang.Object
  extended by de.uka.ipd.sdq.ByCounter.utils.FullOpcodeMapper
      extended by de.uka.ipd.sdq.ByCounter.utils.OpcodeToMethodMapper
          extended by de.uka.ipd.sdq.ByCounter.utils.EquivalenceClassesOpcodeMapper
All Implemented Interfaces:
IAllJavaOpcodes

public class EquivalenceClassesOpcodeMapper
extends OpcodeToMethodMapper

Methods are capitalised because otherwise, some method names (e.g. goto()) collide with protected tokens of Java Fields (common knowledge from JVM spec) copy-and-pasted from ASM for speedup

Author:
Michael Kuperberg

Field Summary
static boolean MERGE_ALLCOMPARISONS
           
static boolean MERGE_ARRAYLOAD_CLASSES
           
static boolean MERGE_ARRAYSTORE_CLASSES
           
static boolean MERGE_DUPS
           
static boolean MERGE_FCMP_WITH_DCMP
           
static boolean MERGE_IPUSH_WITH_ICONST
           
static boolean MERGE_WIDE_WITH_NARROW
           
 
Fields inherited from class de.uka.ipd.sdq.ByCounter.utils.OpcodeToMethodMapper
mnemonicToMethod
 
Fields inherited from class de.uka.ipd.sdq.ByCounter.utils.FullOpcodeMapper
mnemonics, mnemonicToOpcode
 
Fields inherited from interface de.uka.ipd.sdq.ByCounter.utils.IAllJavaOpcodes
AALOAD, AASTORE, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETSTATIC, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMUL, INEG, INSTANCEOF, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, IUSHR, IXOR, JSR, JSR_W, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_W, LDC2_W, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, TABLESWITCH, WIDE
 
Constructor Summary
EquivalenceClassesOpcodeMapper()
           
 
Method Summary
static boolean addToEquivalenceClass(int opcode, int equivalenceClass)
          Formulate assumptions, e.g.
static java.lang.Integer[] getEquivalenceClassByKeyAsArray(int keyOpcode)
           
static java.util.SortedSet<java.lang.Integer> getEquivalenceClassByKeyAsSortedSet(int keyOpcode)
           
static int getEquivalenceClassCardinality(int keyOpcode)
           
static int getEquivalenceClassRepresentative(int valueOpcode)
           
static boolean isInEquivalenceClass(int classRepresentativeOpcode, int valueOpcode)
           
static boolean removeFromEquivalenceClass(int classRepresentative, int consideredOpcode)
          Implicitly: set to own equivalence class
 
Methods inherited from class de.uka.ipd.sdq.ByCounter.utils.OpcodeToMethodMapper
AALOAD, AASTORE, ACONST_NULL, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSTORE, DSUB, DUP_X1, DUP_X2, DUP, DUP2_X1, DUP2_X2, DUP2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FLOAD, FMUL, FNEG, FREM, FRETURN, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSTORE, FSUB, GETFIELD, getMethodOfMnemonic, getMethodOfOpcode, getMnemonicOfMethod, getOpcodeOfMethod, GETSTATIC, GOTO_W, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, ILOAD, IMUL, INEG, INSTANCEOF, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISTORE, ISUB, IUSHR, IXOR, JSR_W, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC_W, LDC, LDC2_W, LDIV, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSTORE, LSUB, LUSHR, LXOR, main, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, TABLESWITCH, WIDE
 
Methods inherited from class de.uka.ipd.sdq.ByCounter.utils.FullOpcodeMapper
getMnemonicOfOpcode, getOpcodeOfMnemonic, isDuplicateFree, isValidMnemonic, isValidOpcode
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MERGE_ALLCOMPARISONS

public static boolean MERGE_ALLCOMPARISONS

MERGE_ARRAYLOAD_CLASSES

public static boolean MERGE_ARRAYLOAD_CLASSES

MERGE_ARRAYSTORE_CLASSES

public static boolean MERGE_ARRAYSTORE_CLASSES

MERGE_DUPS

public static boolean MERGE_DUPS

MERGE_FCMP_WITH_DCMP

public static boolean MERGE_FCMP_WITH_DCMP

MERGE_IPUSH_WITH_ICONST

public static boolean MERGE_IPUSH_WITH_ICONST

MERGE_WIDE_WITH_NARROW

public static boolean MERGE_WIDE_WITH_NARROW
Constructor Detail

EquivalenceClassesOpcodeMapper

public EquivalenceClassesOpcodeMapper()
Method Detail

getEquivalenceClassByKeyAsArray

public static final java.lang.Integer[] getEquivalenceClassByKeyAsArray(int keyOpcode)

getEquivalenceClassByKeyAsSortedSet

public static final java.util.SortedSet<java.lang.Integer> getEquivalenceClassByKeyAsSortedSet(int keyOpcode)

getEquivalenceClassCardinality

public static final int getEquivalenceClassCardinality(int keyOpcode)

getEquivalenceClassRepresentative

public static final int getEquivalenceClassRepresentative(int valueOpcode)

isInEquivalenceClass

public static final boolean isInEquivalenceClass(int classRepresentativeOpcode,
                                                 int valueOpcode)

removeFromEquivalenceClass

public static final boolean removeFromEquivalenceClass(int classRepresentative,
                                                       int consideredOpcode)
Implicitly: set to own equivalence class

Parameters:
classRepresentative -
consideredOpcode -

addToEquivalenceClass

public static final boolean addToEquivalenceClass(int opcode,
                                                  int equivalenceClass)
Formulate assumptions, e.g. "equivalenceMappings set for 'opcode' parameter"

Parameters:
opcode -
equivalenceClass -
Returns:
False in case of a failure. The log will contain details.