Mercurial > hg > graal-compiler
changeset 10438:6a847d44d4ef
Delay write barrier addition for arraycopy.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 20 Jun 2013 16:59:58 +0200 |
parents | 1fb21605c0e1 |
children | b724895db5c0 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeArrayCopyNode.java |
diffstat | 2 files changed, 21 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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; }