Search in sources :

Example 6 with AnalysisMethod

use of com.oracle.graal.pointsto.meta.AnalysisMethod in project graal by oracle.

the class StaticAnalysisResultsBuilder method createMethodProfile.

private JavaMethodProfile createMethodProfile(Collection<AnalysisMethod> callees) {
    ProfiledMethod[] pitems = new ProfiledMethod[callees.size()];
    double probability = 1d / pitems.length;
    int idx = 0;
    for (AnalysisMethod aMethod : callees) {
        ResolvedJavaMethod convertedMethod = converter == null ? aMethod : converter.lookup(aMethod);
        pitems[idx++] = new ProfiledMethod(convertedMethod, probability);
    }
    return new JavaMethodProfile(0, pitems);
}
Also used : ProfiledMethod(jdk.vm.ci.meta.JavaMethodProfile.ProfiledMethod) AnalysisMethod(com.oracle.graal.pointsto.meta.AnalysisMethod) JavaMethodProfile(jdk.vm.ci.meta.JavaMethodProfile) ResolvedJavaMethod(jdk.vm.ci.meta.ResolvedJavaMethod)

Example 7 with AnalysisMethod

use of com.oracle.graal.pointsto.meta.AnalysisMethod in project graal by oracle.

the class TypeFlowGraphBuilder method checkFormalParameterBuilder.

/**
 * Check if the formal parameter is a parameter of one of the wait/notify/hashCode methods. If
 * so add it as a sink since it must be retained. Don't need to check the position of the
 * parameter, since each of the checked methods has at most one object parameter.
 */
public void checkFormalParameterBuilder(TypeFlowBuilder<?> paramBuilder) {
    AnalysisMethod method = (AnalysisMethod) ((ParameterNode) paramBuilder.getSource()).graph().method();
    String methodFormat = method.format("%H.%n(%P)");
    for (String specialMethodFormat : waitNotifyHashCodeMethods) {
        if (methodFormat.equals(specialMethodFormat)) {
            dataFlowSinkBuilders.add(paramBuilder);
        }
    }
}
Also used : AnalysisMethod(com.oracle.graal.pointsto.meta.AnalysisMethod) ParameterNode(org.graalvm.compiler.nodes.ParameterNode)

Example 8 with AnalysisMethod

use of com.oracle.graal.pointsto.meta.AnalysisMethod in project graal by oracle.

the class AnalysisMethodCalleeWalker method walkCallees.

/**
 * Visit the callees of this method.
 */
VisitResult walkCallees(AnalysisMethod method, CallPathVisitor visitor) {
    final StructuredGraph graph = method.getTypeFlow().getGraph();
    if (graph != null) {
        for (Invoke invoke : graph.getInvokes()) {
            final CallTargetNode callTarget = invoke.callTarget();
            final AnalysisMethod callee = (AnalysisMethod) callTarget.targetMethod();
            walkMethodAndCallees(callee, method, invoke, visitor);
        }
    }
    return VisitResult.CONTINUE;
}
Also used : AnalysisMethod(com.oracle.graal.pointsto.meta.AnalysisMethod) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) Invoke(org.graalvm.compiler.nodes.Invoke) CallTargetNode(org.graalvm.compiler.nodes.CallTargetNode)

Example 9 with AnalysisMethod

use of com.oracle.graal.pointsto.meta.AnalysisMethod in project graal by oracle.

the class RestrictHeapAccessCalleesFeature method aggregateMethods.

/**
 * Aggregate a set of methods that are annotated with {@link RestrictHeapAccess} or with
 * {@link Uninterruptible}, or methods that are called from those methods.
 */
public void aggregateMethods(Collection<AnalysisMethod> methods) {
    assert !initialized : "RestrictHeapAccessCallees.aggregateMethods: Should only initialize once.";
    final Map<AnalysisMethod, RestrictionInfo> aggregation = new HashMap<>();
    final MethodAggregator visitor = new MethodAggregator(aggregation, assertionErrorConstructorList);
    final AnalysisMethodCalleeWalker walker = new AnalysisMethodCalleeWalker();
    for (AnalysisMethod method : methods) {
        final RestrictHeapAccess annotation = method.getAnnotation(RestrictHeapAccess.class);
        if ((annotation != null && annotation.access() != Access.UNRESTRICTED) || method.isAnnotationPresent(Uninterruptible.class)) {
            for (AnalysisMethod calleeImpl : method.getImplementations()) {
                walker.walkMethod(calleeImpl, visitor);
            }
        }
    }
    calleeToCallerMap = Collections.unmodifiableMap(aggregation);
    initialized = true;
}
Also used : AnalysisMethod(com.oracle.graal.pointsto.meta.AnalysisMethod) Uninterruptible(com.oracle.svm.core.annotate.Uninterruptible) HashMap(java.util.HashMap) RestrictHeapAccess(com.oracle.svm.core.annotate.RestrictHeapAccess)

