< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/info/elem/InlineableGraph.java

Print this page
rev 52509 : [mq]: graal


  26 
  27 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Optional;
  28 
  29 import java.util.ArrayList;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.type.Stamp;
  33 import org.graalvm.compiler.debug.DebugContext;
  34 import org.graalvm.compiler.graph.Node;
  35 import org.graalvm.compiler.graph.NodeInputList;
  36 import org.graalvm.compiler.nodes.ConstantNode;
  37 import org.graalvm.compiler.nodes.Invoke;
  38 import org.graalvm.compiler.nodes.NodeView;
  39 import org.graalvm.compiler.nodes.ParameterNode;
  40 import org.graalvm.compiler.nodes.StructuredGraph;
  41 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
  42 import org.graalvm.compiler.nodes.ValueNode;
  43 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
  44 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
  45 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
  46 import org.graalvm.compiler.phases.graph.FixedNodeProbabilityCache;
  47 import org.graalvm.compiler.phases.tiers.HighTierContext;
  48 
  49 import jdk.vm.ci.meta.ResolvedJavaMethod;
  50 
  51 /**
  52  * <p>
  53  * Represents a feasible concrete target for inlining, whose graph has been copied already and thus
  54  * can be modified without affecting the original (usually cached) version.
  55  * </p>
  56  *
  57  * <p>
  58  * Instances of this class don't make sense in isolation but as part of an
  59  * {@link org.graalvm.compiler.phases.common.inlining.info.InlineInfo InlineInfo}.
  60  * </p>
  61  *
  62  * @see org.graalvm.compiler.phases.common.inlining.walker.InliningData#moveForward()
  63  * @see org.graalvm.compiler.phases.common.inlining.walker.CallsiteHolderExplorable
  64  */
  65 public class InlineableGraph implements Inlineable {
  66 
  67     private final StructuredGraph graph;
  68 
  69     private FixedNodeProbabilityCache probabilites = new FixedNodeProbabilityCache();
  70 
  71     public InlineableGraph(final ResolvedJavaMethod method, final Invoke invoke, final HighTierContext context, CanonicalizerPhase canonicalizer, boolean trackNodeSourcePosition) {
  72         StructuredGraph original = InliningUtil.getIntrinsicGraph(context.getReplacements(), method, invoke.bci(), trackNodeSourcePosition, null);
  73         if (original == null) {
  74             original = parseBytecodes(method, context, canonicalizer, invoke.asNode().graph(), trackNodeSourcePosition);
  75         } else if (original.isFrozen()) {
  76             // Graph may be modified by specializeGraphToArguments so defensively
  77             // make a copy. We rely on the frozen state of a graph to denote
  78             // whether it is shared.
  79             original = (StructuredGraph) original.copy(invoke.asNode().getDebug());
  80         }
  81         this.graph = original;
  82         specializeGraphToArguments(invoke, context, canonicalizer);
  83     }
  84 
  85     /**
  86      * @return true iff one or more parameters <code>newGraph</code> were specialized to account for
  87      *         a constant argument, or an argument with a more specific stamp.
  88      */
  89     @SuppressWarnings("try")




  26 
  27 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Optional;
  28 
  29 import java.util.ArrayList;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.type.Stamp;
  33 import org.graalvm.compiler.debug.DebugContext;
  34 import org.graalvm.compiler.graph.Node;
  35 import org.graalvm.compiler.graph.NodeInputList;
  36 import org.graalvm.compiler.nodes.ConstantNode;
  37 import org.graalvm.compiler.nodes.Invoke;
  38 import org.graalvm.compiler.nodes.NodeView;
  39 import org.graalvm.compiler.nodes.ParameterNode;
  40 import org.graalvm.compiler.nodes.StructuredGraph;
  41 import org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions;
  42 import org.graalvm.compiler.nodes.ValueNode;
  43 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
  44 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
  45 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
  46 import org.graalvm.compiler.phases.graph.FixedNodeRelativeFrequencyCache;
  47 import org.graalvm.compiler.phases.tiers.HighTierContext;
  48 
  49 import jdk.vm.ci.meta.ResolvedJavaMethod;
  50 
  51 /**
  52  * <p>
  53  * Represents a feasible concrete target for inlining, whose graph has been copied already and thus
  54  * can be modified without affecting the original (usually cached) version.
  55  * </p>
  56  *
  57  * <p>
  58  * Instances of this class don't make sense in isolation but as part of an
  59  * {@link org.graalvm.compiler.phases.common.inlining.info.InlineInfo InlineInfo}.
  60  * </p>
  61  *
  62  * @see org.graalvm.compiler.phases.common.inlining.walker.InliningData#moveForward()
  63  * @see org.graalvm.compiler.phases.common.inlining.walker.CallsiteHolderExplorable
  64  */
  65 public class InlineableGraph implements Inlineable {
  66 
  67     private final StructuredGraph graph;
  68 
  69     private FixedNodeRelativeFrequencyCache probabilites = new FixedNodeRelativeFrequencyCache();
  70 
  71     public InlineableGraph(final ResolvedJavaMethod method, final Invoke invoke, final HighTierContext context, CanonicalizerPhase canonicalizer, boolean trackNodeSourcePosition) {
  72         StructuredGraph original = InliningUtil.getIntrinsicGraph(context.getReplacements(), method, invoke.bci(), trackNodeSourcePosition, null);
  73         if (original == null) {
  74             original = parseBytecodes(method, context, canonicalizer, invoke.asNode().graph(), trackNodeSourcePosition);
  75         } else if (original.isFrozen()) {
  76             // Graph may be modified by specializeGraphToArguments so defensively
  77             // make a copy. We rely on the frozen state of a graph to denote
  78             // whether it is shared.
  79             original = (StructuredGraph) original.copy(invoke.asNode().getDebug());
  80         }
  81         this.graph = original;
  82         specializeGraphToArguments(invoke, context, canonicalizer);
  83     }
  84 
  85     /**
  86      * @return true iff one or more parameters <code>newGraph</code> were specialized to account for
  87      *         a constant argument, or an argument with a more specific stamp.
  88      */
  89     @SuppressWarnings("try")


< prev index next >