hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/type/AbstractPointerStamp.java
--- 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) {