Skip to content

Commit 6499016

Browse files
committed
Replace GraphBuilderContext#getInliningCallStack with GraphBuilderContext#getInliningChain.
1 parent d19698f commit 6499016

File tree

4 files changed

+38
-32
lines changed

4 files changed

+38
-32
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/graphbuilderconf/GraphBuilderContext.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import static jdk.graal.compiler.core.common.type.StampFactory.objectNonNull;
2929
import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile;
3030

31-
import java.util.ArrayList;
32-
import java.util.Collections;
3331
import java.util.List;
3432

3533
import jdk.graal.compiler.bytecode.Bytecode;
@@ -77,6 +75,7 @@
7775
import jdk.graal.compiler.nodes.type.StampTool;
7876
import jdk.internal.misc.ScopedMemoryAccess;
7977
import jdk.vm.ci.code.BailoutException;
78+
import jdk.vm.ci.code.BytecodePosition;
8079
import jdk.vm.ci.meta.Assumptions;
8180
import jdk.vm.ci.meta.DeoptimizationAction;
8281
import jdk.vm.ci.meta.DeoptimizationReason;
@@ -284,19 +283,16 @@ default int getDepth() {
284283
}
285284

286285
/**
287-
* Gets the inlined call stack for this context. A list with only one element implies that no
288-
* inlining has taken place.
289-
*
290-
* @param ignoreInvocationPluginTarget if set to true, and {@link #isParsingInvocationPlugin()}
291-
* returns true, the resulting call stack does not include the target of the
292-
* invocation plugin.
286+
* Gets the inlining chain of this context. A null return value implies that this is the context
287+
* for the parse root.
293288
*/
294-
default List<StackTraceElement> getInliningCallStack(boolean ignoreInvocationPluginTarget) {
295-
List<StackTraceElement> callStack = new ArrayList<>();
296-
for (GraphBuilderContext cur = this; cur != null; cur = cur.getParent()) {
297-
callStack.add(cur.getMethod().asStackTraceElement(cur.bci()));
289+
default BytecodePosition getInliningChain() {
290+
BytecodePosition inliningContext = null;
291+
for (GraphBuilderContext cur = getParent(); cur != null; cur = cur.getParent()) {
292+
BytecodePosition caller = new BytecodePosition(null, cur.getMethod(), cur.bci());
293+
inliningContext = inliningContext == null ? caller : inliningContext.addCaller(caller);
298294
}
299-
return Collections.unmodifiableList(callStack);
295+
return inliningContext;
300296
}
301297

302298
/**

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/IntrinsicGraphBuilder.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626

2727
import static jdk.vm.ci.code.BytecodeFrame.AFTER_BCI;
2828

29-
import java.util.Collections;
30-
import java.util.List;
31-
3229
import jdk.graal.compiler.bytecode.Bytecode;
3330
import jdk.graal.compiler.core.common.type.Stamp;
3431
import jdk.graal.compiler.core.common.type.StampFactory;
@@ -71,6 +68,7 @@
7168
import jdk.graal.compiler.nodes.spi.CoreProvidersDelegate;
7269
import jdk.graal.compiler.options.OptionValues;
7370
import jdk.vm.ci.code.BailoutException;
71+
import jdk.vm.ci.code.BytecodePosition;
7472
import jdk.vm.ci.meta.DeoptimizationAction;
7573
import jdk.vm.ci.meta.DeoptimizationReason;
7674
import jdk.vm.ci.meta.JavaKind;
@@ -329,8 +327,8 @@ public int getDepth() {
329327
}
330328

331329
@Override
332-
public List<StackTraceElement> getInliningCallStack(boolean ignoreInvocationPluginTarget) {
333-
return Collections.emptyList();
330+
public BytecodePosition getInliningChain() {
331+
return null;
334332
}
335333

336334
@Override

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/PEGraphDecoder.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@
3636
import java.net.URI;
3737
import java.util.ArrayList;
3838
import java.util.Arrays;
39-
import java.util.Collections;
4039
import java.util.Formatter;
4140
import java.util.HashMap;
4241
import java.util.List;
4342
import java.util.Map;
4443
import java.util.concurrent.ConcurrentHashMap;
4544

45+
import jdk.vm.ci.code.BytecodePosition;
4646
import org.graalvm.collections.Pair;
4747

4848
import jdk.graal.compiler.api.replacements.Fold;
@@ -414,18 +414,15 @@ public int getDepth() {
414414
}
415415

416416
@Override
417-
public List<StackTraceElement> getInliningCallStack(boolean ignoreInvocationPluginTarget) {
418-
StackTraceElement[] callStackArray = methodScope.getCallStack();
419-
List<StackTraceElement> callStack = new ArrayList<>(callStackArray.length);
420-
Collections.addAll(callStack, callStackArray);
421-
/*
422-
* If triggered while processing an invocation plugin, the call stack as returned by the
423-
* methodScope object will include the target of the plugin.
424-
*/
425-
if (isParsingInvocationPlugin() && ignoreInvocationPluginTarget) {
426-
callStack.removeFirst();
427-
}
428-
return Collections.unmodifiableList(callStack);
417+
public BytecodePosition getInliningChain() {
418+
BytecodePosition inliningContext = null;
419+
int bci = methodScope.invokeData == null ? 0 : methodScope.invokeData.invoke.bci();
420+
for (PEMethodScope cur = methodScope.caller; cur != null; cur = cur.caller) {
421+
BytecodePosition caller = new BytecodePosition(null, cur.method, bci);
422+
inliningContext = inliningContext == null ? caller : inliningContext.addCaller(caller);
423+
bci = cur.invokeData == null ? 0 : cur.invokeData.invoke.bci();
424+
}
425+
return inliningContext;
429426
}
430427

431428
@Override

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/dynamicaccessinference/DynamicAccessInferenceLog.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package com.oracle.svm.hosted.dynamicaccessinference;
2626

2727
import java.io.IOException;
28+
import java.util.ArrayList;
2829
import java.util.Arrays;
2930
import java.util.List;
3031
import java.util.Objects;
@@ -34,6 +35,7 @@
3435
import java.util.stream.Collectors;
3536
import java.util.stream.Stream;
3637

38+
import jdk.vm.ci.code.BytecodePosition;
3739
import org.graalvm.collections.Pair;
3840
import org.graalvm.nativeimage.ImageSingletons;
3941

@@ -99,12 +101,25 @@ abstract static class LogEntry {
99101
assert targetMethod.hasReceiver() == (targetReceiver != null) : "Inferred receiver does not match with target method signature";
100102
assert targetMethod.getSignature().getParameterCount(false) == targetArguments.length : "Inferred arguments do not match with target method signature";
101103
this.callLocation = Pair.create(b.getMethod(), b.bci());
102-
this.callStack = b.getInliningCallStack(true);
104+
this.callStack = getCallStack(b);
103105
this.targetMethod = targetMethod;
104106
this.targetReceiver = targetReceiver;
105107
this.targetArguments = targetArguments;
106108
}
107109

110+
private static List<StackTraceElement> getCallStack(GraphBuilderContext b) {
111+
BytecodePosition inliningContext = b.getInliningChain();
112+
List<StackTraceElement> callStack = new ArrayList<>();
113+
if (inliningContext == null || !inliningContext.getMethod().equals(b.getMethod()) || inliningContext.getBCI() != b.bci()) {
114+
callStack.add(b.getMethod().asStackTraceElement(b.bci()));
115+
}
116+
while (inliningContext != null) {
117+
callStack.add(inliningContext.getMethod().asStackTraceElement(inliningContext.getBCI()));
118+
inliningContext = inliningContext.getCaller();
119+
}
120+
return callStack;
121+
}
122+
108123
@Override
109124
public String toString() {
110125
String targetArgumentsString = Stream.of(targetArguments)

0 commit comments

Comments
 (0)