# HG changeset patch # User Roland Schatz # Date 1371740398 -7200 # Node ID 6a847d44d4efd9d35af8afc613e21fdc4c4739f6 # Parent 1fb21605c0e1a29b42dd8a2073e07d7a0ed8c27f Delay write barrier addition for arraycopy. diff -r 1fb21605c0e1 -r 6a847d44d4ef graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Thu Jun 20 16:59:58 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Thu Jun 20 16:59:58 2013 +0200 @@ -180,9 +180,6 @@ public static void arrayObjectCopy(Object src, int srcPos, Object dest, int destPos, int length) { objectCounter.inc(); checkedCopy(src, srcPos, dest, destPos, length, Kind.Object); - if (length > 0) { - GenericArrayRangeWriteBarrier.insertWriteBarrier(dest, destPos, length); - } } @Snippet diff -r 1fb21605c0e1 -r 6a847d44d4ef graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java Thu Jun 20 16:59:58 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java Thu Jun 20 16:59:58 2013 +0200 @@ -31,7 +31,7 @@ import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.SnippetTemplate.Arguments; -public final class UnsafeArrayCopyNode extends AbstractStateSplit implements Lowerable, MemoryCheckpoint.Single { +public final class UnsafeArrayCopyNode extends ArrayRangeWriteNode implements Lowerable, MemoryCheckpoint.Single { @Input private ValueNode src; @Input private ValueNode srcPos; @@ -62,6 +62,26 @@ this(src, srcPos, dest, destPos, length, layoutHelper, null); } + @Override + public ValueNode getArray() { + return dest; + } + + @Override + public ValueNode getIndex() { + return destPos; + } + + @Override + public ValueNode getLength() { + return length; + } + + @Override + public boolean isObjectArray() { + return elementKind == Kind.Object; + } + public Kind getElementKind() { return elementKind; }