Example usage for org.objectweb.asm.tree InsnList size

List of usage examples for org.objectweb.asm.tree InsnList size

Introduction

In this page you can find the example usage for org.objectweb.asm.tree InsnList size.

Prototype

int size

To view the source code for org.objectweb.asm.tree InsnList size.

Click Source Link

Document

The number of instructions in this list.

Usage

From source file:de.tuberlin.uebb.jbop.optimizer.array.FieldArrayLengthInlinerTest.java

License:Open Source License

/**
 * Tests that FieldArrayLengthInliner is working correctly.
 * /*from   w  w  w.jav a 2s.com*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFieldArrayLengthInliner() throws Exception {
    // INIT
    final String owner = "de.tuberlin.uebb.jbop.optimizer.array.FieldArrayLengthTestClass";
    final ClassNodeBuilder builder = ClassNodeBuilder.createClass(owner).//
            addField("doubleArray", "[D").withModifiers(ACC_FINAL).initArray(15).//
            addField("objectArray", Type.getDescriptor(Object[].class)).withModifiers(ACC_FINAL).initArray(23).//
            addMethod("sumArrayLength", "()I").withAnnotation(Optimizable.class).//
            addGetClassField("doubleArray").//
            addInsn(new InsnNode(Opcodes.ARRAYLENGTH)).//
            addGetClassField("objectArray").//
            addInsn(new InsnNode(Opcodes.ARRAYLENGTH)).//
            addInsn(new InsnNode(Opcodes.IADD)).//
            addInsn(new InsnNode(Opcodes.IRETURN));

    final FieldArrayLengthInliner inliner = new FieldArrayLengthInliner();
    inliner.setClassNode(builder.getClassNode());
    inliner.setInputObject(builder.toClass().instance());

    // RUN STEP 1
    final MethodNode method = builder.getMethod("sumArrayLength");
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT STEP 2
    assertEquals(4, optimized.size());
    assertEquals(15, NodeHelper.getNumberValue(optimized.getFirst()).intValue());
    assertEquals(23, NodeHelper.getNumberValue(optimized.getFirst().getNext()).intValue());
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.FieldArrayValueInlinerTest.java

License:Open Source License

/**
 * Tests that FieldArrayValueInliner is working correctly.
 * /*from  www .  ja  v a2s .  com*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFieldArrayValueInliner() throws Exception {
    // INIT
    final String owner = "de.tuberlin.uebb.jbop.optimizer.array.FieldArrayValueTestClass";
    final ClassNodeBuilder builder = ClassNodeBuilder.createClass(owner).//
            addField("doubleArray1", "[D").withAnnotation(ImmutableArray.class).initArrayWith(1.0, 2.0, 3.0).//
            addField("doubleArray2", "[D").withAnnotation(ImmutableArray.class).initArrayWith(4.0, 5.0, 6.0).//
            addMethod("sumArrayValues", "()D").withAnnotation(Optimizable.class).//
            loadFieldArrayValue("doubleArray1", 0).// 4 -> 1
            loadFieldArrayValue("doubleArray2", 0).// 4 -> 1
            addInsn(new InsnNode(Opcodes.DADD)).// 1
            loadFieldArrayValue("doubleArray1", 1).// 4 -> 1
            loadFieldArrayValue("doubleArray2", 1).// 4 -> 1
            addInsn(new InsnNode(Opcodes.DADD)).// 1
            addInsn(new InsnNode(Opcodes.DADD)).// 1
            loadFieldArrayValue("doubleArray1", 2).// 4 -> 1
            loadFieldArrayValue("doubleArray2", 2).// 4 -> 1
            addInsn(new InsnNode(Opcodes.DADD)).// 1
            addInsn(new InsnNode(Opcodes.DADD)).// 1
            addInsn(new InsnNode(Opcodes.DRETURN));// 1
    //

    final FieldArrayValueInliner inliner = new FieldArrayValueInliner();
    inliner.setClassNode(builder.getClassNode());
    inliner.setInputObject(builder.instance());

    final MethodNode method = builder.getMethod("sumArrayValues");
    assertEquals(30, method.instructions.size());

    // RUN STEP 1
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT STEP 1

    assertEquals(12, optimized.size());

    // first value pair
    AbstractInsnNode currentNode = optimized.getFirst();
    assertEquals(1.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);
    currentNode = currentNode.getNext();
    assertEquals(4.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);
    currentNode = currentNode.getNext();

    // second value pair
    currentNode = currentNode.getNext();
    assertEquals(2.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);
    currentNode = currentNode.getNext();
    assertEquals(5.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);
    currentNode = currentNode.getNext();
    currentNode = currentNode.getNext();

    // third value pair
    currentNode = currentNode.getNext();
    assertEquals(3.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);
    currentNode = currentNode.getNext();
    assertEquals(6.0, NodeHelper.getNumberValue(currentNode).doubleValue(), .0001);

    // RUN STEP 3
    final InsnList optimized3 = inliner.optimize(method.instructions, method);

    // ASSERT STEP 3
    assertEquals(12, optimized3.size());
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.FieldArrayValueInlinerTest.java

License:Open Source License

/**
 * Tests that the FieldArrayValueInliner is working correctly with field-chains.
 * /*  w  w w . java 2  s  .  c o m*/
 * @throws Exception
 *           the exception
 */
