Fix redundant uses of toArrayType
Change-Id: I7f21ba98483eb011dc2c6d201cb879c7d5034a93
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index e625d5a..739a874 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -815,7 +815,7 @@
addInstruction(new CfConstNumber(operand, ValueType.INT));
break;
case Opcodes.NEWARRAY:
- addInstruction(new CfNewArray(arrayTypeDesc(operand, factory).toArrayType(factory)));
+ addInstruction(new CfNewArray(arrayTypeDesc(operand, factory)));
break;
default:
throw new Unreachable("Unexpected int opcode " + opcode);
@@ -825,21 +825,21 @@
private static DexType arrayTypeDesc(int arrayTypeCode, DexItemFactory factory) {
switch (arrayTypeCode) {
case Opcodes.T_BOOLEAN:
- return factory.booleanType;
+ return factory.booleanArrayType;
case Opcodes.T_CHAR:
- return factory.charType;
+ return factory.charArrayType;
case Opcodes.T_FLOAT:
- return factory.floatType;
+ return factory.floatArrayType;
case Opcodes.T_DOUBLE:
- return factory.doubleType;
+ return factory.doubleArrayType;
case Opcodes.T_BYTE:
- return factory.byteType;
+ return factory.byteArrayType;
case Opcodes.T_SHORT:
- return factory.shortType;
+ return factory.shortArrayType;
case Opcodes.T_INT:
- return factory.intType;
+ return factory.intArrayType;
case Opcodes.T_LONG:
- return factory.longType;
+ return factory.longArrayType;
default:
throw new Unreachable("Unexpected array-type code " + arrayTypeCode);
}
@@ -886,27 +886,31 @@
@Override
public void visitTypeInsn(int opcode, String typeName) {
- DexType type = factory.createType(Type.getObjectType(typeName).getDescriptor());
- switch (opcode) {
- case Opcodes.NEW:
- // A label is only required if this uninitialized-new instance flows into a frame.
- CfNew cfNew = new CfNew(type, currentLabel);
- if (cfNew.hasLabel()) {
- labelToNewMap.put(cfNew.getLabel(), cfNew);
- }
- addInstruction(cfNew);
- break;
- case Opcodes.ANEWARRAY:
- addInstruction(new CfNewArray(type.toArrayType(factory)));
- break;
- case Opcodes.CHECKCAST:
- addInstruction(new CfCheckCast(type));
- break;
- case Opcodes.INSTANCEOF:
- addInstruction(new CfInstanceOf(type));
- break;
- default:
- throw new Unreachable("Unexpected TypeInsn opcode: " + opcode);
+ String descriptor = Type.getObjectType(typeName).getDescriptor();
+ if (opcode == Opcodes.ANEWARRAY) {
+ String arrayDescriptor = DescriptorUtils.toArrayDescriptor(1, descriptor);
+ DexType arrayType = factory.createType(arrayDescriptor);
+ addInstruction(new CfNewArray(arrayType));
+ } else {
+ DexType type = factory.createType(descriptor);
+ switch (opcode) {
+ case Opcodes.NEW:
+ // A label is only required if this uninitialized-new instance flows into a frame.
+ CfNew cfNew = new CfNew(type, currentLabel);
+ if (cfNew.hasLabel()) {
+ labelToNewMap.put(cfNew.getLabel(), cfNew);
+ }
+ addInstruction(cfNew);
+ break;
+ case Opcodes.CHECKCAST:
+ addInstruction(new CfCheckCast(type));
+ break;
+ case Opcodes.INSTANCEOF:
+ addInstruction(new CfInstanceOf(type));
+ break;
+ default:
+ throw new Unreachable("Unexpected TypeInsn opcode: " + opcode);
+ }
}
}