[IR] Rename .symbolName and similar extension properties
Convert these extensions to functions with `compute` prefix to make it obvious that they are not cheap.
This commit is contained in:
committed by
Stanislav Erokhin
parent
f22d84c07b
commit
56683ef403
+1
-1
@@ -152,7 +152,7 @@ internal class SpecialDeclarationsFactory(val context: Context) {
|
|||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
DECLARATION_ORIGIN_BRIDGE_METHOD(function),
|
DECLARATION_ORIGIN_BRIDGE_METHOD(function),
|
||||||
IrSimpleFunctionSymbolImpl(descriptor),
|
IrSimpleFunctionSymbolImpl(descriptor),
|
||||||
"<bridge-$bridgeDirections>${function.functionName}".synthesizedName,
|
"<bridge-$bridgeDirections>${function.computeFunctionName()}".synthesizedName,
|
||||||
function.visibility,
|
function.visibility,
|
||||||
function.modality,
|
function.modality,
|
||||||
isInline = false,
|
isInline = false,
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ import llvm.LLVMStoreSizeOfType
|
|||||||
import org.jetbrains.kotlin.backend.common.ir.simpleFunctions
|
import org.jetbrains.kotlin.backend.common.ir.simpleFunctions
|
||||||
import org.jetbrains.kotlin.backend.konan.*
|
import org.jetbrains.kotlin.backend.konan.*
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.*
|
import org.jetbrains.kotlin.backend.konan.ir.*
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.functionName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeFunctionName
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.llvmType
|
import org.jetbrains.kotlin.backend.konan.llvm.llvmType
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
||||||
import org.jetbrains.kotlin.backend.konan.lower.InnerClassLowering
|
import org.jetbrains.kotlin.backend.konan.lower.InnerClassLowering
|
||||||
@@ -462,5 +462,5 @@ internal class ClassLayoutBuilder(val irClass: IrClass, val context: Context, va
|
|||||||
|
|
||||||
private val functionIds = mutableMapOf<IrFunction, Long>()
|
private val functionIds = mutableMapOf<IrFunction, Long>()
|
||||||
|
|
||||||
private val IrFunction.uniqueId get() = functionIds.getOrPut(this) { functionName.localHash.value }
|
private val IrFunction.uniqueId get() = functionIds.getOrPut(this) { computeFunctionName().localHash.value }
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-5
@@ -112,14 +112,15 @@ internal val IrClass.kotlinObjCClassInfoSymbolName: String
|
|||||||
return "kobjcclassinfo:$fqNameForIrSerialization"
|
return "kobjcclassinfo:$fqNameForIrSerialization"
|
||||||
}
|
}
|
||||||
|
|
||||||
val IrFunction.functionName get() = with(KonanBinaryInterface) { functionName }
|
fun IrFunction.computeFunctionName() = with(KonanBinaryInterface) { functionName }
|
||||||
val IrFunction.fullName get() = parent.fqNameForIrSerialization.child(Name.identifier(functionName)).asString()
|
|
||||||
|
|
||||||
val IrFunction.symbolName get() = with(KonanBinaryInterface) { symbolName }
|
fun IrFunction.computeFullName() = parent.fqNameForIrSerialization.child(Name.identifier(computeFunctionName())).asString()
|
||||||
|
|
||||||
val IrField.symbolName get() = with(KonanBinaryInterface) { symbolName }
|
fun IrFunction.computeSymbolName() = with(KonanBinaryInterface) { symbolName }
|
||||||
|
|
||||||
val IrClass.typeInfoSymbolName get() = with(KonanBinaryInterface) { typeInfoSymbolName }
|
fun IrField.computeSymbolName() = with(KonanBinaryInterface) { symbolName }
|
||||||
|
|
||||||
|
fun IrClass.computeTypeInfoSymbolName() = with(KonanBinaryInterface) { typeInfoSymbolName }
|
||||||
|
|
||||||
fun IrDeclaration.isExported() = KonanBinaryInterface.isExported(this)
|
fun IrDeclaration.isExported() = KonanBinaryInterface.isExported(this)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -63,7 +63,7 @@ internal class CodeGenerator(override val context: Context) : ContextUtils {
|
|||||||
private fun countParams(fn: IrFunction) = LLVMCountParams(fn.llvmFunction)
|
private fun countParams(fn: IrFunction) = LLVMCountParams(fn.llvmFunction)
|
||||||
|
|
||||||
fun functionEntryPointAddress(function: IrFunction) = function.entryPointAddress.llvm
|
fun functionEntryPointAddress(function: IrFunction) = function.entryPointAddress.llvm
|
||||||
fun functionHash(function: IrFunction): LLVMValueRef = function.functionName.localHash.llvm
|
fun functionHash(function: IrFunction): LLVMValueRef = function.computeFunctionName().localHash.llvm
|
||||||
|
|
||||||
fun typeInfoForAllocation(constructedClass: IrClass): LLVMValueRef {
|
fun typeInfoForAllocation(constructedClass: IrClass): LLVMValueRef {
|
||||||
assert(!constructedClass.isObjCClass())
|
assert(!constructedClass.isObjCClass())
|
||||||
|
|||||||
+2
-3
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.util.isReal
|
|||||||
import org.jetbrains.kotlin.konan.library.KonanLibrary
|
import org.jetbrains.kotlin.konan.library.KonanLibrary
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder
|
|
||||||
import org.jetbrains.kotlin.library.uniqueName
|
import org.jetbrains.kotlin.library.uniqueName
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -181,7 +180,7 @@ internal interface ContextUtils : RuntimeAware {
|
|||||||
get() {
|
get() {
|
||||||
assert(this.isReal)
|
assert(this.isReal)
|
||||||
return if (isExternal(this)) {
|
return if (isExternal(this)) {
|
||||||
runtime.addedLLVMExternalFunctions.getOrPut(this) { context.llvm.externalFunction(this.symbolName, getLlvmFunctionType(this),
|
runtime.addedLLVMExternalFunctions.getOrPut(this) { context.llvm.externalFunction(this.computeSymbolName(), getLlvmFunctionType(this),
|
||||||
origin = this.llvmSymbolOrigin) }
|
origin = this.llvmSymbolOrigin) }
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -201,7 +200,7 @@ internal interface ContextUtils : RuntimeAware {
|
|||||||
val IrClass.typeInfoPtr: ConstPointer
|
val IrClass.typeInfoPtr: ConstPointer
|
||||||
get() {
|
get() {
|
||||||
return if (isExternal(this)) {
|
return if (isExternal(this)) {
|
||||||
constPointer(importGlobal(this.typeInfoSymbolName, runtime.typeInfoType,
|
constPointer(importGlobal(this.computeTypeInfoSymbolName(), runtime.typeInfoType,
|
||||||
origin = this.llvmSymbolOrigin))
|
origin = this.llvmSymbolOrigin))
|
||||||
} else {
|
} else {
|
||||||
context.llvmDeclarations.forClass(this).typeInfo
|
context.llvmDeclarations.forClass(this).typeInfo
|
||||||
|
|||||||
+1
-1
@@ -1934,7 +1934,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map<IrE
|
|||||||
scope.members.add(DICreateMemberType(
|
scope.members.add(DICreateMemberType(
|
||||||
refBuilder = context.debugInfo.builder,
|
refBuilder = context.debugInfo.builder,
|
||||||
refScope = scope.scope as DIScopeOpaqueRef,
|
refScope = scope.scope as DIScopeOpaqueRef,
|
||||||
name = expression.symbolName,
|
name = expression.computeSymbolName(),
|
||||||
file = irFile.file(),
|
file = irFile.file(),
|
||||||
lineNum = expression.startLine(),
|
lineNum = expression.startLine(),
|
||||||
sizeInBits = sizeInBits,
|
sizeInBits = sizeInBits,
|
||||||
|
|||||||
+3
-3
@@ -163,7 +163,7 @@ private class DeclarationsGeneratorVisitor(override val context: Context) :
|
|||||||
val typeInfoGlobal: StaticData.Global
|
val typeInfoGlobal: StaticData.Global
|
||||||
|
|
||||||
val typeInfoSymbolName = if (declaration.isExported()) {
|
val typeInfoSymbolName = if (declaration.isExported()) {
|
||||||
declaration.typeInfoSymbolName
|
declaration.computeTypeInfoSymbolName()
|
||||||
} else {
|
} else {
|
||||||
"ktype:$internalName"
|
"ktype:$internalName"
|
||||||
}
|
}
|
||||||
@@ -348,14 +348,14 @@ private class DeclarationsGeneratorVisitor(override val context: Context) :
|
|||||||
|| (declaration.isAccessor && declaration.isFromInteropLibrary())
|
|| (declaration.isAccessor && declaration.isFromInteropLibrary())
|
||||||
|| declaration.annotations.hasAnnotation(RuntimeNames.cCall)) return
|
|| declaration.annotations.hasAnnotation(RuntimeNames.cCall)) return
|
||||||
|
|
||||||
context.llvm.externalFunction(declaration.symbolName, llvmFunctionType,
|
context.llvm.externalFunction(declaration.computeSymbolName(), llvmFunctionType,
|
||||||
// Assume that `external fun` is defined in native libs attached to this module:
|
// Assume that `external fun` is defined in native libs attached to this module:
|
||||||
origin = declaration.llvmSymbolOrigin,
|
origin = declaration.llvmSymbolOrigin,
|
||||||
independent = declaration.hasAnnotation(RuntimeNames.independent)
|
independent = declaration.hasAnnotation(RuntimeNames.independent)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
val symbolName = if (declaration.isExported()) {
|
val symbolName = if (declaration.isExported()) {
|
||||||
declaration.symbolName.also {
|
declaration.computeSymbolName().also {
|
||||||
if (declaration.name.asString() != "main") {
|
if (declaration.name.asString() != "main") {
|
||||||
assert(LLVMGetNamedFunction(context.llvm.llvmModule, it) == null) { it }
|
assert(LLVMGetNamedFunction(context.llvm.llvmModule, it) == null) { it }
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+2
-4
@@ -12,14 +12,12 @@ import org.jetbrains.kotlin.backend.konan.descriptors.*
|
|||||||
import org.jetbrains.kotlin.backend.konan.ir.*
|
import org.jetbrains.kotlin.backend.konan.ir.*
|
||||||
import org.jetbrains.kotlin.backend.konan.isExternalObjCClassMethod
|
import org.jetbrains.kotlin.backend.konan.isExternalObjCClassMethod
|
||||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.isPublicApi
|
import org.jetbrains.kotlin.ir.symbols.isPublicApi
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.isAnnotationClass
|
import org.jetbrains.kotlin.ir.util.isAnnotationClass
|
||||||
import org.jetbrains.kotlin.ir.util.isInterface
|
import org.jetbrains.kotlin.ir.util.isInterface
|
||||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
internal class RTTIGenerator(override val context: Context) : ContextUtils {
|
internal class RTTIGenerator(override val context: Context) : ContextUtils {
|
||||||
@@ -327,7 +325,7 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils {
|
|||||||
fun methodTableRecords(irClass: IrClass): List<MethodTableRecord> {
|
fun methodTableRecords(irClass: IrClass): List<MethodTableRecord> {
|
||||||
val functionNames = mutableMapOf<Long, OverriddenFunctionInfo>()
|
val functionNames = mutableMapOf<Long, OverriddenFunctionInfo>()
|
||||||
return context.getLayoutBuilder(irClass).methodTableEntries.map {
|
return context.getLayoutBuilder(irClass).methodTableEntries.map {
|
||||||
val functionName = it.overriddenFunction.functionName
|
val functionName = it.overriddenFunction.computeFunctionName()
|
||||||
val nameSignature = functionName.localHash
|
val nameSignature = functionName.localHash
|
||||||
val previous = functionNames.putIfAbsent(nameSignature.value, it)
|
val previous = functionNames.putIfAbsent(nameSignature.value, it)
|
||||||
if (previous != null)
|
if (previous != null)
|
||||||
@@ -542,7 +540,7 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils {
|
|||||||
|
|
||||||
val methods = (methodTableRecords(superClass) + methodImpls.map { (method, impl) ->
|
val methods = (methodTableRecords(superClass) + methodImpls.map { (method, impl) ->
|
||||||
assert(method.parent == irClass)
|
assert(method.parent == irClass)
|
||||||
MethodTableRecord(method.functionName.localHash, impl.bitcast(int8TypePtr))
|
MethodTableRecord(method.computeFunctionName().localHash, impl.bitcast(int8TypePtr))
|
||||||
}).sortedBy { it.nameSignature.value }.also {
|
}).sortedBy { it.nameSignature.value }.also {
|
||||||
assert(it.distinctBy { it.nameSignature.value } == it)
|
assert(it.distinctBy { it.nameSignature.value } == it)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm.coverage
|
|||||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.column
|
import org.jetbrains.kotlin.backend.konan.llvm.column
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.line
|
import org.jetbrains.kotlin.backend.konan.llvm.line
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.symbolName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeSymbolName
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
@@ -87,7 +87,7 @@ class FunctionRegions(
|
|||||||
val structuralHash: Long = 0
|
val structuralHash: Long = 0
|
||||||
|
|
||||||
override fun toString(): String = buildString {
|
override fun toString(): String = buildString {
|
||||||
appendLine("${function.symbolName} regions:")
|
appendLine("${function.computeSymbolName()} regions:")
|
||||||
regions.forEach { (irElem, region) -> appendLine("${ir2string(irElem)} -> ($region)") }
|
regions.forEach { (irElem, region) -> appendLine("${ir2string(irElem)} -> ($region)") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-2
@@ -8,9 +8,7 @@ import kotlinx.cinterop.*
|
|||||||
import llvm.*
|
import llvm.*
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.name
|
import org.jetbrains.kotlin.backend.konan.llvm.name
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.symbolName
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.name
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.path
|
import org.jetbrains.kotlin.ir.declarations.path
|
||||||
import org.jetbrains.kotlin.konan.file.File
|
import org.jetbrains.kotlin.konan.file.File
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1342,13 +1342,13 @@ private fun ObjCExportCodeGenerator.createReverseAdapters(
|
|||||||
|
|
||||||
inherited.forEach {
|
inherited.forEach {
|
||||||
presentVtableBridges += vtableIndex(it)
|
presentVtableBridges += vtableIndex(it)
|
||||||
presentMethodTableBridges += it.functionName
|
presentMethodTableBridges += it.computeFunctionName()
|
||||||
presentItableBridges += itablePlace(it)
|
presentItableBridges += itablePlace(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
uninherited.forEach {
|
uninherited.forEach {
|
||||||
val vtableIndex = vtableIndex(it)
|
val vtableIndex = vtableIndex(it)
|
||||||
val functionName = it.functionName
|
val functionName = it.computeFunctionName()
|
||||||
val itablePlace = itablePlace(it)
|
val itablePlace = itablePlace(it)
|
||||||
|
|
||||||
if (vtableIndex !in presentVtableBridges || functionName !in presentMethodTableBridges
|
if (vtableIndex !in presentVtableBridges || functionName !in presentMethodTableBridges
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.backend.common.pop
|
|||||||
import org.jetbrains.kotlin.backend.common.push
|
import org.jetbrains.kotlin.backend.common.push
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
|
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.fullName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeFullName
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||||
@@ -374,7 +374,7 @@ internal class FunctionReferenceLowering(val context: Context): FileLoweringPass
|
|||||||
val receiver = if (needReceiver) irGet(valueParameters.single()) else irNull()
|
val receiver = if (needReceiver) irGet(valueParameters.single()) else irNull()
|
||||||
val arity = unboundFunctionParameters.size + if (functionReferenceTarget.isSuspend) 1 else 0
|
val arity = unboundFunctionParameters.size + if (functionReferenceTarget.isSuspend) 1 else 0
|
||||||
putValueArgument(0, irString(name.asString()))
|
putValueArgument(0, irString(name.asString()))
|
||||||
putValueArgument(1, irString(functionReferenceTarget.fullName))
|
putValueArgument(1, irString(functionReferenceTarget.computeFullName()))
|
||||||
putValueArgument(2, receiver)
|
putValueArgument(2, receiver)
|
||||||
putValueArgument(3, irInt(arity))
|
putValueArgument(3, irInt(arity))
|
||||||
putValueArgument(4, irInt(getFlags()))
|
putValueArgument(4, irInt(getFlags()))
|
||||||
|
|||||||
+2
-2
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.backend.konan.KonanBackendContext
|
|||||||
import org.jetbrains.kotlin.backend.konan.ir.typeWithStarProjections
|
import org.jetbrains.kotlin.backend.konan.ir.typeWithStarProjections
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.typeWithoutArguments
|
import org.jetbrains.kotlin.backend.konan.ir.typeWithoutArguments
|
||||||
import org.jetbrains.kotlin.backend.konan.isObjCClass
|
import org.jetbrains.kotlin.backend.konan.isObjCClass
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.fullName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeFullName
|
||||||
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
@@ -122,7 +122,7 @@ internal class KTypeGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val IrTypeParameter.parentUniqueName get() = when (val parent = parent) {
|
private val IrTypeParameter.parentUniqueName get() = when (val parent = parent) {
|
||||||
is IrFunction -> parent.fullName
|
is IrFunction -> parent.computeFullName()
|
||||||
else -> parent.fqNameForIrSerialization.asString()
|
else -> parent.fqNameForIrSerialization.asString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.backend.common.push
|
|||||||
import org.jetbrains.kotlin.backend.konan.*
|
import org.jetbrains.kotlin.backend.konan.*
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions
|
import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.*
|
import org.jetbrains.kotlin.backend.konan.ir.*
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.functionName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeFunctionName
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
@@ -786,7 +786,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (owner.isInterface) {
|
if (owner.isInterface) {
|
||||||
val calleeHash = callee.functionName.localHash.value
|
val calleeHash = callee.computeFunctionName().localHash.value
|
||||||
DataFlowIR.Node.ItableCall(
|
DataFlowIR.Node.ItableCall(
|
||||||
symbolTable.mapFunction(callee.target),
|
symbolTable.mapFunction(callee.target),
|
||||||
receiverType,
|
receiverType,
|
||||||
|
|||||||
+5
-6
@@ -10,13 +10,12 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isAbstract
|
|||||||
import org.jetbrains.kotlin.backend.konan.descriptors.isBuiltInOperator
|
import org.jetbrains.kotlin.backend.konan.descriptors.isBuiltInOperator
|
||||||
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
import org.jetbrains.kotlin.backend.common.ir.allParameters
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.isOverridableOrOverrides
|
import org.jetbrains.kotlin.backend.konan.ir.isOverridableOrOverrides
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.functionName
|
import org.jetbrains.kotlin.backend.konan.llvm.computeFunctionName
|
||||||
|
import org.jetbrains.kotlin.backend.konan.llvm.computeSymbolName
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.isExported
|
import org.jetbrains.kotlin.backend.konan.llvm.isExported
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
import org.jetbrains.kotlin.backend.konan.llvm.localHash
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.symbolName
|
|
||||||
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_BRIDGE_METHOD
|
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_BRIDGE_METHOD
|
||||||
import org.jetbrains.kotlin.backend.konan.lower.bridgeTarget
|
import org.jetbrains.kotlin.backend.konan.lower.bridgeTarget
|
||||||
import org.jetbrains.kotlin.backend.konan.optimizations.DataFlowIR.Function.Companion.appendCastTo
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
@@ -507,7 +506,7 @@ internal object DataFlowIR {
|
|||||||
mapFunction(it.getImplementation(context)!!)
|
mapFunction(it.getImplementation(context)!!)
|
||||||
}
|
}
|
||||||
layoutBuilder.methodTableEntries.forEach {
|
layoutBuilder.methodTableEntries.forEach {
|
||||||
type.itable[it.overriddenFunction.functionName.localHash.value] = mapFunction(it.getImplementation(context)!!)
|
type.itable[it.overriddenFunction.computeFunctionName().localHash.value] = mapFunction(it.getImplementation(context)!!)
|
||||||
}
|
}
|
||||||
} else if (irClass.isInterface) {
|
} else if (irClass.isInterface) {
|
||||||
// Warmup interface table so it is computed before DCE.
|
// Warmup interface table so it is computed before DCE.
|
||||||
@@ -565,7 +564,7 @@ internal object DataFlowIR {
|
|||||||
val containingDeclarationPart = parent.fqNameForIrSerialization.let {
|
val containingDeclarationPart = parent.fqNameForIrSerialization.let {
|
||||||
if (it.isRoot) "" else "$it."
|
if (it.isRoot) "" else "$it."
|
||||||
}
|
}
|
||||||
val name = "kfun:$containingDeclarationPart${it.functionName}"
|
val name = "kfun:$containingDeclarationPart${it.computeFunctionName()}"
|
||||||
|
|
||||||
val returnsUnit = it is IrConstructor || (!it.isSuspend && it.returnType.isUnit())
|
val returnsUnit = it is IrConstructor || (!it.isSuspend && it.returnType.isUnit())
|
||||||
val returnsNothing = !it.isSuspend && it.returnType.isNothing()
|
val returnsNothing = !it.isSuspend && it.returnType.isNothing()
|
||||||
@@ -639,7 +638,7 @@ internal object DataFlowIR {
|
|||||||
|
|
||||||
assert(irField.parent !is IrClass) { "All local properties initializers should've been lowered" }
|
assert(irField.parent !is IrClass) { "All local properties initializers should've been lowered" }
|
||||||
val attributes = FunctionAttributes.IS_GLOBAL_INITIALIZER or FunctionAttributes.RETURNS_UNIT
|
val attributes = FunctionAttributes.IS_GLOBAL_INITIALIZER or FunctionAttributes.RETURNS_UNIT
|
||||||
val symbol = FunctionSymbol.Private(privateFunIndex++, module, -1, attributes, null, null, takeName { "${irField.symbolName}_init" })
|
val symbol = FunctionSymbol.Private(privateFunIndex++, module, -1, attributes, null, null, takeName { "${irField.computeSymbolName()}_init" })
|
||||||
|
|
||||||
functionMap[irField] = symbol
|
functionMap[irField] = symbol
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user