Merge "Towards a single accessor of attached type lattice in Value."
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
index ab77424..6a0b9bc 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
@@ -110,7 +110,7 @@
private void updateTypeOfValue(Value value, TypeLatticeElement type) {
assert mode != Mode.UNSET;
- TypeLatticeElement current = value.getTypeLatticeRaw();
+ TypeLatticeElement current = value.getTypeLattice();
if (current.equals(type)) {
return;
}
@@ -143,7 +143,7 @@
private TypeLatticeElement computePhiType(Phi phi) {
// Type of phi(v1, v2, ..., vn) is the least upper bound of all those n operands.
return TypeLatticeElement.join(
- appInfo, phi.getOperands().stream().map(Value::getTypeLatticeRaw));
+ appInfo, phi.getOperands().stream().map(Value::getTypeLattice));
}
public static DexType getRefinedReceiverType(
diff --git a/src/main/java/com/android/tools/r8/ir/code/Argument.java b/src/main/java/com/android/tools/r8/ir/code/Argument.java
index b5fea0b..cf52e26 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Argument.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Argument.java
@@ -94,7 +94,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return outValue.getTypeLatticeRaw();
+ return outValue.getTypeLattice();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
index 14e1cc3..4254eef 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
@@ -167,7 +167,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return array().getTypeLatticeRaw().arrayGet(appInfo);
+ return array().getTypeLattice().arrayGet(appInfo);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Binop.java b/src/main/java/com/android/tools/r8/ir/code/Binop.java
index 94e18dd..0c14e1b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Binop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Binop.java
@@ -137,7 +137,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
return PrimitiveTypeLatticeElement.meet(
- leftValue().getTypeLatticeRaw(), rightValue().getTypeLatticeRaw());
+ leftValue().getTypeLattice(), rightValue().getTypeLattice());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/CheckCast.java b/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
index b1d16b9..4c1824b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
+++ b/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
@@ -119,7 +119,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return object().getTypeLatticeRaw().checkCast(appInfo, type);
+ return object().getTypeLattice().checkCast(appInfo, type);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Load.java b/src/main/java/com/android/tools/r8/ir/code/Load.java
index 3d566c3..4a6817f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Load.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Load.java
@@ -85,7 +85,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return src().getTypeLatticeRaw();
+ return src().getTypeLattice();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Move.java b/src/main/java/com/android/tools/r8/ir/code/Move.java
index c6cda18..7c9dcca 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Move.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Move.java
@@ -106,7 +106,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return src().getTypeLatticeRaw();
+ return src().getTypeLattice();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/NonNull.java b/src/main/java/com/android/tools/r8/ir/code/NonNull.java
index b2942d9..17bd113 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NonNull.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NonNull.java
@@ -91,7 +91,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return src().getTypeLatticeRaw().asNonNullable();
+ return src().getTypeLattice().asNonNullable();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Store.java b/src/main/java/com/android/tools/r8/ir/code/Store.java
index a8f97f4..1e71f1e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Store.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Store.java
@@ -86,7 +86,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return src().getTypeLatticeRaw();
+ return src().getTypeLattice();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Unop.java b/src/main/java/com/android/tools/r8/ir/code/Unop.java
index 15ae845..5ac4668 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Unop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Unop.java
@@ -59,7 +59,7 @@
@Override
public TypeLatticeElement evaluate(AppInfo appInfo) {
- return source().getTypeLatticeRaw();
+ return source().getTypeLattice();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index 96f765f..48b8f5b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -9,7 +9,6 @@
import com.android.tools.r8.graph.DebugLocalInfo;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.ir.analysis.type.BottomTypeLatticeElement;
-import com.android.tools.r8.ir.analysis.type.TopTypeLatticeElement;
import com.android.tools.r8.ir.analysis.type.TypeLatticeElement;
import com.android.tools.r8.ir.regalloc.LiveIntervals;
import com.android.tools.r8.origin.Origin;
@@ -762,14 +761,7 @@
typeLattice = newType;
}
- // TODO(b/72693244): At the end, both type analysis and optimizations use the same accessor.
- public TypeLatticeElement getTypeLatticeRaw() {
- // Type analysis and update should use this to reflect the type lattice as-is.
- return typeLattice;
- }
-
public TypeLatticeElement getTypeLattice() {
- // Optimizations should use this to regard an uninitialized type lattice as the Top.
- return typeLattice.isBottom() ? TopTypeLatticeElement.getInstance() : typeLattice;
+ return typeLattice;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index 4bc7f71..09ec561 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -1659,7 +1659,8 @@
}
TypeLatticeElement inTypeLattice = inValue.getTypeLattice();
- if (!inTypeLattice.isTop()) {
+ // TODO(b/72693244): Soon, there won't be a value with Bottom at this point.
+ if (!inTypeLattice.isBottom()) {
TypeLatticeElement outTypeLattice = outValue.getTypeLattice();
TypeLatticeElement castTypeLattice =
TypeLatticeElement.fromDexType(appInfo, castType, inTypeLattice.isNullable());
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
index 6d5aee1..9f57e52 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
@@ -114,7 +114,8 @@
// Avoid adding trivial cast and up-cast.
// We should not use strictlyLessThan(castType, receiverType), which detects downcast,
// due to side-casts, e.g., A (unused) < I, B < I, and cast from A to B.
- if (receiverTypeLattice.isTop()
+ // TODO(b/72693244): Soon, there won't be a value with Bottom at this point.
+ if (receiverTypeLattice.isBottom()
|| !TypeLatticeElement.lessThanOrEqual(
appInfo, receiverTypeLattice, castTypeLattice)) {
Value newReceiver = null;