changeset 3168:adbb7bca84b7

Merge.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Wed, 06 Jul 2011 17:02:38 +0200
parents 132aa6f2bbc0 (diff) ce7e5b3798f7 (current diff)
children af4955a7ffc2
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java
diffstat 9 files changed, 39 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java	Wed Jul 06 17:02:38 2011 +0200
@@ -95,6 +95,15 @@
         setY(y);
     }
 
+    @Override
+    public boolean valueEqual(Node i) {
+        if (i instanceof Compare) {
+            Compare compare = (Compare) i;
+            return compare.condition == condition && compare.unorderedIsTrue == unorderedIsTrue;
+        }
+        return super.valueEqual(i);
+    }
+
     /**
      * Gets the condition (comparison operation) for this instruction.
      * @return the condition
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/GuardNode.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/GuardNode.java	Wed Jul 06 17:02:38 2011 +0200
@@ -75,6 +75,11 @@
         return new GuardNode(null, into);
     }
 
+    @Override
+    public boolean valueEqual(Node i) {
+        return i instanceof GuardNode;
+    }
+
     @SuppressWarnings("unchecked")
     @Override
     public <T extends Op> T lookup(Class<T> clazz) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/RegisterFinalizer.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/RegisterFinalizer.java	Wed Jul 06 17:02:38 2011 +0200
@@ -107,11 +107,11 @@
             }
 
             if (needsCheck) {
-                if (GraalOptions.TraceGVN) {
+                if (GraalOptions.TraceCanonicalizer) {
                     TTY.println("Could not canonicalize finalizer " + object + " (declaredType=" + declaredType + ", exactType=" + exactType + ")");
                 }
             } else {
-                if (GraalOptions.TraceGVN) {
+                if (GraalOptions.TraceCanonicalizer) {
                     TTY.println("Canonicalized finalizer for object " + object);
                 }
                 return finalizer.next();
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Wed Jul 06 17:02:38 2011 +0200
@@ -1250,6 +1250,7 @@
                 } else if (block instanceof DeoptBlock) {
                     createDeoptBlock((DeoptBlock) block);
                 } else {
+                    frameState.setRethrowException(false);
                     iterateBytecodesForBlock(block);
                 }
             }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java	Wed Jul 06 17:02:38 2011 +0200
@@ -50,7 +50,7 @@
 
     protected final int locksSize;
 
-    private final boolean rethrowException;
+    private boolean rethrowException;
 
     private static final int SUCCESSOR_COUNT = 0;
 
@@ -641,4 +641,9 @@
     public Node copy(Graph into) {
         return new FrameState(method, bci, localsSize, stackSize, locksSize, rethrowException, into);
     }
+
+    @Override
+    public void setRethrowException(boolean b) {
+        rethrowException = b;
+    }
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateAccess.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateAccess.java	Wed Jul 06 17:02:38 2011 +0200
@@ -34,6 +34,8 @@
 
     int locksSize();
 
+    boolean rethrowException();
+
     Value valueAt(int i);
 
     Value localAt(int i);
@@ -44,6 +46,8 @@
 
     void setValueAt(int j, Value v);
 
+    void setRethrowException(boolean b);
+
     Value outerFrameState();
 
     FrameState duplicateWithException(int bci, Value exceptionObject);
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java	Wed Jul 06 17:02:38 2011 +0200
@@ -519,4 +519,14 @@
         frameState.setOuterFrameState(outerFrameState());
         return frameState;
     }
+
+    @Override
+    public boolean rethrowException() {
+        return rethrowException;
+    }
+
+    @Override
+    public void setRethrowException(boolean b) {
+        rethrowException = b;
+    }
 }
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Wed Jul 06 16:51:01 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Wed Jul 06 17:02:38 2011 +0200
@@ -307,7 +307,7 @@
             LocationNode arrayLocation = createArrayLocation(graph, elementKind);
             arrayLocation.setIndex(storeIndexed.index());
             Value value = storeIndexed.value();
-            if (elementKind == CiKind.Object) {
+            if (elementKind == CiKind.Object && !value.isNullConstant()) {
                 // Store check!
                 if (storeIndexed.array().exactType() != null) {
                     RiType elementType = storeIndexed.array().exactType().componentType();
--- a/src/share/vm/runtime/deoptimization.cpp	Wed Jul 06 16:51:01 2011 +0200
+++ b/src/share/vm/runtime/deoptimization.cpp	Wed Jul 06 17:02:38 2011 +0200
@@ -1247,6 +1247,7 @@
         tty->print_cr("Exception to be rethrown in the interpreter for method %s::%s at bci %d", instanceKlass::cast(trap_method->method_holder())->name()->as_C_string(), trap_method->name()->as_C_string(), trap_bci);
       }
       GrowableArray<ScopeValue*>* expressions = trap_scope->expressions();
+      guarantee(expressions != NULL, "must have exception to throw");
       ScopeValue* topOfStack = expressions->top();
       Handle topOfStackObj = cvf->create_stack_value(topOfStack)->get_obj();
       THREAD->set_pending_exception(topOfStackObj(), NULL, 0);