# HG changeset patch # User Christos Kotselidis # Date 1375459688 -7200 # Node ID e2ac8bf20433cfd9bf9d19bfe86f2a7c8bdcf597 # Parent d2187f88cdd2d68c2467282dd14451fc760150d9 Early exits from G1 Array Range barriers if length==0 diff -r d2187f88cdd2 -r e2ac8bf20433 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Aug 02 18:05:27 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Aug 02 18:08:08 2013 +0200 @@ -219,17 +219,17 @@ @Snippet public static void g1ArrayRangePreWriteBarrier(Object object, int startIndex, int length) { - Object dest = FixedValueAnchorNode.getObject(object); Word thread = thread(); byte markingValue = thread.readByte(g1SATBQueueMarkingOffset()); + // If the concurrent marker is not enabled return. + if (markingValue == (byte) 0 || length == 0) { + return; + } + Object dest = FixedValueAnchorNode.getObject(object); Word bufferAddress = thread.readWord(g1SATBQueueBufferOffset()); Word indexAddress = thread.add(g1SATBQueueIndexOffset()); Word indexValue = indexAddress.readWord(0); - // If the concurrent marker is not enabled return. - if (markingValue == (byte) 0) { - return; - } Word oop; final int scale = arrayIndexScale(Kind.Object); int header = arrayBaseOffset(Kind.Object); @@ -253,6 +253,9 @@ @Snippet public static void g1ArrayRangePostWriteBarrier(Object object, int startIndex, int length) { + if (length == 0) { + return; + } Object dest = FixedValueAnchorNode.getObject(object); Word thread = thread(); Word bufferAddress = thread.readWord(g1CardQueueBufferOffset());