10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.nodes.extended;
26
27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_2;
28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_1;
29
30 import org.graalvm.compiler.core.common.type.StampFactory;
31 import org.graalvm.compiler.graph.Node;
32 import org.graalvm.compiler.graph.NodeClass;
33 import org.graalvm.compiler.graph.spi.Canonicalizable;
34 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
35 import org.graalvm.compiler.nodeinfo.NodeInfo;
36 import org.graalvm.compiler.nodes.memory.FixedAccessNode;
37 import org.graalvm.compiler.nodes.memory.ReadNode;
38 import org.graalvm.compiler.nodes.memory.address.AddressNode;
39 import org.graalvm.compiler.nodes.spi.Lowerable;
40 import org.graalvm.compiler.nodes.spi.LoweringTool;
41 import jdk.internal.vm.compiler.word.LocationIdentity;
42
43 import jdk.vm.ci.meta.JavaKind;
44
45 /**
46 * Read a raw memory location according to Java field or array read semantics. It will perform read
47 * barriers, implicit conversions and optionally oop uncompression.
48 */
49 @NodeInfo(nameTemplate = "JavaRead#{p#location/s}", cycles = CYCLES_2, size = SIZE_1)
50 public final class JavaReadNode extends FixedAccessNode implements Lowerable, GuardingNode, Canonicalizable {
51
52 public static final NodeClass<JavaReadNode> TYPE = NodeClass.create(JavaReadNode.class);
53 protected final JavaKind readKind;
54 protected final boolean compressible;
55
56 public JavaReadNode(JavaKind readKind, AddressNode address, LocationIdentity location, BarrierType barrierType, boolean compressible) {
57 super(TYPE, address, location, StampFactory.forKind(readKind), barrierType);
58 this.readKind = readKind;
59 this.compressible = compressible;
60 }
61
62 @Override
63 public void lower(LoweringTool tool) {
64 tool.getLowerer().lower(this, tool);
65 }
66
67 @Override
68 public boolean canNullCheck() {
69 return true;
70 }
71
72 public JavaKind getReadKind() {
73 return readKind;
74 }
75
76 public boolean isCompressible() {
77 return compressible;
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.nodes.extended;
26
27 import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_2;
28 import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_1;
29
30 import org.graalvm.compiler.core.common.type.Stamp;
31 import org.graalvm.compiler.core.common.type.StampFactory;
32 import org.graalvm.compiler.graph.Node;
33 import org.graalvm.compiler.graph.NodeClass;
34 import org.graalvm.compiler.graph.spi.Canonicalizable;
35 import org.graalvm.compiler.graph.spi.CanonicalizerTool;
36 import org.graalvm.compiler.nodeinfo.NodeInfo;
37 import org.graalvm.compiler.nodes.memory.FixedAccessNode;
38 import org.graalvm.compiler.nodes.memory.ReadNode;
39 import org.graalvm.compiler.nodes.memory.address.AddressNode;
40 import org.graalvm.compiler.nodes.spi.Lowerable;
41 import org.graalvm.compiler.nodes.spi.LoweringTool;
42 import jdk.internal.vm.compiler.word.LocationIdentity;
43
44 import jdk.vm.ci.meta.JavaKind;
45
46 /**
47 * Read a raw memory location according to Java field or array read semantics. It will perform read
48 * barriers, implicit conversions and optionally oop uncompression.
49 */
50 @NodeInfo(nameTemplate = "JavaRead#{p#location/s}", cycles = CYCLES_2, size = SIZE_1)
51 public final class JavaReadNode extends FixedAccessNode implements Lowerable, GuardingNode, Canonicalizable {
52
53 public static final NodeClass<JavaReadNode> TYPE = NodeClass.create(JavaReadNode.class);
54 protected final JavaKind readKind;
55 protected final boolean compressible;
56
57 public JavaReadNode(JavaKind readKind, AddressNode address, LocationIdentity location, BarrierType barrierType, boolean compressible) {
58 this(StampFactory.forKind(readKind), readKind, address, location, barrierType, compressible);
59 }
60
61 public JavaReadNode(Stamp stamp, JavaKind readKind, AddressNode address, LocationIdentity location, BarrierType barrierType, boolean compressible) {
62 super(TYPE, address, location, stamp, barrierType);
63 this.readKind = readKind;
64 this.compressible = compressible;
65 }
66
67 @Override
68 public void lower(LoweringTool tool) {
69 tool.getLowerer().lower(this, tool);
70 }
71
72 @Override
73 public boolean canNullCheck() {
74 return true;
75 }
76
77 public JavaKind getReadKind() {
78 return readKind;
79 }
80
81 public boolean isCompressible() {
82 return compressible;
|