changeset 14973:20b3db86b1fa

AbstractBytecodeParser: remove createTarget.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 04 Apr 2014 12:49:26 +0200
parents 0e111aab730c
children 6270e260c23b
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
diffstat 4 files changed, 31 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Fri Apr 04 12:45:58 2014 +0200
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Fri Apr 04 12:49:26 2014 +0200
@@ -354,6 +354,12 @@
     }
 
     @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");
@@ -371,7 +377,7 @@
         BciBlock trueBlock = currentBlock.getSuccessors().get(0);
         BciBlock falseBlock = currentBlock.getSuccessors().get(1);
         if (trueBlock == falseBlock) {
-            appendGoto(createTarget(trueBlock, frameState));
+            gen.emitJump(LabelRef.forSuccessor(lirGenRes.getLIR(), currentBlock, 0));
             return;
         }
 
@@ -571,12 +577,6 @@
     }
 
     @Override
-    protected Value createTarget(BciBlock trueBlock, AbstractFrameStateBuilder<Value> state) {
-        // TODO Auto-generated method stub
-        throw GraalInternalError.unimplemented("Auto-generated method stub");
-    }
-
-    @Override
     protected Value createBlockTarget(double probability, BciBlock bciBlock, AbstractFrameStateBuilder<Value> stateAfter) {
         // TODO Auto-generated method stub
         throw GraalInternalError.unimplemented("Auto-generated method stub");
@@ -584,6 +584,7 @@
 
     @Override
     protected void processBlock(BciBlock block) {
+        currentBlock = block;
         iterateBytecodesForBlock(block);
     }
 
@@ -619,17 +620,19 @@
 
             processBytecode(bci, opcode);
 
+            if (gen.hasBlockEnd(currentBlock)) {
+                break;
+            }
+
             stream.next();
             bci = stream.currentBCI();
 
             if (bci < endBCI) {
                 if (bci > block.endBci) {
-                    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);
-                    }
+                    assert block.numNormalSuccessors() == 1;
+                    assert !block.getSuccessor(0).isExceptionEntry;
+                    // we fell through to the next block, add a goto and break
+                    genGoto();
                     break;
                 }
             }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Fri Apr 04 12:45:58 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java	Fri Apr 04 12:49:26 2014 +0200
@@ -887,7 +887,6 @@
     private static NodeLIRBuilder getNodeLIRGeneratorFromDebugContext() {
         if (Debug.isEnabled()) {
             NodeLIRBuilder lirGen = Debug.contextLookup(NodeLIRBuilder.class);
-            assert lirGen != null;
             return lirGen;
         }
         return null;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Fri Apr 04 12:45:58 2014 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java	Fri Apr 04 12:49:26 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);
 
@@ -911,24 +907,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, AbstractFrameStateBuilder<T> 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<T> state);
-
     /**
      * Returns a block begin node with the specified state. If the specified probability is 0, the
      * block deoptimizes immediately.
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Apr 04 12:45:58 2014 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Apr 04 12:49:26 2014 +0200
@@ -569,6 +569,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);
             }
@@ -1007,15 +1013,17 @@
                 return currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode));
             }
 
-            @Override
             protected FixedNode createTarget(double probability, BciBlock block, AbstractFrameStateBuilder<ValueNode> stateAfter) {
-                ValueNode fixed = super.createTarget(probability, block, stateAfter);
-                assert fixed instanceof FixedNode;
-                return (FixedNode) fixed;
+                assert probability >= 0 && probability <= 1.01 : probability;
+                if (isNeverExecutedCode(probability)) {
+                    return (FixedNode) genDeoptimization();
+                } else {
+                    assert block != null;
+                    return createTarget(block, stateAfter);
+                }
 
             }
 
-            @Override
             protected FixedNode createTarget(BciBlock block, AbstractFrameStateBuilder<ValueNode> abstractState) {
                 assert abstractState instanceof HIRFrameStateBuilder;
                 HIRFrameStateBuilder state = (HIRFrameStateBuilder) abstractState;