# HG changeset patch # User Doug Simon # Date 1338541683 -7200 # Node ID 1d00c9a1f7331e172683864cd5864199e4cbad97 # Parent b6311d367bd6aa5e9f28a091ef436bd969c0dd39 support @NodeIntrinsic based creation of a UnsafeLoadNode with a stamp indicating non-nullness diff -r b6311d367bd6 -r 1d00c9a1f733 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Fri Jun 01 11:05:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Fri Jun 01 11:08:03 2012 +0200 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.extended; -import com.oracle.max.cri.ci.*; import com.oracle.graal.cri.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; +import com.oracle.max.cri.ci.*; /** * Load of a value from a location specified as an offset relative to an object. @@ -50,6 +50,14 @@ return offset; } + public UnsafeLoadNode(ValueNode object, int displacement, ValueNode offset, boolean nonNull) { + super(nonNull ? StampFactory.objectNonNull() : StampFactory.object()); + this.object = object; + this.displacement = displacement; + this.offset = offset; + this.loadKind = CiKind.Object; + } + public UnsafeLoadNode(ValueNode object, int displacement, ValueNode offset, CiKind kind) { super(StampFactory.forKind(kind.stackKind())); this.object = object; @@ -72,4 +80,10 @@ public static T load(Object object, @ConstantNodeParameter int displacement, long offset, @ConstantNodeParameter CiKind kind) { throw new UnsupportedOperationException("This method may only be compiled with the Graal compiler"); } + + @SuppressWarnings("unused") + @NodeIntrinsic + public static Object loadObject(Object object, @ConstantNodeParameter int displacement, long offset, @ConstantNodeParameter boolean nonNull) { + throw new UnsupportedOperationException("This method may only be compiled with the Graal compiler"); + } }