37 import org.graalvm.compiler.graph.Node;
38 import org.graalvm.compiler.graph.NodeClass;
39 import org.graalvm.compiler.graph.iterators.NodeIterable;
40 import org.graalvm.compiler.lir.ConstantValue;
41 import org.graalvm.compiler.nodeinfo.NodeInfo;
42 import org.graalvm.compiler.nodeinfo.Verbosity;
43 import org.graalvm.compiler.nodes.calc.FloatingNode;
44 import org.graalvm.compiler.nodes.spi.LIRLowerable;
45 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
46
47 import jdk.vm.ci.code.CodeUtil;
48 import jdk.vm.ci.meta.Constant;
49 import jdk.vm.ci.meta.JavaConstant;
50 import jdk.vm.ci.meta.JavaKind;
51 import jdk.vm.ci.meta.MetaAccessProvider;
52 import jdk.vm.ci.meta.PrimitiveConstant;
53
54 /**
55 * The {@code ConstantNode} represents a {@link Constant constant}.
56 */
57 @NodeInfo(nameTemplate = "C({p#rawvalue})", cycles = CYCLES_0, size = SIZE_1)
58 public final class ConstantNode extends FloatingNode implements LIRLowerable {
59
60 public static final NodeClass<ConstantNode> TYPE = NodeClass.create(ConstantNode.class);
61
62 protected final Constant value;
63
64 private final int stableDimension;
65 private final boolean isDefaultStable;
66
67 private static ConstantNode createPrimitive(JavaConstant value) {
68 assert value.getJavaKind() != JavaKind.Object;
69 return new ConstantNode(value, StampFactory.forConstant(value));
70 }
71
72 /**
73 * Constructs a new node representing the specified constant.
74 *
75 * @param value the constant
76 */
77 public ConstantNode(Constant value, Stamp stamp) {
501 case Short:
502 case Int:
503 return ConstantNode.forInt(0);
504 case Double:
505 return ConstantNode.forDouble(0.0);
506 case Float:
507 return ConstantNode.forFloat(0.0f);
508 case Long:
509 return ConstantNode.forLong(0L);
510 case Object:
511 return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null);
512 default:
513 return null;
514 }
515 }
516
517 @Override
518 public Map<Object, Object> getDebugProperties(Map<Object, Object> map) {
519 Map<Object, Object> properties = super.getDebugProperties(map);
520 properties.put("rawvalue", value.toValueString());
521 return properties;
522 }
523
524 @Override
525 public String toString(Verbosity verbosity) {
526 if (verbosity == Verbosity.Name) {
527 return super.toString(Verbosity.Name) + "(" + value.toValueString() + ")";
528 } else {
529 return super.toString(verbosity);
530 }
531 }
532 }
|
37 import org.graalvm.compiler.graph.Node;
38 import org.graalvm.compiler.graph.NodeClass;
39 import org.graalvm.compiler.graph.iterators.NodeIterable;
40 import org.graalvm.compiler.lir.ConstantValue;
41 import org.graalvm.compiler.nodeinfo.NodeInfo;
42 import org.graalvm.compiler.nodeinfo.Verbosity;
43 import org.graalvm.compiler.nodes.calc.FloatingNode;
44 import org.graalvm.compiler.nodes.spi.LIRLowerable;
45 import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool;
46
47 import jdk.vm.ci.code.CodeUtil;
48 import jdk.vm.ci.meta.Constant;
49 import jdk.vm.ci.meta.JavaConstant;
50 import jdk.vm.ci.meta.JavaKind;
51 import jdk.vm.ci.meta.MetaAccessProvider;
52 import jdk.vm.ci.meta.PrimitiveConstant;
53
54 /**
55 * The {@code ConstantNode} represents a {@link Constant constant}.
56 */
57 @NodeInfo(nameTemplate = "C({p#rawvalue}) {p#stampKind}", cycles = CYCLES_0, size = SIZE_1)
58 public final class ConstantNode extends FloatingNode implements LIRLowerable {
59
60 public static final NodeClass<ConstantNode> TYPE = NodeClass.create(ConstantNode.class);
61
62 protected final Constant value;
63
64 private final int stableDimension;
65 private final boolean isDefaultStable;
66
67 private static ConstantNode createPrimitive(JavaConstant value) {
68 assert value.getJavaKind() != JavaKind.Object;
69 return new ConstantNode(value, StampFactory.forConstant(value));
70 }
71
72 /**
73 * Constructs a new node representing the specified constant.
74 *
75 * @param value the constant
76 */
77 public ConstantNode(Constant value, Stamp stamp) {
501 case Short:
502 case Int:
503 return ConstantNode.forInt(0);
504 case Double:
505 return ConstantNode.forDouble(0.0);
506 case Float:
507 return ConstantNode.forFloat(0.0f);
508 case Long:
509 return ConstantNode.forLong(0L);
510 case Object:
511 return ConstantNode.forConstant(JavaConstant.NULL_POINTER, null);
512 default:
513 return null;
514 }
515 }
516
517 @Override
518 public Map<Object, Object> getDebugProperties(Map<Object, Object> map) {
519 Map<Object, Object> properties = super.getDebugProperties(map);
520 properties.put("rawvalue", value.toValueString());
521 properties.put("stampKind", stamp.unrestricted().toString());
522 return properties;
523 }
524
525 @Override
526 public String toString(Verbosity verbosity) {
527 if (verbosity == Verbosity.Name) {
528 return super.toString(Verbosity.Name) + "(" + value.toValueString() + ", " + stamp().unrestricted().toString() + ")";
529 } else {
530 return super.toString(verbosity);
531 }
532 }
533 }
|