Remove InliningConstraintVisitor
Change-Id: I830e27b947a182e0d06fbc7c21a7245d3a8ff5b9
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfArithmeticBinop.java b/src/main/java/com/android/tools/r8/cf/code/CfArithmeticBinop.java
index 23dbc06..fc2a080 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfArithmeticBinop.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfArithmeticBinop.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -169,9 +167,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forBinop();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfArrayLength.java b/src/main/java/com/android/tools/r8/cf/code/CfArrayLength.java
index f22b956..53536d2 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfArrayLength.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfArrayLength.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.CfState.Slot;
@@ -45,9 +43,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forArrayLength();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java b/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
index db6e106..1f667b4 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -90,9 +88,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forArrayGet();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfArrayStore.java b/src/main/java/com/android/tools/r8/cf/code/CfArrayStore.java
index 3f155f4..d0eadef 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfArrayStore.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfArrayStore.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -80,9 +78,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forArrayPut();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfCheckCast.java b/src/main/java/com/android/tools/r8/cf/code/CfCheckCast.java
index ca75d03..e89c480 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfCheckCast.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfCheckCast.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -61,9 +59,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forCheckCast(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfCmp.java b/src/main/java/com/android/tools/r8/cf/code/CfCmp.java
index 10c8eab..dac3eca 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfCmp.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfCmp.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.Cmp;
import com.android.tools.r8.ir.code.Cmp.Bias;
import com.android.tools.r8.ir.code.NumericType;
@@ -94,9 +92,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forBinop();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstClass.java b/src/main/java/com/android/tools/r8/cf/code/CfConstClass.java
index a10e914..7f77ade 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstClass.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstClass.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -84,9 +82,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstClass(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstMethodHandle.java b/src/main/java/com/android/tools/r8/cf/code/CfConstMethodHandle.java
index 6e34d8d..a9a1d73 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstMethodHandle.java
@@ -4,10 +4,8 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethodHandle;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.graph.UseRegistry.MethodHandleUse;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -60,9 +58,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstMethodHandle();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstMethodType.java b/src/main/java/com/android/tools/r8/cf/code/CfConstMethodType.java
index f3b7e3b..063b6fa 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstMethodType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstMethodType.java
@@ -4,10 +4,8 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexProto;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -60,9 +58,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstMethodType();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstNull.java b/src/main/java/com/android/tools/r8/cf/code/CfConstNull.java
index 69acb80..7ad901a 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstNull.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstNull.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -37,9 +35,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstNumber.java b/src/main/java/com/android/tools/r8/cf/code/CfConstNumber.java
index fddbba4..72e4638 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstNumber.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstNumber.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -135,9 +133,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstString.java b/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
index 45e5a13..d52d901 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
@@ -4,10 +4,8 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -67,9 +65,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forConstInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfDexItemBasedConstString.java b/src/main/java/com/android/tools/r8/cf/code/CfDexItemBasedConstString.java
index d4ec522..36ba9b4 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfDexItemBasedConstString.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfDexItemBasedConstString.java
@@ -5,10 +5,8 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -83,9 +81,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forDexItemBasedConstString(item, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java b/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
index 996355b..a000dcf 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
@@ -5,10 +5,8 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -125,9 +123,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
switch (opcode) {
case Opcodes.GETSTATIC:
return inliningConstraints.forStaticGet(field, invocationContext);
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFrame.java b/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
index a9f440d..e5a3c19 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
@@ -7,10 +7,8 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -295,9 +293,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfGoto.java b/src/main/java/com/android/tools/r8/cf/code/CfGoto.java
index d5f5bc6..efe67ba 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfGoto.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfGoto.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -62,9 +60,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forJumpInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfIf.java b/src/main/java/com/android/tools/r8/cf/code/CfIf.java
index e23c0cc..1ba9c06 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfIf.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfIf.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.If;
import com.android.tools.r8.ir.code.If.Type;
import com.android.tools.r8.ir.code.ValueType;
@@ -95,9 +93,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forJumpInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java b/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
index 47f90b2..28a59d7 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfIfCmp.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.If;
import com.android.tools.r8.ir.code.If.Type;
import com.android.tools.r8.ir.code.ValueType;
@@ -96,9 +94,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forJumpInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfIinc.java b/src/main/java/com/android/tools/r8/cf/code/CfIinc.java
index 951da4f..92f2094 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfIinc.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfIinc.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -53,9 +51,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInstanceOf.java b/src/main/java/com/android/tools/r8/cf/code/CfInstanceOf.java
index 2cfdbaf..cb4baef 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInstanceOf.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInstanceOf.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -59,9 +57,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forInstanceOf(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInstruction.java b/src/main/java/com/android/tools/r8/cf/code/CfInstruction.java
index 2801ca8..833e5e1 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInstruction.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInstruction.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -147,7 +145,5 @@
public abstract ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView);
+ DexType invocationContext);
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
index 4656408..6311bfd 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexProgramClass;
@@ -25,7 +26,6 @@
import com.android.tools.r8.ir.conversion.IRBuilder;
import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
import com.android.tools.r8.ir.optimize.InliningConstraints;
-import com.android.tools.r8.jar.InliningConstraintVisitor;
import com.android.tools.r8.naming.NamingLens;
import java.util.Arrays;
import org.objectweb.asm.MethodVisitor;
@@ -196,11 +196,78 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
- return InliningConstraintVisitor.getConstraintForInvoke(
- opcode, method, graphLense, appView, inliningConstraints, invocationContext);
+ DexType invocationContext) {
+ GraphLense graphLense = inliningConstraints.getGraphLense();
+ AppView<?> appView = inliningConstraints.getAppView();
+ DexMethod target = method;
+ // Find the DEX invocation type.
+ Type type;
+ switch (opcode) {
+ case Opcodes.INVOKEINTERFACE:
+ // Could have changed to an invoke-virtual instruction due to vertical class merging
+ // (if an interface is merged into a class).
+ type = graphLense.lookupMethod(target, null, Type.INTERFACE).getType();
+ assert type == Type.INTERFACE || type == Type.VIRTUAL;
+ break;
+
+ case Opcodes.INVOKESPECIAL:
+ if (appView.dexItemFactory().isConstructor(target)) {
+ type = Type.DIRECT;
+ assert noNeedToUseGraphLense(target, type, graphLense);
+ } else if (target.holder == invocationContext) {
+ // The method could have been publicized.
+ type = graphLense.lookupMethod(target, null, Type.DIRECT).getType();
+ assert type == Type.DIRECT || type == Type.VIRTUAL;
+ } else {
+ // This is a super call. Note that the vertical class merger translates some invoke-super
+ // instructions to invoke-direct. However, when that happens, the invoke instruction and
+ // the target method end up being in the same class, and therefore, we will allow inlining
+ // it. The result of using type=SUPER below will be the same, since it leads to the
+ // inlining constraint SAMECLASS.
+ // TODO(christofferqa): Consider using graphLense.lookupMethod (to do this, we need the
+ // context for the graph lense, though).
+ type = Type.SUPER;
+ assert noNeedToUseGraphLense(target, type, graphLense);
+ }
+ break;
+
+ case Opcodes.INVOKESTATIC: {
+ // Static invokes may have changed as a result of horizontal class merging.
+ GraphLenseLookupResult lookup = graphLense.lookupMethod(target, null, Type.STATIC);
+ target = lookup.getMethod();
+ type = lookup.getType();
+ break;
+ }
+
+ case Opcodes.INVOKEVIRTUAL: {
+ type = Type.VIRTUAL;
+ // Instructions that target a private method in the same class translates to
+ // invoke-direct.
+ if (target.holder == invocationContext) {
+ DexClass clazz = appView.definitionFor(target.holder);
+ if (clazz != null && clazz.lookupDirectMethod(target) != null) {
+ type = Type.DIRECT;
+ }
+ }
+
+ // Virtual invokes may have changed to interface invokes as a result of member rebinding.
+ GraphLenseLookupResult lookup = graphLense.lookupMethod(target, null, type);
+ target = lookup.getMethod();
+ type = lookup.getType();
+ break;
+ }
+
+ default:
+ throw new Unreachable("Unexpected opcode " + opcode);
+ }
+
+ return inliningConstraints.forInvoke(target, type, invocationContext);
+ }
+
+ private static boolean noNeedToUseGraphLense(
+ DexMethod method, Invoke.Type type, GraphLense graphLense) {
+ assert graphLense.lookupMethod(method, null, type).getType() == type;
+ return true;
}
private Type invokeTypeForInvokeSpecialToNonInitMethodOnHolder(
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInvokeDynamic.java b/src/main/java/com/android/tools/r8/cf/code/CfInvokeDynamic.java
index 301be60..231c115 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInvokeDynamic.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInvokeDynamic.java
@@ -5,7 +5,6 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexCallSite;
import com.android.tools.r8.graph.DexMethodHandle;
import com.android.tools.r8.graph.DexString;
@@ -19,7 +18,6 @@
import com.android.tools.r8.graph.DexValue.DexValueMethodType;
import com.android.tools.r8.graph.DexValue.DexValueString;
import com.android.tools.r8.graph.DexValue.DexValueType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -118,9 +116,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forInvokeCustom();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfLabel.java b/src/main/java/com/android/tools/r8/cf/code/CfLabel.java
index c6b2bd0..df9d6bd 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfLabel.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfLabel.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -60,9 +58,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfLoad.java b/src/main/java/com/android/tools/r8/cf/code/CfLoad.java
index 4067a79..ae1fd85 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfLoad.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfLoad.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -89,9 +87,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forLoad();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfLogicalBinop.java b/src/main/java/com/android/tools/r8/cf/code/CfLogicalBinop.java
index c9ddad6..1d03017 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfLogicalBinop.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfLogicalBinop.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -141,9 +139,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forBinop();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java b/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
index 0fda291..dc117dd 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfMonitor.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.Monitor.Type;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -54,9 +52,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forMonitor();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfMultiANewArray.java b/src/main/java/com/android/tools/r8/cf/code/CfMultiANewArray.java
index bb79f60..936f62d 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfMultiANewArray.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfMultiANewArray.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -66,9 +64,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forInvokeMultiNewArray(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfNeg.java b/src/main/java/com/android/tools/r8/cf/code/CfNeg.java
index cbd67ae..254ee77 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfNeg.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfNeg.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -83,9 +81,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forUnop();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfNew.java b/src/main/java/com/android/tools/r8/cf/code/CfNew.java
index ab00d86..46821da 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfNew.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfNew.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -57,9 +55,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forNewInstance(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfNewArray.java b/src/main/java/com/android/tools/r8/cf/code/CfNewArray.java
index d4f26a6..10504d9 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfNewArray.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfNewArray.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.UseRegistry;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -100,9 +98,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forNewArrayEmpty(type, invocationContext);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfNop.java b/src/main/java/com/android/tools/r8/cf/code/CfNop.java
index 75f6be9..0ae7685 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfNop.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfNop.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -41,9 +39,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfNumberConversion.java b/src/main/java/com/android/tools/r8/cf/code/CfNumberConversion.java
index 73d8f34..c1118e5 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfNumberConversion.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfNumberConversion.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
@@ -154,9 +152,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forUnop();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfPosition.java b/src/main/java/com/android/tools/r8/cf/code/CfPosition.java
index 9302711..035604b 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfPosition.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfPosition.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.Position;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -69,9 +67,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfReturn.java b/src/main/java/com/android/tools/r8/cf/code/CfReturn.java
index 88972fe..76475fa 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfReturn.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfReturn.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -77,9 +75,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forReturn();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfReturnVoid.java b/src/main/java/com/android/tools/r8/cf/code/CfReturnVoid.java
index 52d2ae3..fd55aa0 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfReturnVoid.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfReturnVoid.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.IRBuilder;
@@ -46,9 +44,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forReturn();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfStackInstruction.java b/src/main/java/com/android/tools/r8/cf/code/CfStackInstruction.java
index 33205c1..5886058 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfStackInstruction.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfStackInstruction.java
@@ -6,9 +6,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -317,9 +315,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return ConstraintWithTarget.ALWAYS;
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfStore.java b/src/main/java/com/android/tools/r8/cf/code/CfStore.java
index 45f274a..5f8a05d 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfStore.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfStore.java
@@ -5,9 +5,7 @@
import com.android.tools.r8.cf.CfPrinter;
import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
@@ -88,9 +86,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forStore();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfSwitch.java b/src/main/java/com/android/tools/r8/cf/code/CfSwitch.java
index f9c5f7e..47aff14 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfSwitch.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfSwitch.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.CfState.Slot;
@@ -105,9 +103,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forJumpInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfThrow.java b/src/main/java/com/android/tools/r8/cf/code/CfThrow.java
index 8d2f92b..a7609c0 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfThrow.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfThrow.java
@@ -4,9 +4,7 @@
package com.android.tools.r8.cf.code;
import com.android.tools.r8.cf.CfPrinter;
-import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.ir.conversion.CfSourceCode;
import com.android.tools.r8.ir.conversion.CfState;
import com.android.tools.r8.ir.conversion.CfState.Slot;
@@ -48,9 +46,7 @@
@Override
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints,
- DexType invocationContext,
- GraphLense graphLense,
- AppView<?> appView) {
+ DexType invocationContext) {
return inliningConstraints.forJumpInstruction();
}
}
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 2753232..5402e3a 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -509,7 +509,7 @@
constraint =
ConstraintWithTarget.meet(
constraint,
- insn.inliningConstraint(inliningConstraints, invocationContext, graphLense, appView),
+ insn.inliningConstraint(inliningConstraints, invocationContext),
appView);
if (constraint == ConstraintWithTarget.NEVER) {
return constraint;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index 918231c..e50011a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -50,6 +50,14 @@
this.graphLense = graphLense; // Note: Intentionally *not* appView.graphLense().
}
+ public AppView<AppInfoWithLiveness> getAppView() {
+ return appView;
+ }
+
+ public GraphLense getGraphLense() {
+ return graphLense;
+ }
+
public void disallowStaticInterfaceMethodCalls() {
allowStaticInterfaceMethodCalls = false;
}
diff --git a/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java b/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java
deleted file mode 100644
index 88f89c3..0000000
--- a/src/main/java/com/android/tools/r8/jar/InliningConstraintVisitor.java
+++ /dev/null
@@ -1,268 +0,0 @@
-// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.jar;
-
-import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
-
-import com.android.tools.r8.errors.CompilationError;
-import com.android.tools.r8.errors.Unreachable;
-import com.android.tools.r8.graph.AppView;
-import com.android.tools.r8.graph.DexClass;
-import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.graph.DexField;
-import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.GraphLense;
-import com.android.tools.r8.graph.GraphLense.GraphLenseLookupResult;
-import com.android.tools.r8.graph.JarApplicationReader;
-import com.android.tools.r8.ir.code.Invoke;
-import com.android.tools.r8.ir.optimize.Inliner.ConstraintWithTarget;
-import com.android.tools.r8.ir.optimize.InliningConstraints;
-import com.android.tools.r8.shaking.AppInfoWithLiveness;
-import org.objectweb.asm.ConstantDynamic;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-
-// This visitor can be used to determine if a piece of jar code has any instructions that the
-// inliner would not be willing to inline. This can be used to determine if a method can be force
-// inlined although its IR is still not available.
-//
-// Note that this class has only been implemented for the hooks in InliningConstraints that may
-// return a non-ALWAYS inlining constraint (e.g., InliningConstraints.forReturn is not called).
-public class InliningConstraintVisitor extends MethodVisitor {
-
- private final JarApplicationReader application;
- private final AppView<AppInfoWithLiveness> appView;
- private final GraphLense graphLense;
- private final InliningConstraints inliningConstraints;
- private final DexEncodedMethod method;
- private final DexType invocationContext;
-
- private ConstraintWithTarget constraint;
-
- public InliningConstraintVisitor(
- JarApplicationReader application,
- AppView<AppInfoWithLiveness> appView,
- GraphLense graphLense,
- DexEncodedMethod method,
- DexType invocationContext) {
- super(ASM_VERSION);
- assert graphLense.isContextFreeForMethods();
- this.application = application;
- this.appView = appView;
- this.graphLense = graphLense;
- this.inliningConstraints = new InliningConstraints(appView, graphLense);
- this.method = method;
- this.invocationContext = invocationContext;
-
- // Model a synchronized method as having a monitor instruction.
- this.constraint = method.accessFlags.isSynchronized()
- ? inliningConstraints.forMonitor() : ConstraintWithTarget.ALWAYS;
- }
-
- public void disallowStaticInterfaceMethodCalls() {
- inliningConstraints.disallowStaticInterfaceMethodCalls();
- }
-
- public ConstraintWithTarget getConstraint() {
- return constraint;
- }
-
- private void updateConstraint(ConstraintWithTarget other) {
- constraint = ConstraintWithTarget.meet(constraint, other, appView);
- }
-
- // Used to signal that the result is ready, such that we do not need to visit all instructions of
- // the method, if we can see early on that it cannot be inlined anyway.
- public boolean isFinished() {
- return constraint == ConstraintWithTarget.NEVER;
- }
-
- public void accept(TryCatchBlockNode tryCatchBlock) {
- // Model a try-catch as a move-exception instruction.
- updateConstraint(inliningConstraints.forMoveException());
- }
-
- @Override
- public void visitFieldInsn(int opcode, String owner, String name, String desc) {
- DexField field = application.getField(owner, name, desc);
- switch (opcode) {
- case Opcodes.GETFIELD:
- updateConstraint(inliningConstraints.forInstanceGet(field, invocationContext));
- break;
-
- case Opcodes.PUTFIELD:
- updateConstraint(inliningConstraints.forInstancePut(field, invocationContext));
- break;
-
- case Opcodes.GETSTATIC:
- updateConstraint(inliningConstraints.forStaticGet(field, invocationContext));
- break;
-
- case Opcodes.PUTSTATIC:
- updateConstraint(inliningConstraints.forStaticPut(field, invocationContext));
- break;
-
- default:
- throw new Unreachable("Unexpected opcode " + opcode);
- }
- }
-
- @Override
- public void visitLdcInsn(Object cst) {
- if (cst instanceof Type && ((Type) cst).getSort() != Type.METHOD) {
- DexType type = application.getType((Type) cst);
- updateConstraint(inliningConstraints.forConstClass(type, invocationContext));
- } else if (cst instanceof Handle) {
- updateConstraint(inliningConstraints.forConstMethodHandle());
- } else if (cst instanceof ConstantDynamic) {
- throw new CompilationError("Unsupported dynamic constant: " + cst.toString());
- } else {
- updateConstraint(inliningConstraints.forConstInstruction());
- }
- }
-
- @Override
- public void visitInvokeDynamicInsn(
- String name,
- String descriptor,
- Handle bootstrapMethodHandle,
- Object... bootstrapMethodArguments) {
- updateConstraint(inliningConstraints.forInvokeCustom());
- }
-
- @Override
- public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
- DexType ownerType = application.getTypeFromName(owner);
- DexMethod target = application.getMethod(ownerType, name, desc);
- updateConstraint(
- getConstraintForInvoke(
- opcode, target, graphLense, appView, inliningConstraints, invocationContext));
- }
-
- public static ConstraintWithTarget getConstraintForInvoke(
- int opcode,
- DexMethod target,
- GraphLense graphLense,
- AppView<?> appView,
- InliningConstraints inliningConstraints,
- DexType invocationContext) {
- // Find the DEX invocation type.
- Invoke.Type type;
- switch (opcode) {
- case Opcodes.INVOKEINTERFACE:
- // Could have changed to an invoke-virtual instruction due to vertical class merging
- // (if an interface is merged into a class).
- type = graphLense.lookupMethod(target, null, Invoke.Type.INTERFACE).getType();
- assert type == Invoke.Type.INTERFACE || type == Invoke.Type.VIRTUAL;
- break;
-
- case Opcodes.INVOKESPECIAL:
- if (appView.dexItemFactory().isConstructor(target)) {
- type = Invoke.Type.DIRECT;
- assert noNeedToUseGraphLense(target, type, graphLense);
- } else if (target.holder == invocationContext) {
- // The method could have been publicized.
- type = graphLense.lookupMethod(target, null, Invoke.Type.DIRECT).getType();
- assert type == Invoke.Type.DIRECT || type == Invoke.Type.VIRTUAL;
- } else {
- // This is a super call. Note that the vertical class merger translates some invoke-super
- // instructions to invoke-direct. However, when that happens, the invoke instruction and
- // the target method end up being in the same class, and therefore, we will allow inlining
- // it. The result of using type=SUPER below will be the same, since it leads to the
- // inlining constraint SAMECLASS.
- // TODO(christofferqa): Consider using graphLense.lookupMethod (to do this, we need the
- // context for the graph lense, though).
- type = Invoke.Type.SUPER;
- assert noNeedToUseGraphLense(target, type, graphLense);
- }
- break;
-
- case Opcodes.INVOKESTATIC: {
- // Static invokes may have changed as a result of horizontal class merging.
- GraphLenseLookupResult lookup = graphLense.lookupMethod(target, null, Invoke.Type.STATIC);
- target = lookup.getMethod();
- type = lookup.getType();
- break;
- }
-
- case Opcodes.INVOKEVIRTUAL: {
- type = Invoke.Type.VIRTUAL;
- // Instructions that target a private method in the same class translates to
- // invoke-direct.
- if (target.holder == invocationContext) {
- DexClass clazz = appView.definitionFor(target.holder);
- if (clazz != null && clazz.lookupDirectMethod(target) != null) {
- type = Invoke.Type.DIRECT;
- }
- }
-
- // Virtual invokes may have changed to interface invokes as a result of member rebinding.
- GraphLenseLookupResult lookup = graphLense.lookupMethod(target, null, type);
- target = lookup.getMethod();
- type = lookup.getType();
- break;
- }
-
- default:
- throw new Unreachable("Unexpected opcode " + opcode);
- }
-
- return inliningConstraints.forInvoke(target, type, invocationContext);
- }
-
- private static boolean noNeedToUseGraphLense(
- DexMethod method, Invoke.Type type, GraphLense graphLense) {
- assert graphLense.lookupMethod(method, null, type).getType() == type;
- return true;
- }
-
- @Override
- public void visitInsn(int opcode) {
- switch (opcode) {
- case Opcodes.MONITORENTER:
- case Opcodes.MONITOREXIT:
- updateConstraint(inliningConstraints.forMonitor());
- break;
-
- default:
- // All instructions here lead to the inlining constraint ALWAYS.
- }
- }
-
- @Override
- public void visitMultiANewArrayInsn(String desc, int dims) {
- DexType type = application.getTypeFromDescriptor(desc);
- updateConstraint(inliningConstraints.forInvokeMultiNewArray(type, invocationContext));
- }
-
- @Override
- public void visitTypeInsn(int opcode, String typeName) {
- DexType type = application.getTypeFromName(typeName);
- switch (opcode) {
- case Opcodes.ANEWARRAY:
- updateConstraint(inliningConstraints.forNewArrayEmpty(type, invocationContext));
- break;
-
- case Opcodes.CHECKCAST:
- updateConstraint(inliningConstraints.forCheckCast(type, invocationContext));
- break;
-
- case Opcodes.INSTANCEOF:
- updateConstraint(inliningConstraints.forInstanceOf(type, invocationContext));
- break;
-
- case Opcodes.NEW:
- updateConstraint(inliningConstraints.forNewInstance(type, invocationContext));
- break;
-
- default:
- throw new Unreachable("Unexpected opcode " + opcode);
- }
- }
-}