hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/AbstractPointerStamp.java
changeset 46344 694c102fd8ed
parent 43972 1ade39b8381b
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/AbstractPointerStamp.java	Mon Dec 12 16:16:27 2016 +0300
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/AbstractPointerStamp.java	Wed Mar 22 13:42:45 2017 -0700
@@ -59,8 +59,8 @@
         return result;
     }
 
-    @Override
-    public Stamp join(Stamp stamp) {
+    protected Stamp defaultPointerJoin(Stamp stamp) {
+        assert getClass() == stamp.getClass();
         AbstractPointerStamp other = (AbstractPointerStamp) stamp;
         boolean joinNonNull = this.nonNull || other.nonNull;
         boolean joinAlwaysNull = this.alwaysNull || other.alwaysNull;
@@ -89,6 +89,42 @@
         return copyWith(false, false);
     }
 
+    public static Stamp pointerNonNull(Stamp stamp) {
+        AbstractPointerStamp pointer = (AbstractPointerStamp) stamp;
+        return pointer.asNonNull();
+    }
+
+    public static Stamp pointerMaybeNull(Stamp stamp) {
+        AbstractPointerStamp pointer = (AbstractPointerStamp) stamp;
+        return pointer.asMaybeNull();
+    }
+
+    public static Stamp pointerAlwaysNull(Stamp stamp) {
+        AbstractPointerStamp pointer = (AbstractPointerStamp) stamp;
+        return pointer.asAlwaysNull();
+    }
+
+    public Stamp asNonNull() {
+        if (isEmpty()) {
+            return this;
+        }
+        return copyWith(true, false);
+    }
+
+    public Stamp asMaybeNull() {
+        if (isEmpty()) {
+            return this;
+        }
+        return copyWith(false, false);
+    }
+
+    public Stamp asAlwaysNull() {
+        if (isEmpty()) {
+            return this;
+        }
+        return copyWith(false, true);
+    }
+
     @Override
     public boolean equals(Object obj) {
         if (this == obj) {