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 } |