package org.graalvm.compiler.nodes.memory;
import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_0;
import org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.graph.NodeInputList;
import org.graalvm.compiler.nodeinfo.InputType;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodes.AbstractMergeNode;
import org.graalvm.compiler.nodes.PhiNode;
import org.graalvm.compiler.nodes.ValueNode;
import jdk.internal.vm.compiler.word.LocationIdentity;
@NodeInfo(nameTemplate = "Phi({i#values}) {p#locationIdentity/s}", allowedUsageTypes = {InputType.Memory}, size = SIZE_0)
public final class MemoryPhiNode extends PhiNode implements SingleMemoryKill {
public static final NodeClass<MemoryPhiNode> TYPE = NodeClass.create(MemoryPhiNode.class);
@Input(InputType.Memory) NodeInputList<ValueNode> values;
protected final LocationIdentity locationIdentity;
public MemoryPhiNode(AbstractMergeNode merge, LocationIdentity locationIdentity) {
super(TYPE, StampFactory.forVoid(), merge);
this.locationIdentity = locationIdentity;
this.values = new NodeInputList<>(this);
}
public MemoryPhiNode(AbstractMergeNode merge, LocationIdentity locationIdentity, ValueNode[] values) {
super(TYPE, StampFactory.forVoid(), merge);
this.locationIdentity = locationIdentity;
this.values = new NodeInputList<>(this, values);
}
public LocationIdentity getLocationIdentity() {
return locationIdentity;
}
@Override
public NodeInputList<ValueNode> values() {
return values;
}
@Override
protected String valueDescription() {
return locationIdentity.toString();
}
@Override
public LocationIdentity getKilledLocationIdentity() {
return getLocationIdentity();
}
}