61 import org.graalvm.compiler.code.DataSection; |
61 import org.graalvm.compiler.code.DataSection; |
62 import org.graalvm.compiler.code.DataSection.Data; |
62 import org.graalvm.compiler.code.DataSection.Data; |
63 import org.graalvm.compiler.core.common.CompilationIdentifier; |
63 import org.graalvm.compiler.core.common.CompilationIdentifier; |
64 import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig; |
64 import org.graalvm.compiler.core.common.alloc.RegisterAllocationConfig; |
65 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; |
65 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; |
|
66 import org.graalvm.compiler.core.gen.LIRGenerationProvider; |
66 import org.graalvm.compiler.core.sparc.SPARCNodeMatchRules; |
67 import org.graalvm.compiler.core.sparc.SPARCNodeMatchRules; |
67 import org.graalvm.compiler.debug.CounterKey; |
68 import org.graalvm.compiler.debug.CounterKey; |
68 import org.graalvm.compiler.debug.DebugContext; |
69 import org.graalvm.compiler.debug.DebugContext; |
69 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; |
70 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig; |
70 import org.graalvm.compiler.hotspot.HotSpotDataBuilder; |
71 import org.graalvm.compiler.hotspot.HotSpotDataBuilder; |
107 import jdk.vm.ci.meta.ResolvedJavaMethod; |
108 import jdk.vm.ci.meta.ResolvedJavaMethod; |
108 |
109 |
109 /** |
110 /** |
110 * HotSpot SPARC specific backend. |
111 * HotSpot SPARC specific backend. |
111 */ |
112 */ |
112 public class SPARCHotSpotBackend extends HotSpotHostBackend { |
113 public class SPARCHotSpotBackend extends HotSpotHostBackend implements LIRGenerationProvider { |
113 |
114 |
114 private static final SizeEstimateStatistics CONSTANT_ESTIMATED_STATS = new SizeEstimateStatistics("ESTIMATE"); |
115 private static final SizeEstimateStatistics CONSTANT_ESTIMATED_STATS = new SizeEstimateStatistics("ESTIMATE"); |
115 private static final SizeEstimateStatistics CONSTANT_ACTUAL_STATS = new SizeEstimateStatistics("ACTUAL"); |
116 private static final SizeEstimateStatistics CONSTANT_ACTUAL_STATS = new SizeEstimateStatistics("ACTUAL"); |
116 |
117 |
117 public SPARCHotSpotBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
118 public SPARCHotSpotBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
132 CounterKey m = counters.computeIfAbsent(name, (n) -> DebugContext.counter(n)); |
133 CounterKey m = counters.computeIfAbsent(name, (n) -> DebugContext.counter(n)); |
133 m.add(debug, count); |
134 m.add(debug, count); |
134 } |
135 } |
135 } |
136 } |
136 |
137 |
137 @Override |
138 private FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig) { |
138 public FrameMapBuilder newFrameMapBuilder(RegisterConfig registerConfig) { |
|
139 RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; |
139 RegisterConfig registerConfigNonNull = registerConfig == null ? getCodeCache().getRegisterConfig() : registerConfig; |
140 return new SPARCFrameMapBuilder(newFrameMap(registerConfigNonNull), getCodeCache(), registerConfigNonNull); |
140 FrameMap frameMap = new SPARCFrameMap(getCodeCache(), registerConfigNonNull, this); |
141 } |
141 return new SPARCFrameMapBuilder(frameMap, getCodeCache(), registerConfigNonNull); |
142 |
|
143 @Override |
|
144 public FrameMap newFrameMap(RegisterConfig registerConfig) { |
|
145 return new SPARCFrameMap(getCodeCache(), registerConfig, this); |
|
146 } |
142 } |
147 |
143 |
148 @Override |
144 @Override |
149 public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { |
145 public LIRGeneratorTool newLIRGenerator(LIRGenerationResult lirGenRes) { |
150 return new SPARCHotSpotLIRGenerator(getProviders(), getRuntime().getVMConfig(), lirGenRes); |
146 return new SPARCHotSpotLIRGenerator(getProviders(), getRuntime().getVMConfig(), lirGenRes); |
151 } |
147 } |
152 |
148 |
153 @Override |
149 @Override |
154 public LIRGenerationResult newLIRGenerationResult(CompilationIdentifier compilationId, LIR lir, FrameMapBuilder frameMapBuilder, StructuredGraph graph, Object stub) { |
150 public LIRGenerationResult newLIRGenerationResult(CompilationIdentifier compilationId, LIR lir, RegisterConfig registerConfig, StructuredGraph graph, Object stub) { |
155 return new HotSpotLIRGenerationResult(compilationId, lir, frameMapBuilder, makeCallingConvention(graph, (Stub) stub), stub, config.requiresReservedStackCheck(graph.getMethods())); |
151 return new HotSpotLIRGenerationResult(compilationId, lir, newFrameMapBuilder(registerConfig), makeCallingConvention(graph, (Stub) stub), stub, |
|
152 config.requiresReservedStackCheck(graph.getMethods())); |
156 } |
153 } |
157 |
154 |
158 @Override |
155 @Override |
159 public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { |
156 public NodeLIRBuilderTool newNodeLIRBuilder(StructuredGraph graph, LIRGeneratorTool lirGen) { |
160 return new SPARCHotSpotNodeLIRBuilder(graph, lirGen, new SPARCNodeMatchRules(lirGen)); |
157 return new SPARCHotSpotNodeLIRBuilder(graph, lirGen, new SPARCNodeMatchRules(lirGen)); |
225 masm.restoreWindow(); |
222 masm.restoreWindow(); |
226 } |
223 } |
227 } |
224 } |
228 |
225 |
229 @Override |
226 @Override |
230 protected Assembler createAssembler(FrameMap frameMap) { |
|
231 return new SPARCMacroAssembler(getTarget()); |
|
232 } |
|
233 |
|
234 @Override |
|
235 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRes, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) { |
227 public CompilationResultBuilder newCompilationResultBuilder(LIRGenerationResult lirGenRes, FrameMap frameMap, CompilationResult compilationResult, CompilationResultBuilderFactory factory) { |
236 HotSpotLIRGenerationResult gen = (HotSpotLIRGenerationResult) lirGenRes; |
228 HotSpotLIRGenerationResult gen = (HotSpotLIRGenerationResult) lirGenRes; |
237 LIR lir = gen.getLIR(); |
229 LIR lir = gen.getLIR(); |
238 assert gen.getDeoptimizationRescueSlot() == null || frameMap.frameNeedsAllocating() : "method that can deoptimize must have a frame"; |
230 assert gen.getDeoptimizationRescueSlot() == null || frameMap.frameNeedsAllocating() : "method that can deoptimize must have a frame"; |
239 |
231 |
240 Stub stub = gen.getStub(); |
232 Stub stub = gen.getStub(); |
241 Assembler masm = createAssembler(frameMap); |
233 Assembler masm = new SPARCMacroAssembler(getTarget()); |
242 // On SPARC we always use stack frames. |
234 // On SPARC we always use stack frames. |
243 HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null); |
235 HotSpotFrameContext frameContext = new HotSpotFrameContext(stub != null); |
244 DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget()); |
236 DataBuilder dataBuilder = new HotSpotDataBuilder(getCodeCache().getTarget()); |
245 OptionValues options = lir.getOptions(); |
237 OptionValues options = lir.getOptions(); |
246 DebugContext debug = lir.getDebug(); |
238 DebugContext debug = lir.getDebug(); |