# HG changeset patch # User Josef Eisl # Date 1396882914 -7200 # Node ID e098038093d5fde2b4e76ba4551d21cba205fab9 # Parent e5eec42f42f81f32d956b0ef38dfe3e1ba343d50 AbstractBytecodeParser: move createTarget to GraphBuilderPhase. diff -r e5eec42f42f8 -r e098038093d5 graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Mon Apr 07 16:44:05 2014 +0200 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Mon Apr 07 17:01:54 2014 +0200 @@ -371,7 +371,7 @@ BciBlock trueBlock = currentBlock.getSuccessors().get(0); BciBlock falseBlock = currentBlock.getSuccessors().get(1); if (trueBlock == falseBlock) { - appendGoto(createTarget(trueBlock, frameState)); + genGoto(); return; } @@ -559,29 +559,11 @@ } @Override - protected Value genDeoptimization() { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented("Auto-generated method stub"); - } - - @Override - protected Value createTarget(BciBlock trueBlock, LIRFrameStateBuilder state) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented("Auto-generated method stub"); - } - - @Override protected void processBlock(BciBlock block) { iterateBytecodesForBlock(block); } @Override - protected void appendGoto(Value target) { - // TODO Auto-generated method stub - throw GraalInternalError.unimplemented("Auto-generated method stub"); - } - - @Override protected void iterateBytecodesForBlock(BciBlock block) { gen.doBlockStart(block); @@ -615,8 +597,7 @@ if (block.numNormalSuccessors() == 1) { assert !block.getSuccessor(0).isExceptionEntry; // we fell through to the next block, add a goto and break - LabelRef label = LabelRef.forSuccessor(lirGenRes.getLIR(), block.getSuccessor(0), 0); - gen.emitJump(label); + genGoto(); } break; } @@ -631,4 +612,10 @@ frameState.storeLocal(i, x); } + @Override + protected void genGoto() { + LabelRef label = LabelRef.forSuccessor(lirGenRes.getLIR(), currentBlock, 0); + gen.emitJump(label); + } + } \ No newline at end of file diff -r e5eec42f42f8 -r e098038093d5 graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Apr 07 16:44:05 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Apr 07 17:01:54 2014 +0200 @@ -505,11 +505,7 @@ frameState.storeLocal(index, append(genIntegerAdd(Kind.Int, x, y))); } - private void genGoto() { - appendGoto(createTarget(currentBlock.getSuccessors().get(0), frameState)); - // assert currentBlock.numNormalSuccessors() == 1; - assert currentBlock.getSuccessors().size() == 1; - } + protected abstract void genGoto(); protected abstract T genObjectEquals(T x, T y); @@ -898,28 +894,12 @@ protected abstract T append(T v); - private boolean isNeverExecutedCode(double probability) { + protected boolean isNeverExecutedCode(double probability) { return probability == 0 && optimisticOpts.removeNeverExecutedCode() && entryBCI == StructuredGraph.INVOCATION_ENTRY_BCI; } - protected abstract T genDeoptimization(); - - protected T createTarget(double probability, BciBlock block, F stateAfter) { - assert probability >= 0 && probability <= 1.01 : probability; - if (isNeverExecutedCode(probability)) { - return genDeoptimization(); - } else { - assert block != null; - return createTarget(block, stateAfter); - } - } - - protected abstract T createTarget(BciBlock trueBlock, F state); - protected abstract void processBlock(BciBlock block); - protected abstract void appendGoto(T target); - protected abstract void iterateBytecodesForBlock(BciBlock block); public void processBytecode(int bci, int opcode) { diff -r e5eec42f42f8 -r e098038093d5 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Apr 07 16:44:05 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Apr 07 17:01:54 2014 +0200 @@ -562,6 +562,12 @@ } @Override + protected void genGoto() { + appendGoto(createTarget(currentBlock.getSuccessors().get(0), frameState)); + assert currentBlock.numNormalSuccessors() == 1; + } + + @Override protected ValueNode genObjectEquals(ValueNode x, ValueNode y) { return new ObjectEqualsNode(x, y); } @@ -982,21 +988,17 @@ return new Target(target, state); } - @Override - protected ValueNode genDeoptimization() { - return currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode)); + private FixedNode createTarget(double probability, BciBlock block, HIRFrameStateBuilder stateAfter) { + assert probability >= 0 && probability <= 1.01 : probability; + if (isNeverExecutedCode(probability)) { + return currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode)); + } else { + assert block != null; + return createTarget(block, stateAfter); + } } - @Override - protected FixedNode createTarget(double probability, BciBlock block, HIRFrameStateBuilder stateAfter) { - ValueNode fixed = super.createTarget(probability, block, stateAfter); - assert fixed instanceof FixedNode; - return (FixedNode) fixed; - - } - - @Override - protected FixedNode createTarget(BciBlock block, HIRFrameStateBuilder state) { + private FixedNode createTarget(BciBlock block, HIRFrameStateBuilder state) { assert block != null && state != null; assert !block.isExceptionEntry || state.stackSize() == 1; @@ -1212,10 +1214,7 @@ } } - @Override - protected void appendGoto(ValueNode targetNode) { - assert targetNode instanceof FixedNode; - FixedNode target = (FixedNode) targetNode; + private void appendGoto(FixedNode target) { if (lastInstr != null) { lastInstr.setNext(target); }