Remove never inline modeling for kotlin intrinsics
Change-Id: Iad3e410291ed32a208597c66a1bb9e7f840f7e3d
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 40c2ce3..674493f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -59,7 +59,6 @@
import com.android.tools.r8.ir.optimize.inliner.InliningReasonStrategy;
import com.android.tools.r8.ir.optimize.inliner.NopWhyAreYouNotInliningReporter;
import com.android.tools.r8.ir.optimize.inliner.WhyAreYouNotInliningReporter;
-import com.android.tools.r8.kotlin.Kotlin;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.MainDexInfo;
import com.android.tools.r8.utils.InternalOptions;
@@ -71,7 +70,6 @@
import com.android.tools.r8.utils.collections.LongLivedProgramMethodSetBuilder;
import com.android.tools.r8.utils.collections.ProgramMethodSet;
import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import java.util.ArrayDeque;
import java.util.ArrayList;
@@ -86,7 +84,6 @@
protected final AppView<AppInfoWithLiveness> appView;
private final IRConverter converter;
- private final Set<DexMethod> extraNeverInlineMethods;
private final LensCodeRewriter lensCodeRewriter;
final MainDexInfo mainDexInfo;
@@ -107,17 +104,8 @@
AppView<AppInfoWithLiveness> appView,
IRConverter converter,
LensCodeRewriter lensCodeRewriter) {
- Kotlin.Intrinsics intrinsics = appView.dexItemFactory().kotlin.intrinsics;
this.appView = appView;
this.converter = converter;
- this.extraNeverInlineMethods =
- appView.options().kotlinOptimizationOptions().disableKotlinSpecificOptimizations
- ? ImmutableSet.of()
- : ImmutableSet.of(
- intrinsics.throwNpe,
- intrinsics.throwParameterIsNullException,
- intrinsics.throwParameterIsNullNPE,
- intrinsics.throwParameterIsNullIAE);
this.lensCodeRewriter = lensCodeRewriter;
this.mainDexInfo = appView.appInfo().getMainDexInfo();
this.singleInlineCallers =
@@ -140,12 +128,6 @@
return true;
}
- if (extraNeverInlineMethods.contains(
- appView.graphLens().getOriginalMethodSignature(singleTargetReference))) {
- whyAreYouNotInliningReporter.reportExtraNeverInline();
- return true;
- }
-
if (appInfo.isNeverInlineMethod(singleTargetReference)) {
whyAreYouNotInliningReporter.reportMarkedAsNeverInline();
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
index 218a8fc..cc7d4ec 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/NopWhyAreYouNotInliningReporter.java
@@ -22,9 +22,6 @@
}
@Override
- public void reportExtraNeverInline() {}
-
- @Override
public void reportCallerNotSameClass() {}
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
index 8063674..66d6108 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporter.java
@@ -45,8 +45,6 @@
}
}
- public abstract void reportExtraNeverInline();
-
public abstract void reportCallerNotSameClass();
public abstract void reportCallerNotSameNest();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
index f9418b4..94632b6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/inliner/WhyAreYouNotInliningReporterImpl.java
@@ -48,11 +48,6 @@
}
@Override
- public void reportExtraNeverInline() {
- print("method is marked as an additional never inline method.");
- }
-
- @Override
public void reportCallerNotSameClass() {
print("inlinee can only be inlined into methods in the same class.");
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index 4aaea25..2d2611f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -259,9 +259,11 @@
String kotlinIntrinsics = "void kotlin.jvm.internal.Intrinsics";
assertEquals(
Lists.newArrayList(
- kotlinc.is(KOTLINC_1_3_72)
- ? kotlinIntrinsics + ".throwParameterIsNullException(java.lang.String)"
- : kotlinIntrinsics + ".throwParameterIsNullNPE(java.lang.String)"),
+ kotlinIntrinsics
+ + (kotlinc.is(KOTLINC_1_3_72)
+ ? ".checkParameterIsNotNull"
+ : ".checkNotNullParameter")
+ + "(java.lang.Object, java.lang.String)"),
collectStaticCalls(clazz, "main", String[].class.getCanonicalName()));
});
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
index 802be75..da2f568 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineChainTest.java
@@ -78,10 +78,10 @@
long checkParameterIsNotNull = countCall(main, "checkParameterIsNotNull");
long checkNotNullParameter = countCall(main, "checkNotNullParameter");
if (kotlinParameters.is(KotlinCompilerVersion.KOTLINC_1_3_72)) {
- assertEquals(allowAccessModification ? 0 : 1, checkParameterIsNotNull);
+ assertEquals(1, checkParameterIsNotNull);
assertEquals(0, checkNotNullParameter);
} else {
- assertEquals(allowAccessModification ? 0 : 1, checkNotNullParameter);
+ assertEquals(1, checkNotNullParameter);
assertEquals(0, checkParameterIsNotNull);
}
});
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index c407a5b..37dd2b3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -76,9 +76,7 @@
MethodSubject isSupported = main.uniqueMethodWithName("isSupported");
assertThat(isSupported, isPresent());
assertEquals(
- !kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72) || allowAccessModification
- ? 0
- : 1,
+ kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72) ? 1 : 0,
countCall(isSupported, "checkParameterIsNotNull"));
// In general cases, null check won't be invoked only once or twice, hence no subtle
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index 142e48d..d8a7e1c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -62,15 +62,25 @@
"throwParameterIsNullException",
"void",
Collections.singletonList("java.lang.String")),
- // throwParameterIsNullException is not added for test starting from 1.4
- kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
+ false)
+ .put(
+ new MethodSignature(
+ "throwParameterIsNullNPE",
+ "void",
+ Collections.singletonList("java.lang.String")),
+ false)
.put(
new MethodSignature(
"checkParameterIsNotNull",
"void",
Lists.newArrayList("java.lang.Object", "java.lang.String")),
- kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72)
- && !allowAccessModification)
+ kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
+ .put(
+ new MethodSignature(
+ "checkNotNullParameter",
+ "void",
+ Lists.newArrayList("java.lang.Object", "java.lang.String")),
+ !kotlinc.is(KotlinCompilerVersion.KOTLINC_1_3_72))
.build());
});
}
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index e6f1c6d..63cacfc 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -118,7 +118,7 @@
boolean metKotlinIntrinsicsNullChecks = false;
while (it.hasNext()) {
DexMethod invokedMethod = it.next().getMethod();
- if (invokedMethod.holder.toSourceString().contains("java.net")) {
+ if (invokedMethod.holder.getTypeName().contains("java.net")) {
continue;
}
ClassSubject invokedMethodHolderSubject =
@@ -165,7 +165,11 @@
"-neverinline class **." + targetClassName + " { <methods>; }",
"-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
" *** checkParameterIsNotNull(...);",
+ "}",
+ "-neversinglecallerinline class kotlin.jvm.internal.Intrinsics {",
+ " *** checkParameterIsNotNull(...);",
"}"))
+ .addNeverSingleCallerInlineAnnotations()
.allowDiagnosticWarningMessages()
.minification(minification)
.compile()