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 }
|