Remove static field declarations in parent class TypeLatticeElement.
Change-Id: I4928a9b7d09a3ed099aae535ff01d39bd8e1d3af
diff --git a/src/main/java/com/android/tools/r8/code/Const.java b/src/main/java/com/android/tools/r8/code/Const.java
index 1f5c1f1..9026684 100644
--- a/src/main/java/com/android/tools/r8/code/Const.java
+++ b/src/main/java/com/android/tools/r8/code/Const.java
@@ -59,7 +59,7 @@
public void buildIR(IRBuilder builder) {
int value = decodedValue();
TypeLatticeElement typeLattice =
- value == 0 ? TypeLatticeElement.TOP : TypeLatticeElement.SINGLE;
+ value == 0 ? TypeLatticeElement.getTop() : TypeLatticeElement.getSingle();
builder.addConst(typeLattice, AA, value);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/Const16.java b/src/main/java/com/android/tools/r8/code/Const16.java
index 5bee254..f859228 100644
--- a/src/main/java/com/android/tools/r8/code/Const16.java
+++ b/src/main/java/com/android/tools/r8/code/Const16.java
@@ -53,7 +53,7 @@
public void buildIR(IRBuilder builder) {
int value = decodedValue();
TypeLatticeElement typeLattice =
- value == 0 ? TypeLatticeElement.TOP : TypeLatticeElement.SINGLE;
+ value == 0 ? TypeLatticeElement.getTop() : TypeLatticeElement.getSingle();
builder.addConst(typeLattice, AA, value);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/Const4.java b/src/main/java/com/android/tools/r8/code/Const4.java
index 4f73b29..a036d57 100644
--- a/src/main/java/com/android/tools/r8/code/Const4.java
+++ b/src/main/java/com/android/tools/r8/code/Const4.java
@@ -59,7 +59,7 @@
public void buildIR(IRBuilder builder) {
int value = decodedValue();
TypeLatticeElement typeLattice =
- value == 0 ? TypeLatticeElement.TOP : TypeLatticeElement.SINGLE;
+ value == 0 ? TypeLatticeElement.getTop() : TypeLatticeElement.getSingle();
builder.addConst(typeLattice, A, value);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/ConstHigh16.java b/src/main/java/com/android/tools/r8/code/ConstHigh16.java
index 28d1c73..f3821a6 100644
--- a/src/main/java/com/android/tools/r8/code/ConstHigh16.java
+++ b/src/main/java/com/android/tools/r8/code/ConstHigh16.java
@@ -59,7 +59,7 @@
public void buildIR(IRBuilder builder) {
int value = decodedValue();
TypeLatticeElement typeLattice =
- value == 0 ? TypeLatticeElement.TOP : TypeLatticeElement.SINGLE;
+ value == 0 ? TypeLatticeElement.getTop() : TypeLatticeElement.getSingle();
builder.addConst(typeLattice, AA, value);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/ConstWide.java b/src/main/java/com/android/tools/r8/code/ConstWide.java
index 1820172..31c1089 100644
--- a/src/main/java/com/android/tools/r8/code/ConstWide.java
+++ b/src/main/java/com/android/tools/r8/code/ConstWide.java
@@ -57,6 +57,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addConst(TypeLatticeElement.WIDE, AA, decodedValue());
+ builder.addConst(TypeLatticeElement.getWide(), AA, decodedValue());
}
}
diff --git a/src/main/java/com/android/tools/r8/code/ConstWide16.java b/src/main/java/com/android/tools/r8/code/ConstWide16.java
index ad7e84f..2f7634d 100644
--- a/src/main/java/com/android/tools/r8/code/ConstWide16.java
+++ b/src/main/java/com/android/tools/r8/code/ConstWide16.java
@@ -57,6 +57,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addConst(TypeLatticeElement.WIDE, AA, decodedValue());
+ builder.addConst(TypeLatticeElement.getWide(), AA, decodedValue());
}
}
diff --git a/src/main/java/com/android/tools/r8/code/ConstWide32.java b/src/main/java/com/android/tools/r8/code/ConstWide32.java
index 0b75213..51ef097 100644
--- a/src/main/java/com/android/tools/r8/code/ConstWide32.java
+++ b/src/main/java/com/android/tools/r8/code/ConstWide32.java
@@ -57,6 +57,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addConst(TypeLatticeElement.WIDE, AA, decodedValue());
+ builder.addConst(TypeLatticeElement.getWide(), AA, decodedValue());
}
}
diff --git a/src/main/java/com/android/tools/r8/code/ConstWideHigh16.java b/src/main/java/com/android/tools/r8/code/ConstWideHigh16.java
index e139b35..8437a35 100644
--- a/src/main/java/com/android/tools/r8/code/ConstWideHigh16.java
+++ b/src/main/java/com/android/tools/r8/code/ConstWideHigh16.java
@@ -57,6 +57,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addConst(TypeLatticeElement.WIDE, AA, decodedValue());
+ builder.addConst(TypeLatticeElement.getWide(), AA, decodedValue());
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeLatticeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeLatticeElement.java
index e2af564..39ebff8 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeLatticeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeLatticeElement.java
@@ -63,7 +63,7 @@
}
public TypeLatticeElement getArrayMemberTypeAsValueType() {
- return memberTypeLattice.isFineGrainedType() ? INT : memberTypeLattice;
+ return memberTypeLattice.isFineGrainedType() ? getInt() : memberTypeLattice;
}
public TypeLatticeElement getArrayBaseTypeLattice() {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java b/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
index 10f2d3e..3af208a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
@@ -40,7 +40,7 @@
Deque<Phi> worklist = new ArrayDeque<>(affectedPhis);
while (!worklist.isEmpty()) {
Phi phi = worklist.poll();
- phi.setTypeLattice(TypeLatticeElement.BOTTOM);
+ phi.setTypeLattice(TypeLatticeElement.getBottom());
for (Phi affectedPhi : phi.uniquePhiUsers()) {
if (affectedPhis.add(affectedPhi)) {
worklist.add(affectedPhi);
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeLatticeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeLatticeElement.java
index f43ebab..6a16fdc 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeLatticeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeLatticeElement.java
@@ -78,32 +78,32 @@
switch (descriptor) {
case 'Z':
if (asArrayElementType) {
- return TypeLatticeElement.BOOLEAN;
+ return TypeLatticeElement.getBoolean();
}
// fall through
case 'B':
if (asArrayElementType) {
- return TypeLatticeElement.BYTE;
+ return TypeLatticeElement.getByte();
}
// fall through
case 'S':
if (asArrayElementType) {
- return TypeLatticeElement.SHORT;
+ return TypeLatticeElement.getShort();
}
// fall through
case 'C':
if (asArrayElementType) {
- return TypeLatticeElement.CHAR;
+ return TypeLatticeElement.getChar();
}
// fall through
case 'I':
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case 'F':
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case 'J':
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case 'D':
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
case 'V':
throw new InternalCompilerError("No value type for void type.");
default:
@@ -117,13 +117,13 @@
case CHAR:
case SHORT:
case INT:
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case FLOAT:
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case LONG:
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case DOUBLE:
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
default:
throw new Unreachable("Invalid numeric type '" + numericType + "'");
}
@@ -135,16 +135,16 @@
}
if (isSinglePrimitive()) {
if (other.isSinglePrimitive()) {
- return TypeLatticeElement.SINGLE;
+ return TypeLatticeElement.getSingle();
}
assert other.isWidePrimitive();
- return TypeLatticeElement.TOP;
+ return TypeLatticeElement.getTop();
}
assert isWidePrimitive();
if (other.isWidePrimitive()) {
- return TypeLatticeElement.WIDE;
+ return TypeLatticeElement.getWide();
}
assert other.isSinglePrimitive();
- return TypeLatticeElement.TOP;
+ return TypeLatticeElement.getTop();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElement.java
index 09a9fad..de7b894 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElement.java
@@ -16,22 +16,58 @@
* The base abstraction of lattice elements for local type analysis.
*/
public abstract class TypeLatticeElement {
- public static final BottomTypeLatticeElement BOTTOM = BottomTypeLatticeElement.getInstance();
- public static final TopTypeLatticeElement TOP = TopTypeLatticeElement.getInstance();
- public static final BooleanTypeLatticeElement BOOLEAN = BooleanTypeLatticeElement.getInstance();
- public static final ByteTypeLatticeElement BYTE = ByteTypeLatticeElement.getInstance();
- static final ShortTypeLatticeElement SHORT = ShortTypeLatticeElement.getInstance();
- static final CharTypeLatticeElement CHAR = CharTypeLatticeElement.getInstance();
- public static final IntTypeLatticeElement INT = IntTypeLatticeElement.getInstance();
- public static final FloatTypeLatticeElement FLOAT = FloatTypeLatticeElement.getInstance();
- public static final SinglePrimitiveTypeLatticeElement SINGLE =
- SinglePrimitiveTypeLatticeElement.getInstance();
- public static final LongTypeLatticeElement LONG = LongTypeLatticeElement.getInstance();
- public static final DoubleTypeLatticeElement DOUBLE = DoubleTypeLatticeElement.getInstance();
- public static final WidePrimitiveTypeLatticeElement WIDE =
- WidePrimitiveTypeLatticeElement.getInstance();
- public static final ReferenceTypeLatticeElement NULL =
- ReferenceTypeLatticeElement.getNullTypeLatticeElement();
+
+ public static BottomTypeLatticeElement getBottom() {
+ return BottomTypeLatticeElement.getInstance();
+ }
+
+ public static TopTypeLatticeElement getTop() {
+ return TopTypeLatticeElement.getInstance();
+ }
+
+ public static BooleanTypeLatticeElement getBoolean() {
+ return BooleanTypeLatticeElement.getInstance();
+ }
+
+ public static ByteTypeLatticeElement getByte() {
+ return ByteTypeLatticeElement.getInstance();
+ }
+
+ public static ShortTypeLatticeElement getShort() {
+ return ShortTypeLatticeElement.getInstance();
+ }
+
+ public static CharTypeLatticeElement getChar() {
+ return CharTypeLatticeElement.getInstance();
+ }
+
+ public static IntTypeLatticeElement getInt() {
+ return IntTypeLatticeElement.getInstance();
+ }
+
+ public static FloatTypeLatticeElement getFloat() {
+ return FloatTypeLatticeElement.getInstance();
+ }
+
+ public static SinglePrimitiveTypeLatticeElement getSingle() {
+ return SinglePrimitiveTypeLatticeElement.getInstance();
+ }
+
+ public static LongTypeLatticeElement getLong() {
+ return LongTypeLatticeElement.getInstance();
+ }
+
+ public static DoubleTypeLatticeElement getDouble() {
+ return DoubleTypeLatticeElement.getInstance();
+ }
+
+ public static WidePrimitiveTypeLatticeElement getWide() {
+ return WidePrimitiveTypeLatticeElement.getInstance();
+ }
+
+ public static ReferenceTypeLatticeElement getNull() {
+ return ReferenceTypeLatticeElement.getNullTypeLatticeElement();
+ }
public TypeLatticeElement fixupClassTypeReferences(
Function<DexType, DexType> mapping, AppView<? extends AppInfoWithSubtyping> appView) {
@@ -62,16 +98,16 @@
return this;
}
if (isTop() || other.isTop()) {
- return TOP;
+ return getTop();
}
if (isPrimitive()) {
return other.isPrimitive()
? asPrimitiveTypeLatticeElement().join(other.asPrimitiveTypeLatticeElement())
- : TOP;
+ : getTop();
}
if (other.isPrimitive()) {
// By the above case, !(isPrimitive())
- return TOP;
+ return getTop();
}
// From now on, this and other are precise reference types, i.e., either ArrayType or ClassType.
assert isReference() && other.isReference();
@@ -100,7 +136,7 @@
public static TypeLatticeElement join(
Iterable<TypeLatticeElement> typeLattices, AppView<?> appView) {
- TypeLatticeElement result = BOTTOM;
+ TypeLatticeElement result = getBottom();
for (TypeLatticeElement other : typeLattices) {
result = result.join(other, appView);
}
@@ -373,7 +409,7 @@
DexType type, Nullability nullability, AppView<?> appView, boolean asArrayElementType) {
if (type == DexItemFactory.nullValueType) {
assert !nullability.isDefinitelyNotNull();
- return NULL;
+ return getNull();
}
if (type.isPrimitiveType()) {
return PrimitiveTypeLatticeElement.fromDexType(type, asArrayElementType);
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleNumberValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleNumberValue.java
index 64401fd..9a43d23 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleNumberValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleNumberValue.java
@@ -66,7 +66,7 @@
assert !typeLattice.isReference() || value == 0;
Value returnedValue =
code.createValue(
- typeLattice.isReference() ? TypeLatticeElement.NULL : typeLattice, debugLocalInfo);
+ typeLattice.isReference() ? TypeLatticeElement.getNull() : typeLattice, debugLocalInfo);
return new ConstNumber(returnedValue, value);
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
index cc154e9..5d97e99 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
@@ -140,20 +140,20 @@
ConstNumber newConst;
if (type == NumericType.INT) {
int result = foldIntegers(leftConst.getIntValue(), rightConst.getIntValue());
- Value value = code.createValue(TypeLatticeElement.INT, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getInt(), getLocalInfo());
newConst = new ConstNumber(value, result);
} else if (type == NumericType.LONG) {
long result = foldLongs(leftConst.getLongValue(), rightConst.getLongValue());
- Value value = code.createValue(TypeLatticeElement.LONG, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getLong(), getLocalInfo());
newConst = new ConstNumber(value, result);
} else if (type == NumericType.FLOAT) {
float result = foldFloat(leftConst.getFloatValue(), rightConst.getFloatValue());
- Value value = code.createValue(TypeLatticeElement.FLOAT, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getFloat(), getLocalInfo());
newConst = new ConstNumber(value, Float.floatToIntBits(result));
} else {
assert type == NumericType.DOUBLE;
double result = foldDouble(leftConst.getDoubleValue(), rightConst.getDoubleValue());
- Value value = code.createValue(TypeLatticeElement.DOUBLE, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getDouble(), getLocalInfo());
newConst = new ConstNumber(value, Double.doubleToLongBits(result));
}
return new ConstLatticeElement(newConst);
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 d90bf21..0c118fb 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
@@ -96,11 +96,11 @@
case BOOLEAN_OR_BYTE:
ArrayTypeLatticeElement arrayType = array().getTypeLattice().asArrayTypeLatticeElement();
if (arrayType != null
- && arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.BOOLEAN) {
+ && arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.getBoolean()) {
instruction = new AgetBoolean(dest, array, index);
} else {
assert array().getTypeLattice().isDefinitelyNull()
- || arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.BYTE;
+ || arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.getByte();
instruction = new AgetByte(dest, array, index);
}
break;
@@ -203,9 +203,10 @@
// the instruction cannot return. For now we return NULL as the type to ensure we have a
// type consistent witness for the out-value type. We could consider returning bottom in
// this case as the value is indeed empty, i.e., the instruction will always fail.
- TypeLatticeElement valueType = arrayTypeLattice == null
- ? TypeLatticeElement.NULL
- : arrayTypeLattice.getArrayMemberTypeAsValueType();
+ TypeLatticeElement valueType =
+ arrayTypeLattice == null
+ ? TypeLatticeElement.getNull()
+ : arrayTypeLattice.getArrayMemberTypeAsValueType();
assert valueType.isReference();
return valueType;
case BOOLEAN_OR_BYTE:
@@ -214,19 +215,19 @@
case INT:
assert arrayTypeLattice == null
|| arrayTypeLattice.getArrayMemberTypeAsValueType().isInt();
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case FLOAT:
assert arrayTypeLattice == null
|| arrayTypeLattice.getArrayMemberTypeAsValueType().isFloat();
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case LONG:
assert arrayTypeLattice == null
|| arrayTypeLattice.getArrayMemberTypeAsValueType().isLong();
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case DOUBLE:
assert arrayTypeLattice == null
|| arrayTypeLattice.getArrayMemberTypeAsValueType().isDouble();
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
case INT_OR_FLOAT:
assert arrayTypeLattice == null
|| arrayTypeLattice.getArrayMemberTypeAsValueType().isSinglePrimitive();
@@ -268,7 +269,7 @@
public boolean outTypeKnownToBeBoolean(Set<Phi> seen) {
return array().getTypeLattice().isArrayType()
&& array().getTypeLattice().asArrayTypeLatticeElement().getArrayMemberTypeAsMemberType()
- == TypeLatticeElement.BOOLEAN;
+ == TypeLatticeElement.getBoolean();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java b/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
index f767de8..b2f908c 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayLength.java
@@ -131,7 +131,7 @@
@Override
public TypeLatticeElement evaluate(AppView<?> appView) {
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
index 8917cc0..b8d8526 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
@@ -92,11 +92,11 @@
case BOOLEAN_OR_BYTE:
ArrayTypeLatticeElement arrayType = array().getTypeLattice().asArrayTypeLatticeElement();
if (arrayType != null
- && arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.BOOLEAN) {
+ && arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.getBoolean()) {
instruction = new AputBoolean(value, array, index);
} else {
assert array().getTypeLattice().isDefinitelyNull()
- || arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.BYTE;
+ || arrayType.getArrayMemberTypeAsMemberType() == TypeLatticeElement.getByte();
instruction = new AputByte(value, array, index);
}
break;
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
index 301be93..3cae82a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionListIterator.java
@@ -719,7 +719,7 @@
new Phi(
code.valueNumberGenerator.next(),
newExitBlock,
- TypeLatticeElement.BOTTOM,
+ TypeLatticeElement.getBottom(),
null,
RegisterReadType.NORMAL);
phi.addOperands(operands);
diff --git a/src/main/java/com/android/tools/r8/ir/code/Cmp.java b/src/main/java/com/android/tools/r8/ir/code/Cmp.java
index 97c76ce..acccf31 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Cmp.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Cmp.java
@@ -186,7 +186,7 @@
result = (int) Math.signum(left - right);
}
}
- Value value = code.createValue(TypeLatticeElement.INT, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getInt(), getLocalInfo());
ConstNumber newConst = new ConstNumber(value, result);
return new ConstLatticeElement(newConst);
} else if (leftLattice.isValueRange() && rightLattice.isConst()) {
@@ -214,7 +214,7 @@
return Bottom.getInstance();
}
int result = Integer.signum(Long.compare(leftRange.getMin(), rightRange.getMin()));
- Value value = code.createValue(TypeLatticeElement.INT, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getInt(), getLocalInfo());
ConstNumber newConst = new ConstNumber(value, result);
return new ConstLatticeElement(newConst);
}
@@ -236,7 +236,7 @@
@Override
public TypeLatticeElement evaluate(AppView<?> appView) {
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index ff765e5..39c3d39 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -1050,12 +1050,12 @@
}
public ConstNumber createDoubleConstant(double value, DebugLocalInfo local) {
- Value out = createValue(TypeLatticeElement.DOUBLE, local);
+ Value out = createValue(TypeLatticeElement.getDouble(), local);
return new ConstNumber(out, Double.doubleToLongBits(value));
}
public ConstNumber createFloatConstant(float value, DebugLocalInfo local) {
- Value out = createValue(TypeLatticeElement.FLOAT, local);
+ Value out = createValue(TypeLatticeElement.getFloat(), local);
return new ConstNumber(out, Float.floatToIntBits(value));
}
@@ -1064,12 +1064,12 @@
}
public ConstNumber createIntConstant(int value, DebugLocalInfo local) {
- Value out = createValue(TypeLatticeElement.INT, local);
+ Value out = createValue(TypeLatticeElement.getInt(), local);
return new ConstNumber(out, value);
}
public ConstNumber createLongConstant(long value, DebugLocalInfo local) {
- Value out = createValue(TypeLatticeElement.LONG, local);
+ Value out = createValue(TypeLatticeElement.getLong(), local);
return new ConstNumber(out, value);
}
@@ -1088,12 +1088,12 @@
}
public ConstNumber createConstNull() {
- Value out = createValue(TypeLatticeElement.NULL);
+ Value out = createValue(TypeLatticeElement.getNull());
return new ConstNumber(out, 0);
}
public ConstNumber createConstNull(DebugLocalInfo local) {
- Value out = createValue(TypeLatticeElement.NULL, local);
+ Value out = createValue(TypeLatticeElement.getNull(), local);
return new ConstNumber(out, 0);
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java b/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
index d59316f..de4fa66 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
@@ -92,7 +92,7 @@
@Override
public TypeLatticeElement evaluate(AppView<?> appView) {
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
index ad3d344..7f87253 100644
--- a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
@@ -117,7 +117,7 @@
ConstNumber newConst;
if (type == NumericType.INT) {
int result = foldIntegers(leftConst.getIntValue(), rightConst.getIntValue());
- Value value = code.createValue(TypeLatticeElement.INT, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getInt(), getLocalInfo());
newConst = new ConstNumber(value, result);
} else {
assert type == NumericType.LONG;
@@ -129,7 +129,7 @@
right = rightConst.getLongValue();
}
long result = foldLongs(leftConst.getLongValue(), right);
- Value value = code.createValue(TypeLatticeElement.LONG, getLocalInfo());
+ Value value = code.createValue(TypeLatticeElement.getLong(), getLocalInfo());
newConst = new ConstNumber(value, result);
}
return new ConstLatticeElement(newConst);
diff --git a/src/main/java/com/android/tools/r8/ir/code/Phi.java b/src/main/java/com/android/tools/r8/ir/code/Phi.java
index 16fc789..eecf8c3 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Phi.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Phi.java
@@ -393,7 +393,7 @@
// Type of phi(v1, v2, ..., vn) is the least upper bound of all those n operands.
public TypeLatticeElement computePhiType(AppView<?> appView) {
- TypeLatticeElement result = TypeLatticeElement.BOTTOM;
+ TypeLatticeElement result = TypeLatticeElement.getBottom();
for (Value operand : getOperands()) {
result = result.join(operand.getTypeLattice(), appView);
}
@@ -416,7 +416,7 @@
}
}
Set<Value> visitedOperands = Sets.newIdentityHashSet();
- TypeLatticeElement result = TypeLatticeElement.BOTTOM;
+ TypeLatticeElement result = TypeLatticeElement.getBottom();
for (Phi phi : reachablePhis) {
for (Value operand : phi.getOperands()) {
if (!operand.getAliasedValue().isPhi() && visitedOperands.add(operand)) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/StackValues.java b/src/main/java/com/android/tools/r8/ir/code/StackValues.java
index 1ce52f9..528cddd 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StackValues.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StackValues.java
@@ -16,7 +16,7 @@
private final StackValue[] stackValues;
public StackValues(StackValue... stackValues) {
- super(Value.UNDEFINED_NUMBER, TypeLatticeElement.BOTTOM, null);
+ super(Value.UNDEFINED_NUMBER, TypeLatticeElement.getBottom(), null);
this.stackValues = stackValues;
assert stackValues.length >= 2;
}
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 bba9148..8e75d62 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
@@ -79,9 +79,9 @@
if (typeLattice.isTop()) {
if (definition != null && definition.isConstNumber()) {
assert definition.asConstNumber().isZero();
- return TypeLatticeElement.NULL;
+ return TypeLatticeElement.getNull();
} else {
- return TypeLatticeElement.BOTTOM;
+ return TypeLatticeElement.getBottom();
}
}
if (typeLattice.isReference()) {
@@ -98,17 +98,17 @@
break;
case INT:
if (typeLattice.isTop() || (typeLattice.isSinglePrimitive() && !typeLattice.isFloat())) {
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
}
break;
case FLOAT:
if (typeLattice.isTop() || (typeLattice.isSinglePrimitive() && !typeLattice.isInt())) {
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
}
break;
case INT_OR_FLOAT:
if (typeLattice.isTop()) {
- return TypeLatticeElement.SINGLE;
+ return TypeLatticeElement.getSingle();
}
if (typeLattice.isSinglePrimitive()) {
return typeLattice;
@@ -116,12 +116,12 @@
break;
case LONG:
if (typeLattice.isWidePrimitive() && !typeLattice.isDouble()) {
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
}
break;
case DOUBLE:
if (typeLattice.isWidePrimitive() && !typeLattice.isLong()) {
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
}
break;
case LONG_OR_DOUBLE:
@@ -213,7 +213,7 @@
public static final int UNDEFINED_NUMBER = -1;
public static final Value UNDEFINED =
- new Value(UNDEFINED_NUMBER, TypeLatticeElement.BOTTOM, null);
+ new Value(UNDEFINED_NUMBER, TypeLatticeElement.getBottom(), null);
protected final int number;
public Instruction definition = null;
@@ -232,6 +232,7 @@
protected TypeLatticeElement typeLattice;
public Value(int number, TypeLatticeElement typeLattice, DebugLocalInfo local) {
+ assert typeLattice != null;
this.number = number;
this.debugData = local == null ? null : new DebugData(local);
this.typeLattice = typeLattice;
@@ -1101,6 +1102,7 @@
* @param newType The new type lattice element
*/
public void setTypeLattice(TypeLatticeElement newType) {
+ assert newType != null;
typeLattice = newType;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ValueType.java b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
index e3926c5..865c7d4 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ValueType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ValueType.java
@@ -124,13 +124,13 @@
public PrimitiveTypeLatticeElement toPrimitiveTypeLattice() {
switch (this) {
case INT:
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case FLOAT:
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case LONG:
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case DOUBLE:
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
default:
throw new Unreachable("Unexpected type in conversion to primitive: " + this);
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ValueTypeConstraint.java b/src/main/java/com/android/tools/r8/ir/code/ValueTypeConstraint.java
index eb0ba83..1f7f97b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ValueTypeConstraint.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ValueTypeConstraint.java
@@ -160,13 +160,13 @@
public PrimitiveTypeLatticeElement toPrimitiveTypeLattice() {
switch (this) {
case INT:
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case FLOAT:
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case LONG:
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case DOUBLE:
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
default:
throw new Unreachable("Unexpected type in conversion to primitive: " + this);
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index 682804e..83ffaeb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -385,7 +385,7 @@
|| constNumber == null
|| add == null
|| store == null
- || constNumber.outValue().getTypeLattice() != TypeLatticeElement.INT) {
+ || constNumber.outValue().getTypeLattice() != TypeLatticeElement.getInt()) {
it.next();
continue;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 4dbdde6..42728d4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -6,6 +6,14 @@
import static com.android.tools.r8.ir.analysis.type.Nullability.definitelyNotNull;
import static com.android.tools.r8.ir.analysis.type.Nullability.maybeNull;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getBottom;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getDouble;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getFloat;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getInt;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getLong;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getNull;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getSingle;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getWide;
import com.android.tools.r8.ApiLevelException;
import com.android.tools.r8.errors.CompilationError;
@@ -139,12 +147,6 @@
*/
public class IRBuilder {
- private static final TypeLatticeElement INT = TypeLatticeElement.INT;
- private static final TypeLatticeElement FLOAT = TypeLatticeElement.FLOAT;
- private static final TypeLatticeElement LONG = TypeLatticeElement.LONG;
- private static final TypeLatticeElement DOUBLE = TypeLatticeElement.DOUBLE;
- private static final TypeLatticeElement NULL = TypeLatticeElement.NULL;
-
public static final int INITIAL_BLOCK_OFFSET = -1;
private static TypeLatticeElement fromMemberType(MemberType type) {
@@ -153,20 +155,20 @@
case CHAR:
case SHORT:
case INT:
- return INT;
+ return getInt();
case FLOAT:
- return FLOAT;
+ return getFloat();
case INT_OR_FLOAT:
- return TypeLatticeElement.SINGLE;
+ return getSingle();
case LONG:
- return LONG;
+ return getLong();
case DOUBLE:
- return DOUBLE;
+ return getDouble();
case LONG_OR_DOUBLE:
- return TypeLatticeElement.WIDE;
+ return getWide();
case OBJECT:
// For object types, we delay the exact type computation until done building.
- return TypeLatticeElement.BOTTOM;
+ return getBottom();
default:
throw new Unreachable("Unexpected member type: " + type);
}
@@ -895,7 +897,7 @@
RemovedArgumentInfo removedArgumentInfo = getRemovedArgumentInfo();
if (removedArgumentInfo == null) {
DebugLocalInfo local = getOutgoingLocal(register);
- Value value = writeRegister(register, INT, ThrowingInfo.NO_THROW, local);
+ Value value = writeRegister(register, getInt(), ThrowingInfo.NO_THROW, local);
addNonThisArgument(new Argument(value, true));
} else {
assert removedArgumentInfo.isNeverUsed();
@@ -922,7 +924,7 @@
pendingArgumentInstructions = new ArrayList<>();
}
DebugLocalInfo local = getOutgoingLocal(register);
- Value value = writeRegister(register, TypeLatticeElement.NULL, ThrowingInfo.NO_THROW, local);
+ Value value = writeRegister(register, getNull(), ThrowingInfo.NO_THROW, local);
pendingArgumentInstructions.add(new ConstNumber(value, 0));
} else {
assert removedArgumentInfo.isNeverUsed();
@@ -1049,7 +1051,7 @@
public void addArrayLength(int dest, int array) {
Value in = readRegister(array, ValueTypeConstraint.OBJECT);
- Value out = writeRegister(dest, INT, ThrowingInfo.CAN_THROW);
+ Value out = writeRegister(dest, getInt(), ThrowingInfo.CAN_THROW);
ArrayLength instruction = new ArrayLength(out, in);
assert instruction.instructionTypeCanThrow();
add(instruction);
@@ -1079,7 +1081,7 @@
public void addCmp(NumericType type, Bias bias, int dest, int left, int right) {
Value in1 = readNumericRegister(left, type);
Value in2 = readNumericRegister(right, type);
- Value out = writeRegister(dest, INT, ThrowingInfo.NO_THROW);
+ Value out = writeRegister(dest, getInt(), ThrowingInfo.NO_THROW);
Cmp instruction = new Cmp(type, bias, out, in1, in2);
assert !instruction.instructionTypeCanThrow();
add(instruction);
@@ -1093,23 +1095,23 @@
}
public void addLongConst(int dest, long value) {
- add(new ConstNumber(writeRegister(dest, LONG, ThrowingInfo.NO_THROW), value));
+ add(new ConstNumber(writeRegister(dest, getLong(), ThrowingInfo.NO_THROW), value));
}
public void addDoubleConst(int dest, long value) {
- add(new ConstNumber(writeRegister(dest, DOUBLE, ThrowingInfo.NO_THROW), value));
+ add(new ConstNumber(writeRegister(dest, getDouble(), ThrowingInfo.NO_THROW), value));
}
public void addIntConst(int dest, long value) {
- add(new ConstNumber(writeRegister(dest, INT, ThrowingInfo.NO_THROW), value));
+ add(new ConstNumber(writeRegister(dest, getInt(), ThrowingInfo.NO_THROW), value));
}
public void addFloatConst(int dest, long value) {
- add(new ConstNumber(writeRegister(dest, FLOAT, ThrowingInfo.NO_THROW), value));
+ add(new ConstNumber(writeRegister(dest, getFloat(), ThrowingInfo.NO_THROW), value));
}
public void addNullConst(int dest) {
- add(new ConstNumber(writeRegister(dest, NULL, ThrowingInfo.NO_THROW), 0L));
+ add(new ConstNumber(writeRegister(dest, getNull(), ThrowingInfo.NO_THROW), 0L));
}
public void addConstClass(int dest, DexType type) {
@@ -1377,7 +1379,7 @@
public void addInstanceOf(int dest, int value, DexType type) {
Value in = readRegister(value, ValueTypeConstraint.OBJECT);
- Value out = writeRegister(dest, INT, ThrowingInfo.CAN_THROW);
+ Value out = writeRegister(dest, getInt(), ThrowingInfo.CAN_THROW);
InstanceOf instruction = new InstanceOf(out, in, type);
assert instruction.instructionTypeCanThrow();
addInstruction(instruction);
@@ -2117,9 +2119,7 @@
// A debug initiated value must have a precise type constraint.
assert typeConstraint.isPrecise();
TypeLatticeElement type =
- typeConstraint.isObject()
- ? TypeLatticeElement.NULL
- : typeConstraint.toPrimitiveTypeLattice();
+ typeConstraint.isObject() ? getNull() : typeConstraint.toPrimitiveTypeLattice();
if (uninitializedDebugLocalValues == null) {
uninitializedDebugLocalValues = new Int2ReferenceOpenHashMap<>();
}
@@ -2156,14 +2156,14 @@
}
private Value readLongLiteral(long constant) {
- Value value = new Value(valueNumberGenerator.next(), LONG, null);
+ Value value = new Value(valueNumberGenerator.next(), getLong(), null);
ConstNumber number = new ConstNumber(value, constant);
add(number);
return number.outValue();
}
private Value readIntLiteral(long constant) {
- Value value = new Value(valueNumberGenerator.next(), INT, null);
+ Value value = new Value(valueNumberGenerator.next(), getInt(), null);
ConstNumber number = new ConstNumber(value, constant);
add(number);
return number.outValue();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 4f84235..2c9a53c 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -1831,7 +1831,7 @@
Instruction check = it.previous();
assert addBefore == check;
// Forced definition of const-zero
- Value fixitValue = code.createValue(TypeLatticeElement.INT);
+ Value fixitValue = code.createValue(TypeLatticeElement.getInt());
Instruction fixitDefinition = new AlwaysMaterializingDefinition(fixitValue);
fixitDefinition.setBlock(addBefore.getBlock());
fixitDefinition.setPosition(addBefore.getPosition());
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
index b54b406..41f22a4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchRemover.java
@@ -107,7 +107,7 @@
InvokeVirtual invokeInstruction =
new InvokeVirtual(
appView.dexItemFactory().stringMethods.equals,
- code.createValue(PrimitiveTypeLatticeElement.INT),
+ code.createValue(PrimitiveTypeLatticeElement.getInt()),
ImmutableList.of(theSwitch.value(), constStringInstruction.outValue()));
invokeInstruction.setPosition(Position.syntheticNone());
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 6f01dd7..2c41a2a 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -68,25 +68,25 @@
public static TypeLatticeElement typeForConstraint(ValueTypeConstraint constraint) {
switch (constraint) {
case INT_OR_FLOAT_OR_OBJECT:
- return TypeLatticeElement.TOP;
+ return TypeLatticeElement.getTop();
case OBJECT:
// If the constraint is object the concrete lattice type will need to be computed.
// We mark the object type as bottom for now, with the implication that it is of type
// reference but that it should not contribute to the computation of its join
// (in potentially self-referencing phis).
- return TypeLatticeElement.BOTTOM;
+ return TypeLatticeElement.getBottom();
case INT:
- return TypeLatticeElement.INT;
+ return TypeLatticeElement.getInt();
case FLOAT:
- return TypeLatticeElement.FLOAT;
+ return TypeLatticeElement.getFloat();
case INT_OR_FLOAT:
- return TypeLatticeElement.SINGLE;
+ return TypeLatticeElement.getSingle();
case LONG:
- return TypeLatticeElement.LONG;
+ return TypeLatticeElement.getLong();
case DOUBLE:
- return TypeLatticeElement.DOUBLE;
+ return TypeLatticeElement.getDouble();
case LONG_OR_DOUBLE:
- return TypeLatticeElement.WIDE;
+ return TypeLatticeElement.getWide();
default:
throw new Unreachable("Unexpected constraint type: " + constraint);
}
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 65e86b7..51fe0fe 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
@@ -1477,7 +1477,7 @@
new ConstNumber(
new Value(
code.valueNumberGenerator.next(),
- TypeLatticeElement.INT,
+ TypeLatticeElement.getInt(),
instanceOf.outValue().getLocalInfo()),
result == InstanceOfResult.TRUE ? 1 : 0);
it.replaceCurrentInstruction(newInstruction);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/ClassInitializerSourceCode.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/ClassInitializerSourceCode.java
index c6aecbb..b679383 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/ClassInitializerSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/ClassInitializerSourceCode.java
@@ -47,7 +47,7 @@
if (group.isSingletonLambda(lambda)) {
int id = group.lambdaId(lambda);
add(builder -> builder.addNewInstance(instance, groupClassType));
- add(builder -> builder.addConst(TypeLatticeElement.INT, lambdaId, id));
+ add(builder -> builder.addConst(TypeLatticeElement.getInt(), lambdaId, id));
add(
builder ->
builder.addInvoke(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
index 9e07c44..49eaa46 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KStyleLambdaGroup.java
@@ -232,7 +232,7 @@
@Override
void prepareSuperConstructorCall(int receiverRegister) {
int arityRegister = nextRegister(ValueType.INT);
- add(builder -> builder.addConst(TypeLatticeElement.INT, arityRegister, arity));
+ add(builder -> builder.addConst(TypeLatticeElement.getInt(), arityRegister, arity));
add(
builder ->
builder.addInvoke(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
index f17535a..e54d241 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupCodeStrategy.java
@@ -213,7 +213,7 @@
DexType lambda = method.holder;
// Create constant with lambda id.
- Value lambdaIdValue = context.code.createValue(TypeLatticeElement.INT);
+ Value lambdaIdValue = context.code.createValue(TypeLatticeElement.getInt());
ConstNumber lambdaId = new ConstNumber(lambdaIdValue, group.lambdaId(lambda));
lambdaId.setPosition(invoke.getPosition());
context.instructions().previous();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java b/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
index c50791e..49a74d1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
@@ -113,7 +113,7 @@
Instruction current = it.next();
if (position != current.getPosition()
|| !current.isConstNumber()
- || current.outValue().getTypeLattice() != TypeLatticeElement.INT
+ || current.outValue().getTypeLattice() != TypeLatticeElement.getInt()
|| current.asConstNumber().getIntValue() < -128
|| current.asConstNumber().getIntValue() > 127
|| !it.hasNext()) {
diff --git a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
index 4b0d1ed..e53db5e 100644
--- a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
+++ b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
@@ -364,9 +364,9 @@
// Modify the code to make the inserted block add the constant 10 to the original return
// value.
Value newConstValue =
- new Value(test.valueNumberGenerator.next(), TypeLatticeElement.INT, null);
+ new Value(test.valueNumberGenerator.next(), TypeLatticeElement.getInt(), null);
Value newReturnValue =
- new Value(test.valueNumberGenerator.next(), TypeLatticeElement.INT, null);
+ new Value(test.valueNumberGenerator.next(), TypeLatticeElement.getInt(), null);
Value oldReturnValue = newReturnBlock.iterator().next().asReturn().returnValue();
newReturnBlock.iterator().next().asReturn().returnValue().replaceUsers(newReturnValue);
Instruction constInstruction = new ConstNumber(newConstValue, 10);
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/ArrayTypeTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/ArrayTypeTest.java
index e5e0a86..74a49ed 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/ArrayTypeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/ArrayTypeTest.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.ir.analysis.type;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.FLOAT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.INT;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getFloat;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getInt;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -74,8 +74,8 @@
ArrayTypeLatticeElement arrayType = array.getTypeLattice().asArrayTypeLatticeElement();
TypeLatticeElement elementType = arrayType.getArrayMemberTypeAsMemberType();
- assertEquals(FLOAT, elementType);
- assertEquals(FLOAT, value.getTypeLattice());
+ assertEquals(getFloat(), elementType);
+ assertEquals(getFloat(), value.getTypeLattice());
}
}
};
@@ -94,8 +94,8 @@
ArrayTypeLatticeElement arrayType = array.getTypeLattice().asArrayTypeLatticeElement();
TypeLatticeElement elementType = arrayType.getArrayMemberTypeAsMemberType();
- assertEquals(FLOAT, elementType);
- assertEquals(FLOAT, value.getTypeLattice());
+ assertEquals(getFloat(), elementType);
+ assertEquals(getFloat(), value.getTypeLattice());
}
{
@@ -104,7 +104,7 @@
code,
instruction ->
instruction.isConstNumber() && instruction.asConstNumber().getRawValue() != 0);
- assertEquals(FLOAT, constNumberInstruction.outValue().getTypeLattice());
+ assertEquals(getFloat(), constNumberInstruction.outValue().getTypeLattice());
}
};
}
@@ -115,7 +115,7 @@
for (BasicBlock block : code.blocks) {
for (Phi phi : block.getPhis()) {
phiCount++;
- assertEquals(INT, phi.getTypeLattice());
+ assertEquals(getInt(), phi.getTypeLattice());
}
}
assertEquals(2, phiCount);
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/ConstrainedPrimitiveTypeTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/ConstrainedPrimitiveTypeTest.java
index dd0b5e2..9471d46 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/ConstrainedPrimitiveTypeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/ConstrainedPrimitiveTypeTest.java
@@ -4,10 +4,10 @@
package com.android.tools.r8.ir.analysis.type;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.DOUBLE;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.FLOAT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.INT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.LONG;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getDouble;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getFloat;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getInt;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getLong;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.NeverInline;
@@ -54,42 +54,42 @@
@Test
public void testIntWithInvokeUser() throws Exception {
- buildAndCheckIR("intWithInvokeUserTest", testInspector(INT, 1));
+ buildAndCheckIR("intWithInvokeUserTest", testInspector(getInt(), 1));
}
@Test
public void testIntWithIndirectInvokeUser() throws Exception {
- buildAndCheckIR("intWithIndirectInvokeUserTest", testInspector(INT, 2));
+ buildAndCheckIR("intWithIndirectInvokeUserTest", testInspector(getInt(), 2));
}
@Test
public void testFloatWithInvokeUser() throws Exception {
- buildAndCheckIR("floatWithInvokeUserTest", testInspector(FLOAT, 1));
+ buildAndCheckIR("floatWithInvokeUserTest", testInspector(getFloat(), 1));
}
@Test
public void testFloatWithIndirectInvokeUser() throws Exception {
- buildAndCheckIR("floatWithIndirectInvokeUserTest", testInspector(FLOAT, 2));
+ buildAndCheckIR("floatWithIndirectInvokeUserTest", testInspector(getFloat(), 2));
}
@Test
public void testLongWithInvokeUser() throws Exception {
- buildAndCheckIR("longWithInvokeUserTest", testInspector(LONG, 1));
+ buildAndCheckIR("longWithInvokeUserTest", testInspector(getLong(), 1));
}
@Test
public void testLongWithIndirectInvokeUser() throws Exception {
- buildAndCheckIR("longWithIndirectInvokeUserTest", testInspector(LONG, 2));
+ buildAndCheckIR("longWithIndirectInvokeUserTest", testInspector(getLong(), 2));
}
@Test
public void testDoubleWithInvokeUser() throws Exception {
- buildAndCheckIR("doubleWithInvokeUserTest", testInspector(DOUBLE, 1));
+ buildAndCheckIR("doubleWithInvokeUserTest", testInspector(getDouble(), 1));
}
@Test
public void testDoubleWithIndirectInvokeUser() throws Exception {
- buildAndCheckIR("doubleWithIndirectInvokeUserTest", testInspector(DOUBLE, 2));
+ buildAndCheckIR("doubleWithIndirectInvokeUserTest", testInspector(getDouble(), 2));
}
private static Consumer<IRCode> testInspector(
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
index b994eea..198ffa3 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
@@ -58,10 +58,10 @@
@RunWith(Parameterized.class)
public class TypeAnalysisTest extends SmaliTestBase {
private static final InternalOptions TEST_OPTIONS = new InternalOptions();
- private static final TypeLatticeElement NULL = TypeLatticeElement.NULL;
- private static final TypeLatticeElement SINGLE = TypeLatticeElement.SINGLE;
- private static final TypeLatticeElement INT = TypeLatticeElement.INT;
- private static final TypeLatticeElement LONG = TypeLatticeElement.LONG;
+ private static final TypeLatticeElement NULL = TypeLatticeElement.getNull();
+ private static final TypeLatticeElement SINGLE = TypeLatticeElement.getSingle();
+ private static final TypeLatticeElement INT = TypeLatticeElement.getInt();
+ private static final TypeLatticeElement LONG = TypeLatticeElement.getLong();
private final String dirName;
private final String smaliFileName;
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeConstraintOnTrivialPhiTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeConstraintOnTrivialPhiTest.java
index ad428dd..80d752e 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeConstraintOnTrivialPhiTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeConstraintOnTrivialPhiTest.java
@@ -4,10 +4,6 @@
package com.android.tools.r8.ir.analysis.type;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.DOUBLE;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.FLOAT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.INT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.LONG;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestParameters;
@@ -94,22 +90,24 @@
@Test
public void testIntConstraintOnTrivialPhi() throws Exception {
- buildAndCheckIR("intConstraintOnTrivialPhiTest", testInspector(INT));
+ buildAndCheckIR("intConstraintOnTrivialPhiTest", testInspector(TypeLatticeElement.getInt()));
}
@Test
public void testFloatConstraintOnTrivialPhi() throws Exception {
- buildAndCheckIR("floatConstraintOnTrivialPhiTest", testInspector(FLOAT));
+ buildAndCheckIR(
+ "floatConstraintOnTrivialPhiTest", testInspector(TypeLatticeElement.getFloat()));
}
@Test
public void testLongConstraintOnTrivialPhi() throws Exception {
- buildAndCheckIR("longConstraintOnTrivialPhiTest", testInspector(LONG));
+ buildAndCheckIR("longConstraintOnTrivialPhiTest", testInspector(TypeLatticeElement.getLong()));
}
@Test
public void testDoubleConstraintOnTrivialPhi() throws Exception {
- buildAndCheckIR("doubleConstraintOnTrivialPhiTest", testInspector(DOUBLE));
+ buildAndCheckIR(
+ "doubleConstraintOnTrivialPhiTest", testInspector(TypeLatticeElement.getDouble()));
}
private static Consumer<IRCode> testInspector(TypeLatticeElement expectedType) {
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElementWidthTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElementWidthTest.java
index d6b9598..f2a20a6 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElementWidthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeElementWidthTest.java
@@ -18,8 +18,7 @@
@Test
public void testArrayWidth() {
ArrayTypeLatticeElement arrayType =
- ArrayTypeLatticeElement.create(
- IntTypeLatticeElement.getInstance(), Nullability.maybeNull());
+ ArrayTypeLatticeElement.create(TypeLatticeElement.getInt(), Nullability.maybeNull());
assertFalse(arrayType.isSinglePrimitive());
assertFalse(arrayType.isWidePrimitive());
assertEquals(1, arrayType.requiredRegisters());
@@ -27,51 +26,51 @@
@Test
public void testBooleanWidth() {
- assertTrue(BooleanTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(BooleanTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, BooleanTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getBoolean().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getBoolean().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getBoolean().requiredRegisters());
}
@Test
public void testByteWidth() {
- assertTrue(ByteTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(ByteTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, ByteTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getByte().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getByte().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getByte().requiredRegisters());
}
@Test
public void testCharWidth() {
- assertTrue(CharTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(CharTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, CharTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getChar().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getChar().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getChar().requiredRegisters());
}
@Test
public void testDoubleWidth() {
- assertTrue(DoubleTypeLatticeElement.getInstance().isWidePrimitive());
- assertFalse(DoubleTypeLatticeElement.getInstance().isSinglePrimitive());
- assertEquals(2, DoubleTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getDouble().isWidePrimitive());
+ assertFalse(TypeLatticeElement.getDouble().isSinglePrimitive());
+ assertEquals(2, TypeLatticeElement.getDouble().requiredRegisters());
}
@Test
public void testFloatWidth() {
- assertTrue(FloatTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(FloatTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, FloatTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getFloat().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getFloat().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getFloat().requiredRegisters());
}
@Test
public void testIntWidth() {
- assertTrue(IntTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(IntTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, IntTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getInt().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getInt().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getInt().requiredRegisters());
}
@Test
public void testLongWidth() {
- assertTrue(LongTypeLatticeElement.getInstance().isWidePrimitive());
- assertFalse(LongTypeLatticeElement.getInstance().isSinglePrimitive());
- assertEquals(2, LongTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getLong().isWidePrimitive());
+ assertFalse(TypeLatticeElement.getLong().isSinglePrimitive());
+ assertEquals(2, TypeLatticeElement.getLong().requiredRegisters());
}
@Test
@@ -87,8 +86,8 @@
@Test
public void testShortWidth() {
- assertTrue(ShortTypeLatticeElement.getInstance().isSinglePrimitive());
- assertFalse(ShortTypeLatticeElement.getInstance().isWidePrimitive());
- assertEquals(1, ShortTypeLatticeElement.getInstance().requiredRegisters());
+ assertTrue(TypeLatticeElement.getShort().isSinglePrimitive());
+ assertFalse(TypeLatticeElement.getShort().isWidePrimitive());
+ assertEquals(1, TypeLatticeElement.getShort().requiredRegisters());
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
index 8f9b876..e0465b3 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.ir.analysis.type;
import static com.android.tools.r8.ir.analysis.type.ClassTypeLatticeElement.computeLeastUpperBoundOfInterfaces;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.BOTTOM;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.TOP;
import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.fromDexType;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getBottom;
+import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.getTop;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -64,19 +64,19 @@
}
private TopTypeLatticeElement top() {
- return TypeLatticeElement.TOP;
+ return getTop();
}
private BottomTypeLatticeElement bottom() {
- return TypeLatticeElement.BOTTOM;
+ return getBottom();
}
private SinglePrimitiveTypeLatticeElement single() {
- return TypeLatticeElement.SINGLE;
+ return TypeLatticeElement.getSingle();
}
private WidePrimitiveTypeLatticeElement wide() {
- return TypeLatticeElement.WIDE;
+ return TypeLatticeElement.getWide();
}
private TypeLatticeElement element(DexType type) {
@@ -510,9 +510,7 @@
assertTrue(strictlyLessThan(
array(2, factory.objectType),
array(1, factory.objectType)));
- assertTrue(strictlyLessThan(
- ReferenceTypeLatticeElement.getNullTypeLatticeElement(),
- array(1, factory.classType)));
+ assertTrue(strictlyLessThan(TypeLatticeElement.getNull(), array(1, factory.classType)));
}
@Test
@@ -527,10 +525,10 @@
element(factory.objectType, Nullability.maybeNull())));
assertFalse(
lessThanOrEqualUpToNullability(array(3, factory.stringType), array(4, factory.stringType)));
- assertTrue(lessThanOrEqualUpToNullability(BOTTOM, element(factory.objectType)));
- assertFalse(lessThanOrEqualUpToNullability(element(factory.objectType), BOTTOM));
- assertFalse(lessThanOrEqualUpToNullability(TOP, element(factory.objectType)));
- assertTrue(lessThanOrEqualUpToNullability(element(factory.objectType), TOP));
+ assertTrue(lessThanOrEqualUpToNullability(getBottom(), element(factory.objectType)));
+ assertFalse(lessThanOrEqualUpToNullability(element(factory.objectType), getBottom()));
+ assertFalse(lessThanOrEqualUpToNullability(getTop(), element(factory.objectType)));
+ assertTrue(lessThanOrEqualUpToNullability(element(factory.objectType), getTop()));
}
@Test
@@ -545,10 +543,10 @@
assertFalse(lessThanOrEqual(nullableType, nonNullType));
// Check that the class-type null is also more specific than nullableType.
- assertTrue(strictlyLessThan(TypeLatticeElement.NULL, nullableType));
+ assertTrue(strictlyLessThan(TypeLatticeElement.getNull(), nullableType));
assertTrue(
strictlyLessThan(
- TypeLatticeElement.NULL,
+ TypeLatticeElement.getNull(),
nullableType.getOrCreateVariant(Nullability.definitelyNull())));
}
@@ -556,7 +554,7 @@
public void testNotNullOfNullGivesBottom() {
assertEquals(
Nullability.bottom(),
- ReferenceTypeLatticeElement.NULL.asMeetWithNotNull().nullability());
+ ReferenceTypeLatticeElement.getNull().asMeetWithNotNull().nullability());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/UnconstrainedPrimitiveTypeTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/UnconstrainedPrimitiveTypeTest.java
index 09c27ea..d08b323 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/UnconstrainedPrimitiveTypeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/UnconstrainedPrimitiveTypeTest.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.ir.analysis.type;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.INT;
-import static com.android.tools.r8.ir.analysis.type.TypeLatticeElement.LONG;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestParameters;
@@ -88,27 +86,32 @@
@Test
public void testUnconstrainedSingleWithNoUsers() throws Exception {
- buildAndCheckIR("unconstrainedSingleWithNoUsersTest", testInspector(INT, 1));
+ buildAndCheckIR(
+ "unconstrainedSingleWithNoUsersTest", testInspector(TypeLatticeElement.getInt(), 1));
}
@Test
public void testUnconstrainedSingleWithIfUser() throws Exception {
- buildAndCheckIR("unconstrainedSingleWithIfUserTest", testInspector(INT, 2));
+ buildAndCheckIR(
+ "unconstrainedSingleWithIfUserTest", testInspector(TypeLatticeElement.getInt(), 2));
}
@Test
public void testUnconstrainedSingleWithIfZeroUser() throws Exception {
- buildAndCheckIR("unconstrainedSingleWithIfZeroUserTest", testInspector(INT, 1));
+ buildAndCheckIR(
+ "unconstrainedSingleWithIfZeroUserTest", testInspector(IntTypeLatticeElement.getInt(), 1));
}
@Test
public void testUnconstrainedWideWithNoUsers() throws Exception {
- buildAndCheckIR("unconstrainedWideWithNoUsersTest", testInspector(LONG, 1));
+ buildAndCheckIR(
+ "unconstrainedWideWithNoUsersTest", testInspector(TypeLatticeElement.getLong(), 1));
}
@Test
public void testUnconstrainedWideWithIfUser() throws Exception {
- buildAndCheckIR("unconstrainedWideWithIfUserTest", testInspector(LONG, 2));
+ buildAndCheckIR(
+ "unconstrainedWideWithIfUserTest", testInspector(TypeLatticeElement.getLong(), 2));
}
private static Consumer<IRCode> testInspector(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
index 2d626a2..607839e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ConstantRemovalTest.java
@@ -76,14 +76,14 @@
IRMetadata metadata = IRMetadata.unknown();
Position position = Position.testingPosition();
- Value v3 = new Value(3, TypeLatticeElement.LONG, null);
+ Value v3 = new Value(3, TypeLatticeElement.getLong(), null);
v3.setNeedsRegister(true);
new MockLiveIntervals(v3);
Instruction instruction = new ConstNumber(v3, 0);
instruction.setPosition(position);
block.add(instruction, metadata);
- Value v0 = new Value(0, TypeLatticeElement.LONG, null);
+ Value v0 = new Value(0, TypeLatticeElement.getLong(), null);
v0.setNeedsRegister(true);
new MockLiveIntervals(v0);
instruction = new ConstNumber(v0, 10);
@@ -94,14 +94,14 @@
instruction.setPosition(position);
block.add(instruction, metadata);
- Value v2 = new Value(2, TypeLatticeElement.INT, null);
+ Value v2 = new Value(2, TypeLatticeElement.getInt(), null);
v2.setNeedsRegister(true);
new MockLiveIntervals(v2);
instruction = new ConstNumber(v2, 10);
instruction.setPosition(position);
block.add(instruction, metadata);
- Value v1 = new Value(1, TypeLatticeElement.INT, null);
+ Value v1 = new Value(1, TypeLatticeElement.getInt(), null);
v1.setNeedsRegister(true);
new MockLiveIntervals(v1);
instruction = new Move(v1 ,v2);
@@ -112,7 +112,7 @@
instruction.setPosition(position);
block.add(instruction, metadata);
- Value v0_2 = new Value(0, TypeLatticeElement.LONG, null);
+ Value v0_2 = new Value(0, TypeLatticeElement.getLong(), null);
v0_2.setNeedsRegister(true);
new MockLiveIntervals(v0_2);
instruction = new ConstNumber(v0_2, 10);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
index 0083b33..5d48fa6 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/TrivialGotoEliminationTest.java
@@ -59,7 +59,7 @@
block2.setFilledForTesting();
BasicBlock block1 = new BasicBlock();
block1.setNumber(1);
- Value value = new Value(0, TypeLatticeElement.INT, null);
+ Value value = new Value(0, TypeLatticeElement.getInt(), null);
Instruction number = new ConstNumber(value, 0);
number.setPosition(position);
block1.add(number, metadata);
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
index d5a89c8..00ee4e7 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/IdenticalAfterRegisterAllocationTest.java
@@ -65,13 +65,13 @@
@Test
public void equalityOfConstantOperands() {
RegisterAllocator allocator = new MockRegisterAllocator();
- Value value0 = new Value(0, TypeLatticeElement.INT, null);
+ Value value0 = new Value(0, TypeLatticeElement.getInt(), null);
ConstNumber const0 = new ConstNumber(value0, 0);
- Value value1 = new Value(1, TypeLatticeElement.INT, null);
+ Value value1 = new Value(1, TypeLatticeElement.getInt(), null);
ConstNumber const1 = new ConstNumber(value1, 1);
- Value value2 = new Value(2, TypeLatticeElement.INT, null);
+ Value value2 = new Value(2, TypeLatticeElement.getInt(), null);
ConstNumber const2 = new ConstNumber(value2, 2);
- Value value3 = new Value(2, TypeLatticeElement.INT, null);
+ Value value3 = new Value(2, TypeLatticeElement.getInt(), null);
Add add0 = new Add(NumericType.INT, value3, value0, value1);
add0.setPosition(Position.none());
Add add1 = new Add(NumericType.INT, value3, value0, value2);
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
index a449c5d..f88783d 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
@@ -161,8 +161,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.INT));
- scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.INT));
+ scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.getInt()));
+ scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.getInt()));
scheduler.schedule();
assertEquals(3, moves.size());
Move tempMove = moves.get(0);
@@ -186,8 +186,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(2, 0, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(2, 0, TypeLatticeElement.getLong()));
scheduler.schedule();
assertEquals(3, moves.size());
Move tempMove = moves.get(0);
@@ -211,8 +211,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.INT));
+ scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.getInt()));
scheduler.schedule();
assertEquals(3, moves.size());
Move tempMove = moves.get(0).asMove();
@@ -236,8 +236,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.INT));
- scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.getInt()));
+ scheduler.addMove(new RegisterMove(1, 0, TypeLatticeElement.getLong()));
scheduler.schedule();
assertEquals(3, moves.size());
Move tempMove = moves.get(0).asMove();
@@ -261,8 +261,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(2, 3, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(0, 1, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(2, 3, TypeLatticeElement.getLong()));
scheduler.schedule();
assertEquals(2, moves.size());
Move firstMove = moves.get(0).asMove();
@@ -280,8 +280,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(2, 1, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(0, 3, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(2, 1, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(0, 3, TypeLatticeElement.getLong()));
scheduler.schedule();
assertEquals(3, moves.size());
Move firstMove = moves.get(0).asMove();
@@ -303,9 +303,9 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(2, 0, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.INT));
- scheduler.addMove(new RegisterMove(1, 3, TypeLatticeElement.INT));
+ scheduler.addMove(new RegisterMove(2, 0, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.getInt()));
+ scheduler.addMove(new RegisterMove(1, 3, TypeLatticeElement.getInt()));
scheduler.schedule();
assertEquals(4, moves.size());
Move firstMove = moves.get(0).asMove();
@@ -327,8 +327,8 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(3, 0, TypeLatticeElement.INT));
+ scheduler.addMove(new RegisterMove(0, 2, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(3, 0, TypeLatticeElement.getInt()));
scheduler.schedule();
assertEquals(3, moves.size());
Move firstMove = moves.get(0).asMove();
@@ -350,10 +350,10 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(14, 11, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(16, 13, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(10, 17, TypeLatticeElement.LONG));
- scheduler.addMove(new RegisterMove(12, 19, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(14, 11, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(16, 13, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(10, 17, TypeLatticeElement.getLong()));
+ scheduler.addMove(new RegisterMove(12, 19, TypeLatticeElement.getLong()));
scheduler.schedule();
// In order to resolve these moves, we need to use two temporary register pairs.
assertEquals(6, moves.size());
@@ -375,10 +375,10 @@
CollectMovesIterator moves = new CollectMovesIterator();
int temp = 42;
RegisterMoveScheduler scheduler = new RegisterMoveScheduler(moves, temp);
- scheduler.addMove(new RegisterMove(26, 22, TypeLatticeElement.INT));
- scheduler.addMove(new RegisterMove(29, 24, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(26, 22, TypeLatticeElement.getInt()));
+ scheduler.addMove(new RegisterMove(29, 24, TypeLatticeElement.getLong()));
scheduler.addMove(new RegisterMove(28, 26, objectType));
- scheduler.addMove(new RegisterMove(23, 28, TypeLatticeElement.LONG));
+ scheduler.addMove(new RegisterMove(23, 28, TypeLatticeElement.getLong()));
scheduler.schedule();
// For this example we need recursive unblocking.
assertEquals(6, moves.size());
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/Regress68656641.java b/src/test/java/com/android/tools/r8/ir/regalloc/Regress68656641.java
index a5183d3..4700a44 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/Regress68656641.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/Regress68656641.java
@@ -63,20 +63,19 @@
// Setup live an inactive live interval with ranges [0, 10[ and [20, 30[ with only
// uses in the first interval and which is linked to another interval.
LiveIntervals inactiveIntervals =
- new LiveIntervals(new Value(0, TypeLatticeElement.INT, null));
+ new LiveIntervals(new Value(0, TypeLatticeElement.getInt(), null));
inactiveIntervals.addRange(new LiveRange(0, 10));
inactiveIntervals.addUse(new LiveIntervalsUse(0, 10));
inactiveIntervals.addUse(new LiveIntervalsUse(4, 10));
inactiveIntervals.addRange(new LiveRange(20, 30));
inactiveIntervals.setRegister(0);
- LiveIntervals linked =
- new LiveIntervals(new Value(1, TypeLatticeElement.INT, null));
+ LiveIntervals linked = new LiveIntervals(new Value(1, TypeLatticeElement.getInt(), null));
linked.setRegister(1);
inactiveIntervals.link(linked);
allocator.addInactiveIntervals(inactiveIntervals);
// Setup an unhandled interval that overlaps the inactive interval.
LiveIntervals unhandledIntervals =
- new LiveIntervals(new Value(2, TypeLatticeElement.INT, null));
+ new LiveIntervals(new Value(2, TypeLatticeElement.getInt(), null));
unhandledIntervals.addRange(new LiveRange(12, 24));
// Split the overlapping inactive intervals and check that after the split, the second
// part of the inactive interval is unhandled and will therefore get a new register