Fix nondeterminism from join of null-or-abstract-value

Bug: 210841778
Change-Id: I1026db3f8274f9defd1f7b71f5d4b7104ead7ee0
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
index 850b669..b9d02f9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/AbstractValue.java
@@ -211,7 +211,17 @@
       if (other.isNull()) {
         return NullOrAbstractValue.create(this);
       }
+      if (isNullOrAbstractValue() && asNullOrAbstractValue().getNonNullValue().equals(other)) {
+        return this;
+      }
+      if (other.isNullOrAbstractValue()
+          && other.asNullOrAbstractValue().getNonNullValue().equals(this)) {
+        return other;
+      }
+      return unknown();
     }
+    assert !isNullOrAbstractValue();
+    assert !other.isNullOrAbstractValue();
     if (allowNonConstantNumbers
         && isConstantOrNonConstantNumberValue()
         && other.isConstantOrNonConstantNumberValue()) {
@@ -230,7 +240,7 @@
       }
       return numberFromSetValueBuilder.build(factory);
     }
-    return UnknownValue.getInstance();
+    return unknown();
   }
 
   public abstract AbstractValue rewrittenWithLens(