Search in sources :

Example 1 with BinaryExpression

use of de.mirkosertic.bytecoder.ssa.BinaryExpression in project Bytecoder by mirkosertic.

the class RedundantAssignmentOptimizerTest method testBinaryOptimization.

@Test
public void testBinaryOptimization() {
    Program theProgram = new Program();
    ControlFlowGraph theGraph = new ControlFlowGraph(theProgram);
    RegionNode theStart = theGraph.createAt(BytecodeOpcodeAddress.START_AT_ZERO, RegionNode.BlockType.NORMAL);
    ExpressionList theExpressions = theStart.getExpressions();
    Variable theVariable1 = new Variable(TypeRef.Native.INT, "var1");
    Variable theVariable2 = new Variable(TypeRef.Native.INT, "var2");
    IntegerValue theInt1 = new IntegerValue(10);
    theVariable1.initializeWith(theInt1);
    theExpressions.add(new VariableAssignmentExpression(theVariable1, theInt1));
    IntegerValue theInt2 = new IntegerValue(20);
    theVariable2.initializeWith(theInt2);
    theExpressions.add(new VariableAssignmentExpression(theVariable2, theInt2));
    Variable theVariable3 = new Variable(TypeRef.Native.INT, "var3");
    BinaryExpression theBinary = new BinaryExpression(TypeRef.Native.INT, theVariable1, BinaryExpression.Operator.ADD, theVariable2);
    theVariable3.initializeWith(theBinary);
    theExpressions.add(new VariableAssignmentExpression(theVariable3, theBinary));
    theExpressions.add(new ReturnValueExpression(theVariable3));
    RedundantAssignmentOptimizer theOptimizer = new RedundantAssignmentOptimizer();
    theOptimizer.optimize(theGraph, null);
    System.out.println(theExpressions);
}
Also used : ReturnValueExpression(de.mirkosertic.bytecoder.ssa.ReturnValueExpression) Program(de.mirkosertic.bytecoder.ssa.Program) Variable(de.mirkosertic.bytecoder.ssa.Variable) BinaryExpression(de.mirkosertic.bytecoder.ssa.BinaryExpression) ControlFlowGraph(de.mirkosertic.bytecoder.ssa.ControlFlowGraph) IntegerValue(de.mirkosertic.bytecoder.ssa.IntegerValue) RegionNode(de.mirkosertic.bytecoder.ssa.RegionNode) ExpressionList(de.mirkosertic.bytecoder.ssa.ExpressionList) VariableAssignmentExpression(de.mirkosertic.bytecoder.ssa.VariableAssignmentExpression) Test(org.junit.Test)

Example 2 with BinaryExpression

use of de.mirkosertic.bytecoder.ssa.BinaryExpression in project Bytecoder by mirkosertic.

the class OpenCLWriter method printValue.

private void printValue(Value aValue) {
    if (aValue instanceof Variable) {
        Variable theVariable = (Variable) aValue;
        print(theVariable.getName());
    } else if (aValue instanceof InvokeVirtualMethodExpression) {
        printInvokeVirtual((InvokeVirtualMethodExpression) aValue);
    } else if (aValue instanceof InvokeStaticMethodExpression) {
        printInvokeStatic((InvokeStaticMethodExpression) aValue);
    } else if (aValue instanceof GetFieldExpression) {
        printGetFieldValue((GetFieldExpression) aValue);
    } else if (aValue instanceof ArrayEntryExpression) {
        printArrayEntryValue((ArrayEntryExpression) aValue);
    } else if (aValue instanceof BinaryExpression) {
        printBinaryValue((BinaryExpression) aValue);
    } else if (aValue instanceof IntegerValue) {
        printIntegerValue((IntegerValue) aValue);
    } else if (aValue instanceof LongValue) {
        printLongValue((LongValue) aValue);
    } else if (aValue instanceof FloatValue) {
        printFloatValue((FloatValue) aValue);
    } else if (aValue instanceof DoubleValue) {
        printDoubleValue((DoubleValue) aValue);
    } else if (aValue instanceof TypeConversionExpression) {
        printTypeConversionValue((TypeConversionExpression) aValue);
    } else if (aValue instanceof CompareExpression) {
        printCompareExpression((CompareExpression) aValue);
    } else if (aValue instanceof DirectInvokeMethodExpression) {
        printDirectInvokeMethodExpression((DirectInvokeMethodExpression) aValue);
    } else {
        throw new IllegalArgumentException("Not supported : " + aValue);
    }
}
Also used : Variable(de.mirkosertic.bytecoder.ssa.Variable) IntegerValue(de.mirkosertic.bytecoder.ssa.IntegerValue) GetFieldExpression(de.mirkosertic.bytecoder.ssa.GetFieldExpression) CompareExpression(de.mirkosertic.bytecoder.ssa.CompareExpression) DirectInvokeMethodExpression(de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression) InvokeStaticMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression) InvokeVirtualMethodExpression(de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression) BinaryExpression(de.mirkosertic.bytecoder.ssa.BinaryExpression) DoubleValue(de.mirkosertic.bytecoder.ssa.DoubleValue) TypeConversionExpression(de.mirkosertic.bytecoder.ssa.TypeConversionExpression) LongValue(de.mirkosertic.bytecoder.ssa.LongValue) FloatValue(de.mirkosertic.bytecoder.ssa.FloatValue) ArrayEntryExpression(de.mirkosertic.bytecoder.ssa.ArrayEntryExpression)

Aggregations

BinaryExpression (de.mirkosertic.bytecoder.ssa.BinaryExpression)2 IntegerValue (de.mirkosertic.bytecoder.ssa.IntegerValue)2 Variable (de.mirkosertic.bytecoder.ssa.Variable)2 ArrayEntryExpression (de.mirkosertic.bytecoder.ssa.ArrayEntryExpression)1 CompareExpression (de.mirkosertic.bytecoder.ssa.CompareExpression)1 ControlFlowGraph (de.mirkosertic.bytecoder.ssa.ControlFlowGraph)1 DirectInvokeMethodExpression (de.mirkosertic.bytecoder.ssa.DirectInvokeMethodExpression)1 DoubleValue (de.mirkosertic.bytecoder.ssa.DoubleValue)1 ExpressionList (de.mirkosertic.bytecoder.ssa.ExpressionList)1 FloatValue (de.mirkosertic.bytecoder.ssa.FloatValue)1 GetFieldExpression (de.mirkosertic.bytecoder.ssa.GetFieldExpression)1 InvokeStaticMethodExpression (de.mirkosertic.bytecoder.ssa.InvokeStaticMethodExpression)1 InvokeVirtualMethodExpression (de.mirkosertic.bytecoder.ssa.InvokeVirtualMethodExpression)1 LongValue (de.mirkosertic.bytecoder.ssa.LongValue)1 Program (de.mirkosertic.bytecoder.ssa.Program)1 RegionNode (de.mirkosertic.bytecoder.ssa.RegionNode)1 ReturnValueExpression (de.mirkosertic.bytecoder.ssa.ReturnValueExpression)1 TypeConversionExpression (de.mirkosertic.bytecoder.ssa.TypeConversionExpression)1 VariableAssignmentExpression (de.mirkosertic.bytecoder.ssa.VariableAssignmentExpression)1 Test (org.junit.Test)1