Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
import jdk.graal.compiler.nodes.type.StampTool;
import jdk.internal.misc.ScopedMemoryAccess;
import jdk.vm.ci.code.BailoutException;
import jdk.vm.ci.code.BytecodePosition;
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.DeoptimizationReason;
Expand Down Expand Up @@ -281,6 +282,21 @@ default int getDepth() {
return result;
}

/**
* Gets the inlining chain of this context.
*
* @return the inlining chain of this context represented as a {@link BytecodePosition}, or
* {@code null} if this is the context for the parse root.
*/
default BytecodePosition getInliningChain() {
BytecodePosition inliningContext = null;
for (GraphBuilderContext cur = getParent(); cur != null; cur = cur.getParent()) {
BytecodePosition caller = new BytecodePosition(null, cur.getMethod(), cur.bci());
inliningContext = inliningContext == null ? caller : inliningContext.addCaller(caller);
}
return inliningContext;
}

/**
* Computes the recursive inlining depth of the provided method, i.e., counts how often the
* provided method is already in the {@link #getParent()} chain starting at this context.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import jdk.graal.compiler.nodes.spi.CoreProvidersDelegate;
import jdk.graal.compiler.options.OptionValues;
import jdk.vm.ci.code.BailoutException;
import jdk.vm.ci.code.BytecodePosition;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.DeoptimizationReason;
import jdk.vm.ci.meta.JavaKind;
Expand Down Expand Up @@ -325,6 +326,11 @@ public int getDepth() {
return 0;
}

@Override
public BytecodePosition getInliningChain() {
return null;
}

@Override
public boolean parsingIntrinsic() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@
import jdk.vm.ci.code.Architecture;
import jdk.vm.ci.code.BailoutException;
import jdk.vm.ci.code.BytecodeFrame;
import jdk.vm.ci.code.BytecodePosition;
import jdk.vm.ci.meta.DeoptimizationAction;
import jdk.vm.ci.meta.DeoptimizationReason;
import jdk.vm.ci.meta.JavaConstant;
Expand Down Expand Up @@ -412,6 +413,18 @@ public int getDepth() {
return methodScope.inliningDepth;
}

@Override
public BytecodePosition getInliningChain() {
BytecodePosition inliningContext = null;
int bci = methodScope.invokeData == null ? 0 : methodScope.invokeData.invoke.bci();
for (PEMethodScope cur = methodScope.caller; cur != null; cur = cur.caller) {
BytecodePosition caller = new BytecodePosition(null, cur.method, bci);
inliningContext = inliningContext == null ? caller : inliningContext.addCaller(caller);
bci = cur.invokeData == null ? 0 : cur.invokeData.invoke.bci();
}
return inliningContext;
}

@Override
public int recursiveInliningDepth(ResolvedJavaMethod method) {
int result = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,8 @@ public JavaConstant lookup() {
return lookupConstant(wrapped.lookup());
}
}

public ConstantPool getWrapped() {
return wrapped;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,11 @@ protected boolean tryInvocationPlugin(CallTargetNode.InvokeKind invokeKind, Valu
protected boolean shouldVerifyFrameStates() {
return Options.VerifyRuntimeCompilationFrameStates.getValue();
}

@Override
protected boolean strictDynamicAccessInferenceIsApplicable() {
return false;
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@
import com.oracle.svm.core.util.VMError;
import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport;
import com.oracle.svm.hosted.config.ConfigurationParserUtils;
import com.oracle.svm.hosted.dynamicaccessinference.DynamicAccessInferenceLog;
import com.oracle.svm.hosted.dynamicaccessinference.StrictDynamicAccessInferenceFeature;
import com.oracle.svm.hosted.imagelayer.HostedImageLayerBuildingSupport;
import com.oracle.svm.hosted.jdk.localization.LocalizationFeature;
import com.oracle.svm.hosted.reflect.NativeImageConditionResolver;
Expand Down Expand Up @@ -174,6 +176,8 @@ private record CompiledConditionalPattern(ConfigurationCondition condition, Reso
private int loadedConfigurations;
private ImageClassLoader imageClassLoader;

private DynamicAccessInferenceLog inferenceLog;

private class ResourcesRegistryImpl extends ConditionalConfigurationRegistry implements ResourcesRegistry<ConfigurationCondition> {
private final ClassInitializationSupport classInitializationSupport = ClassInitializationSupport.singleton();

Expand Down Expand Up @@ -484,6 +488,8 @@ public void beforeAnalysis(BeforeAnalysisAccess a) {
globWorkSet = Set.of();

resourceRegistryImpl().setAnalysisAccess(access);

inferenceLog = DynamicAccessInferenceLog.singletonOrNull();
}

private static final class ResourceCollectorImpl extends ConditionalConfigurationRegistry implements ResourceCollector {
Expand Down Expand Up @@ -672,7 +678,7 @@ public void beforeCompilation(BeforeCompilationAccess access) {

@Override
public void registerInvocationPlugins(Providers providers, GraphBuilderConfiguration.Plugins plugins, ParsingReason reason) {
if (!reason.duringAnalysis() || reason == ParsingReason.JITCompilation) {
if (!reason.duringAnalysis() || reason == ParsingReason.JITCompilation || StrictDynamicAccessInferenceFeature.isEnforced()) {
return;
}

Expand Down Expand Up @@ -712,6 +718,9 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
throw VMError.shouldNotReachHere(e);
}
b.add(ReachabilityRegistrationNode.create(() -> RuntimeResourceAccess.addResource(clazz.getModule(), resourceName), reason));
if (inferenceLog != null) {
inferenceLog.logRegistration(b, reason, targetMethod, clazz, new String[]{resource});
}
return true;
}
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@
import com.oracle.svm.hosted.code.InliningUtilities;
import com.oracle.svm.hosted.code.SubstrateCompilationDirectives;
import com.oracle.svm.hosted.code.UninterruptibleAnnotationChecker;
import com.oracle.svm.hosted.dynamicaccessinference.ConstantExpressionRegistry;
import com.oracle.svm.hosted.dynamicaccessinference.StrictDynamicAccessInferenceFeature;
import com.oracle.svm.hosted.fieldfolding.StaticFinalFieldFoldingPhase;
import com.oracle.svm.hosted.heap.PodSupport;
import com.oracle.svm.hosted.imagelayer.HostedDynamicLayerInfo;
Expand Down Expand Up @@ -229,6 +231,8 @@ public enum UsageKind {
private final LayeredStaticFieldSupport layeredStaticFieldSupport;
private final MetaAccessProvider originalMetaAccess;

private final ConstantExpressionRegistry constantExpressionRegistry;

@SuppressWarnings("this-escape")
public SVMHost(OptionValues options, ImageClassLoader loader, ClassInitializationSupport classInitializationSupport, AnnotationSubstitutionProcessor annotationSubstitutions,
MissingRegistrationSupport missingRegistrationSupport) {
Expand Down Expand Up @@ -268,6 +272,8 @@ public SVMHost(OptionValues options, ImageClassLoader loader, ClassInitializatio
featureType = lookupOriginalType(Feature.class);

verifyNamingConventions = SubstrateOptions.VerifyNamingConventions.getValue();

constantExpressionRegistry = StrictDynamicAccessInferenceFeature.isActive() ? ConstantExpressionRegistry.singleton() : null;
}

/**
Expand Down Expand Up @@ -1384,4 +1390,8 @@ public boolean allowConstantFolding(AnalysisMethod method) {
public SimulateClassInitializerSupport createSimulateClassInitializerSupport(AnalysisMetaAccess aMetaAccess) {
return new SimulateClassInitializerSupport(aMetaAccess, this);
}

public ConstantExpressionRegistry getConstantExpressionRegistry() {
return constantExpressionRegistry;
}
}
Loading