Account for if-simplification for non-null origin. Bug: 141667708 Change-Id: I8467e57f48de5191c01ba3bf1cf237f16347acff
diff --git a/src/main/java/com/android/tools/r8/ir/code/Assume.java b/src/main/java/com/android/tools/r8/ir/code/Assume.java index c4dfbc4..05ff7a1 100644 --- a/src/main/java/com/android/tools/r8/ir/code/Assume.java +++ b/src/main/java/com/android/tools/r8/ir/code/Assume.java
@@ -153,6 +153,10 @@ return self; } + public boolean mayAffectStaticType() { + return isAssumeNonNull(); + } + @Override public boolean couldIntroduceAnAlias(AppView<?> appView, Value root) { assert root != null && root.getTypeLattice().isReference(); @@ -284,16 +288,20 @@ @Override public String toString() { - String originString = "(origin: `" + origin.toString() + "`)"; - if (isAssumeNone()) { - return super.toString() + "; nothing " + originString; + // During branch simplification, the origin `if` could be simplified. + // It means the assumption became "truth." + assert origin.hasBlock() || isAssumeNonNull(); + String originString = + origin.hasBlock() ? " (origin: `" + origin.toString() + "`)" : " (origin simplified)"; + if (isAssumeNone() || isAssumeNonNull()) { + return super.toString() + originString; } if (isAssumeDynamicType()) { + DynamicTypeAssumption assumption = asAssumeDynamicType().getAssumption(); return super.toString() - + "; type: " + asAssumeDynamicType().getAssumption().type + originString; - } - if (isAssumeNonNull()) { - return super.toString() + "; not null " + originString; + + "; upper bound: " + assumption.type + + (assumption.lowerBoundType != null ? "; lower bound: " + assumption.lowerBoundType : "") + + originString; } return super.toString(); }