changeset 14834:dbe762fc0eb1

Set parameter frameState in BaselineCompiler.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 24 Mar 2014 13:56:56 +0100
parents 6c4b46e4f640
children 6c50d8a6d394 75104db5215e
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BaselineLIRGenerator.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParser.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java
diffstat 6 files changed, 56 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java	Mon Mar 24 13:56:56 2014 +0100
@@ -83,6 +83,7 @@
 
     private final GraphBuilderConfiguration graphBuilderConfig;
     private BciBlock[] loopHeaders;
+    private BytecodeParseHelper<Value> parserHelper;
 
     /**
      * Meters the number of actual bytecodes parsed.
@@ -107,6 +108,7 @@
         TTY.Filter filter = new TTY.Filter(PrintFilter.getValue(), method);
 
         frameState = new LIRFrameStateBuilder(method);
+        parserHelper = new BytecodeParseHelper<>(frameState);
 
         // build blocks and LIR instructions
         try {
@@ -212,11 +214,11 @@
     }
 
     private void loadLocal(int index, Kind kind) {
-        throw GraalInternalError.unimplemented();
+        parserHelper.loadLocal(index, kind);
     }
 
     private void storeLocal(Kind kind, int index) {
-        throw GraalInternalError.unimplemented();
+        parserHelper.storeLocal(kind, index);
     }
 
     /**
@@ -714,12 +716,12 @@
             case RET            : genRet(stream.readLocalIndex()); break;
             case TABLESWITCH    : genSwitch(new BytecodeTableSwitch(stream(), bci())); break;
             case LOOKUPSWITCH   : genSwitch(new BytecodeLookupSwitch(stream(), bci())); break;
-//            case IRETURN        : genReturn(frameState.ipop()); break;
-//            case LRETURN        : genReturn(frameState.lpop()); break;
-//            case FRETURN        : genReturn(frameState.fpop()); break;
-//            case DRETURN        : genReturn(frameState.dpop()); break;
-//            case ARETURN        : genReturn(frameState.apop()); break;
-//            case RETURN         : genReturn(null); break;
+            case IRETURN        : genReturn(frameState.ipop()); break;
+            case LRETURN        : genReturn(frameState.lpop()); break;
+            case FRETURN        : genReturn(frameState.fpop()); break;
+            case DRETURN        : genReturn(frameState.dpop()); break;
+            case ARETURN        : genReturn(frameState.apop()); break;
+            case RETURN         : genReturn(null); break;
             case GETSTATIC      : cpi = stream.readCPI(); genGetStatic(lookupField(cpi, opcode)); break;
             case PUTSTATIC      : cpi = stream.readCPI(); genPutStatic(lookupField(cpi, opcode)); break;
             case GETFIELD       : cpi = stream.readCPI(); genGetField(lookupField(cpi, opcode)); break;
@@ -775,4 +777,23 @@
     private void genArrayLength() {
         throw GraalInternalError.unimplemented();
     }
+
+    private void genReturn(Value x) {
+        // frameState.setRethrowException(false);
+        frameState.clearStack();
+// if (graphBuilderConfig.eagerInfopointMode()) {
+// append(new InfopointNode(InfopointReason.METHOD_END, frameState.create(bci())));
+// }
+
+// synchronizedEpilogue(FrameState.AFTER_BCI, x);
+// if (frameState.lockDepth() != 0) {
+// throw new BailoutException("unbalanced monitors");
+// }
+
+        lirGen.visitReturn(x);
+    }
+
+    public void setParameter(int i, Variable emitMove) {
+        frameState.storeLocal(i, emitMove);
+    }
 }
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java	Mon Mar 24 13:56:56 2014 +0100
@@ -63,6 +63,7 @@
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.calc.*;
 import com.oracle.graal.nodes.calc.FloatConvertNode.FloatConvert;
+import com.oracle.graal.nodes.cfg.*;
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.java.*;
 import com.oracle.graal.nodes.type.*;
@@ -172,7 +173,7 @@
     }
 
     @Override
-    protected void emitPrologue(ResolvedJavaMethod method) {
+    protected <T extends AbstractBlock<T>> void emitPrologue(ResolvedJavaMethod method, BytecodeParser<T> parser) {
         // Need to emit .param directives based on incoming arguments and return value
         CallingConvention incomingArguments = getCallingConvention();
         Object returnObject = incomingArguments.getReturn();
@@ -205,11 +206,11 @@
             if (warpAnnotation != null) {
                 // setResult(param, emitWarpParam(paramValue.getKind().getStackKind(),
                 // warpAnnotation));
-                emitWarpParam(paramValue.getKind().getStackKind(), warpAnnotation);
+                parser.setParameter(i, emitWarpParam(paramValue.getKind().getStackKind(), warpAnnotation));
             } else {
                 // setResult(param, emitLoadParam(paramValue.getKind().getStackKind(), paramValue,
                 // null));
-                emitLoadParam(paramValue.getKind().getStackKind(), paramValue, null);
+                parser.setParameter(i, emitLoadParam(paramValue.getKind().getStackKind(), paramValue, null));
             }
         }
     }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BaselineLIRGenerator.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BaselineLIRGenerator.java	Mon Mar 24 13:56:56 2014 +0100
@@ -22,5 +22,9 @@
  */
 package com.oracle.graal.compiler.gen;
 