@Test
public void testFieldArrayValueInlinerWithFieldChain() throws Exception {
    // INIT
    final ClassNodeBuilder builderC = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.array.C").//
            addField("d", "[D").//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            withAnnotation(ImmutableArray.class).//
            initArrayWith(1.0).//
            toClass();
    final ClassNodeBuilder builderB = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.array.B").//
            addField("c", Type.getDescriptor(builderC.getBuildedClass())).//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            initWith(null).//
            toClass();
    final ClassNodeBuilder builderA = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.array.A").//
            addField("b", Type.getDescriptor(builderB.getBuildedClass())).//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            initWith(null).//
            toClass();
    final ClassNodeBuilder builderTestClass = ClassNodeBuilder
            .createClass("de.tuberlin.uebb.jbop.optimizer.array.ChainedTestClass").//
            addField("a", "[" + Type.getDescriptor(builderA.getBuildedClass())).//
            withAnnotation(ImmutableArray.class).//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            addToConstructor(initArray()).//
            addMethod("get", "()D").//
            addGetClassField("a").// ;
            addInsn(new InsnNode(ICONST_0)).//
            addInsn(new InsnNode(AALOAD)).//
            addGetField(builderA, "b").//
            addGetField(builderB, "c").//
            addGetField(builderC, "d").//
            addInsn(new InsnNode(ICONST_0)).//
            addInsn(new InsnNode(DALOAD)).//
            addInsn(new InsnNode(DRETURN));//

    final Object instance = builderTestClass.instance();

    // RUN
    final FieldArrayValueInliner inliner = new FieldArrayValueInliner();
    inliner.setClassNode(builderTestClass.getClassNode());
    inliner.setInputObject(instance);
    final MethodNode method = builderTestClass.getMethod("get");
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(2, optimized.size());
    assertEquals(1.0, NodeHelper.getNumberValue(optimized.get(0)).doubleValue(), .00001);
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.LocalArrayLengthInlinerTest.java

License:Open Source License

/**
 * Tests that LocalArrayLengthInliner is working correctly.
 * //  w w w  . jav a2 s. co m
 * @throws Exception
 *           the exception
 */
@Test
public void test_newarrayAndSubarray() throws Exception {
    // INIT
    final String owner = "de.tuberlin.uebb.jbop.optimizer.array.LocalArrayLengthTestClass";
    final ClassNodeBuilder builder = ClassNodeBuilder.createClass(owner).//
            addField("doubleArray", "[[D").initArray(15, 42)
            .withModifiers(Opcodes.ACC_PRIVATE, Opcodes.ACC_FINAL).//
            addMethod("getArrayLength", "()I").withAnnotation(Optimizable.class).//
            addArray("[D", 15).// 3 -> 3
            addInsn(new VarInsnNode(Opcodes.ALOAD, 1)).// 1 -> 0|
            addInsn(new InsnNode(Opcodes.ARRAYLENGTH)).// 1 -> 0|1
            addGetClassField("doubleArray").// 2 -> 2
            addInsn(new InsnNode(Opcodes.ICONST_0)).// 1 -> 1
            addInsn(new InsnNode(Opcodes.AALOAD)).// 1 -> 1
            addInsn(new VarInsnNode(Opcodes.ASTORE, 2)).// 1 -> 1
            addInsn(new VarInsnNode(Opcodes.ALOAD, 2)).// 1 -> 0|
            addInsn(new InsnNode(Opcodes.ARRAYLENGTH)).// 1 -> 0|1
            addInsn(new InsnNode(Opcodes.IADD)).// 1 -> 1
            addInsn(new InsnNode(Opcodes.IRETURN));// 1 -> 1
    // 14 -> 12
    final LocalArrayLengthInliner inliner = new LocalArrayLengthInliner();
    inliner.setInputObject(builder.toClass().instance());

    // RUN STEP 1
    final MethodNode method = builder.getMethod("getArrayLength");
    assertEquals(14, method.instructions.size());
    final InsnList optimized = inliner.optimize(method.instructions, method);
    method.instructions = optimized;

    // ASSERT STEP 1
    assertEquals(12, optimized.size());
    assertEquals(15, NodeHelper.getNumberValue(optimized.get(3)).intValue());
    assertEquals(42, NodeHelper.getNumberValue(optimized.get(9)).intValue());

    // RUN STEP 2
    final InsnList optimized2 = inliner.optimize(method.instructions, method);

    // ASSERT STEP 2
    assertEquals(12, optimized2.size());
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.LocalArrayLengthInlinerTest.java

License:Open Source License

@Test
public void test_multiArray() throws Exception {
    final ClassNodeBuilder builder = ClassNodeBuilder
            .createClass("de.tuberlin.uebb.jbop.optimizer.array.Test1");
    builder.addField("field", "[[[I").//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            withAnnotation(ImmutableArray.class);
    builder.removeMethod("<init>", "()V").//
            addConstructor("([[[I)V", "()V").//
            add(ALOAD, 0).//
            add(ALOAD, 1).//
            addPutClassField("field");
    builder.////from   w  w w .  ja  va 2 s . co m
            addMethod("doit", "()V").//
            addGetClassField("field").//
            add(ICONST_0).//
            add(AALOAD).//
            add(ASTORE, 1).//
            add(ALOAD, 1).//
            add(ICONST_0).//
            add(AALOAD).//
            add(ASTORE, 2).//
            add(ALOAD, 2).//
            add(ICONST_1).//
            add(IALOAD).//
            add(ISTORE, 3).//
            add(ALOAD, 1).//
            add(ARRAYLENGTH).//
            add(ALOAD, 2).//
            add(ARRAYLENGTH).//
            addReturn();
    final Object instance = builder.instance(new Object[] { new int[][][] { { { 1, 2, 3 } } } });

    final LocalArrayLengthInliner inliner = new LocalArrayLengthInliner();
    inliner.setInputObject(instance);

    final MethodNode method = builder.getMethod("doit");
    final InsnList optimized = inliner.optimize(method.instructions, method);
    method.instructions = optimized;
    assertEquals(16, optimized.size());
    assertEquals(ICONST_1, optimized.get(13).getOpcode());
    assertEquals(ICONST_3, optimized.get(14).getOpcode());
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.LocalArrayValueInlinerTest.java

License:Open Source License

/**
 * Tests that LocalArrayValueInliner is working correctly.
 * //from  w  w w. ja  v a  2s  . c  o  m
 * @throws Exception
 *           the exception
 */
@Test
public void testLocalArrayValueInliner() throws Exception {
    // INIT
    final String owner = "de.tuberlin.uebb.jbop.optimizer.array.LocalArrayValueTestClass";
    final ClassNodeBuilder builder = ClassNodeBuilder.createClass(owner).//
            addField("doubleArray", "[[D").//
            withAnnotation(ImmutableArray.class).//
            withModifiers(Opcodes.ACC_PRIVATE, Opcodes.ACC_FINAL).//
            initArray(2, 2).//
            initMultiArrayWith(1.0, 0, 0).//
            initMultiArrayWith(2.0, 0, 1).//
            initMultiArrayWith(3.0, 1, 0).//
            initMultiArrayWith(4.0, 1, 1).//
            addMethod("getArrayValue", "()D").withAnnotation(Optimizable.class).//
            addGetClassField("doubleArray").// 2 -> 2
            addInsn(new InsnNode(Opcodes.ICONST_0)).// 1 -> 1
            addInsn(new InsnNode(Opcodes.AALOAD)).// 1 -> 1
            addInsn(new VarInsnNode(Opcodes.ASTORE, 2)).// 1 -> 1
            addInsn(new VarInsnNode(Opcodes.ALOAD, 2)).// 1 -> 0|
            addInsn(new InsnNode(Opcodes.ICONST_1)).// 1 -> 0|
            addInsn(new InsnNode(Opcodes.DALOAD)).// 1 -> 0| 1
            addInsn(new InsnNode(Opcodes.DRETURN));// 1 -> 1
    // 14 -> 12
    final LocalArrayValueInliner inliner = new LocalArrayValueInliner();
    inliner.setInputObject(builder.toClass().instance());

    // RUN STEP 1
    final MethodNode method = builder.getMethod("getArrayValue");
    assertEquals(9, method.instructions.size());
    final InsnList optimized = inliner.optimize(method.instructions, method);

    // ASSERT STEP 1

    assertEquals(7, optimized.size());
    assertEquals(2.0, NodeHelper.getNumberValue(optimized.get(5)).doubleValue(), .0001);

    // RUN STEP 2
    final InsnList optimized2 = inliner.optimize(method.instructions, method);

    // ASSERT STEP 2
    assertEquals(7, optimized2.size());
}

From source file:de.tuberlin.uebb.jbop.optimizer.array.LocalArrayValueInlinerTest.java

License:Open Source License

@Test
public void test() throws Exception {
    final ClassNodeBuilder builder = ClassNodeBuilder.createClass("de.tuberlin.uebb.jbop.optimizer.array.Test");
    builder.addField("field", "[[[I").//
            withModifiers(ACC_PRIVATE, ACC_FINAL).//
            withAnnotation(ImmutableArray.class);
    builder.removeMethod("<init>", "()V").//
            addConstructor("([[[I)V", "()V").//
            add(ALOAD, 0).//
            add(ALOAD, 1).//
            addPutClassField("field");
    builder.///*from  ww w. java 2  s .co  m*/
            addMethod("doit", "()V").//
            addGetClassField("field").//
            add(ICONST_0).//
            add(AALOAD).//
            add(ASTORE, 1).//
            add(ALOAD, 1).//
            add(ICONST_0).//
            add(AALOAD).//
            add(ASTORE, 2).//
            add(ALOAD, 2).//
            add(ICONST_1).//
            add(IALOAD).//
            add(ISTORE, 3).//
            addReturn();
    final Object instance = builder.instance(new Object[] { new int[][][] { { { 1, 2, 3 } } } });

    final LocalArrayValueInliner inliner = new LocalArrayValueInliner();
    inliner.setInputObject(instance);

    final MethodNode method = builder.getMethod("doit");
    final InsnList optimized = inliner.optimize(method.instructions, method);
    method.instructions = optimized;
    assertEquals(12, optimized.size());
    assertEquals(ICONST_2, optimized.get(9).getOpcode());

}

From source file:de.tuberlin.uebb.jbop.optimizer.controlflow.ConstantIfInlinerTest.java

License:Open Source License

/**
 * Tests that constantIfInliner is working correctly.
 * //www .  jav  a2 s .co  m
 * Input is
 * 
 * <pre>
 * if(1<2)
 * ...
 * </pre>
 * 
 * @throws JBOPClassException
 *           the jBOP class exception
 */

@Test
public void testConstantIfInlinerIF_CMPEG() throws JBOPClassException {
    // INIT
    final LabelNode label = new LabelNode();
    builder.addInsn(new InsnNode(Opcodes.ICONST_1)).//
            addInsn(new InsnNode(Opcodes.ICONST_2)).//
            addInsn(new JumpInsnNode(Opcodes.IF_ICMPGE, label)).//
            addInsn(new InsnNode(Opcodes.NOP)).//
            addInsn(label).//
            addInsn(new InsnNode(Opcodes.RETURN));

    // RUN
    assertEquals(6, method.instructions.size());
    final InsnList optimized = constantIfInliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(3, optimized.size());
    assertEquals(Opcodes.NOP, optimized.get(0).getOpcode());
}

From source file:de.tuberlin.uebb.jbop.optimizer.controlflow.ConstantIfInlinerTest.java

License:Open Source License

/**
 * Tests that constantIfInliner is working correctly.
 * //from  w ww  .  j av  a 2 s .  co m
 * Input is
 * 
 * <pre>
 * if(1<=2)
 * ...
 * </pre>
 * 
 * @throws JBOPClassException
 *           the jBOP class exception
 */

@Test
public void testConstantIfInlinerIF_ICMPGT() throws JBOPClassException {
    // INIT
    final LabelNode label = new LabelNode();
    builder.addInsn(new InsnNode(Opcodes.ICONST_1)).//
            addInsn(new InsnNode(Opcodes.ICONST_2)).//
            addInsn(new JumpInsnNode(Opcodes.IF_ICMPGT, label)).//
            addInsn(new InsnNode(Opcodes.NOP)).//
            addInsn(label).//
            addInsn(new InsnNode(Opcodes.RETURN));

    // RUN
    assertEquals(6, method.instructions.size());
    final InsnList optimized = constantIfInliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(3, optimized.size());
    assertEquals(Opcodes.NOP, optimized.get(0).getOpcode());
}

From source file:de.tuberlin.uebb.jbop.optimizer.controlflow.ConstantIfInlinerTest.java

License:Open Source License

/**
 * Tests that constantIfInliner is working correctly.
 * //from w ww.  j av  a2  s.  c  om
 * Input is
 * 
 * <pre>
 * if(2>1)
 * ...
 * </pre>
 * 
 * @throws JBOPClassException
 *           the jBOP class exception
 */

@Test
public void testConstantIfInlinerIF_ICMPLE() throws JBOPClassException {
    // INIT
    final LabelNode label = new LabelNode();
    builder.addInsn(new InsnNode(Opcodes.ICONST_2)).//
            addInsn(new InsnNode(Opcodes.ICONST_1)).//
            addInsn(new JumpInsnNode(Opcodes.IF_ICMPLE, label)).//
            addInsn(new InsnNode(Opcodes.NOP)).//
            addInsn(label).//
            addInsn(new InsnNode(Opcodes.RETURN));

    // RUN
    assertEquals(6, method.instructions.size());
    final InsnList optimized = constantIfInliner.optimize(method.instructions, method);

    // ASSERT
    assertEquals(3, optimized.size());
    assertEquals(Opcodes.NOP, optimized.get(0).getOpcode());
}