Search in sources :

Example 26 with IfNode

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

the class LoopTransformations method findUnswitchable.

public static List<ControlSplitNode> findUnswitchable(LoopEx loop) {
    List<ControlSplitNode> controls = null;
    ValueNode invariantValue = null;
    for (IfNode ifNode : loop.whole().nodes().filter(IfNode.class)) {
        if (loop.isOutsideLoop(ifNode.condition())) {
            if (controls == null) {
                invariantValue = ifNode.condition();
                controls = new ArrayList<>();
                controls.add(ifNode);
            } else if (ifNode.condition() == invariantValue) {
                controls.add(ifNode);
            }
        }
    }
    if (controls == null) {
        SwitchNode firstSwitch = null;
        for (SwitchNode switchNode : loop.whole().nodes().filter(SwitchNode.class)) {
            if (switchNode.successors().count() > 1 && loop.isOutsideLoop(switchNode.value())) {
                if (controls == null) {
                    firstSwitch = switchNode;
                    invariantValue = switchNode.value();
                    controls = new ArrayList<>();
                    controls.add(switchNode);
                } else if (switchNode.value() == invariantValue && firstSwitch.structureEquals(switchNode)) {
                    // Only collect switches which test the same values in the same order
                    controls.add(switchNode);
                }
            }
        }
    }
    return controls;
}
Also used : ValueNode(org.graalvm.compiler.nodes.ValueNode) ControlSplitNode(org.graalvm.compiler.nodes.ControlSplitNode) IfNode(org.graalvm.compiler.nodes.IfNode) SwitchNode(org.graalvm.compiler.nodes.extended.SwitchNode)

Example 27 with IfNode

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

the class UseTrappingNullChecksPhase method checkPredecessor.

private static void checkPredecessor(AbstractDeoptimizeNode deopt, Node predecessor, DeoptimizationReason deoptimizationReason, long implicitNullCheckLimit) {
    Node current = predecessor;
    AbstractBeginNode branch = null;
    while (current instanceof AbstractBeginNode) {
        branch = (AbstractBeginNode) current;
        if (branch.anchored().isNotEmpty()) {
            // some input of the deopt framestate is anchored to this branch
            return;
        }
        current = current.predecessor();
    }
    if (current instanceof IfNode) {
        IfNode ifNode = (IfNode) current;
        if (branch != ifNode.trueSuccessor()) {
            return;
        }
        LogicNode condition = ifNode.condition();
        if (condition instanceof IsNullNode) {
            replaceWithTrappingNullCheck(deopt, ifNode, condition, deoptimizationReason, implicitNullCheckLimit);
        }
    }
}
Also used : IsNullNode(org.graalvm.compiler.nodes.calc.IsNullNode) ValuePhiNode(org.graalvm.compiler.nodes.ValuePhiNode) AbstractMergeNode(org.graalvm.compiler.nodes.AbstractMergeNode) DynamicDeoptimizeNode(org.graalvm.compiler.nodes.DynamicDeoptimizeNode) FixedAccessNode(org.graalvm.compiler.nodes.memory.FixedAccessNode) DeoptimizingFixedWithNextNode(org.graalvm.compiler.nodes.DeoptimizingFixedWithNextNode) BeginNode(org.graalvm.compiler.nodes.BeginNode) DeoptimizeNode(org.graalvm.compiler.nodes.DeoptimizeNode) FixedNode(org.graalvm.compiler.nodes.FixedNode) IfNode(org.graalvm.compiler.nodes.IfNode) AbstractBeginNode(org.graalvm.compiler.nodes.AbstractBeginNode) CompressionNode(org.graalvm.compiler.nodes.CompressionNode) AbstractEndNode(org.graalvm.compiler.nodes.AbstractEndNode) AbstractDeoptimizeNode(org.graalvm.compiler.nodes.AbstractDeoptimizeNode) AddressNode(org.graalvm.compiler.nodes.memory.address.AddressNode) LogicNode(org.graalvm.compiler.nodes.LogicNode) ValueNode(org.graalvm.compiler.nodes.ValueNode) IsNullNode(org.graalvm.compiler.nodes.calc.IsNullNode) NullCheckNode(org.graalvm.compiler.nodes.extended.NullCheckNode) Node(org.graalvm.compiler.graph.Node) LogicNode(org.graalvm.compiler.nodes.LogicNode) IfNode(org.graalvm.compiler.nodes.IfNode) AbstractBeginNode(org.graalvm.compiler.nodes.AbstractBeginNode)

Aggregations

IfNode (org.graalvm.compiler.nodes.IfNode)27 ValueNode (org.graalvm.compiler.nodes.ValueNode)15 AbstractBeginNode (org.graalvm.compiler.nodes.AbstractBeginNode)14 BeginNode (org.graalvm.compiler.nodes.BeginNode)10 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)10 LogicNode (org.graalvm.compiler.nodes.LogicNode)9 AbstractMergeNode (org.graalvm.compiler.nodes.AbstractMergeNode)8 FixedNode (org.graalvm.compiler.nodes.FixedNode)8 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)7 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)7 CompareNode (org.graalvm.compiler.nodes.calc.CompareNode)7 Node (org.graalvm.compiler.graph.Node)6 EndNode (org.graalvm.compiler.nodes.EndNode)6 KillingBeginNode (org.graalvm.compiler.nodes.KillingBeginNode)6 AbstractEndNode (org.graalvm.compiler.nodes.AbstractEndNode)5 FixedWithNextNode (org.graalvm.compiler.nodes.FixedWithNextNode)5 LoopExitNode (org.graalvm.compiler.nodes.LoopExitNode)5 MergeNode (org.graalvm.compiler.nodes.MergeNode)5 Value (jdk.vm.ci.meta.Value)4 Condition (org.graalvm.compiler.core.common.calc.Condition)4