Replace all usages of inlineFunctionSymbol with inlineFunction

This commit is contained in:
Ivan Kylchik
2022-12-15 16:09:19 +01:00
committed by Space Team
parent 1d30a68285
commit ef78196cbc
14 changed files with 117 additions and 58 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.konan.llvm
import kotlinx.cinterop.*
import llvm.*
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
import org.jetbrains.kotlin.backend.common.lower.coroutines.getOrCreateFunctionWithContinuationStub
import org.jetbrains.kotlin.backend.common.lower.inline.InlinerExpressionLocationHint
import org.jetbrains.kotlin.backend.konan.*
@@ -17,9 +18,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.*
import org.jetbrains.kotlin.backend.konan.ir.*
import org.jetbrains.kotlin.backend.konan.llvm.coverage.LLVMCoverageInstrumentation
import org.jetbrains.kotlin.backend.konan.lower.*
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_GLOBAL_INITIALIZER
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_STANDALONE_THREAD_LOCAL_INITIALIZER
import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_STATIC_THREAD_LOCAL_INITIALIZER
import org.jetbrains.kotlin.builtins.UnsignedType
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
@@ -335,7 +333,7 @@ internal class CodeGeneratorVisitor(
val functionContext = findCodeContext(symbol.owner, currentCodeContext) {
val declaration = (this as? FunctionScope)?.declaration
val returnableBlock = (this as? ReturnableBlockScope)?.returnableBlock
val inlinedFunction = returnableBlock?.inlineFunctionSymbol?.owner
val inlinedFunction = returnableBlock?.inlineFunction
declaration == it || inlinedFunction == it
} ?: return null
@@ -1948,7 +1946,7 @@ internal class CodeGeneratorVisitor(
//-------------------------------------------------------------------------//
private inner class ReturnableBlockScope(val returnableBlock: IrReturnableBlock, val resultSlot: LLVMValueRef?) :
FileScope(returnableBlock.inlineFunctionSymbol?.owner?.let {
FileScope(returnableBlock.inlineFunction?.let {
generationState.inlineFunctionOrigins[it]?.irFile ?: it.fileOrNull
}
?: (currentCodeContext.fileScope() as? FileScope)?.file
@@ -1957,13 +1955,13 @@ internal class CodeGeneratorVisitor(
var bbExit : LLVMBasicBlockRef? = null
var resultPhi : LLVMValueRef? = null
private val functionScope by lazy {
returnableBlock.inlineFunctionSymbol?.owner?.let {
returnableBlock.inlineFunction?.let {
it.scope(file().fileEntry.line(generationState.inlineFunctionOrigins[it]?.startOffset ?: it.startOffset))
}
}
private fun getExit(): LLVMBasicBlockRef {
val location = returnableBlock.inlineFunctionSymbol?.owner?.let {
val location = returnableBlock.inlineFunction?.let {
location(generationState.inlineFunctionOrigins[it]?.endOffset ?: it.endOffset)
} ?: returnableBlock.statements.lastOrNull()?.let {
location(it.endOffset)
@@ -2006,7 +2004,7 @@ internal class CodeGeneratorVisitor(
override fun returnableBlockScope(): CodeContext? = this
override fun location(offset: Int): LocationInfo? {
return if (returnableBlock.inlineFunctionSymbol != null) {
return if (returnableBlock.inlineFunction != null) {
val diScope = functionScope ?: return null
val inlinedAt = outerContext.location(returnableBlock.startOffset) ?: return null
LocationInfo(diScope, file.fileEntry.line(offset), file.fileEntry.column(offset), inlinedAt)
@@ -4,6 +4,7 @@
*/
package org.jetbrains.kotlin.backend.konan.llvm.coverage
import org.jetbrains.kotlin.backend.common.ir.sourceFileSymbol
import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.ir.IrElement
@@ -5,8 +5,13 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.*
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.ir.inlineDeclaration
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
import org.jetbrains.kotlin.backend.common.lower.*
import org.jetbrains.kotlin.backend.common.peek
import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.cgen.*
import org.jetbrains.kotlin.backend.konan.descriptors.allOverriddenFunctions
@@ -15,7 +20,10 @@ import org.jetbrains.kotlin.backend.konan.ir.*
import org.jetbrains.kotlin.backend.konan.llvm.IntrinsicType
import org.jetbrains.kotlin.backend.konan.llvm.tryGetIntrinsicType
import org.jetbrains.kotlin.backend.konan.serialization.resolveFakeOverrideMaybeAbstract
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.*
@@ -39,12 +47,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.konan.ForeignExceptionMode
import org.jetbrains.kotlin.konan.library.KonanLibrary
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.konan.ForeignExceptionMode
import org.jetbrains.kotlin.konan.library.KonanLibrary
internal class InteropLowering(generationState: NativeGenerationState) : FileLoweringPass {
// TODO: merge these lowerings.
@@ -693,7 +701,7 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
}
override fun visitBlock(expression: IrBlock): IrExpression {
if (expression is IrReturnableBlock && expression.inlineFunctionSymbol?.isAutoreleasepool() == true) {
if (expression is IrReturnableBlock && expression.inlineFunction?.isAutoreleasepool() == true) {
// Prohibit calling suspend functions from `autoreleasepool {}` block.
// See https://youtrack.jetbrains.com/issue/KT-50786 for more details.
// Note: we can't easily check this in frontend, because we need to prohibit indirect cases like
@@ -722,8 +730,8 @@ private class InteropLoweringPart1(val generationState: NativeGenerationState) :
return super.visitBlock(expression)
}
private fun IrFunctionSymbol.isAutoreleasepool(): Boolean {
return this.owner.name.asString() == "autoreleasepool" && this.owner.parent.let { parent ->
private fun IrFunction.isAutoreleasepool(): Boolean {
return this.name.asString() == "autoreleasepool" && this.parent.let { parent ->
parent is IrPackageFragment && parent.fqName == InteropFqNames.packageName
}
}
@@ -159,7 +159,7 @@ internal class RedundantCoercionsCleaner(val context: Context) : FileLoweringPas
symbol = newSymbol,
origin = origin,
statements = statements,
inlineFunctionSymbol = inlineFunctionSymbol)
)
}
/*
* Visitor below requires being very careful when changing it.
@@ -6,10 +6,13 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
import org.jetbrains.kotlin.backend.common.ir.innerInlinedBlockOrThis
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.irCall
import org.jetbrains.kotlin.ir.builders.irReturn
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
@@ -51,10 +54,11 @@ internal class ReturnsInsertionLowering(val context: Context) : FileLoweringPass
override fun visitBlock(expression: IrBlock) {
expression.acceptChildrenVoid(this)
if (expression !is IrReturnableBlock) return
if (expression.inlineFunctionSymbol?.owner?.returnType == context.irBuiltIns.unitType) {
val offset = (expression.statements.lastOrNull() ?: expression).endOffset
if (expression.inlineFunction?.returnType == context.irBuiltIns.unitType) {
val container = expression.innerInlinedBlockOrThis.statements
val offset = (container.lastOrNull() ?: expression).endOffset
context.createIrBuilder(expression.symbol, offset, offset).run {
expression.statements += irReturn(irCall(symbols.theUnitInstance, context.irBuiltIns.unitType))
container += irReturn(irCall(symbols.theUnitInstance, context.irBuiltIns.unitType))
}
}
}