Example 10 with AnalysisMethod

use of com.oracle.graal.pointsto.meta.AnalysisMethod in project graal by oracle.

the class Target_com_oracle_truffle_api_interop_java_ObjectProxyHandler method beforeAnalysis.

@SuppressWarnings("deprecation")
@Override
public void beforeAnalysis(BeforeAnalysisAccess access) {
    BeforeAnalysisAccessImpl config = (BeforeAnalysisAccessImpl) access;
    getLanguageClasses().forEach(config::registerForReflectiveInstantiation);
    config.registerHierarchyForReflectiveInstantiation(TruffleInstrument.class);
    config.registerHierarchyForReflectiveInstantiation(com.oracle.truffle.api.instrumentation.InstrumentableFactory.class);
    if (useTruffleCompiler()) {
        SubstrateTruffleRuntime truffleRuntime = (SubstrateTruffleRuntime) Truffle.getRuntime();
        GraalFeature graalFeature = ImageSingletons.lookup(GraalFeature.class);
        SnippetReflectionProvider snippetReflection = graalFeature.getHostedProviders().getSnippetReflection();
        SubstrateTruffleCompiler truffleCompiler = truffleRuntime.initTruffleCompiler();
        truffleRuntime.lookupCallMethods(config.getMetaAccess());
        PartialEvaluator partialEvaluator = truffleCompiler.getPartialEvaluator();
        registerKnownTruffleFields(config, partialEvaluator.getKnownTruffleTypes());
        support.registerInterpreterEntryMethodsAsCompiled(partialEvaluator, access);
        GraphBuilderConfiguration graphBuilderConfig = partialEvaluator.getConfigForParsing();
        if (Options.TruffleInlineDuringParsing.getValue()) {
            graphBuilderConfig.getPlugins().appendInlineInvokePlugin(new TruffleParsingInlineInvokePlugin(graalFeature.getHostedProviders().getReplacements(), graphBuilderConfig.getPlugins().getInvocationPlugins(), partialEvaluator, method -> includeCallee(method, null, null)));
        }
        registerNeverPartOfCompilation(graphBuilderConfig.getPlugins().getInvocationPlugins());
        graphBuilderConfig.getPlugins().getInvocationPlugins().closeRegistration();
        HostedProviders newHostedProviders = new HostedProviders(partialEvaluator.getProviders().getMetaAccess(), partialEvaluator.getProviders().getCodeCache(), partialEvaluator.getProviders().getConstantReflection(), new HostedTruffleConstantFieldProvider(partialEvaluator.getProviders().getConstantFieldProvider()), partialEvaluator.getProviders().getForeignCalls(), partialEvaluator.getProviders().getLowerer(), partialEvaluator.getProviders().getReplacements(), partialEvaluator.getProviders().getStampProvider(), snippetReflection, graalFeature.getHostedProviders().getWordTypes());
        newHostedProviders.setGraphBuilderPlugins(graphBuilderConfig.getPlugins());
        graalFeature.initializeRuntimeCompilationConfiguration(newHostedProviders, graphBuilderConfig, this::includeCallee, this::deoptimizeOnException);
        for (ResolvedJavaMethod method : partialEvaluator.getCompilationRootMethods()) {
            graalFeature.prepareMethodForRuntimeCompilation(method, config);
        }
        initializeMethodBlacklist(config.getMetaAccess());
        /*
             * Stack frames that are visited by Truffle-level stack walking must have full frame
             * information available, otherwise SubstrateStackIntrospection cannot visit them.
             */
        for (ResolvedJavaMethod method : truffleRuntime.getAnyFrameMethod()) {
            graalFeature.requireFrameInformationForMethod(method);
            /*
                 * To avoid corner case errors, we also force compilation of these methods. This
                 * only affects builds where no Truffle language is included, because any real
                 * language makes these methods reachable (and therefore compiled).
                 */
            config.registerAsCompiled((AnalysisMethod) method);
        }
    }
    firstAnalysisRun = true;
}
Also used : BeforeAnalysisAccessImpl(com.oracle.svm.hosted.FeatureImpl.BeforeAnalysisAccessImpl) BeforeAnalysisAccessImpl(com.oracle.svm.hosted.FeatureImpl.BeforeAnalysisAccessImpl) HostedProviders(com.oracle.graal.pointsto.meta.HostedProviders) Arrays(java.util.Arrays) ResolvedJavaType(jdk.vm.ci.meta.ResolvedJavaType) KnownTruffleTypes(org.graalvm.compiler.truffle.compiler.substitutions.KnownTruffleTypes) ResolvedJavaField(jdk.vm.ci.meta.ResolvedJavaField) BooleanSupplier(java.util.function.BooleanSupplier) InlineInfo.createStandardInlineInfo(org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin.InlineInfo.createStandardInlineInfo) BigDecimal(java.math.BigDecimal) Vector(java.util.Vector) CompilerDirectives(com.oracle.truffle.api.CompilerDirectives) SubstrateTruffleCompiler(com.oracle.svm.truffle.api.SubstrateTruffleCompiler) Deoptimizer(com.oracle.svm.core.deopt.Deoptimizer) Map(java.util.Map) RootNode(com.oracle.truffle.api.nodes.RootNode) Executable(java.lang.reflect.Executable) BigInteger(java.math.BigInteger) TruffleCallBoundary(org.graalvm.compiler.truffle.runtime.TruffleCallBoundary) Alias(com.oracle.svm.core.annotate.Alias) JavaStackWalker(com.oracle.svm.core.stack.JavaStackWalker) FilesFeature(com.oracle.svm.core.jdk.FilesFeature) Set(java.util.Set) FilesSupport(com.oracle.svm.core.jdk.FilesSupport) AnalysisField(com.oracle.graal.pointsto.meta.AnalysisField) GraphBuilderContext(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext) HostedOptionValues(com.oracle.svm.core.option.HostedOptionValues) MetaAccessProvider(jdk.vm.ci.meta.MetaAccessProvider) GraphBuilderConfiguration(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration) GraalFeature(com.oracle.svm.graal.hosted.GraalFeature) InlineDuringParsingMaxDepth(org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsingMaxDepth) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) TreeSet(java.util.TreeSet) HostedOptionKey(com.oracle.svm.core.option.HostedOptionKey) InvocationPlugin(org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin) AnalysisMethod(com.oracle.graal.pointsto.meta.AnalysisMethod) NeverPartOfCompilationNode(org.graalvm.compiler.truffle.compiler.nodes.asserts.NeverPartOfCompilationNode) TruffleInstrument(com.oracle.truffle.api.instrumentation.TruffleInstrument) SubstratePartialEvaluator(com.oracle.svm.truffle.api.SubstratePartialEvaluator) Field(java.lang.reflect.Field) Replacements(org.graalvm.compiler.nodes.spi.Replacements) StructuredGraph(org.graalvm.compiler.nodes.StructuredGraph) TreeMap(java.util.TreeMap) RuntimeBytecodeParser(com.oracle.svm.graal.hosted.GraalFeature.RuntimeBytecodeParser) RecomputeFieldValue(com.oracle.svm.core.annotate.RecomputeFieldValue) SubstrateOptimizedCallTarget(com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget) Providers(org.graalvm.compiler.phases.util.Providers) DefaultTruffleRuntime(com.oracle.truffle.api.impl.DefaultTruffleRuntime) ListIterator(java.util.ListIterator) InvocationPlugins(org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins) TruffleRuntime(com.oracle.truffle.api.TruffleRuntime) SubstrateTruffleRuntime(com.oracle.svm.truffle.api.SubstrateTruffleRuntime) JavaKind(jdk.vm.ci.meta.JavaKind) Option(org.graalvm.compiler.options.Option) UserError(com.oracle.svm.core.util.UserError) Method(java.lang.reflect.Method) IdentityHashMap(java.util.IdentityHashMap) Predicate(java.util.function.Predicate) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) InstrumentPhase(org.graalvm.compiler.truffle.compiler.phases.InstrumentPhase) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Collectors(java.util.stream.Collectors) Registration(org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration) FileTypeDetector(java.nio.file.spi.FileTypeDetector) TargetClass(com.oracle.svm.core.annotate.TargetClass) VMError(com.oracle.svm.core.util.VMError) ValueNode(org.graalvm.compiler.nodes.ValueNode) CallTreeNode(com.oracle.svm.graal.hosted.GraalFeature.CallTreeNode) List(java.util.List) Modifier(java.lang.reflect.Modifier) SnippetReflectionProvider(org.graalvm.compiler.api.replacements.SnippetReflectionProvider) Optional(java.util.Optional) NeverInline(com.oracle.svm.core.annotate.NeverInline) SubstrateOptionsParser(com.oracle.svm.core.option.SubstrateOptionsParser) InliningUtilities(com.oracle.svm.hosted.code.InliningUtilities) Architecture(jdk.vm.ci.code.Architecture) HashMap(java.util.HashMap) Profile(com.oracle.truffle.api.profiles.Profile) InlineInvokePlugin(org.graalvm.compiler.nodes.graphbuilderconf.InlineInvokePlugin) HashSet(java.util.HashSet) Hashtable(java.util.Hashtable) WeakHashMap(java.util.WeakHashMap) HostedType(com.oracle.svm.hosted.meta.HostedType) CompilerAsserts(com.oracle.truffle.api.CompilerAsserts) ImageSingletons(org.graalvm.nativeimage.ImageSingletons) Iterator(java.util.Iterator) ReentrantLock(java.util.concurrent.locks.ReentrantLock) Feature(org.graalvm.nativeimage.Feature) Heap(com.oracle.svm.core.heap.Heap) Delete(com.oracle.svm.core.annotate.Delete) BeforeCompilationAccessImpl(com.oracle.svm.hosted.FeatureImpl.BeforeCompilationAccessImpl) ExplodeLoop(com.oracle.truffle.api.nodes.ExplodeLoop) Frame(com.oracle.truffle.api.frame.Frame) AfterRegistrationAccessImpl(com.oracle.svm.hosted.FeatureImpl.AfterRegistrationAccessImpl) PartialEvaluator(org.graalvm.compiler.truffle.compiler.PartialEvaluator) Truffle(com.oracle.truffle.api.Truffle) Kind(com.oracle.svm.core.annotate.RecomputeFieldValue.Kind) Comparator(java.util.Comparator) Collections(java.util.Collections) ResolvedJavaMethod(jdk.vm.ci.meta.ResolvedJavaMethod) GraphBuilderConfiguration(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration) GraalFeature(com.oracle.svm.graal.hosted.GraalFeature) HostedProviders(com.oracle.graal.pointsto.meta.HostedProviders) SubstratePartialEvaluator(com.oracle.svm.truffle.api.SubstratePartialEvaluator) PartialEvaluator(org.graalvm.compiler.truffle.compiler.PartialEvaluator) SnippetReflectionProvider(org.graalvm.compiler.api.replacements.SnippetReflectionProvider) SubstrateTruffleCompiler(com.oracle.svm.truffle.api.SubstrateTruffleCompiler) SubstrateTruffleRuntime(com.oracle.svm.truffle.api.SubstrateTruffleRuntime) ResolvedJavaMethod(jdk.vm.ci.meta.ResolvedJavaMethod)

