[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,
|
||||
DECLARATION_ORIGIN_BRIDGE_METHOD(function),
|
||||
IrSimpleFunctionSymbolImpl(descriptor),
|
||||
"<bridge-$bridgeDirections>${function.functionName}".synthesizedName,
|
||||
"<bridge-$bridgeDirections>${function.computeFunctionName()}".synthesizedName,
|
||||
function.visibility,
|
||||
function.modality,
|
||||
isInline = false,
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ import llvm.LLVMStoreSizeOfType
|
||||
import org.jetbrains.kotlin.backend.common.ir.simpleFunctions
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
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.localHash
|
||||
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 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"
|
||||
}
|
||||
|
||||
val IrFunction.functionName get() = with(KonanBinaryInterface) { functionName }
|
||||
val IrFunction.fullName get() = parent.fqNameForIrSerialization.child(Name.identifier(functionName)).asString()
|
||||
fun IrFunction.computeFunctionName() = with(KonanBinaryInterface) { functionName }
|
||||
|
||||
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)
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ internal class CodeGenerator(override val context: Context) : ContextUtils {
|
||||
private fun countParams(fn: IrFunction) = LLVMCountParams(fn.llvmFunction)
|
||||
|
||||
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 {
|
||||
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.target.KonanTarget
|
||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||
import org.jetbrains.kotlin.library.resolver.TopologicalLibraryOrder
|
||||
import org.jetbrains.kotlin.library.uniqueName
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -181,7 +180,7 @@ internal interface ContextUtils : RuntimeAware {
|
||||
get() {
|
||||
assert(this.isReal)
|
||||
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) }
|
||||
|
||||
} else {
|
||||
@@ -201,7 +200,7 @@ internal interface ContextUtils : RuntimeAware {
|
||||
val IrClass.typeInfoPtr: ConstPointer
|
||||
get() {
|
||||
return if (isExternal(this)) {
|
||||
constPointer(importGlobal(this.typeInfoSymbolName, runtime.typeInfoType,
|
||||
constPointer(importGlobal(this.computeTypeInfoSymbolName(), runtime.typeInfoType,
|
||||
origin = this.llvmSymbolOrigin))
|
||||
} else {
|
||||
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(
|
||||
refBuilder = context.debugInfo.builder,
|
||||
refScope = scope.scope as DIScopeOpaqueRef,
|
||||
name = expression.symbolName,
|
||||
name = expression.computeSymbolName(),
|
||||
file = irFile.file(),
|
||||
lineNum = expression.startLine(),
|
||||
sizeInBits = sizeInBits,
|
||||
|
||||
+3
-3
@@ -163,7 +163,7 @@ private class DeclarationsGeneratorVisitor(override val context: Context) :
|
||||
val typeInfoGlobal: StaticData.Global
|
||||
|
||||
val typeInfoSymbolName = if (declaration.isExported()) {
|
||||
declaration.typeInfoSymbolName
|
||||
declaration.computeTypeInfoSymbolName()
|
||||
} else {
|
||||
"ktype:$internalName"
|
||||
}
|
||||
@@ -348,14 +348,14 @@ private class DeclarationsGeneratorVisitor(override val context: Context) :
|
||||
|| (declaration.isAccessor && declaration.isFromInteropLibrary())
|
||||
|| 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:
|
||||
origin = declaration.llvmSymbolOrigin,
|
||||
independent = declaration.hasAnnotation(RuntimeNames.independent)
|
||||
)
|
||||
} else {
|
||||
val symbolName = if (declaration.isExported()) {
|
||||
declaration.symbolName.also {
|
||||
declaration.computeSymbolName().also {
|
||||
if (declaration.name.asString() != "main") {
|
||||
assert(LLVMGetNamedFunction(context.llvm.llvmModule, it) == null) { it }
|
||||
} 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.isExternalObjCClassMethod
|
||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.symbols.isPublicApi
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.util.isAnnotationClass
|
||||
import org.jetbrains.kotlin.ir.util.isInterface
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
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> {
|
||||
val functionNames = mutableMapOf<Long, OverriddenFunctionInfo>()
|
||||
return context.getLayoutBuilder(irClass).methodTableEntries.map {
|
||||
val functionName = it.overriddenFunction.functionName
|
||||
val functionName = it.overriddenFunction.computeFunctionName()
|
||||
val nameSignature = functionName.localHash
|
||||
val previous = functionNames.putIfAbsent(nameSignature.value, it)
|
||||
if (previous != null)
|
||||
@@ -542,7 +540,7 @@ internal class RTTIGenerator(override val context: Context) : ContextUtils {
|
||||
|
||||
val methods = (methodTableRecords(superClass) + methodImpls.map { (method, impl) ->
|
||||
assert(method.parent == irClass)
|
||||
MethodTableRecord(method.functionName.localHash, impl.bitcast(int8TypePtr))
|
||||
MethodTableRecord(method.computeFunctionName().localHash, impl.bitcast(int8TypePtr))
|
||||
}).sortedBy { it.nameSignature.value }.also {
|
||||
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.konan.llvm.column
|
||||
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.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
@@ -87,7 +87,7 @@ class FunctionRegions(
|
||||
val structuralHash: Long = 0
|
||||
|
||||
override fun toString(): String = buildString {
|
||||
appendLine("${function.symbolName} regions:")
|
||||
appendLine("${function.computeSymbolName()} regions:")
|
||||
regions.forEach { (irElem, region) -> appendLine("${ir2string(irElem)} -> ($region)") }
|
||||
}
|
||||
}
|
||||
|
||||
-2
@@ -8,9 +8,7 @@ import kotlinx.cinterop.*
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
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.name
|
||||
import org.jetbrains.kotlin.ir.declarations.path
|
||||
import org.jetbrains.kotlin.konan.file.File
|
||||
|
||||
|
||||
+2
-2
@@ -1342,13 +1342,13 @@ private fun ObjCExportCodeGenerator.createReverseAdapters(
|
||||
|
||||
inherited.forEach {
|
||||
presentVtableBridges += vtableIndex(it)
|
||||
presentMethodTableBridges += it.functionName
|
||||
presentMethodTableBridges += it.computeFunctionName()
|
||||
presentItableBridges += itablePlace(it)
|
||||
}
|
||||
|
||||
uninherited.forEach {
|
||||
val vtableIndex = vtableIndex(it)
|
||||
val functionName = it.functionName
|
||||
val functionName = it.computeFunctionName()
|
||||
val itablePlace = itablePlace(it)
|
||||
|
||||
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.konan.Context
|
||||
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.Modality
|
||||
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 arity = unboundFunctionParameters.size + if (functionReferenceTarget.isSuspend) 1 else 0
|
||||
putValueArgument(0, irString(name.asString()))
|
||||
putValueArgument(1, irString(functionReferenceTarget.fullName))
|
||||
putValueArgument(1, irString(functionReferenceTarget.computeFullName()))
|
||||
putValueArgument(2, receiver)
|
||||
putValueArgument(3, irInt(arity))
|
||||
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.typeWithoutArguments
|
||||
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.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
@@ -122,7 +122,7 @@ internal class KTypeGenerator(
|
||||
}
|
||||
|
||||
private val IrTypeParameter.parentUniqueName get() = when (val parent = parent) {
|
||||
is IrFunction -> parent.fullName
|
||||
is IrFunction -> parent.computeFullName()
|
||||
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.descriptors.allOverriddenFunctions
|
||||
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.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
@@ -786,7 +786,7 @@ internal class ModuleDFGBuilder(val context: Context, val irModule: IrModuleFrag
|
||||
}
|
||||
}
|
||||
if (owner.isInterface) {
|
||||
val calleeHash = callee.functionName.localHash.value
|
||||
val calleeHash = callee.computeFunctionName().localHash.value
|
||||
DataFlowIR.Node.ItableCall(
|
||||
symbolTable.mapFunction(callee.target),
|
||||
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.common.ir.allParameters
|
||||
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.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.bridgeTarget
|
||||
import org.jetbrains.kotlin.backend.konan.optimizations.DataFlowIR.Function.Companion.appendCastTo
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
@@ -507,7 +506,7 @@ internal object DataFlowIR {
|
||||
mapFunction(it.getImplementation(context)!!)
|
||||
}
|
||||
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) {
|
||||
// Warmup interface table so it is computed before DCE.
|
||||
@@ -565,7 +564,7 @@ internal object DataFlowIR {
|
||||
val containingDeclarationPart = parent.fqNameForIrSerialization.let {
|
||||
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 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" }
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user