src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLIRGenerator.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLIRGenerator.java

Print this page




  24 
  25 import static jdk.vm.ci.amd64.AMD64.rbp;
  26 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  27 import static org.graalvm.compiler.hotspot.HotSpotBackend.INITIALIZE_KLASS_BY_SYMBOL;
  28 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_KLASS_BY_SYMBOL;
  29 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS;
  30 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_STRING_BY_SYMBOL;
  31 
  32 import java.util.ArrayList;
  33 import java.util.List;
  34 
  35 import org.graalvm.compiler.asm.amd64.AMD64Address.Scale;
  36 import org.graalvm.compiler.core.amd64.AMD64ArithmeticLIRGenerator;
  37 import org.graalvm.compiler.core.amd64.AMD64LIRGenerator;
  38 import org.graalvm.compiler.core.amd64.AMD64LIRKindTool;
  39 import org.graalvm.compiler.core.amd64.AMD64MoveFactoryBase.BackupSlotProvider;
  40 import org.graalvm.compiler.core.common.CompressEncoding;
  41 import org.graalvm.compiler.core.common.LIRKind;
  42 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
  43 import org.graalvm.compiler.core.common.spi.LIRKindTool;
  44 import org.graalvm.compiler.debug.Debug;
  45 import org.graalvm.compiler.debug.GraalError;
  46 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  47 import org.graalvm.compiler.hotspot.HotSpotBackend;
  48 import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
  49 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
  50 import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
  51 import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
  52 import org.graalvm.compiler.hotspot.HotSpotLockStack;
  53 import org.graalvm.compiler.hotspot.debug.BenchmarkCounters;
  54 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  55 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  56 import org.graalvm.compiler.hotspot.stubs.Stub;
  57 import org.graalvm.compiler.lir.LIR;
  58 import org.graalvm.compiler.lir.LIRFrameState;
  59 import org.graalvm.compiler.lir.LIRInstruction;
  60 import org.graalvm.compiler.lir.LIRInstructionClass;
  61 import org.graalvm.compiler.lir.LabelRef;
  62 import org.graalvm.compiler.lir.StandardOp.NoOp;
  63 import org.graalvm.compiler.lir.SwitchStrategy;
  64 import org.graalvm.compiler.lir.Variable;


 538     public void beforeRegisterAllocation() {
 539         super.beforeRegisterAllocation();
 540         boolean hasDebugInfo = getResult().getLIR().hasDebugInfo();
 541         AllocatableValue savedRbp = saveRbp.finalize(hasDebugInfo);
 542         if (hasDebugInfo) {
 543             getResult().setDeoptimizationRescueSlot(((AMD64FrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot());
 544         }
 545 
 546         getResult().setMaxInterpreterFrameSize(debugInfoBuilder.maxInterpreterFrameSize());
 547 
 548         for (AMD64HotSpotRestoreRbpOp op : epilogueOps) {
 549             op.setSavedRbp(savedRbp);
 550         }
 551         if (BenchmarkCounters.enabled) {
 552             // ensure that the rescue slot is available
 553             LIRInstruction op = getOrInitRescueSlotOp();
 554             // insert dummy instruction into the start block
 555             LIR lir = getResult().getLIR();
 556             ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(lir.getControlFlowGraph().getStartBlock());
 557             instructions.add(1, op);
 558             Debug.dump(Debug.INFO_LEVEL, lir, "created rescue dummy op");
 559         }
 560     }
 561 
 562     @Override
 563     public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
 564         LIRKind inputKind = pointer.getValueKind(LIRKind.class);
 565         assert inputKind.getPlatformKind() == AMD64Kind.QWORD;
 566         if (inputKind.isReference(0)) {
 567             // oop
 568             Variable result = newVariable(LIRKind.reference(AMD64Kind.DWORD));
 569             append(new AMD64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
 570             return result;
 571         } else {
 572             // metaspace pointer
 573             Variable result = newVariable(LIRKind.value(AMD64Kind.DWORD));
 574             AllocatableValue base = Value.ILLEGAL;
 575             OptionValues options = getResult().getLIR().getOptions();
 576             if (encoding.hasBase() || GeneratePIC.getValue(options)) {
 577                 if (GeneratePIC.getValue(options)) {
 578                     Variable baseAddress = newVariable(LIRKind.value(AMD64Kind.QWORD));




  24 
  25 import static jdk.vm.ci.amd64.AMD64.rbp;
  26 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  27 import static org.graalvm.compiler.hotspot.HotSpotBackend.INITIALIZE_KLASS_BY_SYMBOL;
  28 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_KLASS_BY_SYMBOL;
  29 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS;
  30 import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_STRING_BY_SYMBOL;
  31 
  32 import java.util.ArrayList;
  33 import java.util.List;
  34 
  35 import org.graalvm.compiler.asm.amd64.AMD64Address.Scale;
  36 import org.graalvm.compiler.core.amd64.AMD64ArithmeticLIRGenerator;
  37 import org.graalvm.compiler.core.amd64.AMD64LIRGenerator;
  38 import org.graalvm.compiler.core.amd64.AMD64LIRKindTool;
  39 import org.graalvm.compiler.core.amd64.AMD64MoveFactoryBase.BackupSlotProvider;
  40 import org.graalvm.compiler.core.common.CompressEncoding;
  41 import org.graalvm.compiler.core.common.LIRKind;
  42 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
  43 import org.graalvm.compiler.core.common.spi.LIRKindTool;
  44 import org.graalvm.compiler.debug.DebugContext;
  45 import org.graalvm.compiler.debug.GraalError;
  46 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  47 import org.graalvm.compiler.hotspot.HotSpotBackend;
  48 import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
  49 import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
  50 import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
  51 import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
  52 import org.graalvm.compiler.hotspot.HotSpotLockStack;
  53 import org.graalvm.compiler.hotspot.debug.BenchmarkCounters;
  54 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  55 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  56 import org.graalvm.compiler.hotspot.stubs.Stub;
  57 import org.graalvm.compiler.lir.LIR;
  58 import org.graalvm.compiler.lir.LIRFrameState;
  59 import org.graalvm.compiler.lir.LIRInstruction;
  60 import org.graalvm.compiler.lir.LIRInstructionClass;
  61 import org.graalvm.compiler.lir.LabelRef;
  62 import org.graalvm.compiler.lir.StandardOp.NoOp;
  63 import org.graalvm.compiler.lir.SwitchStrategy;
  64 import org.graalvm.compiler.lir.Variable;


 538     public void beforeRegisterAllocation() {
 539         super.beforeRegisterAllocation();
 540         boolean hasDebugInfo = getResult().getLIR().hasDebugInfo();
 541         AllocatableValue savedRbp = saveRbp.finalize(hasDebugInfo);
 542         if (hasDebugInfo) {
 543             getResult().setDeoptimizationRescueSlot(((AMD64FrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot());
 544         }
 545 
 546         getResult().setMaxInterpreterFrameSize(debugInfoBuilder.maxInterpreterFrameSize());
 547 
 548         for (AMD64HotSpotRestoreRbpOp op : epilogueOps) {
 549             op.setSavedRbp(savedRbp);
 550         }
 551         if (BenchmarkCounters.enabled) {
 552             // ensure that the rescue slot is available
 553             LIRInstruction op = getOrInitRescueSlotOp();
 554             // insert dummy instruction into the start block
 555             LIR lir = getResult().getLIR();
 556             ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(lir.getControlFlowGraph().getStartBlock());
 557             instructions.add(1, op);
 558             lir.getDebug().dump(DebugContext.INFO_LEVEL, lir, "created rescue dummy op");
 559         }
 560     }
 561 
 562     @Override
 563     public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
 564         LIRKind inputKind = pointer.getValueKind(LIRKind.class);
 565         assert inputKind.getPlatformKind() == AMD64Kind.QWORD;
 566         if (inputKind.isReference(0)) {
 567             // oop
 568             Variable result = newVariable(LIRKind.reference(AMD64Kind.DWORD));
 569             append(new AMD64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
 570             return result;
 571         } else {
 572             // metaspace pointer
 573             Variable result = newVariable(LIRKind.value(AMD64Kind.DWORD));
 574             AllocatableValue base = Value.ILLEGAL;
 575             OptionValues options = getResult().getLIR().getOptions();
 576             if (encoding.hasBase() || GeneratePIC.getValue(options)) {
 577                 if (GeneratePIC.getValue(options)) {
 578                     Variable baseAddress = newVariable(LIRKind.value(AMD64Kind.QWORD));


src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotLIRGenerator.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File