JVM_IR KT-45103 optimize direct invoke for lambdas and callable refs

This commit is contained in:
Dmitry Petrov
2021-04-26 17:17:25 +03:00
committed by teamcityserver
parent bfb1a06f3d
commit 851980e36f
124 changed files with 1340 additions and 324 deletions
@@ -5,13 +5,13 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 java/lang/invoke/LambdaMetafactory\.metafactory
// 1 final class BigArityLambdaKt\$box\$1
// 1 final class BigArityLambdaKt\$box\$lam\$1
fun box() =
{ p0: String, p1: String, p2: Int, p3: Int, p4: Int, p5: Int, p6: Int, p7: Int, p8: Int, p9: Int,
p10: Int, p11: Int, p12: Int, p13: Int, p14: Int, p15: Int, p16: Int, p17: Int, p18: Int, p19: Int,
p20: Int, p21: Int, p22: Int, p23: Int, p24: Int, p25: Int, p26: Int, p27: Int, p28: Int, p29: Int
fun box(): String {
val lam = { p0: String, p1: String, p2: Int, p3: Int, p4: Int, p5: Int, p6: Int, p7: Int, p8: Int, p9: Int,
p10: Int, p11: Int, p12: Int, p13: Int, p14: Int, p15: Int, p16: Int, p17: Int, p18: Int, p19: Int,
p20: Int, p21: Int, p22: Int, p23: Int, p24: Int, p25: Int, p26: Int, p27: Int, p28: Int, p29: Int
-> p0 + p1
}(
"O", "K", 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
)
}
return lam("O", "K", 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29)
}
@@ -8,5 +8,6 @@
fun box(): String {
val ok = "OK"
return { ok }()
val lam = { ok }
return lam()
}
@@ -8,6 +8,7 @@
fun box(): String {
var ok = "Failed"
{ ok = "OK" }()
val lam = { ok = "OK" }
lam()
return ok
}
@@ -6,4 +6,11 @@
// JVM_IR_TEMPLATES
// 3 java/lang/invoke/LambdaMetafactory
fun box() = { { "O" }() + { "K" }() }()
fun box(): String {
val lam1 = {
val lamO = { "O" }
val lamK = { "K" }
lamO() + lamK()
}
return lam1()
}
@@ -7,7 +7,8 @@
// 1 java/lang/invoke/LambdaMetafactory
fun box(): String {
val test = { i: Int -> i + 40 }(2)
val lam = { i: Int -> i + 40 }
val test = lam(2)
if (test != 42) return "Failed: test=$test"
return "OK"
@@ -6,4 +6,7 @@
// JVM_IR_TEMPLATES
// 1 java/lang/invoke/LambdaMetafactory
fun box() = { "OK" }()
fun box(): String {
val lam = { "OK" }
return lam()
}
@@ -9,6 +9,7 @@
var ok = "Failed"
fun box(): String {
{ ok = "OK" }()
val lam = { ok = "OK" }
lam()
return ok
}