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