src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotHostBackend.java
changeset 58299 6df94ce3ab2f
parent 52956 4b0b796dd581
equal deleted inserted replaced
58298:0152ad7b38b8 58299:6df94ce3ab2f
     1 /*
     1 /*
     2  * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    28 import static jdk.vm.ci.code.CodeUtil.getCallingConvention;
    28 import static jdk.vm.ci.code.CodeUtil.getCallingConvention;
    29 import static jdk.vm.ci.common.InitTimer.timer;
    29 import static jdk.vm.ci.common.InitTimer.timer;
    30 
    30 
    31 import java.util.Collections;
    31 import java.util.Collections;
    32 
    32 
       
    33 import org.graalvm.compiler.core.common.CompilationIdentifier;
    33 import org.graalvm.compiler.core.common.NumUtil;
    34 import org.graalvm.compiler.core.common.NumUtil;
       
    35 import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig;
    34 import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
    36 import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
       
    37 import org.graalvm.compiler.core.gen.LIRGenerationProvider;
    35 import org.graalvm.compiler.debug.DebugHandlersFactory;
    38 import org.graalvm.compiler.debug.DebugHandlersFactory;
    36 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider;
    39 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider;
    37 import org.graalvm.compiler.hotspot.meta.HotSpotLoweringProvider;
    40 import org.graalvm.compiler.hotspot.meta.HotSpotLoweringProvider;
    38 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
    41 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
    39 import org.graalvm.compiler.hotspot.stubs.Stub;
    42 import org.graalvm.compiler.hotspot.stubs.Stub;
       
    43 import org.graalvm.compiler.lir.LIR;
    40 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
    44 import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
       
    45 import org.graalvm.compiler.lir.framemap.FrameMapBuilder;
    41 import org.graalvm.compiler.lir.framemap.ReferenceMapBuilder;
    46 import org.graalvm.compiler.lir.framemap.ReferenceMapBuilder;
       
    47 import org.graalvm.compiler.lir.gen.LIRGenerationResult;
    42 import org.graalvm.compiler.nodes.StructuredGraph;
    48 import org.graalvm.compiler.nodes.StructuredGraph;
    43 import org.graalvm.compiler.options.OptionValues;
    49 import org.graalvm.compiler.options.OptionValues;
    44 import org.graalvm.compiler.printer.GraalDebugHandlersFactory;
    50 import org.graalvm.compiler.printer.GraalDebugHandlersFactory;
    45 import org.graalvm.compiler.word.Word;
    51 import org.graalvm.compiler.word.Word;
    46 
    52 
    47 import jdk.vm.ci.code.CallingConvention;
    53 import jdk.vm.ci.code.CallingConvention;
       
    54 import jdk.vm.ci.code.RegisterConfig;
    48 import jdk.vm.ci.common.InitTimer;
    55 import jdk.vm.ci.common.InitTimer;
    49 import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
    56 import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
    50 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
    57 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
    51 import jdk.vm.ci.meta.JavaKind;
    58 import jdk.vm.ci.meta.JavaKind;
    52 import jdk.vm.ci.meta.JavaType;
    59 import jdk.vm.ci.meta.JavaType;
    53 import jdk.vm.ci.runtime.JVMCICompiler;
    60 import jdk.vm.ci.runtime.JVMCICompiler;
    54 
    61 
    55 /**
    62 /**
    56  * Common functionality of HotSpot host backends.
    63  * Common functionality of HotSpot host backends.
    57  */
    64  */
    58 public abstract class HotSpotHostBackend extends HotSpotBackend {
    65 public abstract class HotSpotHostBackend extends HotSpotBackend implements LIRGenerationProvider {
    59 
    66 
    60     /**
    67     /**
    61      * Descriptor for {@code SharedRuntime::deopt_blob()->unpack()}.
    68      * Descriptor for {@code SharedRuntime::deopt_blob()->unpack()}.
    62      */
    69      */
    63     public static final ForeignCallDescriptor DEOPTIMIZATION_HANDLER = new ForeignCallDescriptor("deoptHandler", void.class);
    70     public static final ForeignCallDescriptor DEOPTIMIZATION_HANDLER = new ForeignCallDescriptor("deoptHandler", void.class);
   153     public ReferenceMapBuilder newReferenceMapBuilder(int totalFrameSize) {
   160     public ReferenceMapBuilder newReferenceMapBuilder(int totalFrameSize) {
   154         int uncompressedReferenceSize = getTarget().arch.getPlatformKind(JavaKind.Object).getSizeInBytes();
   161         int uncompressedReferenceSize = getTarget().arch.getPlatformKind(JavaKind.Object).getSizeInBytes();
   155         return new HotSpotReferenceMapBuilder(totalFrameSize, config.maxOopMapStackOffset, uncompressedReferenceSize);
   162         return new HotSpotReferenceMapBuilder(totalFrameSize, config.maxOopMapStackOffset, uncompressedReferenceSize);
   156     }
   163     }
   157 
   164 
       
   165     @Override
       
   166     public LIRGenerationResult newLIRGenerationResult(CompilationIdentifier compilationId, LIR lir, RegisterAllocationConfig registerAllocationConfig, StructuredGraph graph, Object stub) {
       
   167         return new HotSpotLIRGenerationResult(compilationId, lir, newFrameMapBuilder(registerAllocationConfig.getRegisterConfig()), registerAllocationConfig, makeCallingConvention(graph, (Stub) stub),
       
   168                         stub,
       
   169                         config.requiresReservedStackCheck(graph.getMethods()));
       
   170     }
       
   171 
       
   172     protected abstract FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig);
   158 }
   173 }