Mercurial > hg > graal-jvmci-8
changeset 8449:7485b8a7cd24
Backed out changeset: 83fc36378013
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 22 Mar 2013 18:24:29 +0100 |
parents | 71a9f3a5d8c5 |
children | ad673bbfb4e5 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectSubstitutions.java graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java |
diffstat | 4 files changed, 18 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectSubstitutions.java Fri Mar 22 18:18:55 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectSubstitutions.java Fri Mar 22 18:24:29 2013 +0100 @@ -27,7 +27,6 @@ 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.*; @@ -48,11 +47,6 @@ 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 18:18:55 2013 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java Fri Mar 22 18:24:29 2013 +0100 @@ -782,6 +782,14 @@ 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 18:18:55 2013 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Fri Mar 22 18:24:29 2013 +0100 @@ -1143,6 +1143,11 @@ } } + 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) { @@ -1557,6 +1562,9 @@ } 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/java/RegisterFinalizerNode.java Fri Mar 22 18:18:55 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Fri Mar 22 18:24:29 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,9 +82,4 @@ tool.delete(); } } - - @SuppressWarnings("unused") - @NodeIntrinsic - public static void register(Object thisObj) { - } }