Merge "Refine type information for MemberType and remove unneeded type from ConstNumber."
diff --git a/src/main/java/com/android/tools/r8/code/Aget.java b/src/main/java/com/android/tools/r8/code/Aget.java
index db3d77c..063df5e 100644
--- a/src/main/java/com/android/tools/r8/code/Aget.java
+++ b/src/main/java/com/android/tools/r8/code/Aget.java
@@ -37,7 +37,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addArrayGet(MemberType.SINGLE, AA, BB, CC);
+ builder.addArrayGet(MemberType.INT_OR_FLOAT, AA, BB, CC);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/AgetWide.java b/src/main/java/com/android/tools/r8/code/AgetWide.java
index 904b37c..64c645d 100644
--- a/src/main/java/com/android/tools/r8/code/AgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/AgetWide.java
@@ -37,7 +37,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addArrayGet(MemberType.WIDE, AA, BB, CC);
+ builder.addArrayGet(MemberType.LONG_OR_DOUBLE, AA, BB, CC);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/Aput.java b/src/main/java/com/android/tools/r8/code/Aput.java
index db12a55..65e0721 100644
--- a/src/main/java/com/android/tools/r8/code/Aput.java
+++ b/src/main/java/com/android/tools/r8/code/Aput.java
@@ -37,7 +37,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addArrayPut(MemberType.SINGLE, AA, BB, CC);
+ builder.addArrayPut(MemberType.INT_OR_FLOAT, AA, BB, CC);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/AputWide.java b/src/main/java/com/android/tools/r8/code/AputWide.java
index eab00b9..286dfff 100644
--- a/src/main/java/com/android/tools/r8/code/AputWide.java
+++ b/src/main/java/com/android/tools/r8/code/AputWide.java
@@ -37,7 +37,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addArrayPut(MemberType.WIDE, AA, BB, CC);
+ builder.addArrayPut(MemberType.LONG_OR_DOUBLE, AA, BB, CC);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/Iget.java b/src/main/java/com/android/tools/r8/code/Iget.java
index c08ec43..65ebb44 100644
--- a/src/main/java/com/android/tools/r8/code/Iget.java
+++ b/src/main/java/com/android/tools/r8/code/Iget.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class Iget extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.SINGLE, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetBoolean.java b/src/main/java/com/android/tools/r8/code/IgetBoolean.java
index 02b3e27..756969c 100644
--- a/src/main/java/com/android/tools/r8/code/IgetBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/IgetBoolean.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetBoolean extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.BOOLEAN, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetByte.java b/src/main/java/com/android/tools/r8/code/IgetByte.java
index 5ac4379..56a239a 100644
--- a/src/main/java/com/android/tools/r8/code/IgetByte.java
+++ b/src/main/java/com/android/tools/r8/code/IgetByte.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetByte extends Format22c {
@@ -49,7 +48,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.BYTE, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetChar.java b/src/main/java/com/android/tools/r8/code/IgetChar.java
index ff57556..ad9c44e 100644
--- a/src/main/java/com/android/tools/r8/code/IgetChar.java
+++ b/src/main/java/com/android/tools/r8/code/IgetChar.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetChar extends Format22c {
@@ -49,7 +48,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.CHAR, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetObject.java b/src/main/java/com/android/tools/r8/code/IgetObject.java
index 80b9557..d0c7c00 100644
--- a/src/main/java/com/android/tools/r8/code/IgetObject.java
+++ b/src/main/java/com/android/tools/r8/code/IgetObject.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetObject extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.OBJECT, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetShort.java b/src/main/java/com/android/tools/r8/code/IgetShort.java
index bd38b45..75a9752 100644
--- a/src/main/java/com/android/tools/r8/code/IgetShort.java
+++ b/src/main/java/com/android/tools/r8/code/IgetShort.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetShort extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.SHORT, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IgetWide.java b/src/main/java/com/android/tools/r8/code/IgetWide.java
index e3caef5..9893911 100644
--- a/src/main/java/com/android/tools/r8/code/IgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/IgetWide.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IgetWide extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstanceGet(MemberType.WIDE, A, B, getField());
+ builder.addInstanceGet(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/Iput.java b/src/main/java/com/android/tools/r8/code/Iput.java
index 60aa07c..eabfb2b 100644
--- a/src/main/java/com/android/tools/r8/code/Iput.java
+++ b/src/main/java/com/android/tools/r8/code/Iput.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class Iput extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.SINGLE, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputBoolean.java b/src/main/java/com/android/tools/r8/code/IputBoolean.java
index 0841906..6276441 100644
--- a/src/main/java/com/android/tools/r8/code/IputBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/IputBoolean.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputBoolean extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.BOOLEAN, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputByte.java b/src/main/java/com/android/tools/r8/code/IputByte.java
index 1efb7f4..e333a9f 100644
--- a/src/main/java/com/android/tools/r8/code/IputByte.java
+++ b/src/main/java/com/android/tools/r8/code/IputByte.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputByte extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.BYTE, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputChar.java b/src/main/java/com/android/tools/r8/code/IputChar.java
index d2c3475..f4902ee 100644
--- a/src/main/java/com/android/tools/r8/code/IputChar.java
+++ b/src/main/java/com/android/tools/r8/code/IputChar.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputChar extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.CHAR, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputObject.java b/src/main/java/com/android/tools/r8/code/IputObject.java
index 3cad323..7532340 100644
--- a/src/main/java/com/android/tools/r8/code/IputObject.java
+++ b/src/main/java/com/android/tools/r8/code/IputObject.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputObject extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.OBJECT, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputShort.java b/src/main/java/com/android/tools/r8/code/IputShort.java
index dcbe3aa..f0d4308 100644
--- a/src/main/java/com/android/tools/r8/code/IputShort.java
+++ b/src/main/java/com/android/tools/r8/code/IputShort.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputShort extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.SHORT, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/IputWide.java b/src/main/java/com/android/tools/r8/code/IputWide.java
index 661d972..68d09a6 100644
--- a/src/main/java/com/android/tools/r8/code/IputWide.java
+++ b/src/main/java/com/android/tools/r8/code/IputWide.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class IputWide extends Format22c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addInstancePut(MemberType.WIDE, A, B, getField());
+ builder.addInstancePut(A, B, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/MoveResult.java b/src/main/java/com/android/tools/r8/code/MoveResult.java
index 6b75941..cd9eb78 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResult.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResult.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.code;
-import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class MoveResult extends Format11x {
@@ -36,6 +35,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addMoveResult(ValueType.INT_OR_FLOAT, AA);
+ builder.addMoveResult(AA);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/MoveResultObject.java b/src/main/java/com/android/tools/r8/code/MoveResultObject.java
index a3334b8..3210b71 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResultObject.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResultObject.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.code;
-import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class MoveResultObject extends Format11x {
@@ -37,6 +36,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addMoveResult(ValueType.OBJECT, AA);
+ builder.addMoveResult(AA);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/MoveResultWide.java b/src/main/java/com/android/tools/r8/code/MoveResultWide.java
index 92dde3e..95b4350 100644
--- a/src/main/java/com/android/tools/r8/code/MoveResultWide.java
+++ b/src/main/java/com/android/tools/r8/code/MoveResultWide.java
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.code;
-import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class MoveResultWide extends Format11x {
@@ -37,6 +36,6 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addMoveResult(ValueType.LONG_OR_DOUBLE, AA);
+ builder.addMoveResult(AA);
}
}
diff --git a/src/main/java/com/android/tools/r8/code/Sget.java b/src/main/java/com/android/tools/r8/code/Sget.java
index 0a0f95b..3347fdd 100644
--- a/src/main/java/com/android/tools/r8/code/Sget.java
+++ b/src/main/java/com/android/tools/r8/code/Sget.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class Sget extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.SINGLE, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetBoolean.java b/src/main/java/com/android/tools/r8/code/SgetBoolean.java
index c28b97c..27f18f2 100644
--- a/src/main/java/com/android/tools/r8/code/SgetBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/SgetBoolean.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetBoolean extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.BOOLEAN, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetByte.java b/src/main/java/com/android/tools/r8/code/SgetByte.java
index 360fe32..3c0219b 100644
--- a/src/main/java/com/android/tools/r8/code/SgetByte.java
+++ b/src/main/java/com/android/tools/r8/code/SgetByte.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetByte extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.BYTE, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetChar.java b/src/main/java/com/android/tools/r8/code/SgetChar.java
index 52f8fde..aa69c7f 100644
--- a/src/main/java/com/android/tools/r8/code/SgetChar.java
+++ b/src/main/java/com/android/tools/r8/code/SgetChar.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetChar extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.CHAR, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetObject.java b/src/main/java/com/android/tools/r8/code/SgetObject.java
index d2bb253..f70da49 100644
--- a/src/main/java/com/android/tools/r8/code/SgetObject.java
+++ b/src/main/java/com/android/tools/r8/code/SgetObject.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetObject extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.OBJECT, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetShort.java b/src/main/java/com/android/tools/r8/code/SgetShort.java
index 50ec9e4..0149fb4 100644
--- a/src/main/java/com/android/tools/r8/code/SgetShort.java
+++ b/src/main/java/com/android/tools/r8/code/SgetShort.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetShort extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.SHORT, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SgetWide.java b/src/main/java/com/android/tools/r8/code/SgetWide.java
index 81f11a7..ea008ad 100644
--- a/src/main/java/com/android/tools/r8/code/SgetWide.java
+++ b/src/main/java/com/android/tools/r8/code/SgetWide.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SgetWide extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticGet(MemberType.WIDE, AA, getField());
+ builder.addStaticGet(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/Sput.java b/src/main/java/com/android/tools/r8/code/Sput.java
index da52b63..6885da6 100644
--- a/src/main/java/com/android/tools/r8/code/Sput.java
+++ b/src/main/java/com/android/tools/r8/code/Sput.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class Sput extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.SINGLE, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputBoolean.java b/src/main/java/com/android/tools/r8/code/SputBoolean.java
index 4777e90..041ba02 100644
--- a/src/main/java/com/android/tools/r8/code/SputBoolean.java
+++ b/src/main/java/com/android/tools/r8/code/SputBoolean.java
@@ -3,8 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.code;
-import static com.android.tools.r8.ir.code.MemberType.BOOLEAN;
-
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
@@ -51,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(BOOLEAN, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputByte.java b/src/main/java/com/android/tools/r8/code/SputByte.java
index 803a3ea..87b79bd 100644
--- a/src/main/java/com/android/tools/r8/code/SputByte.java
+++ b/src/main/java/com/android/tools/r8/code/SputByte.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SputByte extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.BYTE, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputChar.java b/src/main/java/com/android/tools/r8/code/SputChar.java
index 23a5ff4..5fcd836 100644
--- a/src/main/java/com/android/tools/r8/code/SputChar.java
+++ b/src/main/java/com/android/tools/r8/code/SputChar.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SputChar extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.CHAR, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputObject.java b/src/main/java/com/android/tools/r8/code/SputObject.java
index 016e80d..fa661ea 100644
--- a/src/main/java/com/android/tools/r8/code/SputObject.java
+++ b/src/main/java/com/android/tools/r8/code/SputObject.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SputObject extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.OBJECT, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputShort.java b/src/main/java/com/android/tools/r8/code/SputShort.java
index 641fdaf..d2b5f85 100644
--- a/src/main/java/com/android/tools/r8/code/SputShort.java
+++ b/src/main/java/com/android/tools/r8/code/SputShort.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SputShort extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.SHORT, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/code/SputWide.java b/src/main/java/com/android/tools/r8/code/SputWide.java
index d9a743b..7e6aeaa 100644
--- a/src/main/java/com/android/tools/r8/code/SputWide.java
+++ b/src/main/java/com/android/tools/r8/code/SputWide.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.OffsetToObjectMapping;
import com.android.tools.r8.graph.UseRegistry;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
public class SputWide extends Format21c {
@@ -50,7 +49,7 @@
@Override
public void buildIR(IRBuilder builder) {
- builder.addStaticPut(MemberType.WIDE, AA, getField());
+ builder.addStaticPut(AA, getField());
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 7aab880..5aaf308 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -303,6 +303,10 @@
return (char) descriptor.content[0] == 'V';
}
+ public boolean isBooleanType() {
+ return descriptor.content[0] == 'Z';
+ }
+
public boolean isArrayType() {
char firstChar = (char) descriptor.content[0];
return firstChar == '[';
diff --git a/src/main/java/com/android/tools/r8/graph/DexValue.java b/src/main/java/com/android/tools/r8/graph/DexValue.java
index 48dc873..2b00623 100644
--- a/src/main/java/com/android/tools/r8/graph/DexValue.java
+++ b/src/main/java/com/android/tools/r8/graph/DexValue.java
@@ -9,7 +9,6 @@
import com.android.tools.r8.dex.MixedSectionCollection;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.ir.code.ConstNumber;
-import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.code.Instruction;
import com.android.tools.r8.ir.code.Value;
import com.android.tools.r8.utils.EncodedValueUtils;
@@ -232,9 +231,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.INT, dest, value);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
}
}
@@ -280,9 +277,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.INT, dest, value);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
}
}
@@ -332,9 +327,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.INT, dest, value);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
}
}
@@ -380,9 +373,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.INT, dest, value);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
}
}
@@ -428,9 +419,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.LONG, dest, value);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value);
}
}
@@ -867,9 +856,7 @@
@Override
public Instruction asConstInstruction(boolean hasClassInitializer, Value dest) {
- return (this == DEFAULT && hasClassInitializer)
- ? null
- : new ConstNumber(ValueType.INT, dest, value ? 1 : 0);
+ return (this == DEFAULT && hasClassInitializer) ? null : new ConstNumber(dest, value ? 1 : 0);
}
}
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 957c092..14a2a98 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
@@ -61,26 +61,26 @@
int right = rightValue().getConstInstruction().asConstNumber().getIntValue();
int result = foldIntegers(left, right);
Value value = code.createValue(ValueType.INT, getLocalInfo());
- return new ConstNumber(ValueType.INT, value, result);
+ return new ConstNumber(value, result);
} else if (type == NumericType.LONG) {
long left = leftValue().getConstInstruction().asConstNumber().getLongValue();
long right = rightValue().getConstInstruction().asConstNumber().getLongValue();
long result = foldLongs(left, right);
Value value = code.createValue(ValueType.LONG, getLocalInfo());
- return new ConstNumber(ValueType.LONG, value, result);
+ return new ConstNumber(value, result);
} else if (type == NumericType.FLOAT) {
float left = leftValue().getConstInstruction().asConstNumber().getFloatValue();
float right = rightValue().getConstInstruction().asConstNumber().getFloatValue();
float result = foldFloat(left, right);
Value value = code.createValue(ValueType.FLOAT, getLocalInfo());
- return new ConstNumber(ValueType.FLOAT, value, Float.floatToIntBits(result));
+ return new ConstNumber(value, Float.floatToIntBits(result));
} else {
assert type == NumericType.DOUBLE;
double left = leftValue().getConstInstruction().asConstNumber().getDoubleValue();
double right = rightValue().getConstInstruction().asConstNumber().getDoubleValue();
double result = foldDouble(left, right);
Value value = code.createValue(ValueType.DOUBLE, getLocalInfo());
- return new ConstNumber(ValueType.DOUBLE, value, Double.doubleToLongBits(result));
+ return new ConstNumber(value, Double.doubleToLongBits(result));
}
}
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 ee1db81..e0aa965 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
@@ -47,10 +47,14 @@
int index = builder.allocatedRegister(index(), getNumber());
com.android.tools.r8.code.Instruction instruction;
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Aget(dest, array, index);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new AgetWide(dest, array, index);
break;
case OBJECT:
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 32b03f4..55b71ec 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
@@ -49,10 +49,14 @@
int index = builder.allocatedRegister(index(), getNumber());
com.android.tools.r8.code.Instruction instruction;
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Aput(source, array, index);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new AputWide(source, array, index);
break;
case OBJECT:
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 a39e268..dc77691 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
@@ -181,7 +181,7 @@
}
assert result == -1 || result == 0 || result == 1;
Value value = code.createValue(ValueType.INT, getLocalInfo());
- return new ConstNumber(ValueType.INT, value, result);
+ return new ConstNumber(value, result);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java b/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
index fa49996..ba5c27f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstNumber.java
@@ -20,27 +20,25 @@
public class ConstNumber extends ConstInstruction {
- public final ValueType type;
private final long value;
- public ConstNumber(ValueType type, Value dest, long value) {
+ public ConstNumber(Value dest, long value) {
super(dest);
// We create const numbers after register allocation for rematerialization of values. Those
// are all for fixed register values. All other values that are used as the destination for
// const number instructions should be marked as constants.
assert dest.isFixedRegisterValue() || dest.definition.isConstNumber();
- this.type = type;
this.value = value;
}
public static ConstNumber copyOf(IRCode code, ConstNumber original) {
Value newValue =
new Value(code.valueNumberGenerator.next(), original.outType(), original.getLocalInfo());
- return new ConstNumber(original.type, newValue, original.getRawValue());
+ return new ConstNumber(newValue, original.getRawValue());
}
private boolean preciseTypeUnknown() {
- return type == ValueType.INT_OR_FLOAT || type == ValueType.LONG_OR_DOUBLE;
+ return outType() == ValueType.INT_OR_FLOAT || outType() == ValueType.LONG_OR_DOUBLE;
}
public Value dest() {
@@ -52,22 +50,24 @@
}
public int getIntValue() {
- assert type == ValueType.INT || type == ValueType.INT_OR_FLOAT || type == ValueType.OBJECT;
+ assert outType() == ValueType.INT
+ || outType() == ValueType.INT_OR_FLOAT
+ || outType() == ValueType.OBJECT;
return (int) value;
}
public long getLongValue() {
- assert type == ValueType.LONG || type == ValueType.LONG_OR_DOUBLE;
+ assert outType() == ValueType.LONG || outType() == ValueType.LONG_OR_DOUBLE;
return value;
}
public float getFloatValue() {
- assert type == ValueType.FLOAT || type == ValueType.INT_OR_FLOAT;
+ assert outType() == ValueType.FLOAT || outType() == ValueType.INT_OR_FLOAT;
return Float.intBitsToFloat((int) value);
}
public double getDoubleValue() {
- assert type == ValueType.DOUBLE || type == ValueType.LONG_OR_DOUBLE;
+ assert outType() == ValueType.DOUBLE || outType() == ValueType.LONG_OR_DOUBLE;
return Double.longBitsToDouble(value);
}
@@ -80,11 +80,11 @@
}
public boolean isIntegerZero() {
- return type == ValueType.INT && getIntValue() == 0;
+ return outType() == ValueType.INT && getIntValue() == 0;
}
public boolean isIntegerOne() {
- return type == ValueType.INT && getIntValue() == 1;
+ return outType() == ValueType.INT && getIntValue() == 1;
}
public boolean isIntegerNegativeOne(NumericType type) {
@@ -104,7 +104,7 @@
}
int register = builder.allocatedRegister(dest(), getNumber());
- if (type.isSingle() || type.isObject()) {
+ if (outType().isSingle() || outType().isObject()) {
assert NumberUtils.is32Bit(value);
if ((register & 0xf) == register && NumberUtils.is4Bit(value)) {
builder.add(this, new Const4(register, (int) value));
@@ -116,7 +116,7 @@
builder.add(this, new Const(register, (int) value));
}
} else {
- assert type.isWide();
+ assert outType().isWide();
if (NumberUtils.is16Bit(value)) {
builder.add(this, new ConstWide16(register, (int) value));
} else if ((value & 0x0000ffffffffffffL) == 0) {
@@ -179,7 +179,7 @@
@Override
public String toString() {
- return super.toString() + " " + value + " (" + type + ")";
+ return super.toString() + " " + value + " (" + outType() + ")";
}
@Override
@@ -188,14 +188,14 @@
return false;
}
ConstNumber o = other.asConstNumber();
- return o.type == type && o.value == value;
+ return o.outType() == outType() && o.value == value;
}
@Override
public int compareNonValueParts(Instruction other) {
ConstNumber o = other.asConstNumber();
int result;
- result = type.ordinal() - o.type.ordinal();
+ result = outType().ordinal() - o.outType().ordinal();
if (result != 0) {
return result;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
index fb86708..565204f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
@@ -17,8 +17,8 @@
*/
public class DebugLocalUninitialized extends ConstNumber {
- public DebugLocalUninitialized(ValueType type, Value value) {
- super(type == ValueType.OBJECT ? ValueType.INT : type, value, 0);
+ public DebugLocalUninitialized(Value value) {
+ super(value, 0);
}
@Override
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 490370e..95dd4ba 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
@@ -482,15 +482,15 @@
}
public ConstNumber createIntConstant(int value) {
- return new ConstNumber(ValueType.INT, createValue(ValueType.INT), value);
+ return new ConstNumber(createValue(ValueType.INT), value);
}
public ConstNumber createTrue() {
- return new ConstNumber(ValueType.INT, createValue(ValueType.INT), 1);
+ return new ConstNumber(createValue(ValueType.INT), 1);
}
public ConstNumber createFalse() {
- return new ConstNumber(ValueType.INT, createValue(ValueType.INT), 0);
+ return new ConstNumber(createValue(ValueType.INT), 0);
}
public final int getHighestBlockNumber() {
@@ -498,8 +498,7 @@
}
public Instruction createConstNull(Instruction from) {
- Value newValue = createValue(from.outType());
- return new ConstNumber(from.outType(), newValue, 0);
+ return new ConstNumber(createValue(from.outType()), 0);
}
public boolean doAllThrowingInstructionsHavePositions() {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
index bebbea1..e1bc063 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
@@ -40,10 +40,14 @@
int objectRegister = builder.allocatedRegister(object(), getNumber());
com.android.tools.r8.code.Instruction instruction;
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Iget(destRegister, objectRegister, field);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new IgetWide(destRegister, objectRegister, field);
break;
case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
index 25cb64b..eae9e68 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
@@ -40,10 +40,14 @@
int valueRegister = builder.allocatedRegister(value(), getNumber());
int objectRegister = builder.allocatedRegister(object(), getNumber());
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Iput(valueRegister, objectRegister, field);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new IputWide(valueRegister, objectRegister, field);
break;
case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/Invoke.java b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
index e33cce9..ba10ed5 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Invoke.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
@@ -79,6 +79,8 @@
abstract public Type getType();
+ abstract public DexType getReturnType();
+
public List<Value> arguments() {
return inValues;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
index adbb602..9db800a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
@@ -22,6 +22,11 @@
this.callSite = callSite;
}
+ @Override
+ public DexType getReturnType() {
+ return callSite.methodProto.returnType;
+ }
+
public DexCallSite getCallSite() {
return callSite;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
index ff4d876..0fd4804 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
@@ -24,6 +24,11 @@
this.method = target;
}
+ @Override
+ public DexType getReturnType() {
+ return method.proto.returnType;
+ }
+
public DexMethod getInvokedMethod() {
return method;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
index 5251e20..17f06e7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeNewArray.java
@@ -21,6 +21,11 @@
this.type = type;
}
+ @Override
+ public DexType getReturnType() {
+ return getArrayType();
+ }
+
public DexType getArrayType() {
return type;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java b/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
index 126bfd2..4b35d87 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokePolymorphic.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProto;
+import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.conversion.DexBuilder;
import com.android.tools.r8.ir.optimize.Inliner.InlineAction;
import com.android.tools.r8.ir.optimize.InliningOracle;
@@ -24,6 +25,11 @@
}
@Override
+ public DexType getReturnType() {
+ return proto.returnType;
+ }
+
+ @Override
public Type getType() {
return Type.POLYMORPHIC;
}
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 2481025..5b19aab 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
@@ -38,7 +38,7 @@
int right = rightValue().getConstInstruction().asConstNumber().getIntValue();
int result = foldIntegers(left, right);
Value value = code.createValue(ValueType.INT, getLocalInfo());
- return new ConstNumber(ValueType.INT, value, result);
+ return new ConstNumber(value, result);
} else {
assert type == NumericType.LONG;
long left = leftValue().getConstInstruction().asConstNumber().getLongValue();
@@ -51,7 +51,7 @@
}
long result = foldLongs(left, right);
Value value = code.createValue(ValueType.LONG, getLocalInfo());
- return new ConstNumber(ValueType.LONG, value, result);
+ return new ConstNumber(value, result);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/MemberType.java b/src/main/java/com/android/tools/r8/ir/code/MemberType.java
index 28ae7ac..fc50049 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MemberType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MemberType.java
@@ -9,50 +9,39 @@
import com.android.tools.r8.graph.DexType;
public enum MemberType {
- SINGLE,
- WIDE,
OBJECT,
BOOLEAN,
BYTE,
CHAR,
- SHORT;
-
- public static ValueType moveTypeFor(MemberType type) {
- switch (type) {
- case BOOLEAN:
- case BYTE:
- case CHAR:
- case SHORT:
- return ValueType.INT;
- case SINGLE:
- return ValueType.INT_OR_FLOAT;
- case WIDE:
- return ValueType.LONG_OR_DOUBLE;
- case OBJECT:
- return ValueType.OBJECT;
- }
- return null;
- }
+ SHORT,
+ INT,
+ FLOAT,
+ LONG,
+ DOUBLE,
+ INT_OR_FLOAT,
+ LONG_OR_DOUBLE;
public static MemberType fromTypeDescriptorChar(char descriptor) {
switch (descriptor) {
- case 'L': // object
- case '[': // array
+ case 'L':
+ case '[':
return MemberType.OBJECT;
- case 'Z': // boolean
+ case 'Z':
return MemberType.BOOLEAN;
- case 'B': // byte
+ case 'B':
return MemberType.BYTE;
- case 'S': // short
+ case 'S':
return MemberType.SHORT;
- case 'C': // char
+ case 'C':
return MemberType.CHAR;
- case 'I': // int
- case 'F': // float
- return MemberType.SINGLE;
- case 'J': // long
- case 'D': // double
- return MemberType.WIDE;
+ case 'I':
+ return MemberType.INT;
+ case 'F':
+ return MemberType.FLOAT;
+ case 'J':
+ return MemberType.LONG;
+ case 'D':
+ return MemberType.DOUBLE;
case 'V':
throw new InternalCompilerError("No member type for void type.");
default:
diff --git a/src/main/java/com/android/tools/r8/ir/code/Neg.java b/src/main/java/com/android/tools/r8/ir/code/Neg.java
index 9fb215f..5dfe0e7 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Neg.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Neg.java
@@ -33,20 +33,20 @@
if (type == NumericType.INT) {
int result = -source().getConstInstruction().asConstNumber().getIntValue();
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, result);
+ return new ConstNumber(value, result);
} else if (type == NumericType.LONG) {
long result = -source().getConstInstruction().asConstNumber().getLongValue();
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, result);
+ return new ConstNumber(value, result);
} else if (type == NumericType.FLOAT) {
float result = -source().getConstInstruction().asConstNumber().getFloatValue();
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, Float.floatToIntBits(result));
+ return new ConstNumber(value, Float.floatToIntBits(result));
} else {
assert type == NumericType.DOUBLE;
double result = -source().getConstInstruction().asConstNumber().getDoubleValue();
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, Double.doubleToLongBits(result));
+ return new ConstNumber(value, Double.doubleToLongBits(result));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/Not.java b/src/main/java/com/android/tools/r8/ir/code/Not.java
index ec941c0..3333845 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Not.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Not.java
@@ -29,12 +29,12 @@
if (type == NumericType.INT) {
int result = ~(source().getConstInstruction().asConstNumber().getIntValue());
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, result);
+ return new ConstNumber(value, result);
} else {
assert type == NumericType.LONG;
long result = ~source().getConstInstruction().asConstNumber().getLongValue();
Value value = code.createValue(valueType, getLocalInfo());
- return new ConstNumber(valueType, value, result);
+ return new ConstNumber(value, result);
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
index af91d29..23069f2 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
@@ -36,10 +36,14 @@
com.android.tools.r8.code.Instruction instruction;
int dest = builder.allocatedRegister(dest(), getNumber());
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Sget(dest, field);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new SgetWide(dest, field);
break;
case OBJECT:
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
index 8a55361..fb3ab18 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
@@ -34,10 +34,14 @@
com.android.tools.r8.code.Instruction instruction;
int src = builder.allocatedRegister(inValue(), getNumber());
switch (type) {
- case SINGLE:
+ case INT:
+ case FLOAT:
+ case INT_OR_FLOAT:
instruction = new Sput(src, field);
break;
- case WIDE:
+ case LONG:
+ case DOUBLE:
+ case LONG_OR_DOUBLE:
instruction = new SputWide(src, field);
break;
case OBJECT:
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 231a82f..dd058f0 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
@@ -45,10 +45,17 @@
case BYTE:
case CHAR:
case SHORT:
+ case INT:
return ValueType.INT;
- case SINGLE:
+ case FLOAT:
+ return ValueType.FLOAT;
+ case INT_OR_FLOAT:
return ValueType.INT_OR_FLOAT;
- case WIDE:
+ case LONG:
+ return ValueType.LONG;
+ case DOUBLE:
+ return ValueType.DOUBLE;
+ case LONG_OR_DOUBLE:
return ValueType.LONG_OR_DOUBLE;
case OBJECT:
return ValueType.OBJECT;
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 68c3f08..e8e689c 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
@@ -587,7 +587,7 @@
}
Value value = writeRegister(register, type, ThrowingInfo.NO_THROW, null);
assert !value.hasLocalInfo();
- addInstruction(new DebugLocalUninitialized(type, value));
+ addInstruction(new DebugLocalUninitialized(value));
}
private void addDebugLocalWrite(ValueType type, int dest, Value in) {
@@ -778,7 +778,7 @@
public void addConst(ValueType type, int dest, long value) {
Value out = writeRegister(dest, type, ThrowingInfo.NO_THROW);
- ConstNumber instruction = new ConstNumber(type, out, value);
+ ConstNumber instruction = new ConstNumber(out, value);
assert !instruction.instructionTypeCanThrow();
add(instruction);
}
@@ -793,7 +793,7 @@
currentBlock.writeCurrentDefinition(dest, existing.outValue(), ThrowingInfo.NO_THROW);
} else {
Value out = writeRegister(dest, type, ThrowingInfo.NO_THROW);
- ConstNumber instruction = new ConstNumber(type, out, value);
+ ConstNumber instruction = new ConstNumber(out, value);
BasicBlock entryBlock = blocks.get(0);
if (currentBlock != entryBlock) {
// Insert the constant instruction at the start of the block right after the argument
@@ -1020,11 +1020,8 @@
}
}
- public void addInstanceGet(
- MemberType type,
- int dest,
- int object,
- DexField field) {
+ public void addInstanceGet(int dest, int object, DexField field) {
+ MemberType type = MemberType.fromDexType(field.type);
Value in = readRegister(object, ValueType.OBJECT);
Value out = writeRegister(dest, ValueType.fromMemberType(type), ThrowingInfo.CAN_THROW);
out.setKnownToBeBoolean(type == MemberType.BOOLEAN);
@@ -1041,11 +1038,8 @@
addInstruction(instruction);
}
- public void addInstancePut(
- MemberType type,
- int value,
- int object,
- DexField field) {
+ public void addInstancePut(int value, int object, DexField field) {
+ MemberType type = MemberType.fromDexType(field.type);
List<Value> values = new ArrayList<>(2);
values.add(readRegister(value, ValueType.fromMemberType(type)));
values.add(readRegister(object, ValueType.OBJECT));
@@ -1274,21 +1268,14 @@
addInstruction(instruction);
}
- public void addMoveResult(ValueType type, int dest) {
+ public void addMoveResult(int dest) {
List<Instruction> instructions = currentBlock.getInstructions();
Invoke invoke = instructions.get(instructions.size() - 1).asInvoke();
assert invoke.outValue() == null;
assert invoke.instructionTypeCanThrow();
- invoke.setOutValue(writeRegister(dest, type, ThrowingInfo.CAN_THROW));
- }
-
- public void addBooleanMoveResult(ValueType type, int dest) {
- List<Instruction> instructions = currentBlock.getInstructions();
- Invoke invoke = instructions.get(instructions.size() - 1).asInvoke();
- assert invoke.outValue() == null;
- assert invoke.instructionTypeCanThrow();
- Value outValue = writeRegister(dest, type, ThrowingInfo.CAN_THROW);
- outValue.setKnownToBeBoolean(true);
+ DexType outType = invoke.getReturnType();
+ Value outValue = writeRegister(dest, ValueType.fromDexType(outType), ThrowingInfo.CAN_THROW);
+ outValue.setKnownToBeBoolean(outType.isBooleanType());
invoke.setOutValue(outValue);
}
@@ -1345,7 +1332,8 @@
closeCurrentBlock();
}
- public void addStaticGet(MemberType type, int dest, DexField field) {
+ public void addStaticGet(int dest, DexField field) {
+ MemberType type = MemberType.fromDexType(field.type);
Value out = writeRegister(dest, ValueType.fromMemberType(type), ThrowingInfo.CAN_THROW);
out.setKnownToBeBoolean(type == MemberType.BOOLEAN);
StaticGet instruction = new StaticGet(type, out, field);
@@ -1353,7 +1341,8 @@
addInstruction(instruction);
}
- public void addStaticPut(MemberType type, int value, DexField field) {
+ public void addStaticPut(int value, DexField field) {
+ MemberType type = MemberType.fromDexType(field.type);
Value in = readRegister(value, ValueType.fromMemberType(type));
add(new StaticPut(type, in, field));
}
@@ -1660,7 +1649,7 @@
public Value readLiteral(NumericType type, long constant) {
Value value = new Value(valueNumberGenerator.next(), ValueType.fromNumericType(type), null);
- add(new ConstNumber(ValueType.fromNumericType(type), value, constant));
+ add(new ConstNumber(value, constant));
return value;
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index c966690..3c102c1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -251,31 +251,43 @@
// Initialize all non-argument locals to ensure safe insertion of debug-local instructions.
for (Object o : node.localVariables) {
LocalVariableNode local = (LocalVariableNode) o;
- Type localType = Type.getType(local.desc);
- int sort = localType.getSort();
- switch (sort) {
+ Type localType;
+ ValueType localValueType;
+ switch (Type.getType(local.desc).getSort()) {
case Type.OBJECT:
- case Type.ARRAY:
+ case Type.ARRAY: {
localType = JarState.NULL_TYPE;
+ localValueType = ValueType.OBJECT;
break;
- case Type.DOUBLE:
+ }
case Type.LONG:
- case Type.FLOAT:
+ case Type.DOUBLE: {
+ localType = Type.LONG_TYPE;
+ localValueType = ValueType.LONG_OR_DOUBLE;
break;
+ }
+ case Type.BOOLEAN:
+ case Type.CHAR:
+ case Type.BYTE:
+ case Type.SHORT:
+ case Type.INT:
+ case Type.FLOAT: {
+ localType = Type.INT_TYPE;
+ localValueType = ValueType.INT_OR_FLOAT;
+ break;
+ }
case Type.VOID:
case Type.METHOD:
- throw new Unreachable("Invalid local variable type: " + localType);
default:
- localType = Type.INT_TYPE;
- break;
+ throw new Unreachable("Invalid local variable type: " );
}
int localRegister = state.getLocalRegister(local.index, localType);
ValueType existingLocalType = initializedLocals.get(localRegister);
- ValueType localValueType = valueType(localType);
assert existingLocalType == null || existingLocalType.compatible(localValueType);
if (existingLocalType == null) {
- int localRegister2 = state.writeLocal(local.index, localType);
- assert localRegister == localRegister2;
+ // For uninitialized entries write the local to ensure it exists in the local state.
+ int writeRegister = state.writeLocal(local.index, localType);
+ assert writeRegister == localRegister;
initializedLocals.put(localRegister, localValueType);
uninitializedLocals.put(localRegister, localValueType);
}
@@ -842,11 +854,13 @@
case Type.CHAR:
return MemberType.CHAR;
case Type.INT:
+ return MemberType.INT;
case Type.FLOAT:
- return MemberType.SINGLE;
+ return MemberType.FLOAT;
case Type.LONG:
+ return MemberType.LONG;
case Type.DOUBLE:
- return MemberType.WIDE;
+ return MemberType.DOUBLE;
case Type.VOID:
// Illegal. Throws in fallthrough.
default:
@@ -2438,24 +2452,23 @@
private void build(FieldInsnNode insn, IRBuilder builder) {
DexField field = application.getField(insn.owner, insn.name, insn.desc);
Type type = Type.getType(insn.desc);
- MemberType fieldType = memberType(insn.desc);
switch (insn.getOpcode()) {
case Opcodes.GETSTATIC:
- builder.addStaticGet(fieldType, state.push(type), field);
+ builder.addStaticGet(state.push(type), field);
break;
case Opcodes.PUTSTATIC:
- builder.addStaticPut(fieldType, state.pop(type).register, field);
+ builder.addStaticPut(state.pop(type).register, field);
break;
case Opcodes.GETFIELD: {
Slot object = state.pop(JarState.OBJECT_TYPE);
int dest = state.push(type);
- builder.addInstanceGet(fieldType, dest, object.register, field);
+ builder.addInstanceGet(dest, object.register, field);
break;
}
case Opcodes.PUTFIELD: {
Slot value = state.pop(type);
Slot object = state.pop(JarState.OBJECT_TYPE);
- builder.addInstancePut(fieldType, value.register, object.register, field);
+ builder.addInstancePut(value.register, object.register, field);
break;
}
default:
@@ -2516,11 +2529,7 @@
// Move the result to the "top of stack".
Type returnType = Type.getReturnType(methodDesc);
if (returnType != Type.VOID_TYPE) {
- if (returnType == Type.BOOLEAN_TYPE) {
- builder.addBooleanMoveResult(valueType(returnType), state.push(returnType));
- } else {
- builder.addMoveResult(valueType(returnType), state.push(returnType));
- }
+ builder.addMoveResult(state.push(returnType));
}
}
@@ -2765,7 +2774,7 @@
}
builder.addInvokeNewArray(dimArrayType, insn.dims, dimensions);
int dimensionsDestTemp = state.push(INT_ARRAY_TYPE);
- builder.addMoveResult(ValueType.OBJECT, dimensionsDestTemp);
+ builder.addMoveResult(dimensionsDestTemp);
// Push the class object for the member type of the array.
int classDestTemp = state.push(CLASS_TYPE);
builder.ensureBlockForThrowingInstruction();
@@ -2782,7 +2791,7 @@
state.pop(); // classDestTemp.
state.pop(); // dimensionsDestTemp.
int result = state.push(arrayType);
- builder.addMoveResult(valueType(arrayType), result);
+ builder.addMoveResult(result);
// Insert cast check to satisfy verification.
builder.ensureBlockForThrowingInstruction();
builder.addCheckCast(result, dexArrayType);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
index 551d629..56c3b9f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
@@ -119,7 +119,7 @@
} else {
ValueType valueType = ValueType.fromDexType(proto.returnType);
int tempValue = nextRegister(valueType);
- add(builder -> builder.addMoveResult(valueType, tempValue));
+ add(builder -> builder.addMoveResult(tempValue));
add(builder -> builder.addReturn(valueType, tempValue));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
index 20286a8..3fc6f67 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaBridgeMethodSourceCode.java
@@ -53,7 +53,7 @@
} else {
ValueType valueType = ValueType.fromDexType(proto.returnType);
int tempValue = nextRegister(valueType);
- add(builder -> builder.addMoveResult(valueType, tempValue));
+ add(builder -> builder.addMoveResult(tempValue));
add(builder -> builder.addReturn(valueType, tempValue));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
index ea891ea..8e69359 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.ir.desugar;
import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
import java.util.Collections;
@@ -29,7 +28,7 @@
Collections.singletonList(ValueType.OBJECT), Collections.singletonList(instance)));
// Assign to a field.
- add(builder -> builder.addStaticPut(MemberType.OBJECT, instance, lambda.instanceField));
+ add(builder -> builder.addStaticPut(instance, lambda.instanceField));
// Final return.
add(IRBuilder::addReturn);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
index b736403..3e268b8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.IRBuilder;
import java.util.Collections;
@@ -31,11 +30,9 @@
int capturedValues = capturedTypes.length;
if (capturedValues > 0) {
for (int i = 0; i < capturedValues; i++) {
- MemberType memberType = MemberType.fromDexType(capturedTypes[i]);
DexField field = lambda.getCaptureField(i);
int idx = i;
- add(builder -> builder.addInstancePut(memberType,
- getParamRegister(idx), getReceiverRegister(), field));
+ add(builder -> builder.addInstancePut(getParamRegister(idx), getReceiverRegister(), field));
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
index 40911e5..5f1109b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -227,8 +226,7 @@
// Load captures if needed.
int capturedValues = capturedTypes.length;
for (int i = 0; i < capturedValues; i++) {
- MemberType memberType = MemberType.fromDexType(capturedTypes[i]);
- ValueType valueType = MemberType.moveTypeFor(memberType);
+ ValueType valueType = ValueType.fromDexType(capturedTypes[i]);
int register = nextRegister(valueType);
argValueTypes.add(valueType);
@@ -236,8 +234,7 @@
// Read field into tmp local.
DexField field = lambda.getCaptureField(i);
- add(builder -> builder.addInstanceGet(
- memberType, register, getReceiverRegister(), field));
+ add(builder -> builder.addInstanceGet(register, getReceiverRegister(), field));
}
// Prepare arguments.
@@ -265,7 +262,7 @@
} else {
ValueType implValueType = ValueType.fromDexType(implReturnType);
int tempValue = nextRegister(implValueType);
- add(builder -> builder.addMoveResult(implValueType, tempValue));
+ add(builder -> builder.addMoveResult(tempValue));
int adjustedValue = prepareReturnValue(tempValue,
erasedReturnType, enforcedReturnType, methodToCall.proto.returnType);
ValueType adjustedValueType = ValueType.fromDexType(erasedReturnType);
@@ -469,7 +466,7 @@
ValueType valueType = ValueType.fromDexType(primitiveType);
int result = nextRegister(valueType);
- add(builder -> builder.addMoveResult(valueType, result));
+ add(builder -> builder.addMoveResult(result));
return result;
}
@@ -491,7 +488,7 @@
method, method.proto, argValueTypes, argRegisters));
int result = nextRegister(ValueType.OBJECT);
- add(builder -> builder.addMoveResult(ValueType.OBJECT, result));
+ add(builder -> builder.addMoveResult(result));
return result;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index bad56c1..8f09aaa 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -75,11 +75,12 @@
if (rule != null && rule.hasReturnValue() && rule.getReturnValue().isSingleValue()) {
assert valueType != ValueType.OBJECT;
Value value = code.createValue(valueType, instruction.getLocalInfo());
- replacement = new ConstNumber(valueType, value, rule.getReturnValue().getSingleValue());
+ replacement = new ConstNumber(value, rule.getReturnValue().getSingleValue());
}
if (replacement == null &&
rule != null && rule.hasReturnValue() && rule.getReturnValue().isField()) {
DexField field = rule.getReturnValue().getField();
+ assert ValueType.fromDexType(field.type) == valueType;
DexEncodedField staticField = appInfo.lookupStaticTarget(field.clazz, field);
if (staticField != null) {
Value value = code.createValue(valueType, instruction.getLocalInfo());
@@ -165,8 +166,7 @@
long constant = target.getOptimizationInfo().getReturnedConstant();
ValueType valueType = invoke.outType();
Value value = code.createValue(valueType);
- // TODO(ager): Attempt to get a more precise const type from the method analysis?
- Instruction knownConstReturn = new ConstNumber(valueType, value, constant);
+ Instruction knownConstReturn = new ConstNumber(value, constant);
invoke.outValue().replaceUsers(value);
knownConstReturn.setPosition(invoke.getPosition());
iterator.add(knownConstReturn);
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
index 49b46dd..2b96878 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMoveScheduler.java
@@ -136,7 +136,7 @@
instruction = new Move(to, from);
} else {
ConstNumber number = move.definition.asConstNumber();
- instruction = new ConstNumber(number.type, to, number.getRawValue());
+ instruction = new ConstNumber(to, number.getRawValue());
}
} else {
Value from = new FixedRegisterValue(move.type, valueMap.get(move.src));
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
index 43e55ac..4c59686 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
@@ -98,7 +98,7 @@
} else {
ValueType valueType = ValueType.fromDexType(proto.returnType);
int tempValue = nextRegister(valueType);
- add(builder -> builder.addMoveResult(valueType, tempValue));
+ add(builder -> builder.addMoveResult(tempValue));
add(builder -> builder.addReturn(valueType, tempValue));
}
}
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 0b7dafb..5165432 100644
--- a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
+++ b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
@@ -367,7 +367,7 @@
Value newReturnValue = new Value(test.valueNumberGenerator.next(), ValueType.INT, null);
Value oldReturnValue = newReturnBlock.listIterator().next().asReturn().returnValue();
newReturnBlock.listIterator().next().asReturn().returnValue().replaceUsers(newReturnValue);
- Instruction constInstruction = new ConstNumber(ValueType.INT, newConstValue, 10);
+ Instruction constInstruction = new ConstNumber(newConstValue, 10);
Instruction addInstruction =
new Add(NumericType.INT, newReturnValue, oldReturnValue, newConstValue);
iterator.previous();
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 726d6b1..2ea44eb 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
@@ -47,11 +47,11 @@
public void equalityOfConstantOperands() {
RegisterAllocator allocator = new MockRegisterAllocator();
Value value0 = new Value(0, ValueType.INT, null);
- ConstNumber const0 = new ConstNumber(ValueType.INT, value0, 0);
+ ConstNumber const0 = new ConstNumber(value0, 0);
Value value1 = new Value(1, ValueType.INT, null);
- ConstNumber const1 = new ConstNumber(ValueType.INT, value1, 1);
+ ConstNumber const1 = new ConstNumber(value1, 1);
Value value2 = new Value(2, ValueType.INT, null);
- ConstNumber const2 = new ConstNumber(ValueType.INT, value2, 2);
+ ConstNumber const2 = new ConstNumber(value2, 2);
Value value3 = new Value(2, ValueType.INT, null);
Add add0 = new Add(NumericType.INT, value3, value0, value1);
add0.setPosition(Position.none());