src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/StructuredGraph.java
changeset 48861 47f19ff9903c
parent 48190 25cfedf27edc
child 49451 e06f9607f370
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/StructuredGraph.java	Fri Feb 02 10:37:48 2018 -0500
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/StructuredGraph.java	Fri Feb 02 17:28:17 2018 -0800
@@ -28,6 +28,10 @@
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Consumer;
 
+import org.graalvm.collections.EconomicMap;
+import org.graalvm.collections.EconomicSet;
+import org.graalvm.collections.Equivalence;
+import org.graalvm.collections.UnmodifiableEconomicMap;
 import org.graalvm.compiler.core.common.CancellationBailoutException;
 import org.graalvm.compiler.core.common.CompilationIdentifier;
 import org.graalvm.compiler.core.common.GraalOptions;
@@ -38,6 +42,7 @@
 import org.graalvm.compiler.graph.Graph;
 import org.graalvm.compiler.graph.Node;
 import org.graalvm.compiler.graph.NodeMap;
+import org.graalvm.compiler.graph.NodeSourcePosition;
 import org.graalvm.compiler.nodes.calc.FloatingNode;
 import org.graalvm.compiler.nodes.cfg.Block;
 import org.graalvm.compiler.nodes.cfg.ControlFlowGraph;
@@ -45,10 +50,6 @@
 import org.graalvm.compiler.nodes.spi.VirtualizableAllocation;
 import org.graalvm.compiler.nodes.util.GraphUtil;
 import org.graalvm.compiler.options.OptionValues;
-import org.graalvm.util.EconomicMap;
-import org.graalvm.util.EconomicSet;
-import org.graalvm.util.Equivalence;
-import org.graalvm.util.UnmodifiableEconomicMap;
 
 import jdk.vm.ci.meta.Assumptions;
 import jdk.vm.ci.meta.Assumptions.Assumption;
@@ -169,6 +170,7 @@
         private final OptionValues options;
         private Cancellable cancellable = null;
         private final DebugContext debug;
+        private NodeSourcePosition callerContext;
 
         /**
          * Creates a builder for a graph.
@@ -255,8 +257,13 @@
             return this;
         }
 
+        public Builder callerContext(NodeSourcePosition context) {
+            this.callerContext = context;
+            return this;
+        }
+
         public StructuredGraph build() {
-            return new StructuredGraph(name, rootMethod, entryBCI, assumptions, speculationLog, useProfilingInfo, compilationId, options, debug, cancellable);
+            return new StructuredGraph(name, rootMethod, entryBCI, assumptions, speculationLog, useProfilingInfo, compilationId, options, debug, cancellable, callerContext);
         }
     }
 
@@ -284,6 +291,13 @@
 
     private ScheduleResult lastSchedule;
 
+    private final InliningLog inliningLog;
+
+    /**
+     * Call stack (context) leading to construction of this graph.
+     */
+    private final NodeSourcePosition callerContext;
+
     /**
      * Records the methods that were used while constructing this graph, one entry for each time a
      * specific method is used.
@@ -317,7 +331,8 @@
                     CompilationIdentifier compilationId,
                     OptionValues options,
                     DebugContext debug,
-                    Cancellable cancellable) {
+                    Cancellable cancellable,
+                    NodeSourcePosition context) {
         super(name, options, debug);
         this.setStart(add(new StartNode()));
         this.rootMethod = method;
@@ -328,6 +343,8 @@
         this.speculationLog = speculationLog;
         this.useProfilingInfo = useProfilingInfo;
         this.cancellable = cancellable;
+        this.inliningLog = new InliningLog();
+        this.callerContext = context;
     }
 
     public void setLastSchedule(ScheduleResult result) {
@@ -436,6 +453,10 @@
         this.start = start;
     }
 
+    public InliningLog getInliningLog() {
+        return inliningLog;
+    }
+
     /**
      * Creates a copy of this graph.
      *
@@ -459,7 +480,7 @@
                         speculationLog,
                         useProfilingInfo,
                         newCompilationId,
-                        getOptions(), debugForCopy, null);
+                        getOptions(), debugForCopy, null, callerContext);
         if (allowAssumptions == AllowAssumptions.YES && assumptions != null) {
             copy.assumptions.record(assumptions);
         }
@@ -931,4 +952,8 @@
     protected void afterRegister(Node node) {
         assert hasValueProxies() || !(node instanceof ValueProxyNode);
     }
+
+    public NodeSourcePosition getCallerContext() {
+        return callerContext;
+    }
 }