Do not insert AssumeNotNull on null values
Change-Id: Ib657ba0eef6c6fb987dd508fafb2854cf3ccd81a
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssumeInserter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssumeInserter.java
index ed206d4..ef8b039 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssumeInserter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssumeInserter.java
@@ -147,7 +147,7 @@
// Case (1), instructions that implicitly indicate receiver/array is not null.
if (current.throwsOnNullInput()) {
Value inValue = current.getNonNullInput();
- if (assumedValuesBuilder.isMaybeNull(inValue)
+ if (assumedValuesBuilder.isMaybeNullAndNotNullType(inValue)
&& isNullableReferenceTypeWithOtherNonDebugUsers(inValue, current)) {
assumedValuesBuilder.addNonNullValueWithUnknownDominance(current, inValue);
needsAssumeInstruction = true;
@@ -189,7 +189,7 @@
If ifInstruction = block.exit().asIf();
if (ifInstruction != null && ifInstruction.isNonTrivialNullTest()) {
Value lhs = ifInstruction.lhs();
- if (assumedValuesBuilder.isMaybeNull(lhs)
+ if (assumedValuesBuilder.isMaybeNullAndNotNullType(lhs)
&& isNullableReferenceTypeWithOtherNonDebugUsers(lhs, ifInstruction)
&& ifInstruction.targetFromNonNullObject().getPredecessors().size() == 1) {
assumedValuesBuilder.addNonNullValueWithUnknownDominance(ifInstruction, lhs);
@@ -266,7 +266,7 @@
for (int i = start; i < invoke.arguments().size(); i++) {
if (nonNullParamOnNormalExits.get(i)) {
Value argument = invoke.getArgument(i);
- if (assumedValuesBuilder.isMaybeNull(argument)
+ if (assumedValuesBuilder.isMaybeNullAndNotNullType(argument)
&& isNullableReferenceTypeWithOtherNonDebugUsers(argument, invoke)) {
assumedValuesBuilder.addNonNullValueWithUnknownDominance(invoke, argument);
needsAssumeInstruction = true;
@@ -885,8 +885,9 @@
instruction, nonNullValue, AssumedDominance.unknown(), AssumedValueInfo::setNotNull);
}
- public boolean isMaybeNull(Value value) {
- return !nonNullValuesKnownToDominateAllUsers.contains(value);
+ public boolean isMaybeNullAndNotNullType(Value value) {
+ return !nonNullValuesKnownToDominateAllUsers.contains(value)
+ && !value.getType().isNullType();
}
public AssumedValues build() {