< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/virtual/VirtualArrayNode.java

Print this page




  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.nodes.virtual;
  24 
  25 import java.nio.ByteOrder;
  26 
  27 import org.graalvm.compiler.graph.NodeClass;
  28 import org.graalvm.compiler.nodeinfo.NodeInfo;
  29 import org.graalvm.compiler.nodeinfo.Verbosity;
  30 import org.graalvm.compiler.nodes.ConstantNode;
  31 import org.graalvm.compiler.nodes.FixedNode;
  32 import org.graalvm.compiler.nodes.ValueNode;
  33 import org.graalvm.compiler.nodes.spi.ArrayLengthProvider;
  34 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
  35 
  36 import jdk.vm.ci.meta.JavaKind;
  37 import jdk.vm.ci.meta.ResolvedJavaType;
  38 import sun.misc.Unsafe;
  39 
  40 @NodeInfo(nameTemplate = "VirtualArray {p#componentType/s}[{p#length}]")
  41 public class VirtualArrayNode extends VirtualObjectNode implements ArrayLengthProvider {
  42 
  43     public static final NodeClass<VirtualArrayNode> TYPE = NodeClass.create(VirtualArrayNode.class);
  44     protected final ResolvedJavaType componentType;
  45     protected final int length;
  46 
  47     public VirtualArrayNode(ResolvedJavaType componentType, int length) {
  48         this(TYPE, componentType, length);
  49     }
  50 
  51     protected VirtualArrayNode(NodeClass<? extends VirtualObjectNode> c, ResolvedJavaType componentType, int length) {
  52         super(c, componentType.getArrayClass(), true);
  53         this.componentType = componentType;
  54         this.length = length;
  55     }
  56 
  57     @Override
  58     public ResolvedJavaType type() {
  59         return componentType.getArrayClass();
  60     }
  61 
  62     public ResolvedJavaType componentType() {
  63         return componentType;
  64     }
  65 
  66     @Override
  67     public int entryCount() {
  68         return length;
  69     }
  70 
  71     @Override
  72     public void generate(NodeLIRBuilderTool gen) {
  73         // nothing to do...
  74     }
  75 
  76     @Override
  77     public String toString(Verbosity verbosity) {
  78         if (verbosity == Verbosity.Name) {
  79             return super.toString(Verbosity.Name) + " " + componentType.getName() + "[" + length + "]";
  80         } else {
  81             return super.toString(verbosity);
  82         }
  83     }
  84 
  85     @Override
  86     public String entryName(int index) {
  87         return "[" + index + "]";
  88     }
  89 
  90     @Override
  91     public int entryIndexForOffset(long constantOffset, JavaKind expectedEntryKind) {
  92         return entryIndexForOffset(constantOffset, expectedEntryKind, componentType, length);
  93     }
  94 
  95     public static int entryIndexForOffset(long constantOffset, JavaKind expectedEntryKind, ResolvedJavaType componentType, int length) {
  96         int baseOffset;
  97         int indexScale;
  98         switch (componentType.getJavaKind()) {
  99             case Boolean:




  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.nodes.virtual;
  24 
  25 import java.nio.ByteOrder;
  26 
  27 import org.graalvm.compiler.graph.NodeClass;
  28 import org.graalvm.compiler.nodeinfo.NodeInfo;
  29 import org.graalvm.compiler.nodeinfo.Verbosity;
  30 import org.graalvm.compiler.nodes.ConstantNode;
  31 import org.graalvm.compiler.nodes.FixedNode;
  32 import org.graalvm.compiler.nodes.ValueNode;
  33 import org.graalvm.compiler.nodes.spi.ArrayLengthProvider;
  34 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
  35 
  36 import jdk.vm.ci.meta.JavaKind;
  37 import jdk.vm.ci.meta.ResolvedJavaType;
  38 import sun.misc.Unsafe;
  39 
  40 @NodeInfo(nameTemplate = "VirtualArray({p#objectId}) {p#componentType/s}[{p#length}]")
  41 public class VirtualArrayNode extends VirtualObjectNode implements ArrayLengthProvider {
  42 
  43     public static final NodeClass<VirtualArrayNode> TYPE = NodeClass.create(VirtualArrayNode.class);
  44     protected final ResolvedJavaType componentType;
  45     protected final int length;
  46 
  47     public VirtualArrayNode(ResolvedJavaType componentType, int length) {
  48         this(TYPE, componentType, length);
  49     }
  50 
  51     protected VirtualArrayNode(NodeClass<? extends VirtualObjectNode> c, ResolvedJavaType componentType, int length) {
  52         super(c, componentType.getArrayClass(), true);
  53         this.componentType = componentType;
  54         this.length = length;
  55     }
  56 
  57     @Override
  58     public ResolvedJavaType type() {
  59         return componentType.getArrayClass();
  60     }
  61 
  62     public ResolvedJavaType componentType() {
  63         return componentType;
  64     }
  65 
  66     @Override
  67     public int entryCount() {
  68         return length;
  69     }
  70 
  71     @Override
  72     public void generate(NodeLIRBuilderTool gen) {
  73         // nothing to do...
  74     }
  75 
  76     @Override
  77     public String toString(Verbosity verbosity) {
  78         if (verbosity == Verbosity.Name) {
  79             return super.toString(Verbosity.Name) + "(" + getObjectId() + ") " + componentType.getName() + "[" + length + "]";
  80         } else {
  81             return super.toString(verbosity);
  82         }
  83     }
  84 
  85     @Override
  86     public String entryName(int index) {
  87         return "[" + index + "]";
  88     }
  89 
  90     @Override
  91     public int entryIndexForOffset(long constantOffset, JavaKind expectedEntryKind) {
  92         return entryIndexForOffset(constantOffset, expectedEntryKind, componentType, length);
  93     }
  94 
  95     public static int entryIndexForOffset(long constantOffset, JavaKind expectedEntryKind, ResolvedJavaType componentType, int length) {
  96         int baseOffset;
  97         int indexScale;
  98         switch (componentType.getJavaKind()) {
  99             case Boolean:


< prev index next >