+import com.oracle.graal.api.meta.*;
+
 public interface BaselineLIRGenerator {
+
+    void visitReturn(Value x);
 }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParser.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParser.java	Mon Mar 24 13:56:56 2014 +0100
@@ -22,8 +22,11 @@
  */
 package com.oracle.graal.compiler.gen;
 
+import com.oracle.graal.lir.*;
 import com.oracle.graal.nodes.cfg.*;
 
 public interface BytecodeParser<T extends AbstractBlock<T>> {
     void processBlock(T block);
+
+    void setParameter(int i, Variable emitMove);
 }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java	Mon Mar 24 13:56:56 2014 +0100
@@ -448,7 +448,7 @@
 
         if (block == res.getLIR().getControlFlowGraph().getStartBlock()) {
             assert block.getPredecessorCount() == 0;
-            emitPrologue(method);
+            emitPrologue(method, parser);
         } else {
             assert block.getPredecessorCount() > 0;
         }
@@ -572,7 +572,7 @@
         }
     }
 
-    protected void emitPrologue(ResolvedJavaMethod method) {
+    protected <T extends AbstractBlock<T>> void emitPrologue(ResolvedJavaMethod method, BytecodeParser<T> parser) {
         CallingConvention incomingArguments = getCallingConvention();
 
         Value[] params = new Value[incomingArguments.getArgumentCount()];
@@ -590,12 +590,11 @@
 
         Signature sig = method.getSignature();
         boolean isStatic = Modifier.isStatic(method.getModifiers());
-        Value[] arguments = new Value[sig.getParameterCount(!isStatic)];
         for (int i = 0; i < sig.getParameterCount(!isStatic); i++) {
             Value paramValue = params[i];
             assert paramValue.getKind() == sig.getParameterKind(i).getStackKind();
             // TODO setResult(param, emitMove(paramValue));
-            arguments[i] = emitMove(paramValue);
+            parser.setParameter(i, emitMove(paramValue));
         }
 
         // return arguments;
@@ -615,6 +614,16 @@
         emitReturn(operand);
     }
 
+    @Override
+    public void visitReturn(Value x) {
+        AllocatableValue operand = ILLEGAL;
+        if (x != null) {
+            operand = resultOperandFor(x.getKind());
+            emitMove(operand, x);
+        }
+        emitReturn(operand);
+    }
+
     protected abstract void emitReturn(Value input);
 
     @Override
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Mon Mar 24 13:15:42 2014 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java	Mon Mar 24 13:56:56 2014 +0100
@@ -59,6 +59,7 @@
 import com.oracle.graal.lir.amd64.AMD64Move.StoreOp;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.calc.*;
+import com.oracle.graal.nodes.cfg.*;
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.java.*;
 import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind;
@@ -174,7 +175,7 @@
     }
 
     @Override
-    protected void emitPrologue(ResolvedJavaMethod method) {
+    protected <T extends AbstractBlock<T>> void emitPrologue(ResolvedJavaMethod method, BytecodeParser<T> parser) {
 
         CallingConvention incomingArguments = getCallingConvention();
 
@@ -201,8 +202,7 @@
         for (int i = 0; i < sig.getParameterCount(!isStatic); i++) {
             Value paramValue = params[i];
             assert paramValue.getKind() == sig.getParameterKind(i).getStackKind();
-            // TODO setResult(param, emitMove(paramValue));
-            emitMove(paramValue);
+            parser.setParameter(i, emitMove(paramValue));
         }
     }