# HG changeset patch # User Andreas Woess # Date 1423674029 -3600 # Node ID 3b2fd35f41b06f8c82451df03bc0a01d4974c3c0 # Parent c386ace07981058db56a63a966e578997463646a Truffle: remove unsafe final get methods diff -r c386ace07981 -r 3b2fd35f41b0 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java Wed Feb 11 18:19:40 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2014, 2014, 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.truffle.nodes.typesystem; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.calc.*; -import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.graph.*; -import com.oracle.graal.graph.spi.*; -import com.oracle.graal.nodeinfo.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.truffle.nodes.*; - -/** - * Load of a final value from a location specified as an offset relative to an object. - * - * Substitution for method CompilerDirectives#unsafeGet*. - */ -@NodeInfo -public final class CustomizedUnsafeLoadFinalNode extends FixedWithNextNode implements Canonicalizable, Virtualizable, Lowerable { - @Input ValueNode object; - @Input ValueNode offset; - @Input ValueNode condition; - @Input ValueNode location; - protected final Kind accessKind; - - public CustomizedUnsafeLoadFinalNode(ValueNode object, ValueNode offset, ValueNode condition, ValueNode location, Kind accessKind) { - super(StampFactory.forKind(accessKind.getStackKind())); - this.object = object; - this.offset = offset; - this.condition = condition; - this.location = location; - this.accessKind = accessKind; - } - - @Override - public Node canonical(CanonicalizerTool tool) { - if (object.isConstant() && !object.isNullConstant() && offset.isConstant() && condition.isConstant() && condition.asJavaConstant().asInt() == 1) { - JavaConstant constant = tool.getConstantReflection().getMemoryAccessProvider().readUnsafeConstant(accessKind, object.asJavaConstant(), offset.asJavaConstant().asLong()); - return ConstantNode.forConstant(constant, tool.getMetaAccess()); - } - return this; - } - - /** - * @see UnsafeLoadNode#virtualize(VirtualizerTool) - */ - @Override - public void virtualize(VirtualizerTool tool) { - State state = tool.getObjectState(object); - if (state != null && state.getState() == EscapeState.Virtual) { - ValueNode offsetValue = tool.getReplacedValue(offset); - if (offsetValue.isConstant()) { - long constantOffset = offsetValue.asJavaConstant().asLong(); - int entryIndex = state.getVirtualObject().entryIndexForOffset(constantOffset, accessKind); - if (entryIndex != -1) { - ValueNode entry = state.getEntry(entryIndex); - if (entry.getKind() == getKind() || state.getVirtualObject().entryKind(entryIndex) == accessKind) { - tool.replaceWith(entry); - } - } - } - } - } - - @Override - public void lower(LoweringTool tool) { - LogicNode compare = CompareNode.createCompareNode(graph(), Condition.EQ, condition, ConstantNode.forBoolean(true, graph()), tool.getConstantReflection()); - LocationIdentity locationIdentity; - if (!location.isConstant() || location.isNullConstant()) { - locationIdentity = LocationIdentity.ANY_LOCATION; - } else { - locationIdentity = ObjectLocationIdentity.create(location.asJavaConstant()); - } - UnsafeLoadNode result = graph().add(new UnsafeLoadNode(object, offset, accessKind, locationIdentity, compare)); - graph().replaceFixedWithFixed(this, result); - result.lower(tool); - } - - @SuppressWarnings("unused") - @NodeIntrinsic - public static T load(Object object, long offset, boolean condition, Object locationIdentity, @ConstantNodeParameter Kind kind) { - return UnsafeLoadNode.load(object, offset, kind, null); - } -} diff -r c386ace07981 -r 3b2fd35f41b0 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/UnsafeAccessSubstitutions.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/UnsafeAccessSubstitutions.java Wed Feb 11 18:19:40 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/substitutions/UnsafeAccessSubstitutions.java Wed Feb 11 18:00:29 2015 +0100 @@ -22,7 +22,6 @@ */ package com.oracle.graal.truffle.substitutions; -import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.truffle.nodes.typesystem.*; @@ -80,44 +79,4 @@ @MacroSubstitution(macro = CustomizedUnsafeStoreMacroNode.class, isStatic = true) public static native void unsafePutObject(Object receiver, long offset, Object value, Object locationIdentity); - - @MethodSubstitution - public static boolean unsafeGetFinalBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Boolean); - } - - @MethodSubstitution - public static byte unsafeGetFinalByte(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Byte); - } - - @MethodSubstitution - public static short unsafeGetFinalShort(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Short); - } - - @MethodSubstitution - public static int unsafeGetFinalInt(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Int); - } - - @MethodSubstitution - public static long unsafeGetFinalLong(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Long); - } - - @MethodSubstitution - public static float unsafeGetFinalFloat(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Float); - } - - @MethodSubstitution - public static double unsafeGetFinalDouble(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Double); - } - - @MethodSubstitution - public static Object unsafeGetFinalObject(Object receiver, long offset, boolean condition, Object locationIdentity) { - return CustomizedUnsafeLoadFinalNode.load(receiver, offset, condition, locationIdentity, Kind.Object); - } } diff -r c386ace07981 -r 3b2fd35f41b0 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/unsafe/UnsafeAccessImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/unsafe/UnsafeAccessImpl.java Wed Feb 11 18:19:40 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/unsafe/UnsafeAccessImpl.java Wed Feb 11 18:00:29 2015 +0100 @@ -102,38 +102,6 @@ unsafePutObject(receiver, offset, value, locationIdentity); } - public boolean getFinalBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalBoolean(receiver, offset, condition, locationIdentity); - } - - public byte getFinalByte(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalByte(receiver, offset, condition, locationIdentity); - } - - public short getFinalShort(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalShort(receiver, offset, condition, locationIdentity); - } - - public int getFinalInt(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalInt(receiver, offset, condition, locationIdentity); - } - - public long getFinalLong(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalLong(receiver, offset, condition, locationIdentity); - } - - public float getFinalFloat(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalFloat(receiver, offset, condition, locationIdentity); - } - - public double getFinalDouble(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalDouble(receiver, offset, condition, locationIdentity); - } - - public Object getFinalObject(Object receiver, long offset, boolean condition, Object locationIdentity) { - return unsafeGetFinalObject(receiver, offset, condition, locationIdentity); - } - @SuppressWarnings("unchecked") private static T unsafeCast(Object value, Class type, boolean condition, boolean nonNull) { return (T) value; @@ -203,38 +171,6 @@ UNSAFE.putObject(receiver, offset, value); } - private static boolean unsafeGetFinalBoolean(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getBoolean(receiver, offset); - } - - private static byte unsafeGetFinalByte(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getByte(receiver, offset); - } - - private static short unsafeGetFinalShort(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getShort(receiver, offset); - } - - private static int unsafeGetFinalInt(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getInt(receiver, offset); - } - - private static long unsafeGetFinalLong(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getLong(receiver, offset); - } - - private static float unsafeGetFinalFloat(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getFloat(receiver, offset); - } - - private static double unsafeGetFinalDouble(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getDouble(receiver, offset); - } - - private static Object unsafeGetFinalObject(Object receiver, long offset, boolean condition, Object locationIdentity) { - return UNSAFE.getObject(receiver, offset); - } - private static final Unsafe UNSAFE = getUnsafe(); private static Unsafe getUnsafe() { diff -r c386ace07981 -r 3b2fd35f41b0 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/unsafe/UnsafeAccess.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/unsafe/UnsafeAccess.java Wed Feb 11 18:19:40 2015 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/unsafe/UnsafeAccess.java Wed Feb 11 18:00:29 2015 +0100 @@ -263,132 +263,4 @@ * value numbering or null */ void putObject(Object receiver, long offset, Object value, Object locationIdentity); - - /** - * Unsafe access to a final boolean value within an object. The condition parameter gives a hint - * to the compiler under which circumstances this access can be moved to an earlier location in - * the program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - boolean getFinalBoolean(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final byte value within an object. The condition parameter gives a hint to - * the compiler under which circumstances this access can be moved to an earlier location in the - * program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - byte getFinalByte(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final short value within an object. The condition parameter gives a hint - * to the compiler under which circumstances this access can be moved to an earlier location in - * the program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - short getFinalShort(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final int value within an object. The condition parameter gives a hint to - * the compiler under which circumstances this access can be moved to an earlier location in the - * program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - int getFinalInt(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final long value within an object. The condition parameter gives a hint to - * the compiler under which circumstances this access can be moved to an earlier location in the - * program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - long getFinalLong(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final float value within an object. The condition parameter gives a hint - * to the compiler under which circumstances this access can be moved to an earlier location in - * the program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - float getFinalFloat(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final double value within an object. The condition parameter gives a hint - * to the compiler under which circumstances this access can be moved to an earlier location in - * the program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - double getFinalDouble(Object receiver, long offset, boolean condition, Object locationIdentity); - - /** - * Unsafe access to a final Object value within an object. The condition parameter gives a hint - * to the compiler under which circumstances this access can be moved to an earlier location in - * the program. The location identity gives a hint to the compiler for improved global value - * numbering. - * - * @param receiver the object that is accessed - * @param offset the offset at which to access the object in bytes - * @param condition the condition that makes this access safe also at an earlier location in the - * program - * @param locationIdentity the location identity token that can be used for improved global - * value numbering or null - * @return the accessed value - */ - Object getFinalObject(Object receiver, long offset, boolean condition, Object locationIdentity); }