# HG changeset patch # User Josef Eisl # Date 1396878180 -7200 # Node ID d0294fa66a33232770929bcabadcbd4efa5c73f9 # Parent 292353f2645c43786aa84a5f56f61818a09745d3 Backout 20b3db86b1fa. diff -r 292353f2645c -r d0294fa66a33 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 15:04:14 2014 +0200 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Mon Apr 07 15:43:00 2014 +0200 @@ -354,12 +354,6 @@ } @Override - protected void genGoto() { - assert currentBlock.numNormalSuccessors() == 1; - gen.emitJump(LabelRef.forSuccessor(lirGenRes.getLIR(), currentBlock, 0)); - } - - @Override protected Value genObjectEquals(Value x, Value y) { // TODO Auto-generated method stub throw GraalInternalError.unimplemented("Auto-generated method stub"); @@ -377,7 +371,7 @@ BciBlock trueBlock = currentBlock.getSuccessors().get(0); BciBlock falseBlock = currentBlock.getSuccessors().get(1); if (trueBlock == falseBlock) { - gen.emitJump(LabelRef.forSuccessor(lirGenRes.getLIR(), currentBlock, 0)); + appendGoto(createTarget(trueBlock, frameState)); return; } @@ -577,6 +571,12 @@ } @Override + protected Value createTarget(BciBlock trueBlock, AbstractFrameStateBuilder state) { + // TODO Auto-generated method stub + throw GraalInternalError.unimplemented("Auto-generated method stub"); + } + + @Override protected Value createBlockTarget(double probability, BciBlock bciBlock, AbstractFrameStateBuilder stateAfter) { // TODO Auto-generated method stub throw GraalInternalError.unimplemented("Auto-generated method stub"); @@ -584,7 +584,6 @@ @Override protected void processBlock(BciBlock block) { - currentBlock = block; iterateBytecodesForBlock(block); } @@ -620,19 +619,17 @@ processBytecode(bci, opcode); - if (gen.hasBlockEnd(currentBlock)) { - break; - } - stream.next(); bci = stream.currentBCI(); if (bci < endBCI) { if (bci > block.endBci) { - assert block.numNormalSuccessors() == 1; - assert !block.getSuccessor(0).isExceptionEntry; - // we fell through to the next block, add a goto and break - genGoto(); + 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); + } break; } } diff -r 292353f2645c -r d0294fa66a33 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Mon Apr 07 15:04:14 2014 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Mon Apr 07 15:43:00 2014 +0200 @@ -887,6 +887,7 @@ private static NodeLIRBuilder getNodeLIRGeneratorFromDebugContext() { if (Debug.isEnabled()) { NodeLIRBuilder lirGen = Debug.contextLookup(NodeLIRBuilder.class); + assert lirGen != null; return lirGen; } return null; diff -r 292353f2645c -r d0294fa66a33 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 15:04:14 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java Mon Apr 07 15:43:00 2014 +0200 @@ -505,7 +505,11 @@ frameState.storeLocal(index, append(genIntegerAdd(Kind.Int, x, y))); } - protected abstract void genGoto(); + private void genGoto() { + appendGoto(createTarget(currentBlock.getSuccessors().get(0), frameState)); + // assert currentBlock.numNormalSuccessors() == 1; + assert currentBlock.getSuccessors().size() == 1; + } protected abstract T genObjectEquals(T x, T y); @@ -900,12 +904,24 @@ protected abstract T append(T v); - protected boolean isNeverExecutedCode(double probability) { + private 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, AbstractFrameStateBuilder 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, AbstractFrameStateBuilder state); + /** * Returns a block begin node with the specified state. If the specified probability is 0, the * block deoptimizes immediately. diff -r 292353f2645c -r d0294fa66a33 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 15:04:14 2014 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Apr 07 15:43:00 2014 +0200 @@ -562,12 +562,6 @@ } @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); } @@ -994,17 +988,15 @@ return currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode)); } + @Override protected FixedNode createTarget(double probability, BciBlock block, AbstractFrameStateBuilder stateAfter) { - assert probability >= 0 && probability <= 1.01 : probability; - if (isNeverExecutedCode(probability)) { - return (FixedNode) genDeoptimization(); - } else { - assert block != null; - return createTarget(block, stateAfter); - } + ValueNode fixed = super.createTarget(probability, block, stateAfter); + assert fixed instanceof FixedNode; + return (FixedNode) fixed; } + @Override protected FixedNode createTarget(BciBlock block, AbstractFrameStateBuilder abstractState) { assert abstractState instanceof HIRFrameStateBuilder; HIRFrameStateBuilder state = (HIRFrameStateBuilder) abstractState;