Always do stack spilling during inline cause of dex problem

Dex issue: https://issuetracker.google.com/issues/68796377

  #KT-20844 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-11-13 13:35:58 +01:00
parent 519e5c33d8
commit dff6e943bb
12 changed files with 163 additions and 2 deletions
@@ -184,6 +184,11 @@ abstract class InlineCodegen<out T: BaseExpressionCodegen>(
}
private fun canSkipStackSpillingOnInline(methodNode: MethodNode): Boolean {
// Temporary disable this optimization until
// https://issuetracker.google.com/issues/68796377 is fixed
// or until d8 substitute dex
return false
// Stack spilling before inline function 'f' call is required if:
// - 'f' is a suspend function
// - 'f' has try-catch blocks
@@ -0,0 +1,9 @@
//WITH_RUNTIME
fun foo(x: String, ys: List<String>) =
x + ys.fold("", { a, b -> a + b })
var flag = true
fun box(): String =
foo("O", if (flag) listOf("k").map { it.toUpperCase() } else listOf())
@@ -0,0 +1,27 @@
// FILE: 1.kt
//WITH_RUNTIME
package test
data class Address(
val createdTimeMs: Long = 0,
val firstName: String = "",
val lastName: String = ""
)
inline fun String.switchIfEmpty(provider: () -> String): String {
return if (isEmpty()) provider() else this
}
// FILE: 2.kt
import test.*
fun box(): String {
val address = Address()
val result = address.copy(
firstName = address.firstName.switchIfEmpty { "O" },
lastName = address.lastName.switchIfEmpty { "K" }
)
return result.firstName + result.lastName
}
@@ -9,6 +9,6 @@ fun foo() : Int {
return foobar(1, bar(2), 3)
}
// 1 ISTORE
// 5 ILOAD
// 3 ISTORE
// 7 ILOAD
// 0 InlineMarker
@@ -12726,6 +12726,21 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
}
}
@TestMetadata("compiler/testData/codegen/box/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractIrBlackBoxCodegenTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/package")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -2241,6 +2241,21 @@ public class IrBlackBoxInlineCodegenTestGenerated extends AbstractIrBlackBoxInli
}
}
@TestMetadata("compiler/testData/codegen/boxInline/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractIrBlackBoxInlineCodegenTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxInline/private")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -2241,6 +2241,21 @@ public class IrCompileKotlinAgainstInlineKotlinTestGenerated extends AbstractIrC
}
}
@TestMetadata("compiler/testData/codegen/boxInline/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractIrCompileKotlinAgainstInlineKotlinTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxInline/private")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -12726,6 +12726,21 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
}
}
@TestMetadata("compiler/testData/codegen/box/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractBlackBoxCodegenTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/package")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -2241,6 +2241,21 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo
}
}
@TestMetadata("compiler/testData/codegen/boxInline/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractBlackBoxInlineCodegenTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxInline/private")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -2241,6 +2241,21 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi
}
}
@TestMetadata("compiler/testData/codegen/boxInline/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractCompileKotlinAgainstInlineKotlinTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxInline/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxInline/private")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -12726,6 +12726,21 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
}
}
@TestMetadata("compiler/testData/codegen/box/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractLightAnalysisModeTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/package")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
@@ -13824,6 +13824,21 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
}
}
@TestMetadata("compiler/testData/codegen/box/optimizations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Optimizations extends AbstractJsCodegenBoxTest {
public void testAllFilesPresentInOptimizations() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/optimizations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
}
@TestMetadata("kt20844.kt")
public void testKt20844() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/optimizations/kt20844.kt");
doTest(fileName);
}
}
@TestMetadata("compiler/testData/codegen/box/package")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)