Search in sources :

Example 11 with HostedType

use of com.oracle.svm.hosted.meta.HostedType in project graal by oracle.

the class GraalObjectReplacer method updateSubstrateDataAfterCompilation.

/**
 * Updates all relevant data from universe building. Object replacement is done during analysis.
 * Therefore all substrate VM related data has to be updated after building the substrate
 * universe.
 */
@SuppressWarnings("try")
public void updateSubstrateDataAfterCompilation(HostedUniverse hUniverse) {
    for (Map.Entry<AnalysisType, SubstrateType> entry : types.entrySet()) {
        AnalysisType aType = entry.getKey();
        SubstrateType sType = entry.getValue();
        if (!hUniverse.contains(aType)) {
            continue;
        }
        HostedType hType = hUniverse.lookup(aType);
        DynamicHub uniqueImplementation = null;
        if (hType.getUniqueConcreteImplementation() != null) {
            uniqueImplementation = hType.getUniqueConcreteImplementation().getHub();
        }
        sType.setTypeCheckData(hType.getInstanceOfFromTypeID(), hType.getInstanceOfNumTypeIDs(), uniqueImplementation);
        SubstrateField[] originalFields = sType.getInstanceFields(false);
        if (originalFields != null) {
            /*
                 * What we do here is just a reordering of the instance fields array. The fields
                 * array already contains all the fields, but in the order of the AnalysisType. As
                 * the UniverseBuilder reorders the fields, we re-construct the fields array in the
                 * order of the HostedType. The correct order is essential for materialization
                 * during deoptimization.
                 */
            SubstrateField[] newFields = createFields(hType);
            sType.setInstanceFields(newFields);
        }
    }
    for (Map.Entry<AnalysisField, SubstrateField> entry : fields.entrySet()) {
        AnalysisField aField = entry.getKey();
        SubstrateField sField = entry.getValue();
        HostedField hField = hUniverse.lookup(aField);
        sField.setSubstrateData(hField.getLocation(), hField.isAccessed(), hField.isWritten(), hField.getConstantValue());
    }
}
Also used : AnalysisType(com.oracle.graal.pointsto.meta.AnalysisType) HostedType(com.oracle.svm.hosted.meta.HostedType) HostedField(com.oracle.svm.hosted.meta.HostedField) DynamicHub(com.oracle.svm.core.hub.DynamicHub) AnalysisField(com.oracle.graal.pointsto.meta.AnalysisField) SubstrateField(com.oracle.svm.graal.meta.SubstrateField) HashMap(java.util.HashMap) Map(java.util.Map) SubstrateType(com.oracle.svm.graal.meta.SubstrateType)

Example 12 with HostedType

use of com.oracle.svm.hosted.meta.HostedType in project graal by oracle.

the class GraalObjectReplacer method createType.

public SubstrateType createType(JavaType original) {
    if (original == null) {
        return null;
    }
    AnalysisType aType;
    if (original instanceof AnalysisType) {
        aType = (AnalysisType) original;
    } else {
        aType = ((HostedType) original).getWrapped();
    }
    SubstrateType sType = types.get(aType);
    if (sType == null) {
        assert !(original instanceof HostedType) : "too late to create new type";
        DynamicHub hub = ((SVMHost) aUniverse.hostVM()).dynamicHub(aType);
        sType = new SubstrateType(aType.getJavaKind(), hub);
        types.put(aType, sType);
        hub.setMetaType(sType);
        sType.setInstanceFields(createFields(aType));
        createType(aType.getSuperclass());
        createType(aType.getComponentType());
        for (AnalysisType aInterface : aType.getInterfaces()) {
            createType(aInterface);
        }
    }
    return sType;
}
Also used : AnalysisType(com.oracle.graal.pointsto.meta.AnalysisType) HostedType(com.oracle.svm.hosted.meta.HostedType) SVMHost(com.oracle.svm.hosted.SVMHost) DynamicHub(com.oracle.svm.core.hub.DynamicHub) SubstrateType(com.oracle.svm.graal.meta.SubstrateType)

Aggregations

HostedType (com.oracle.svm.hosted.meta.HostedType)12 HostedField (com.oracle.svm.hosted.meta.HostedField)4 HostedMethod (com.oracle.svm.hosted.meta.HostedMethod)4 JavaKind (jdk.vm.ci.meta.JavaKind)4 AnalysisType (com.oracle.graal.pointsto.meta.AnalysisType)3 CEntryPoint (org.graalvm.nativeimage.c.function.CEntryPoint)3 AnalysisField (com.oracle.graal.pointsto.meta.AnalysisField)2 AnalysisMethod (com.oracle.graal.pointsto.meta.AnalysisMethod)2 DynamicHub (com.oracle.svm.core.hub.DynamicHub)2 SubstrateType (com.oracle.svm.graal.meta.SubstrateType)2 StructFieldInfo (com.oracle.svm.hosted.c.info.StructFieldInfo)2 HostedArrayClass (com.oracle.svm.hosted.meta.HostedArrayClass)2 HostedInstanceClass (com.oracle.svm.hosted.meta.HostedInstanceClass)2 ResolvedJavaMethod (jdk.vm.ci.meta.ResolvedJavaMethod)2 ResolvedJavaType (jdk.vm.ci.meta.ResolvedJavaType)2 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)2 CFunctionPointer (org.graalvm.nativeimage.c.function.CFunctionPointer)2 AnalysisUniverse (com.oracle.graal.pointsto.meta.AnalysisUniverse)1 HostedProviders (com.oracle.graal.pointsto.meta.HostedProviders)1 Alias (com.oracle.svm.core.annotate.Alias)1