Aggregations

AnalysisMethod (com.oracle.graal.pointsto.meta.AnalysisMethod)31 ResolvedJavaMethod (jdk.vm.ci.meta.ResolvedJavaMethod)7 AnalysisType (com.oracle.graal.pointsto.meta.AnalysisType)6 HostedMethod (com.oracle.svm.hosted.meta.HostedMethod)6 ArrayList (java.util.ArrayList)6 HashMap (java.util.HashMap)6 AnalysisField (com.oracle.graal.pointsto.meta.AnalysisField)5 Map (java.util.Map)5 JavaKind (jdk.vm.ci.meta.JavaKind)5 TypeState (com.oracle.graal.pointsto.typestate.TypeState)4 SubstrateMethod (com.oracle.svm.graal.meta.SubstrateMethod)4 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)4 MetaAccessProvider (jdk.vm.ci.meta.MetaAccessProvider)3 CEntryPoint (org.graalvm.nativeimage.c.function.CEntryPoint)3 UnsupportedFeatureException (com.oracle.graal.pointsto.constraints.UnsupportedFeatureException)2 InvokeTypeFlow (com.oracle.graal.pointsto.flow.InvokeTypeFlow)2 AnalysisMetaAccess (com.oracle.graal.pointsto.meta.AnalysisMetaAccess)2 AnalysisUniverse (com.oracle.graal.pointsto.meta.AnalysisUniverse)2 HostedProviders (com.oracle.graal.pointsto.meta.HostedProviders)2 SubstrateForeignCallsProvider (com.oracle.svm.core.graal.meta.SubstrateForeignCallsProvider)2