Allow non-null of NULL in assume
Change-Id: I20659056b5bc3b1f504fbbd7296a050abcbcc8bc
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
index a47dfe0..07f6039 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NonNullTracker.java
@@ -83,13 +83,13 @@
// non_null_rcv <- non-null(rcv)
// ...
// another_rcv <- non-null(non_null_rcv)
- if (knownToBeNonNullValue != null && isNonNullCandidate(knownToBeNonNullValue)) {
+ if (knownToBeNonNullValue != null && isNullableReferenceType(knownToBeNonNullValue)) {
knownToBeNonNullValues.add(knownToBeNonNullValue);
}
}
if (current.throwsOnNullInput()) {
Value couldBeNonNull = current.getNonNullInput();
- if (isNonNullCandidate(couldBeNonNull)) {
+ if (isNullableReferenceType(couldBeNonNull)) {
knownToBeNonNullValues.add(couldBeNonNull);
}
}
@@ -120,7 +120,7 @@
for (int i = 0; i < current.inValues().size(); i++) {
if (facts.get(i)) {
Value knownToBeNonNullValue = current.inValues().get(i);
- if (isNonNullCandidate(knownToBeNonNullValue)) {
+ if (isNullableReferenceType(knownToBeNonNullValue)) {
knownToBeNonNullValues.add(knownToBeNonNullValue);
}
}
@@ -166,7 +166,7 @@
If theIf = block.exit().asIf();
Value knownToBeNonNullValue = theIf.inValues().get(0);
// Avoid adding redundant non-null instruction.
- if (isNonNullCandidate(knownToBeNonNullValue)) {
+ if (isNullableReferenceType(knownToBeNonNullValue)) {
BasicBlock target = theIf.targetFromNonNullObject();
// Ignore uncommon empty blocks.
if (!target.isEmpty()) {
@@ -346,9 +346,9 @@
return predecessorIndexes;
}
- private static boolean isNonNullCandidate(Value couldBeNonNullValue) {
+ private static boolean isNullableReferenceType(Value couldBeNonNullValue) {
TypeLatticeElement typeLattice = couldBeNonNullValue.getTypeLattice();
- return typeLattice.isReference() && !typeLattice.isNullType() && typeLattice.isNullable();
+ return typeLattice.isReference() && typeLattice.asReferenceTypeLatticeElement().isNullable();
}
public void computeNonNullParamOnNormalExits(OptimizationFeedback feedback, IRCode code) {