src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/info/TypeGuardInlineInfo.java
changeset 48861 47f19ff9903c
parent 48190 25cfedf27edc
child 49873 26ebfe8ce852
equal deleted inserted replaced
48860:5bce1b7e7800 48861:47f19ff9903c
    20  * or visit www.oracle.com if you need additional information or have any
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    21  * questions.
    22  */
    22  */
    23 package org.graalvm.compiler.phases.common.inlining.info;
    23 package org.graalvm.compiler.phases.common.inlining.info;
    24 
    24 
    25 import org.graalvm.compiler.core.common.calc.Condition;
    25 import org.graalvm.collections.EconomicSet;
       
    26 import org.graalvm.compiler.core.common.calc.CanonicalCondition;
    26 import org.graalvm.compiler.graph.Node;
    27 import org.graalvm.compiler.graph.Node;
    27 import org.graalvm.compiler.nodes.CallTargetNode.InvokeKind;
    28 import org.graalvm.compiler.nodes.CallTargetNode.InvokeKind;
    28 import org.graalvm.compiler.nodes.ConstantNode;
    29 import org.graalvm.compiler.nodes.ConstantNode;
    29 import org.graalvm.compiler.nodes.FixedGuardNode;
    30 import org.graalvm.compiler.nodes.FixedGuardNode;
    30 import org.graalvm.compiler.nodes.Invoke;
    31 import org.graalvm.compiler.nodes.Invoke;
    35 import org.graalvm.compiler.nodes.calc.CompareNode;
    36 import org.graalvm.compiler.nodes.calc.CompareNode;
    36 import org.graalvm.compiler.nodes.extended.LoadHubNode;
    37 import org.graalvm.compiler.nodes.extended.LoadHubNode;
    37 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
    38 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
    38 import org.graalvm.compiler.phases.common.inlining.info.elem.Inlineable;
    39 import org.graalvm.compiler.phases.common.inlining.info.elem.Inlineable;
    39 import org.graalvm.compiler.phases.util.Providers;
    40 import org.graalvm.compiler.phases.util.Providers;
    40 import org.graalvm.util.EconomicSet;
       
    41 
    41 
    42 import jdk.vm.ci.meta.DeoptimizationAction;
    42 import jdk.vm.ci.meta.DeoptimizationAction;
    43 import jdk.vm.ci.meta.DeoptimizationReason;
    43 import jdk.vm.ci.meta.DeoptimizationReason;
    44 import jdk.vm.ci.meta.ResolvedJavaMethod;
    44 import jdk.vm.ci.meta.ResolvedJavaMethod;
    45 import jdk.vm.ci.meta.ResolvedJavaType;
    45 import jdk.vm.ci.meta.ResolvedJavaType;
   112     private void createGuard(StructuredGraph graph, Providers providers) {
   112     private void createGuard(StructuredGraph graph, Providers providers) {
   113         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
   113         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
   114         LoadHubNode receiverHub = graph.unique(new LoadHubNode(providers.getStampProvider(), nonNullReceiver));
   114         LoadHubNode receiverHub = graph.unique(new LoadHubNode(providers.getStampProvider(), nonNullReceiver));
   115         ConstantNode typeHub = ConstantNode.forConstant(receiverHub.stamp(NodeView.DEFAULT), providers.getConstantReflection().asObjectHub(type), providers.getMetaAccess(), graph);
   115         ConstantNode typeHub = ConstantNode.forConstant(receiverHub.stamp(NodeView.DEFAULT), providers.getConstantReflection().asObjectHub(type), providers.getMetaAccess(), graph);
   116 
   116 
   117         LogicNode typeCheck = CompareNode.createCompareNode(graph, Condition.EQ, receiverHub, typeHub, providers.getConstantReflection(), NodeView.DEFAULT);
   117         LogicNode typeCheck = CompareNode.createCompareNode(graph, CanonicalCondition.EQ, receiverHub, typeHub, providers.getConstantReflection(), NodeView.DEFAULT);
   118         FixedGuardNode guard = graph.add(new FixedGuardNode(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile));
   118         FixedGuardNode guard = graph.add(new FixedGuardNode(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile));
   119         assert invoke.predecessor() != null;
   119         assert invoke.predecessor() != null;
   120 
   120 
   121         ValueNode anchoredReceiver = InliningUtil.createAnchoredReceiver(graph, guard, type, nonNullReceiver, true);
   121         ValueNode anchoredReceiver = InliningUtil.createAnchoredReceiver(graph, guard, type, nonNullReceiver, true);
   122         invoke.callTarget().replaceFirstInput(nonNullReceiver, anchoredReceiver);
   122         invoke.callTarget().replaceFirstInput(nonNullReceiver, anchoredReceiver);