src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/aot/ResolveConstantSnippets.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/src/org/graalvm/compiler/hotspot/replacements/aot

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/aot/ResolveConstantSnippets.java

Print this page




  31 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  32 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  33 import org.graalvm.compiler.hotspot.nodes.aot.EncodedSymbolNode;
  34 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassNode;
  35 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassStubCall;
  36 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyNode;
  37 import org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersIndirectlyNode;
  38 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantNode;
  39 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantStubCall;
  40 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersNode;
  41 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersStubCall;
  42 import org.graalvm.compiler.hotspot.nodes.type.MethodPointerStamp;
  43 import org.graalvm.compiler.hotspot.word.KlassPointer;
  44 import org.graalvm.compiler.hotspot.word.MethodCountersPointer;
  45 import org.graalvm.compiler.hotspot.word.MethodPointer;
  46 import org.graalvm.compiler.nodes.ConstantNode;
  47 import org.graalvm.compiler.nodes.StructuredGraph;
  48 import org.graalvm.compiler.nodes.ValueNode;
  49 import org.graalvm.compiler.nodes.spi.LoweringTool;
  50 import org.graalvm.compiler.nodes.util.GraphUtil;

  51 import org.graalvm.compiler.replacements.SnippetTemplate;
  52 import org.graalvm.compiler.replacements.SnippetTemplate.AbstractTemplates;
  53 import org.graalvm.compiler.replacements.SnippetTemplate.Arguments;
  54 import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo;
  55 import org.graalvm.compiler.replacements.Snippets;
  56 
  57 import jdk.vm.ci.code.TargetDescription;
  58 import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
  59 import jdk.vm.ci.hotspot.HotSpotObjectConstant;
  60 import jdk.vm.ci.meta.Constant;
  61 
  62 public class ResolveConstantSnippets implements Snippets {
  63 
  64     @Snippet
  65     public static Object resolveObjectConstant(Object constant) {
  66         Object result = LoadConstantIndirectlyNode.loadObject(constant);
  67         if (probability(VERY_SLOW_PATH_PROBABILITY, result == null)) {
  68             result = ResolveConstantStubCall.resolveObject(constant, EncodedSymbolNode.encode(constant));
  69         }
  70         return result;


  96         }
  97         return result;
  98     }
  99 
 100     @Snippet
 101     public static KlassPointer pureInitializeKlass(KlassPointer constant) {
 102         KlassPointer result = LoadConstantIndirectlyNode.loadKlass(constant, HotSpotConstantLoadAction.INITIALIZE);
 103         if (probability(VERY_SLOW_PATH_PROBABILITY, result.isNull())) {
 104             result = ResolveConstantStubCall.resolveKlass(constant, EncodedSymbolNode.encode(constant), HotSpotConstantLoadAction.INITIALIZE);
 105         }
 106         return result;
 107     }
 108 
 109     public static class Templates extends AbstractTemplates {
 110         private final SnippetInfo resolveObjectConstant = snippet(ResolveConstantSnippets.class, "resolveObjectConstant");
 111         private final SnippetInfo resolveKlassConstant = snippet(ResolveConstantSnippets.class, "resolveKlassConstant");
 112         private final SnippetInfo resolveMethodAndLoadCounters = snippet(ResolveConstantSnippets.class, "resolveMethodAndLoadCounters");
 113         private final SnippetInfo initializeKlass = snippet(ResolveConstantSnippets.class, "initializeKlass");
 114         private final SnippetInfo pureInitializeKlass = snippet(ResolveConstantSnippets.class, "pureInitializeKlass");
 115 
 116         public Templates(HotSpotProviders providers, TargetDescription target) {
 117             super(providers, providers.getSnippetReflection(), target);
 118         }
 119 
 120         public void lower(ResolveConstantNode resolveConstantNode, LoweringTool tool) {
 121             StructuredGraph graph = resolveConstantNode.graph();
 122 
 123             ValueNode value = resolveConstantNode.value();
 124             assert value.isConstant() : "Expected a constant: " + value;
 125             Constant constant = value.asConstant();
 126             SnippetInfo snippet = null;
 127 
 128             if (constant instanceof HotSpotMetaspaceConstant) {
 129                 HotSpotMetaspaceConstant hotspotMetaspaceConstant = (HotSpotMetaspaceConstant) constant;
 130                 if (hotspotMetaspaceConstant.asResolvedJavaType() != null) {
 131                     if (resolveConstantNode.action() == HotSpotConstantLoadAction.RESOLVE) {
 132                         snippet = resolveKlassConstant;
 133                     } else {
 134                         assert resolveConstantNode.action() == HotSpotConstantLoadAction.INITIALIZE;
 135                         snippet = pureInitializeKlass;
 136                     }
 137                 }




  31 import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
  32 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  33 import org.graalvm.compiler.hotspot.nodes.aot.EncodedSymbolNode;
  34 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassNode;
  35 import org.graalvm.compiler.hotspot.nodes.aot.InitializeKlassStubCall;
  36 import org.graalvm.compiler.hotspot.nodes.aot.LoadConstantIndirectlyNode;
  37 import org.graalvm.compiler.hotspot.nodes.aot.LoadMethodCountersIndirectlyNode;
  38 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantNode;
  39 import org.graalvm.compiler.hotspot.nodes.aot.ResolveConstantStubCall;
  40 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersNode;
  41 import org.graalvm.compiler.hotspot.nodes.aot.ResolveMethodAndLoadCountersStubCall;
  42 import org.graalvm.compiler.hotspot.nodes.type.MethodPointerStamp;
  43 import org.graalvm.compiler.hotspot.word.KlassPointer;
  44 import org.graalvm.compiler.hotspot.word.MethodCountersPointer;
  45 import org.graalvm.compiler.hotspot.word.MethodPointer;
  46 import org.graalvm.compiler.nodes.ConstantNode;
  47 import org.graalvm.compiler.nodes.StructuredGraph;
  48 import org.graalvm.compiler.nodes.ValueNode;
  49 import org.graalvm.compiler.nodes.spi.LoweringTool;
  50 import org.graalvm.compiler.nodes.util.GraphUtil;
  51 import org.graalvm.compiler.options.OptionValues;
  52 import org.graalvm.compiler.replacements.SnippetTemplate;
  53 import org.graalvm.compiler.replacements.SnippetTemplate.AbstractTemplates;
  54 import org.graalvm.compiler.replacements.SnippetTemplate.Arguments;
  55 import org.graalvm.compiler.replacements.SnippetTemplate.SnippetInfo;
  56 import org.graalvm.compiler.replacements.Snippets;
  57 
  58 import jdk.vm.ci.code.TargetDescription;
  59 import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
  60 import jdk.vm.ci.hotspot.HotSpotObjectConstant;
  61 import jdk.vm.ci.meta.Constant;
  62 
  63 public class ResolveConstantSnippets implements Snippets {
  64 
  65     @Snippet
  66     public static Object resolveObjectConstant(Object constant) {
  67         Object result = LoadConstantIndirectlyNode.loadObject(constant);
  68         if (probability(VERY_SLOW_PATH_PROBABILITY, result == null)) {
  69             result = ResolveConstantStubCall.resolveObject(constant, EncodedSymbolNode.encode(constant));
  70         }
  71         return result;


  97         }
  98         return result;
  99     }
 100 
 101     @Snippet
 102     public static KlassPointer pureInitializeKlass(KlassPointer constant) {
 103         KlassPointer result = LoadConstantIndirectlyNode.loadKlass(constant, HotSpotConstantLoadAction.INITIALIZE);
 104         if (probability(VERY_SLOW_PATH_PROBABILITY, result.isNull())) {
 105             result = ResolveConstantStubCall.resolveKlass(constant, EncodedSymbolNode.encode(constant), HotSpotConstantLoadAction.INITIALIZE);
 106         }
 107         return result;
 108     }
 109 
 110     public static class Templates extends AbstractTemplates {
 111         private final SnippetInfo resolveObjectConstant = snippet(ResolveConstantSnippets.class, "resolveObjectConstant");
 112         private final SnippetInfo resolveKlassConstant = snippet(ResolveConstantSnippets.class, "resolveKlassConstant");
 113         private final SnippetInfo resolveMethodAndLoadCounters = snippet(ResolveConstantSnippets.class, "resolveMethodAndLoadCounters");
 114         private final SnippetInfo initializeKlass = snippet(ResolveConstantSnippets.class, "initializeKlass");
 115         private final SnippetInfo pureInitializeKlass = snippet(ResolveConstantSnippets.class, "pureInitializeKlass");
 116 
 117         public Templates(OptionValues options, HotSpotProviders providers, TargetDescription target) {
 118             super(options, providers, providers.getSnippetReflection(), target);
 119         }
 120 
 121         public void lower(ResolveConstantNode resolveConstantNode, LoweringTool tool) {
 122             StructuredGraph graph = resolveConstantNode.graph();
 123 
 124             ValueNode value = resolveConstantNode.value();
 125             assert value.isConstant() : "Expected a constant: " + value;
 126             Constant constant = value.asConstant();
 127             SnippetInfo snippet = null;
 128 
 129             if (constant instanceof HotSpotMetaspaceConstant) {
 130                 HotSpotMetaspaceConstant hotspotMetaspaceConstant = (HotSpotMetaspaceConstant) constant;
 131                 if (hotspotMetaspaceConstant.asResolvedJavaType() != null) {
 132                     if (resolveConstantNode.action() == HotSpotConstantLoadAction.RESOLVE) {
 133                         snippet = resolveKlassConstant;
 134                     } else {
 135                         assert resolveConstantNode.action() == HotSpotConstantLoadAction.INITIALIZE;
 136                         snippet = pureInitializeKlass;
 137                     }
 138                 }


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