changeset 8448:71a9f3a5d8c5

Merge.
author Doug Simon <doug.simon@oracle.com>
date Fri, 22 Mar 2013 18:18:55 +0100
parents b6b9ab1fde62 (diff) 3e85441907de (current diff)
children 7485b8a7cd24
files graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
diffstat 7 files changed, 86 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectSubstitutions.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectSubstitutions.java	Fri Mar 22 18:18:55 2013 +0100
@@ -27,6 +27,7 @@
 
 import com.oracle.graal.api.replacements.*;
 import com.oracle.graal.nodes.extended.*;
+import com.oracle.graal.nodes.java.*;
 import com.oracle.graal.replacements.*;
 import com.oracle.graal.word.*;
 
@@ -47,6 +48,11 @@
         return computeHashCode(thisObj);
     }
 
+    @MethodSubstitution(value = "<init>", isStatic = false)
+    public static void init(Object thisObj) {
+        RegisterFinalizerNode.register(thisObj);
+    }
+
     @MacroSubstitution(macro = ObjectCloneNode.class, isStatic = false)
     public static native Object clone(Object obj);
 }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java	Fri Mar 22 18:18:55 2013 +0100
@@ -782,14 +782,6 @@
         stream.setBCI(block.startBci);
         while (stream.currentBCI() <= block.endBci) {
             switch (stream.currentBC()) {
-                case RETURN:
-                    if (method.isConstructor() && MetaUtil.isJavaLangObject(method.getDeclaringClass())) {
-                        // return from Object.init implicitly registers a finalizer
-                        // for the receiver if needed, so keep it alive.
-                        loadOne(block, 0);
-                    }
-                    break;
-
                 case LLOAD:
                 case DLOAD:
                     loadTwo(block, stream.readLocalIndex());
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Mar 22 18:18:55 2013 +0100
@@ -1143,11 +1143,6 @@
         }
     }
 
