src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.sparc/src/org/graalvm/compiler/hotspot/sparc/SPARCHotSpotBackend.java
changeset 54084 84f10bbf993f
parent 52910 583fd71c47d6
child 58299 6df94ce3ab2f
equal deleted inserted replaced
54083:d9bcf74fc56a 54084:84f10bbf993f
    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();