Several performance tunings.
This commit is contained in:
committed by
alexander-gorshenev
parent
e2ad488f28
commit
6b2161b5ec
+4
-1
@@ -202,7 +202,10 @@ private val implicitInlineClasses =
|
|||||||
KonanFqNames.nativePtr +
|
KonanFqNames.nativePtr +
|
||||||
InteropFqNames.cPointer).toSet()
|
InteropFqNames.cPointer).toSet()
|
||||||
|
|
||||||
private fun IrClass.getAllSuperClassifiers(): List<IrClass> = listOf(this) + this.superTypes.flatMap { (it.classifierOrFail.owner as IrClass).getAllSuperClassifiers() }
|
private val superQualifierTable = mutableMapOf<IrClass, List<IrClass>>()
|
||||||
|
private fun IrClass.getAllSuperClassifiers(): List<IrClass> = superQualifierTable.getOrPut(this) {
|
||||||
|
listOf(this) + this.superTypes.flatMap { (it.classifierOrFail.owner as IrClass).getAllSuperClassifiers() }
|
||||||
|
}
|
||||||
|
|
||||||
internal object KotlinTypeInlineClassesSupport : InlineClassesSupport<ClassDescriptor, KotlinType>() {
|
internal object KotlinTypeInlineClassesSupport : InlineClassesSupport<ClassDescriptor, KotlinType>() {
|
||||||
|
|
||||||
|
|||||||
+17
-24
@@ -6,17 +6,10 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrAnonymousInitializerImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
|
|
||||||
fun <K, V> MutableMap<K, V>.putOnce(k:K, v: V): Unit {
|
|
||||||
assert(!this.containsKey(k) || this[k] == v) {
|
|
||||||
"adding $v for $k, but it is already ${this[k]} for $k"
|
|
||||||
}
|
|
||||||
this.put(k, v)
|
|
||||||
}
|
|
||||||
|
|
||||||
class DescriptorTable {
|
class DescriptorTable {
|
||||||
private val descriptors = mutableMapOf<DeclarationDescriptor, Long>()
|
private val descriptors = mutableMapOf<DeclarationDescriptor, Long>()
|
||||||
fun put(descriptor: DeclarationDescriptor, uniqId: UniqId) {
|
fun put(descriptor: DeclarationDescriptor, uniqId: UniqId) {
|
||||||
descriptors.putOnce(descriptor, uniqId.index)
|
descriptors.getOrPut(descriptor) { uniqId.index }
|
||||||
}
|
}
|
||||||
fun get(descriptor: DeclarationDescriptor) = descriptors[descriptor]
|
fun get(descriptor: DeclarationDescriptor) = descriptors[descriptor]
|
||||||
}
|
}
|
||||||
@@ -35,26 +28,26 @@ class DeclarationTable(val builtIns: IrBuiltIns, val descriptorTable: Descriptor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun uniqIdByDeclaration(value: IrDeclaration): UniqId {
|
fun uniqIdByDeclaration(value: IrDeclaration): UniqId = table.getOrPut(value) {
|
||||||
val index = table.getOrPut(value) {
|
val index = if (value.origin == IrDeclarationOrigin.FAKE_OVERRIDE ||
|
||||||
|
!value.isExported()
|
||||||
|
|| value is IrVariable
|
||||||
|
|| value is IrTypeParameter
|
||||||
|
|| value is IrValueParameter
|
||||||
|
|| value is IrAnonymousInitializerImpl
|
||||||
|
) {
|
||||||
|
|
||||||
if (value.origin == IrDeclarationOrigin.FAKE_OVERRIDE ||
|
UniqId(currentIndex++, true)
|
||||||
!value.isExported()
|
} else {
|
||||||
|| value is IrVariable
|
UniqId(value.uniqIdIndex, false)
|
||||||
|| value is IrTypeParameter
|
|
||||||
|| value is IrValueParameter
|
|
||||||
|| value is IrAnonymousInitializerImpl
|
|
||||||
) {
|
|
||||||
|
|
||||||
UniqId(currentIndex++, true)
|
|
||||||
} else {
|
|
||||||
UniqId(value.uniqIdIndex, false)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debugIndex.put(index, "${if (index.isLocal) "" else value.uniqSymbolName()} descriptor = ${value.descriptor}")
|
// It can grow as large as 1/3 of ir/* size.
|
||||||
|
// debugIndex.put(index) {
|
||||||
|
// "${if (index.isLocal) "" else value.uniqSymbolName()} descriptor = ${value.descriptor}"
|
||||||
|
//}.also {it == null}
|
||||||
|
|
||||||
return index
|
index
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext.konanHome = distDir.absolutePath
|
ext.konanHome = distDir.absolutePath
|
||||||
ext.jvmArgs = project.findProperty("platformLibsJvmArgs") ?: "-Xmx4G"
|
ext.jvmArgs = project.findProperty("platformLibsJvmArgs") ?: "-Xmx6G"
|
||||||
ext.setProperty("konan.home", konanHome)
|
ext.setProperty("konan.home", konanHome)
|
||||||
ext.setProperty("konan.jvmArgs", jvmArgs)
|
ext.setProperty("konan.jvmArgs", jvmArgs)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user