# HG changeset patch # User Josef Eisl # Date 1395665816 -3600 # Node ID dbe762fc0eb1e09a6e52379be44db708e87896ea # Parent 6c4b46e4f64043af8e618e9c8349cc0b5eeef582 Set parameter frameState in BaselineCompiler. diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java --- 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 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); + } } diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- 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 > void emitPrologue(ResolvedJavaMethod method, BytecodeParser 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)); } } } diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BaselineLIRGenerator.java --- 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); } diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/BytecodeParser.java --- 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> { void processBlock(T block); + + void setParameter(int i, Variable emitMove); } diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- 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 > void emitPrologue(ResolvedJavaMethod method, BytecodeParser 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 diff -r 6c4b46e4f640 -r dbe762fc0eb1 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- 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 > void emitPrologue(ResolvedJavaMethod method, BytecodeParser 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)); } }