use of org.graalvm.compiler.nodes.ValueNode in project graal by oracle.
the class EnsureVirtualizedNode method virtualize.
@Override
public void virtualize(VirtualizerTool tool) {
ValueNode alias = tool.getAlias(object);
if (alias instanceof VirtualObjectNode) {
VirtualObjectNode virtual = (VirtualObjectNode) alias;
if (virtual instanceof VirtualBoxingNode) {
Throwable exception = new VerificationError("ensureVirtual is not valid for boxing objects: %s", virtual.type().getName());
throw GraphUtil.approxSourceException(this, exception);
}
if (!localOnly) {
tool.setEnsureVirtualized(virtual, true);
}
tool.delete();
}
}
use of org.graalvm.compiler.nodes.ValueNode in project graal by oracle.
the class MemoryMapNode method checkOrder.
private boolean checkOrder(EconomicMap<LocationIdentity, MemoryNode> mmap) {
for (int i = 0; i < locationIdentities.size(); i++) {
LocationIdentity locationIdentity = locationIdentities.get(i);
ValueNode n = nodes.get(i);
assertTrue(mmap.get(locationIdentity) == n, "iteration order of keys differs from values in input map");
}
return true;
}
use of org.graalvm.compiler.nodes.ValueNode in project graal by oracle.
the class ReadNode method canonicalizeRead.
public static ValueNode canonicalizeRead(ValueNode read, AddressNode address, LocationIdentity locationIdentity, CanonicalizerTool tool) {
NodeView view = NodeView.from(tool);
MetaAccessProvider metaAccess = tool.getMetaAccess();
if (tool.canonicalizeReads() && address instanceof OffsetAddressNode) {
OffsetAddressNode objAddress = (OffsetAddressNode) address;
ValueNode object = objAddress.getBase();
if (metaAccess != null && object.isConstant() && !object.isNullConstant() && objAddress.getOffset().isConstant()) {
long displacement = objAddress.getOffset().asJavaConstant().asLong();
int stableDimension = ((ConstantNode) object).getStableDimension();
if (locationIdentity.isImmutable() || stableDimension > 0) {
Constant constant = read.stamp(view).readConstant(tool.getConstantReflection().getMemoryAccessProvider(), object.asConstant(), displacement);
boolean isDefaultStable = locationIdentity.isImmutable() || ((ConstantNode) object).isDefaultStable();
if (constant != null && (isDefaultStable || !constant.isDefaultForKind())) {
return ConstantNode.forConstant(read.stamp(view), constant, Math.max(stableDimension - 1, 0), isDefaultStable, metaAccess);
}
}
}
if (locationIdentity.equals(ARRAY_LENGTH_LOCATION)) {
ValueNode length = GraphUtil.arrayLength(object);
if (length != null) {
return length;
}
}
if (locationIdentity instanceof CanonicalizableLocation) {
CanonicalizableLocation canonicalize = (CanonicalizableLocation) locationIdentity;
ValueNode result = canonicalize.canonicalizeRead(read, address, object, tool);
assert result != null && result.stamp(view).isCompatible(read.stamp(view));
return result;
}
}
return read;
}
use of org.graalvm.compiler.nodes.ValueNode in project graal by oracle.
the class SubstrateGraphKit method mergeUnwinds.
/**
* A graph with multiple unwinds is invalid. Merge the various unwind paths.
*/
public void mergeUnwinds() {
List<UnwindNode> unwinds = new ArrayList<>();
for (Node node : getGraph().getNodes()) {
if (node instanceof UnwindNode) {
unwinds.add((UnwindNode) node);
}
}
if (unwinds.size() > 1) {
MergeNode unwindMergeNode = add(new MergeNode());
ValueNode exceptionValue = InliningUtil.mergeValueProducers(unwindMergeNode, unwinds, null, UnwindNode::exception);
UnwindNode unwindReplacement = add(new UnwindNode(exceptionValue));
unwindMergeNode.setNext(unwindReplacement);
FrameStateBuilder exceptionState = getFrameState().copy();
exceptionState.clearStack();
exceptionState.push(JavaKind.Object, exceptionValue);
exceptionState.setRethrowException(true);
unwindMergeNode.setStateAfter(exceptionState.create(BytecodeFrame.AFTER_EXCEPTION_BCI, unwindMergeNode));
}
}
use of org.graalvm.compiler.nodes.ValueNode in project graal by oracle.
the class DefaultHotSpotLoweringProvider method createWriteHub.
private WriteNode createWriteHub(StructuredGraph graph, ValueNode object, ValueNode value) {
assert !object.isConstant() || object.asConstant().isDefaultForKind();
ValueNode writeValue = value;
if (runtime.getVMConfig().useCompressedClassPointers) {
writeValue = HotSpotCompressionNode.compress(value, runtime.getVMConfig().getKlassEncoding());
}
AddressNode address = createOffsetAddress(graph, object, runtime.getVMConfig().hubOffset);
return graph.add(new WriteNode(address, HUB_WRITE_LOCATION, writeValue, BarrierType.NONE));
}
Aggregations