Search in sources :

Example 36 with VirtualObjectNode

use of org.graalvm.compiler.nodes.virtual.VirtualObjectNode in project graal by oracle.

the class LoadIndexedNode method virtualize.

@Override
public void virtualize(VirtualizerTool tool) {
    ValueNode alias = tool.getAlias(array());
    if (alias instanceof VirtualObjectNode) {
        VirtualArrayNode virtual = (VirtualArrayNode) alias;
        ValueNode indexValue = tool.getAlias(index());
        int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1;
        if (idx >= 0 && idx < virtual.entryCount()) {
            ValueNode entry = tool.getEntry(virtual, idx);
            if (stamp.isCompatible(entry.stamp(NodeView.DEFAULT))) {
                tool.replaceWith(entry);
            } else {
                assert stamp(NodeView.DEFAULT).getStackKind() == JavaKind.Int && (entry.stamp(NodeView.DEFAULT).getStackKind() == JavaKind.Long || entry.getStackKind() == JavaKind.Double || entry.getStackKind() == JavaKind.Illegal) : "Can only allow different stack kind two slot marker writes on one stot fields.";
            }
        }
    }
}
Also used : VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) VirtualArrayNode(org.graalvm.compiler.nodes.virtual.VirtualArrayNode) ValueNode(org.graalvm.compiler.nodes.ValueNode)

Example 37 with VirtualObjectNode

use of org.graalvm.compiler.nodes.virtual.VirtualObjectNode in project graal by oracle.

the class MonitorEnterNode method virtualize.

@Override
public void virtualize(VirtualizerTool tool) {
    ValueNode alias = tool.getAlias(object());
    if (alias instanceof VirtualObjectNode) {
        VirtualObjectNode virtual = (VirtualObjectNode) alias;
        if (virtual.hasIdentity()) {
            tool.addLock(virtual, getMonitorId());
            tool.delete();
        }
    }
}
Also used : VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) ValueNode(org.graalvm.compiler.nodes.ValueNode)

Example 38 with VirtualObjectNode

use of org.graalvm.compiler.nodes.virtual.VirtualObjectNode in project graal by oracle.

the class NewArrayNode method virtualize.

@Override
public void virtualize(VirtualizerTool tool) {
    ValueNode lengthAlias = tool.getAlias(length());
    if (lengthAlias.asConstant() != null) {
        int constantLength = lengthAlias.asJavaConstant().asInt();
        if (constantLength >= 0 && constantLength < tool.getMaximumEntryCount()) {
            ValueNode[] state = new ValueNode[constantLength];
            ConstantNode defaultForKind = constantLength == 0 ? null : defaultElementValue();
            for (int i = 0; i < constantLength; i++) {
                state[i] = defaultForKind;
            }
            VirtualObjectNode virtualObject = createVirtualArrayNode(constantLength);
            tool.createVirtualObject(virtualObject, state, Collections.<MonitorIdNode>emptyList(), false);
            tool.replaceWithVirtual(virtualObject);
        }
    }
}
Also used : VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) ValueNode(org.graalvm.compiler.nodes.ValueNode)

Example 39 with VirtualObjectNode

use of org.graalvm.compiler.nodes.virtual.VirtualObjectNode in project graal by oracle.

the class RawMonitorEnterNode method virtualize.

@Override
public void virtualize(VirtualizerTool tool) {
    ValueNode alias = tool.getAlias(object());
    if (alias instanceof VirtualObjectNode) {
        VirtualObjectNode virtual = (VirtualObjectNode) alias;
        if (virtual.hasIdentity()) {
            tool.addLock(virtual, getMonitorId());
            tool.delete();
        }
    }
}
Also used : VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) ValueNode(org.graalvm.compiler.nodes.ValueNode)

Example 40 with VirtualObjectNode

use of org.graalvm.compiler.nodes.virtual.VirtualObjectNode in project graal by oracle.

the class StoreIndexedNode method virtualize.

@Override
public void virtualize(VirtualizerTool tool) {
    ValueNode alias = tool.getAlias(array());
    if (alias instanceof VirtualObjectNode) {
        ValueNode indexValue = tool.getAlias(index());
        int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1;
        VirtualArrayNode virtual = (VirtualArrayNode) alias;
        if (idx >= 0 && idx < virtual.entryCount()) {
            ResolvedJavaType componentType = virtual.type().getComponentType();
            if (componentType.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.getSuperclass() == null || (StampTool.typeReferenceOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value)))) {
                tool.setVirtualEntry(virtual, idx, value());
                tool.delete();
            }
        }
    }
}
Also used : VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) VirtualArrayNode(org.graalvm.compiler.nodes.virtual.VirtualArrayNode) ValueNode(org.graalvm.compiler.nodes.ValueNode) ResolvedJavaType(jdk.vm.ci.meta.ResolvedJavaType)

Aggregations

VirtualObjectNode (org.graalvm.compiler.nodes.virtual.VirtualObjectNode)42 ValueNode (org.graalvm.compiler.nodes.ValueNode)38 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)8 ResolvedJavaType (jdk.vm.ci.meta.ResolvedJavaType)7 Node (org.graalvm.compiler.graph.Node)7 ProxyNode (org.graalvm.compiler.nodes.ProxyNode)7 VirtualObjectState (org.graalvm.compiler.virtual.nodes.VirtualObjectState)6 FixedNode (org.graalvm.compiler.nodes.FixedNode)5 PhiNode (org.graalvm.compiler.nodes.PhiNode)5 Block (org.graalvm.compiler.nodes.cfg.Block)5 ArrayList (java.util.ArrayList)4 FixedWithNextNode (org.graalvm.compiler.nodes.FixedWithNextNode)4 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)4 ValueProxyNode (org.graalvm.compiler.nodes.ValueProxyNode)4 VirtualArrayNode (org.graalvm.compiler.nodes.virtual.VirtualArrayNode)4 VirtualInstanceNode (org.graalvm.compiler.nodes.virtual.VirtualInstanceNode)4 JavaKind (jdk.vm.ci.meta.JavaKind)3 FrameState (org.graalvm.compiler.nodes.FrameState)3 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)3 BitSet (java.util.BitSet)2