-    private void callRegisterFinalizer() {
-        // append a call to the finalizer registration
-        append(currentGraph.add(new RegisterFinalizerNode(frameState.loadLocal(0))));
-    }
-
     private void genReturn(ValueNode x) {
         frameState.clearStack();
         if (x != null) {
@@ -1562,9 +1557,6 @@
     }
 
     private void createReturn() {
-        if (method.isConstructor() && MetaUtil.isJavaLangObject(method.getDeclaringClass())) {
-            callRegisterFinalizer();
-        }
         Kind returnKind = method.getSignature().getReturnKind().getStackKind();
         ValueNode x = returnKind == Kind.Void ? null : frameState.pop(returnKind);
         assert frameState.stackSize() == 0;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Fri Mar 22 18:18:55 2013 +0100
@@ -22,7 +22,14 @@
  */
 package com.oracle.graal.nodes.extended;
 
+import static com.oracle.graal.graph.UnsafeAccess.*;
+
+import java.lang.reflect.*;
+
+import sun.misc.*;
+
 import com.oracle.graal.api.code.*;
+import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.*;
 import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.nodes.type.*;
@@ -55,5 +62,25 @@
     @SuppressWarnings("unused")
     @NodeIntrinsic
     public static void memoryBarrier(@ConstantNodeParameter int barriers) {
+        // Overly conservative but it doesn't matter in the interpreter
+        unsafe.putIntVolatile(dummyBase, dummyOffset, 0);
+        unsafe.getIntVolatile(dummyBase, dummyOffset);
+    }
+
+    /**
+     * An unused field that it used to exercise barriers in the interpreter. This can be replaced
+     * with direct support for barriers in {@link Unsafe} if/when they become available.
+     */
+    @SuppressWarnings("unused") private static int dummy;
+    private static Object dummyBase;
+    private static long dummyOffset;
+    static {
+        try {
+            Field dummyField = MembarNode.class.getDeclaredField("dummy");
+            dummyBase = unsafe.staticFieldBase(dummyField);
+            dummyOffset = unsafe.staticFieldOffset(dummyField);
+        } catch (Exception e) {
+            throw new GraalInternalError(e);
+        }
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java	Fri Mar 22 18:18:55 2013 +0100
@@ -61,8 +61,8 @@
         if (stamp.isExactType()) {
             needsCheck = stamp.type().hasFinalizer();
         } else if (stamp.type() != null && !stamp.type().hasFinalizableSubclass()) {
-            // if either the declared type of receiver or the holder can be assumed to have no
-            // finalizers
+            // if either the declared type of receiver or the holder
+            // can be assumed to have no finalizers
             if (tool.assumptions().useOptimisticAssumptions() && tool.assumptions().recordNoFinalizableSubclassAssumption(stamp.type())) {
                 needsCheck = false;
             }
@@ -82,4 +82,9 @@
             tool.delete();
         }
     }
+
+    @SuppressWarnings("unused")
+    @NodeIntrinsic
+    public static void register(Object thisObj) {
+    }
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java	Fri Mar 22 09:28:38 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/UnsafeSubstitutions.java	Fri Mar 22 18:18:55 2013 +0100
@@ -22,7 +22,8 @@
  */
 package com.oracle.graal.replacements;
 
-import com.oracle.graal.api.code.*;
+import static com.oracle.graal.api.code.MemoryBarriers.*;
+
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.api.replacements.*;
 import com.oracle.graal.nodes.extended.*;
@@ -57,9 +58,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static Object getObjectVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         Object result = getObject(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -70,16 +71,16 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putObjectVolatile(final Object thisObj, Object o, long offset, Object x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putObject(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
     public static void putOrderedObject(final Object thisObj, Object o, long offset, Object x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putObject(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -90,9 +91,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static int getIntVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         int result = getInt(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -103,16 +104,16 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putIntVolatile(final Object thisObj, Object o, long offset, int x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putInt(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
     public static void putOrderedInt(final Object thisObj, Object o, long offset, int x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putInt(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -124,9 +125,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static boolean getBooleanVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         boolean result = getBoolean(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -137,9 +138,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putBooleanVolatile(final Object thisObj, Object o, long offset, boolean x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putBoolean(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -151,9 +152,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static byte getByteVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         byte result = getByte(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -164,9 +165,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putByteVolatile(final Object thisObj, Object o, long offset, byte x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putByte(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -178,9 +179,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static short getShortVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         short result = getShort(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -191,9 +192,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putShortVolatile(final Object thisObj, Object o, long offset, short x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putShort(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -205,9 +206,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static char getCharVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         char result = getChar(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -218,9 +219,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putCharVolatile(final Object thisObj, Object o, long offset, char x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putChar(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -232,9 +233,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static long getLongVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         long result = getLong(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -245,16 +246,16 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putLongVolatile(final Object thisObj, Object o, long offset, long x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putLong(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
     public static void putOrderedLong(final Object thisObj, Object o, long offset, long x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putLong(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -266,9 +267,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static float getFloatVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         float result = getFloat(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -279,9 +280,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putFloatVolatile(final Object thisObj, Object o, long offset, float x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putFloat(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
@@ -293,9 +294,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static double getDoubleVolatile(final Object thisObj, Object o, long offset) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_READ);
         double result = getDouble(thisObj, o, offset);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_READ);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_READ);
         return result;
     }
 
@@ -306,9 +307,9 @@
 
     @MethodSubstitution(isStatic = false)
     public static void putDoubleVolatile(final Object thisObj, Object o, long offset, double x) {
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_PRE_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_PRE_VOLATILE_WRITE);
         putDouble(thisObj, o, offset, x);
-        MembarNode.memoryBarrier(MemoryBarriers.JMM_POST_VOLATILE_WRITE);
+        MembarNode.memoryBarrier(JMM_POST_VOLATILE_WRITE);
     }
 
     @MethodSubstitution(isStatic = false)
--- a/mxtool/mx.py	Fri Mar 22 09:28:38 2013 -0700
+++ b/mxtool/mx.py	Fri Mar 22 18:18:55 2013 +0100
@@ -133,7 +133,7 @@
 """
 
 import sys, os, errno, time, subprocess, shlex, types, urllib2, contextlib, StringIO, zipfile, signal, xml.sax.saxutils, tempfile
-import shutil, fnmatch, re, xml.dom.minidom
+import shutil, re, xml.dom.minidom
 from collections import Callable
 from threading import Thread
 from argparse import ArgumentParser, REMAINDER
@@ -1345,7 +1345,7 @@
     parser.add_argument('--only', action='store', help='comma separated projects to build, without checking their dependencies (omit to build all projects)')
     parser.add_argument('--no-java', action='store_false', dest='java', help='do not build Java projects')
     parser.add_argument('--no-native', action='store_false', dest='native', help='do not build native projects')
-    parser.add_argument('--jdt', help='Eclipse installation or path to ecj.jar for using the Eclipse batch compiler (default: ' + defaultEcjPath + ')', default=defaultEcjPath, metavar='<path>')
+    parser.add_argument('--jdt', help='path to ecj.jar, the Eclipse batch compiler (default: ' + defaultEcjPath + ')', default=defaultEcjPath, metavar='<path>')
     parser.add_argument('--jdt-warning-as-error', action='store_true', help='convert all Eclipse batch compiler warnings to errors')
 
     if suppliedParser:
@@ -1360,11 +1360,6 @@
             if not exists(jdtJar) and os.path.abspath(jdtJar) == os.path.abspath(defaultEcjPath):
                 # Silently ignore JDT if default location is used but not ecj.jar exists there
                 jdtJar = None
-        elif isdir(args.jdt):
-            plugins = join(args.jdt, 'plugins')
-            choices = [f for f in os.listdir(plugins) if fnmatch.fnmatch(f, 'org.eclipse.jdt.core_*.jar')]
-            if len(choices) != 0:
-                jdtJar = join(plugins, sorted(choices, reverse=True)[0])
 
     built = set()