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

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

Print this page




  27 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  28 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.PRIMARY_SUPERS_LOCATION;
  29 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.SECONDARY_SUPER_CACHE_LOCATION;
  30 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.loadHubIntrinsic;
  31 import static org.graalvm.compiler.hotspot.replacements.HotspotSnippetsOptions.TypeCheckMaxHints;
  32 import static org.graalvm.compiler.hotspot.replacements.HotspotSnippetsOptions.TypeCheckMinProfileHitProbability;
  33 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.checkSecondarySubType;
  34 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.checkUnknownSubType;
  35 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.createHints;
  36 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.LIKELY_PROBABILITY;
  37 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY;
  38 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.NOT_LIKELY_PROBABILITY;
  39 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.probability;
  40 
  41 import org.graalvm.compiler.api.replacements.Snippet;
  42 import org.graalvm.compiler.api.replacements.Snippet.ConstantParameter;
  43 import org.graalvm.compiler.api.replacements.Snippet.NonNullParameter;
  44 import org.graalvm.compiler.api.replacements.Snippet.VarargsParameter;
  45 import org.graalvm.compiler.core.common.type.ObjectStamp;
  46 import org.graalvm.compiler.core.common.type.StampFactory;

  47 import org.graalvm.compiler.debug.GraalError;
  48 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  49 import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
  50 import org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.Counters;
  51 import org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.Hints;
  52 import org.graalvm.compiler.hotspot.word.KlassPointer;
  53 import org.graalvm.compiler.nodes.ConstantNode;
  54 import org.graalvm.compiler.nodes.DeoptimizeNode;
  55 import org.graalvm.compiler.nodes.PiNode;
  56 import org.graalvm.compiler.nodes.SnippetAnchorNode;
  57 import org.graalvm.compiler.nodes.StructuredGraph;
  58 import org.graalvm.compiler.nodes.TypeCheckHints;
  59 import org.graalvm.compiler.nodes.ValueNode;
  60 import org.graalvm.compiler.nodes.extended.BranchProbabilityNode;
  61 import org.graalvm.compiler.nodes.extended.GuardingNode;
  62 import org.graalvm.compiler.nodes.java.ClassIsAssignableFromNode;
  63 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
  64 import org.graalvm.compiler.nodes.java.InstanceOfNode;
  65 import org.graalvm.compiler.nodes.spi.LoweringTool;
  66 import org.graalvm.compiler.options.OptionValues;


 242                 }
 243             }
 244         }
 245 
 246         // If either hub is null, one of them is a primitive type and given that the class is not
 247         // equal, return false.
 248         return falseValue;
 249     }
 250 
 251     public static class Templates extends InstanceOfSnippetsTemplates {
 252 
 253         private final SnippetInfo instanceofWithProfile = snippet(InstanceOfSnippets.class, "instanceofWithProfile");
 254         private final SnippetInfo instanceofExact = snippet(InstanceOfSnippets.class, "instanceofExact");
 255         private final SnippetInfo instanceofPrimary = snippet(InstanceOfSnippets.class, "instanceofPrimary");
 256         private final SnippetInfo instanceofSecondary = snippet(InstanceOfSnippets.class, "instanceofSecondary", SECONDARY_SUPER_CACHE_LOCATION);
 257         private final SnippetInfo instanceofDynamic = snippet(InstanceOfSnippets.class, "instanceofDynamic", SECONDARY_SUPER_CACHE_LOCATION);
 258         private final SnippetInfo isAssignableFrom = snippet(InstanceOfSnippets.class, "isAssignableFrom", SECONDARY_SUPER_CACHE_LOCATION);
 259 
 260         private final Counters counters;
 261 
 262         public Templates(OptionValues options, SnippetCounter.Group.Factory factory, HotSpotProviders providers, TargetDescription target) {
 263             super(options, providers, providers.getSnippetReflection(), target);
 264             this.counters = new Counters(factory);
 265         }
 266 
 267         @Override
 268         protected Arguments makeArguments(InstanceOfUsageReplacer replacer, LoweringTool tool) {
 269             if (replacer.instanceOf instanceof InstanceOfNode) {
 270                 InstanceOfNode instanceOf = (InstanceOfNode) replacer.instanceOf;
 271                 ValueNode object = instanceOf.getValue();
 272                 Assumptions assumptions = instanceOf.graph().getAssumptions();
 273 
 274                 OptionValues localOptions = instanceOf.getOptions();
 275                 JavaTypeProfile profile = instanceOf.profile();
 276                 if (GeneratePIC.getValue(localOptions)) {
 277                     // FIXME: We can't embed constants in hints. We can't really load them from GOT
 278                     // either. Hard problem.
 279                     profile = null;
 280                 }
 281                 TypeCheckHints hintInfo = new TypeCheckHints(instanceOf.type(), profile, assumptions, TypeCheckMinProfileHitProbability.getValue(localOptions),
 282                                 TypeCheckMaxHints.getValue(localOptions));
 283                 final HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) instanceOf.type().getType();




  27 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  28 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.PRIMARY_SUPERS_LOCATION;
  29 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.SECONDARY_SUPER_CACHE_LOCATION;
  30 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.loadHubIntrinsic;
  31 import static org.graalvm.compiler.hotspot.replacements.HotspotSnippetsOptions.TypeCheckMaxHints;
  32 import static org.graalvm.compiler.hotspot.replacements.HotspotSnippetsOptions.TypeCheckMinProfileHitProbability;
  33 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.checkSecondarySubType;
  34 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.checkUnknownSubType;
  35 import static org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.createHints;
  36 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.LIKELY_PROBABILITY;
  37 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.NOT_FREQUENT_PROBABILITY;
  38 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.NOT_LIKELY_PROBABILITY;
  39 import static org.graalvm.compiler.nodes.extended.BranchProbabilityNode.probability;
  40 
  41 import org.graalvm.compiler.api.replacements.Snippet;
  42 import org.graalvm.compiler.api.replacements.Snippet.ConstantParameter;
  43 import org.graalvm.compiler.api.replacements.Snippet.NonNullParameter;
  44 import org.graalvm.compiler.api.replacements.Snippet.VarargsParameter;
  45 import org.graalvm.compiler.core.common.type.ObjectStamp;
  46 import org.graalvm.compiler.core.common.type.StampFactory;
  47 import org.graalvm.compiler.debug.DebugHandlersFactory;
  48 import org.graalvm.compiler.debug.GraalError;
  49 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
  50 import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
  51 import org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.Counters;
  52 import org.graalvm.compiler.hotspot.replacements.TypeCheckSnippetUtils.Hints;
  53 import org.graalvm.compiler.hotspot.word.KlassPointer;
  54 import org.graalvm.compiler.nodes.ConstantNode;
  55 import org.graalvm.compiler.nodes.DeoptimizeNode;
  56 import org.graalvm.compiler.nodes.PiNode;
  57 import org.graalvm.compiler.nodes.SnippetAnchorNode;
  58 import org.graalvm.compiler.nodes.StructuredGraph;
  59 import org.graalvm.compiler.nodes.TypeCheckHints;
  60 import org.graalvm.compiler.nodes.ValueNode;
  61 import org.graalvm.compiler.nodes.extended.BranchProbabilityNode;
  62 import org.graalvm.compiler.nodes.extended.GuardingNode;
  63 import org.graalvm.compiler.nodes.java.ClassIsAssignableFromNode;
  64 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
  65 import org.graalvm.compiler.nodes.java.InstanceOfNode;
  66 import org.graalvm.compiler.nodes.spi.LoweringTool;
  67 import org.graalvm.compiler.options.OptionValues;


 243                 }
 244             }
 245         }
 246 
 247         // If either hub is null, one of them is a primitive type and given that the class is not
 248         // equal, return false.
 249         return falseValue;
 250     }
 251 
 252     public static class Templates extends InstanceOfSnippetsTemplates {
 253 
 254         private final SnippetInfo instanceofWithProfile = snippet(InstanceOfSnippets.class, "instanceofWithProfile");
 255         private final SnippetInfo instanceofExact = snippet(InstanceOfSnippets.class, "instanceofExact");
 256         private final SnippetInfo instanceofPrimary = snippet(InstanceOfSnippets.class, "instanceofPrimary");
 257         private final SnippetInfo instanceofSecondary = snippet(InstanceOfSnippets.class, "instanceofSecondary", SECONDARY_SUPER_CACHE_LOCATION);
 258         private final SnippetInfo instanceofDynamic = snippet(InstanceOfSnippets.class, "instanceofDynamic", SECONDARY_SUPER_CACHE_LOCATION);
 259         private final SnippetInfo isAssignableFrom = snippet(InstanceOfSnippets.class, "isAssignableFrom", SECONDARY_SUPER_CACHE_LOCATION);
 260 
 261         private final Counters counters;
 262 
 263         public Templates(OptionValues options, Iterable<DebugHandlersFactory> factories, SnippetCounter.Group.Factory factory, HotSpotProviders providers, TargetDescription target) {
 264             super(options, factories, providers, providers.getSnippetReflection(), target);
 265             this.counters = new Counters(factory);
 266         }
 267 
 268         @Override
 269         protected Arguments makeArguments(InstanceOfUsageReplacer replacer, LoweringTool tool) {
 270             if (replacer.instanceOf instanceof InstanceOfNode) {
 271                 InstanceOfNode instanceOf = (InstanceOfNode) replacer.instanceOf;
 272                 ValueNode object = instanceOf.getValue();
 273                 Assumptions assumptions = instanceOf.graph().getAssumptions();
 274 
 275                 OptionValues localOptions = instanceOf.getOptions();
 276                 JavaTypeProfile profile = instanceOf.profile();
 277                 if (GeneratePIC.getValue(localOptions)) {
 278                     // FIXME: We can't embed constants in hints. We can't really load them from GOT
 279                     // either. Hard problem.
 280                     profile = null;
 281                 }
 282                 TypeCheckHints hintInfo = new TypeCheckHints(instanceOf.type(), profile, assumptions, TypeCheckMinProfileHitProbability.getValue(localOptions),
 283                                 TypeCheckMaxHints.getValue(localOptions));
 284                 final HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) instanceOf.type().getType();


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