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
@@ -0,0 +1,13 @@
// IGNORE_BACKEND: WASM
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
class Outer (val x: String) {
inner class Inner(val y: String) {
val yx = y + x
}
}
fun box() =
Outer("K")::Inner.invoke("O").yx
@@ -0,0 +1,11 @@
// IGNORE_BACKEND: WASM
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
class C(val x: String) {
fun foo(s: String) = x + s
}
fun box() =
C("O")::foo.invoke("K")
@@ -0,0 +1,11 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 invoke
fun box(): String {
var ok = "FAILED"
{ s: String ->
ok = s
}("OK")
return ok
}
@@ -0,0 +1,10 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
class C(x: String, y: String) {
val yx = y + x
}
fun box() =
::C.invoke("K", "O").yx
@@ -0,0 +1,12 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
fun box() =
{ k: String ->
{ o: String ->
var ok = o
ok += k
ok
}("O")
}("K")
@@ -0,0 +1,10 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
fun box() =
(fun (s: String): String {
var ok = "O"
ok += s
return ok
}).invoke("K")
@@ -0,0 +1,8 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
fun ok(s: String) = "O" + s
fun box() =
::ok.invoke("K")
@@ -0,0 +1,10 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
fun box() =
{ s: String ->
var ok = "O"
ok += s
ok
}.invoke("K")
@@ -0,0 +1,12 @@
// CHECK_BYTECODE_TEXT
// JVM_IR_TEMPLATES
// 0 Function(^.)*.invoke
class Outer (val x: String) {
inner class Inner(val y: String) {
val yx = y + x
}
}
fun box() =
(Outer::Inner).invoke(Outer("K"), "O").yx
@@ -0,0 +1,2 @@
fun box(): String =
(String::plus)("O", "K")