src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/memory/WriteNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/memory/WriteNode.java	Fri Jul  7 09:31:26 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/memory/WriteNode.java	Fri Jul  7 09:31:26 2017

*** 22,43 **** --- 22,46 ---- */ package org.graalvm.compiler.nodes.memory; import org.graalvm.compiler.core.common.LIRKind; import org.graalvm.compiler.core.common.type.Stamp; + import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.graph.NodeClass; + import org.graalvm.compiler.graph.spi.Canonicalizable; + import org.graalvm.compiler.graph.spi.CanonicalizerTool; import org.graalvm.compiler.nodeinfo.NodeInfo; import org.graalvm.compiler.nodes.ValueNode; import org.graalvm.compiler.nodes.memory.address.AddressNode; import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool; import org.graalvm.word.LocationIdentity; /** * Writes a given {@linkplain #value() value} a {@linkplain FixedAccessNode memory location}. */ @NodeInfo(nameTemplate = "Write#{p#location/s}") ! public class WriteNode extends AbstractWriteNode implements LIRLowerableAccess, Canonicalizable { public static final NodeClass<WriteNode> TYPE = NodeClass.create(WriteNode.class); public WriteNode(AddressNode address, LocationIdentity location, ValueNode value, BarrierType barrierType) { super(TYPE, address, location, value, barrierType);
*** 60,65 **** --- 63,80 ---- @Override public Stamp getAccessStamp() { return value().stamp(); } + + @Override + public Node canonical(CanonicalizerTool tool) { + if (tool.canonicalizeReads() && hasExactlyOneUsage() && next() instanceof WriteNode) { + WriteNode write = (WriteNode) next(); + if (write.lastLocationAccess == this && write.getAddress() == getAddress() && getAccessStamp().isCompatible(write.getAccessStamp())) { + write.setLastLocationAccess(getLastLocationAccess()); + return write; + } + } + return this; + } }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/memory/WriteNode.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File