package org.graalvm.compiler.nodes.memory;
import org.graalvm.compiler.core.common.GraalOptions;
import org.graalvm.compiler.core.common.type.Stamp;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodes.memory.address.AddressNode;
import jdk.internal.vm.compiler.word.LocationIdentity;
import static org.graalvm.compiler.nodeinfo.InputType.Memory;
import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_2;
import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_1;
@NodeInfo(nameTemplate = "Read#{p#location/s}", allowedUsageTypes = Memory, cycles = CYCLES_2, size = SIZE_1)
public class VolatileReadNode extends ReadNode implements MemoryCheckpoint.Single {
public static final NodeClass<VolatileReadNode> TYPE = NodeClass.create(VolatileReadNode.class);
public VolatileReadNode(AddressNode address, LocationIdentity location, Stamp stamp, BarrierType barrierType) {
super(TYPE, address, location, stamp, null, barrierType, false, null);
assert GraalOptions.LateMembars.getValue(address.getOptions());
}
@SuppressWarnings("try")
@Override
public FloatingAccessNode asFloatingNode() {
throw new RuntimeException();
}
@Override
public boolean canFloat() {
return false;
}
@Override
public LocationIdentity getKilledLocationIdentity() {
return LocationIdentity.any();
}
@Override
public boolean canNullCheck() {
return false;
}
}