JVM_IR KT-45103 optimize direct invoke for lambdas and callable refs
This commit is contained in:
committed by
teamcityserver
parent
bfb1a06f3d
commit
851980e36f
@@ -1,28 +1,31 @@
|
||||
fun test() {
|
||||
|
||||
fun local(){
|
||||
{
|
||||
val lam = {
|
||||
//static instance access
|
||||
local()
|
||||
}()
|
||||
}
|
||||
lam()
|
||||
}
|
||||
|
||||
//static instance access
|
||||
{
|
||||
val lam = {
|
||||
//static instance access
|
||||
local()
|
||||
}()
|
||||
}
|
||||
lam()
|
||||
|
||||
//static instance access
|
||||
(::local)()
|
||||
val cr = ::local
|
||||
cr()
|
||||
}
|
||||
|
||||
// JVM_TEMPLATES
|
||||
// 3 GETSTATIC ConstClosureOptimizationKt\$test\$1\.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$2\.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$3\.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$lam\$1\.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$cr\$1\.INSTANCE
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$1.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$2.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$local\$1.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$cr\$1.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$lam\$1.INSTANCE
|
||||
// 1 GETSTATIC ConstClosureOptimizationKt\$test\$local\$lam\$1.INSTANCE
|
||||
|
||||
@@ -3,7 +3,8 @@ class Z{
|
||||
fun a(s: Int) {}
|
||||
|
||||
fun b() {
|
||||
(Z::a)(Z(), 1)
|
||||
val cr = (Z::a)
|
||||
cr(Z(), 1)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
fun test() {
|
||||
1.(fun Int.() = 2)()
|
||||
val fn = fun Int.() = 2
|
||||
1.fn()
|
||||
}
|
||||
|
||||
// 1 invoke \(I\)I
|
||||
+9
-5
@@ -1,6 +1,7 @@
|
||||
fun test() {
|
||||
{
|
||||
{}()
|
||||
val lam = {}
|
||||
lam()
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -11,16 +12,19 @@ inline fun ifun(s: () -> Unit) {
|
||||
fun test2() {
|
||||
var z = 1;
|
||||
ifun {
|
||||
{ z = 2 }()
|
||||
val lam = { z = 2 }
|
||||
lam()
|
||||
}
|
||||
}
|
||||
|
||||
// 1 class DeleteClassOnTransformationKt\$test\$1\$1
|
||||
|
||||
// JVM_TEMPLATES:
|
||||
// 1 class DeleteClassOnTransformationKt\$test\$1 extends
|
||||
// 1 class DeleteClassOnTransformationKt\$test\$1\$lam\$1 extends
|
||||
// 0 class DeleteClassOnTransformationKt\$test2\$1\$1
|
||||
// 1 class DeleteClassOnTransformationKt\$test2\$\$inlined\$ifun\$lambda\$1
|
||||
|
||||
// JVM_IR_TEMPLATES:
|
||||
// 1 class DeleteClassOnTransformationKt\$test2\$1\$1
|
||||
// 0 class DeleteClassOnTransformationKt\$test2\$\$inlined
|
||||
// 3 final class
|
||||
// 1 class DeleteClassOnTransformationKt\$test\$1\$lam\$1
|
||||
// 1 class DeleteClassOnTransformationKt\$test2\$1\$lam\$1
|
||||
|
||||
@@ -3,7 +3,14 @@
|
||||
// JVM_TARGET: 1.8
|
||||
// LAMBDAS: INDY
|
||||
|
||||
fun test() = { { "O" }() + { "K" }() }()
|
||||
fun test(): String {
|
||||
val lam = {
|
||||
val lamO = { "O" }
|
||||
val lamK = { "K" }
|
||||
lamO() + lamK()
|
||||
}
|
||||
return lam()
|
||||
}
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 3 INVOKEDYNAMIC
|
||||
|
||||
+7
-9
@@ -2,12 +2,12 @@ fun box(): String {
|
||||
var encl1 = "fail"
|
||||
var encl2 = "fail"
|
||||
test {
|
||||
{
|
||||
val lam1 = {
|
||||
encl1 = "OK"
|
||||
{
|
||||
encl2 = "OK"
|
||||
}()
|
||||
}()
|
||||
val lam2 = { encl2 = "OK" }
|
||||
lam2()
|
||||
}
|
||||
lam1()
|
||||
}
|
||||
|
||||
return "OK"
|
||||
@@ -28,7 +28,5 @@ inline fun test(s: () -> Unit) {
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 5 INNERCLASS
|
||||
// 3 INNERCLASS Kt10259Kt\$box\$1\$1\s
|
||||
// 2 INNERCLASS Kt10259Kt\$box\$1\$1\$1
|
||||
// 1 class Kt10259Kt\$box\$1\$1\ extends
|
||||
// 1 class Kt10259Kt\$box\$1\$1\$1 extends
|
||||
// 3 INNERCLASS Kt10259Kt\$box\$1\$lam1\$1 null null
|
||||
// 2 INNERCLASS Kt10259Kt\$box\$1\$lam1\$1\$lam2\$1
|
||||
|
||||
+13
-10
@@ -1,11 +1,11 @@
|
||||
fun box(): String {
|
||||
var encl1 = "fail";
|
||||
test {
|
||||
{
|
||||
{
|
||||
encl1 = "OK"
|
||||
}()
|
||||
}()
|
||||
val lam1 = {
|
||||
val lam2 = { encl1 = "OK" }
|
||||
lam2()
|
||||
}
|
||||
lam1()
|
||||
}
|
||||
|
||||
return encl1
|
||||
@@ -31,7 +31,7 @@ inline fun test(crossinline s: () -> Unit) {
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1\$lambda\$1\$1\s
|
||||
|
||||
// NB JVM_IR generates
|
||||
// final static INNERCLASS Kt10259_3Kt$box$1$1 null null
|
||||
// final static INNERCLASS Kt10259_3Kt$box$1$lam1$1 null null
|
||||
// public final static INNERCLASS Kt10259_3Kt$test$1 null null
|
||||
// in Kt10259_3Kt.
|
||||
// Although Oracle JVM doesn't check for consistency of InnerClasses attributes,
|
||||
@@ -39,7 +39,10 @@ inline fun test(crossinline s: () -> Unit) {
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 14 INNERCLASS
|
||||
// 3 INNERCLASS Kt10259_3Kt\$box\$1\$1\s
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$1\$1\$1\s
|
||||
// 3 INNERCLASS Kt10259_3Kt\$test\$1\s
|
||||
// 2 INNERCLASS Kt10259_3Kt\$test\$1\$1\s
|
||||
// 3 INNERCLASS Kt10259_3Kt\$box\$1\$lam1\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$1\$lam1\$1\$lam2\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$box\$\$inlined\$test\$1\$1 null null
|
||||
// 3 INNERCLASS Kt10259_3Kt\$test\$1 null null
|
||||
// 2 INNERCLASS Kt10259_3Kt\$test\$1\$1 null null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user