Fix IrFunction.isEmptyArray implementation

The previous one was incorrect for K1 since parent of top-level function
is `IrClass`, not `IrPackageFragment`.

The change is non-functional, K1 still worked correctly, but had to do
some extra work when inlining `emptyArray` calls and produces less
performant bytecode.
This commit is contained in:
vladislav.grechko
2024-02-21 14:04:07 +01:00
committed by Space Team
parent 224a4e1e3c
commit f32367d2c2
26 changed files with 70 additions and 219 deletions
@@ -1,26 +0,0 @@
MODULE main
CLASS AnnotationInstancesKt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
annotationInstances.kt
Kotlin
*S Kotlin
*F
+ 1 annotationInstances.kt
AnnotationInstancesKt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,76:1
26#2:77
*S KotlinDebug
*F
+ 1 annotationInstances.kt
AnnotationInstancesKt
*L
51#1:77
*E
} )
K2
---
@@ -6,8 +6,6 @@
// WITH_STDLIB
// !LANGUAGE: +InstantiationOfAnnotationClasses
// JVM_ABI_K1_K2_DIFF: KT-62465
// note: taken from ../parameters.kt and ../parametersWithPrimitiveValues.kt
import kotlin.reflect.KClass
import kotlin.test.assertEquals
@@ -1,26 +0,0 @@
MODULE main
CLASS test/AnnotationToStringKt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
annotationToString.kt
Kotlin
*S Kotlin
*F
+ 1 annotationToString.kt
test/AnnotationToStringKt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,62:1
26#2:63
*S KotlinDebug
*F
+ 1 annotationToString.kt
test/AnnotationToStringKt
*L
51#1:63
*E
} )
K2
---
@@ -10,7 +10,6 @@
// WITH_STDLIB
// !LANGUAGE: +InstantiationOfAnnotationClasses
// JVM_ABI_K1_K2_DIFF: KT-62465
package test
@@ -0,0 +1,12 @@
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// Checks if emptyArray call has been lowered
fun box(): String {
emptyArray<String>()
return "OK"
}
// CHECK_BYTECODE_TEXT
// 0 ISTORE 0
@@ -1,26 +0,0 @@
MODULE main
CLASS Kt17134Kt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
kt17134.kt
Kotlin
*S Kotlin
*F
+ 1 kt17134.kt
Kt17134Kt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,19:1
26#2:20
*S KotlinDebug
*F
+ 1 kt17134.kt
Kt17134Kt
*L
16#1:20
*E
} )
K2
---
-2
View File
@@ -1,8 +1,6 @@
// WITH_STDLIB
// TARGET_BACKEND: JVM
// JVM_ABI_K1_K2_DIFF: KT-62465
object A {
@JvmStatic fun main(args: Array<String>) {
val b = arrayOf(arrayOf(""))
@@ -7,54 +7,3 @@ MODULE main
<set-?>: kotlin/Int
K2
value: kotlin/Int
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
arrayDequeRemoveAll.kt
Kotlin
*S Kotlin
*F
+ 1 arrayDequeRemoveAll.kt
ArrayDeque
+ 2 ArraysJVM.kt
kotlin/collections/ArraysKt__ArraysJVMKt
+ 3 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,114:1
53#1,48:117
37#2,2:115
26#3:165
*S KotlinDebug
*F
+ 1 arrayDequeRemoveAll.kt
ArrayDeque
*L
50#1:117,48
13#1:115,2
104#1:165
*E
} )
K2
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
arrayDequeRemoveAll.kt
Kotlin
*S Kotlin
*F
+ 1 arrayDequeRemoveAll.kt
ArrayDeque
+ 2 ArraysJVM.kt
kotlin/collections/ArraysKt__ArraysJVMKt
*L
1#1,114:1
53#1,48:117
37#2,2:115
*S KotlinDebug
*F
+ 1 arrayDequeRemoveAll.kt
ArrayDeque
*L
50#1:117,48
13#1:115,2
*E
} )
@@ -1,5 +1,5 @@
// WITH_STDLIB
// JVM_ABI_K1_K2_DIFF: KT-62464, KT-63984
// JVM_ABI_K1_K2_DIFF: KT-63984
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
class ArrayDeque<E> : AbstractMutableList<E> {
@@ -1,26 +0,0 @@
MODULE main
CLASS TestKt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
test.kt
Kotlin
*S Kotlin
*F
+ 1 test.kt
TestKt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,28:1
26#2:29
*S KotlinDebug
*F
+ 1 test.kt
TestKt
*L
9#1:29
*E
} )
K2
---
@@ -1,7 +1,6 @@
// TARGET_BACKEND: JVM
// WITH_STDLIB
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-62465
// FILE: test.kt
@@ -15,29 +15,3 @@ MODULE lib
[]
K2
[kotlin/script/templates/standard/ScriptTemplateWithArgs]
MODULE main
CLASS TestKt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
test.kt
Kotlin
*S Kotlin
*F
+ 1 test.kt
TestKt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,29:1
26#2:30
*S KotlinDebug
*F
+ 1 test.kt
TestKt
*L
22#1:30
*E
} )
K2
---
@@ -3,7 +3,7 @@
// IGNORE_LIGHT_ANALYSIS
// !LANGUAGE: -SkipStandaloneScriptsInSourceRoots
// WITH_STDLIB
// JVM_ABI_K1_K2_DIFF: KT-63963, KT-63960, KT-62465
// JVM_ABI_K1_K2_DIFF: KT-63963, KT-63960
// Although this test works in K1 just fine, it is named with the suffix K2 to show that the demonstrated method is the only one
// available so far to call a script from another module.
@@ -1,29 +1,4 @@
MODULE main
CLASS MainKt.class
Annotation: class.invisibleAnnotations
K1
@Lkotlin/jvm/internal/SourceDebugExtension;( value: #{ SMAP
main.kt
Kotlin
*S Kotlin
*F
+ 1 main.kt
MainKt
+ 2 ArrayIntrinsics.kt
kotlin/ArrayIntrinsicsKt
*L
1#1,50:1
26#2:51
*S KotlinDebug
*F
+ 1 main.kt
MainKt
*L
42#1:51
*E
} )
K2
---
CLASS Script.class
CLASS METADATA
K1
@@ -1,6 +1,6 @@
// TARGET_BACKEND: JVM_IR
// IGNORE_LIGHT_ANALYSIS
// JVM_ABI_K1_K2_DIFF: KT-62465, KT-63960
// JVM_ABI_K1_K2_DIFF: KT-63960
// LANGUAGE: +ReferencesToSyntheticJavaProperties
// LANGUAGE: -SkipStandaloneScriptsInSourceRoots
// WITH_STDLIB