< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotWordOperationPlugin.java

Print this page




  49 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  50 import org.graalvm.compiler.nodes.extended.GuardingNode;
  51 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  52 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
  53 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  54 import org.graalvm.compiler.nodes.memory.ReadNode;
  55 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  56 import org.graalvm.compiler.nodes.type.StampTool;
  57 import org.graalvm.compiler.word.WordOperationPlugin;
  58 import org.graalvm.compiler.word.WordTypes;
  59 import jdk.internal.vm.compiler.word.LocationIdentity;
  60 
  61 import jdk.vm.ci.meta.JavaKind;
  62 import jdk.vm.ci.meta.ResolvedJavaMethod;
  63 import jdk.vm.ci.meta.ResolvedJavaType;
  64 
  65 /**
  66  * Extends {@link WordOperationPlugin} to handle {@linkplain HotSpotOperation HotSpot word
  67  * operations}.
  68  */
  69 class HotSpotWordOperationPlugin extends WordOperationPlugin {
  70     HotSpotWordOperationPlugin(SnippetReflectionProvider snippetReflection, WordTypes wordTypes) {
  71         super(snippetReflection, wordTypes);
  72     }
  73 
  74     @Override
  75     protected LoadIndexedNode createLoadIndexedNode(ValueNode array, ValueNode index, GuardingNode boundsCheck) {
  76         ResolvedJavaType arrayType = StampTool.typeOrNull(array);
  77         Stamp componentStamp = wordTypes.getWordStamp(arrayType.getComponentType());
  78         if (componentStamp instanceof MetaspacePointerStamp) {
  79             return new LoadIndexedPointerNode(componentStamp, array, index, boundsCheck);
  80         } else {
  81             return super.createLoadIndexedNode(array, index, boundsCheck);
  82         }
  83     }
  84 
  85     @Override
  86     public boolean handleInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
  87         if (!wordTypes.isWordOperation(method)) {
  88             return false;
  89         }




  49 import org.graalvm.compiler.nodes.calc.PointerEqualsNode;
  50 import org.graalvm.compiler.nodes.extended.GuardingNode;
  51 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  52 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
  53 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  54 import org.graalvm.compiler.nodes.memory.ReadNode;
  55 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  56 import org.graalvm.compiler.nodes.type.StampTool;
  57 import org.graalvm.compiler.word.WordOperationPlugin;
  58 import org.graalvm.compiler.word.WordTypes;
  59 import jdk.internal.vm.compiler.word.LocationIdentity;
  60 
  61 import jdk.vm.ci.meta.JavaKind;
  62 import jdk.vm.ci.meta.ResolvedJavaMethod;
  63 import jdk.vm.ci.meta.ResolvedJavaType;
  64 
  65 /**
  66  * Extends {@link WordOperationPlugin} to handle {@linkplain HotSpotOperation HotSpot word
  67  * operations}.
  68  */
  69 public class HotSpotWordOperationPlugin extends WordOperationPlugin {
  70     HotSpotWordOperationPlugin(SnippetReflectionProvider snippetReflection, WordTypes wordTypes) {
  71         super(snippetReflection, wordTypes);
  72     }
  73 
  74     @Override
  75     protected LoadIndexedNode createLoadIndexedNode(ValueNode array, ValueNode index, GuardingNode boundsCheck) {
  76         ResolvedJavaType arrayType = StampTool.typeOrNull(array);
  77         Stamp componentStamp = wordTypes.getWordStamp(arrayType.getComponentType());
  78         if (componentStamp instanceof MetaspacePointerStamp) {
  79             return new LoadIndexedPointerNode(componentStamp, array, index, boundsCheck);
  80         } else {
  81             return super.createLoadIndexedNode(array, index, boundsCheck);
  82         }
  83     }
  84 
  85     @Override
  86     public boolean handleInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
  87         if (!wordTypes.isWordOperation(method)) {
  88             return false;
  89         }


< prev index next >