# HG changeset patch # User Lukas Stadler # Date 1396863128 -7200 # Node ID 9ecd3da04309f5df56a8cc3d8d58502a32c6ec15 # Parent 4b1f128a3d45da84041071a0df22b352d06354c7 use temporary proxy for locations in snippets diff -r 4b1f128a3d45 -r 9ecd3da04309 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java Mon Apr 07 11:32:08 2014 +0200 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.nodes; + +import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.type.*; + +@NodeInfo(allowedUsageTypes = {InputType.Association}) +public final class SnippetLocationProxyNode extends FloatingNode implements Canonicalizable { + + @Input(InputType.Unchecked) private ValueNode location; + + public SnippetLocationProxyNode(ValueNode location) { + super(StampFactory.extension()); + this.location = location; + } + + @Override + public Node canonical(CanonicalizerTool tool) { + return location.isAllowedUsageType(InputType.Association) ? location : this; + } + + @NodeIntrinsic + public static native GuardingNode location(Object location); +} diff -r 4b1f128a3d45 -r 9ecd3da04309 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 Mon Apr 07 11:32:08 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Mon Apr 07 11:32:08 2014 +0200 @@ -72,7 +72,7 @@ Object fixedObject = FixedValueAnchorNode.getObject(object); Pointer oop; if (usePrecise) { - oop = Word.fromArray(fixedObject, location); + oop = Word.fromArray(fixedObject, SnippetLocationProxyNode.location(location)); } else { oop = Word.fromObject(fixedObject); } @@ -117,7 +117,7 @@ Object fixedObject = FixedValueAnchorNode.getObject(object); verifyOop(fixedObject); Object fixedExpectedObject = FixedValueAnchorNode.getObject(expectedObject); - Word field = (Word) Word.fromArray(fixedObject, location); + Word field = (Word) Word.fromArray(fixedObject, SnippetLocationProxyNode.location(location)); Word previousOop = (Word) Word.fromObject(fixedExpectedObject); byte markingValue = thread.readByte(g1SATBQueueMarkingOffset()); Word bufferAddress = thread.readWord(g1SATBQueueBufferOffset()); @@ -174,7 +174,7 @@ validateObject(fixedObject, fixedValue); Word oop; if (usePrecise) { - oop = (Word) Word.fromArray(fixedObject, location); + oop = (Word) Word.fromArray(fixedObject, SnippetLocationProxyNode.location(location)); } else { oop = (Word) Word.fromObject(fixedObject); }