changeset 15026:d0294fa66a33

Backout 20b3db86b1fa.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 07 Apr 2014 15:43:00 +0200
parents 292353f2645c
children 0ab4e4a0e4bd
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, 37 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- 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<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,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;
                 }
             }
--- 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;
--- 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<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	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<ValueNode> 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<ValueNode> abstractState) {
                 assert abstractState instanceof HIRFrameStateBuilder;
                 HIRFrameStateBuilder state = (HIRFrameStateBuilder) abstractState;