[IR] Refactored a bit InlineFunctionResolver
This commit is contained in:
+8
-8
@@ -42,11 +42,15 @@ fun IrExpression.isAdaptedFunctionReference() =
|
|||||||
this is IrBlock && this.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE
|
this is IrBlock && this.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE
|
||||||
|
|
||||||
interface InlineFunctionResolver {
|
interface InlineFunctionResolver {
|
||||||
fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction
|
fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction = symbol.owner
|
||||||
fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol
|
fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol = irFunction.symbol
|
||||||
fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
||||||
return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol)
|
return Symbols.isLateinitIsInitializedPropertyGetter(symbol) || Symbols.isTypeOfIntrinsic(symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val TRIVIAL = object : InlineFunctionResolver {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrFunction.isTopLevelInPackage(name: String, packageName: String): Boolean {
|
fun IrFunction.isTopLevelInPackage(name: String, packageName: String): Boolean {
|
||||||
@@ -63,7 +67,7 @@ fun IrFunction.isBuiltInSuspendCoroutineUninterceptedOrReturn(): Boolean =
|
|||||||
StandardNames.COROUTINES_INTRINSICS_PACKAGE_FQ_NAME.asString()
|
StandardNames.COROUTINES_INTRINSICS_PACKAGE_FQ_NAME.asString()
|
||||||
)
|
)
|
||||||
|
|
||||||
open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) : InlineFunctionResolver {
|
open class InlineFunctionResolverReplacingCoroutineIntrinsics(open val context: CommonBackendContext) : InlineFunctionResolver {
|
||||||
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
||||||
val function = symbol.owner
|
val function = symbol.owner
|
||||||
// TODO: Remove these hacks when coroutine intrinsics are fixed.
|
// TODO: Remove these hacks when coroutine intrinsics are fixed.
|
||||||
@@ -77,15 +81,11 @@ open class DefaultInlineFunctionResolver(open val context: CommonBackendContext)
|
|||||||
else -> function
|
else -> function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol {
|
|
||||||
return irFunction.symbol
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class FunctionInlining(
|
class FunctionInlining(
|
||||||
val context: CommonBackendContext,
|
val context: CommonBackendContext,
|
||||||
private val inlineFunctionResolver: InlineFunctionResolver = DefaultInlineFunctionResolver(context),
|
private val inlineFunctionResolver: InlineFunctionResolver = InlineFunctionResolver.TRIVIAL,
|
||||||
private val innerClassesSupport: InnerClassesSupport? = null,
|
private val innerClassesSupport: InnerClassesSupport? = null,
|
||||||
private val insertAdditionalImplicitCasts: Boolean = false,
|
private val insertAdditionalImplicitCasts: Boolean = false,
|
||||||
private val alwaysCreateTemporaryVariablesForArguments: Boolean = false,
|
private val alwaysCreateTemporaryVariablesForArguments: Boolean = false,
|
||||||
|
|||||||
+2
-4
@@ -6,10 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.ir.backend.js.lower.inline
|
package org.jetbrains.kotlin.ir.backend.js.lower.inline
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||||
import org.jetbrains.kotlin.backend.common.lower.inline.DefaultInlineFunctionResolver
|
import org.jetbrains.kotlin.backend.common.lower.inline.InlineFunctionResolverReplacingCoroutineIntrinsics
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lazy2
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.compileSuspendAsJsGenerator
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.deepCopyWithVariables
|
import org.jetbrains.kotlin.ir.deepCopyWithVariables
|
||||||
@@ -30,7 +28,7 @@ internal class SaveInlineFunctionsBeforeInlining(context: JsIrBackendContext) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class JsInlineFunctionResolver(context: JsIrBackendContext) : DefaultInlineFunctionResolver(context) {
|
internal class JsInlineFunctionResolver(context: JsIrBackendContext) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) {
|
||||||
private val enumEntriesIntrinsic = context.intrinsics.enumEntriesIntrinsic
|
private val enumEntriesIntrinsic = context.intrinsics.enumEntriesIntrinsic
|
||||||
private val inlineFunctionsBeforeInlining = context.mapping.inlineFunctionsBeforeInlining
|
private val inlineFunctionsBeforeInlining = context.mapping.inlineFunctionsBeforeInlining
|
||||||
private val inlineFunctionsBeforeInliningSymbols = hashMapOf<IrFunction, IrFunctionSymbol>()
|
private val inlineFunctionsBeforeInliningSymbols = hashMapOf<IrFunction, IrFunctionSymbol>()
|
||||||
|
|||||||
+2
-11
@@ -280,20 +280,11 @@ private val kotlinNothingValueExceptionPhase = makeIrFilePhase<CommonBackendCont
|
|||||||
|
|
||||||
internal val functionInliningPhase = makeIrModulePhase(
|
internal val functionInliningPhase = makeIrModulePhase(
|
||||||
{ context ->
|
{ context ->
|
||||||
class JvmInlineFunctionResolver : InlineFunctionResolver {
|
|
||||||
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
|
||||||
return symbol.owner
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getFunctionSymbol(irFunction: IrFunction): IrFunctionSymbol {
|
|
||||||
return irFunction.symbol
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!context.irInlinerIsEnabled()) return@makeIrModulePhase FileLoweringPass.Empty
|
if (!context.irInlinerIsEnabled()) return@makeIrModulePhase FileLoweringPass.Empty
|
||||||
|
|
||||||
FunctionInlining(
|
FunctionInlining(
|
||||||
context, JvmInlineFunctionResolver(), context.innerClassesSupport,
|
context,
|
||||||
|
innerClassesSupport = context.innerClassesSupport,
|
||||||
alwaysCreateTemporaryVariablesForArguments = true,
|
alwaysCreateTemporaryVariablesForArguments = true,
|
||||||
regenerateInlinedAnonymousObjects = true,
|
regenerateInlinedAnonymousObjects = true,
|
||||||
inlineArgumentsWithTheirOriginalTypeAndOffset = true
|
inlineArgumentsWithTheirOriginalTypeAndOffset = true
|
||||||
|
|||||||
+2
-2
@@ -5,11 +5,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.wasm.lower
|
package org.jetbrains.kotlin.backend.wasm.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.lower.inline.DefaultInlineFunctionResolver
|
import org.jetbrains.kotlin.backend.common.lower.inline.InlineFunctionResolverReplacingCoroutineIntrinsics
|
||||||
import org.jetbrains.kotlin.backend.wasm.WasmBackendContext
|
import org.jetbrains.kotlin.backend.wasm.WasmBackendContext
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
|
|
||||||
class WasmInlineFunctionResolver(context: WasmBackendContext) : DefaultInlineFunctionResolver(context) {
|
class WasmInlineFunctionResolver(context: WasmBackendContext) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) {
|
||||||
private val enumEntriesIntrinsic = context.wasmSymbols.enumEntriesIntrinsic
|
private val enumEntriesIntrinsic = context.wasmSymbols.enumEntriesIntrinsic
|
||||||
|
|
||||||
override fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
override fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean {
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ internal class InlineFunctionsSupport(mapping: NativeMapping) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: This is a bit hacky. Think about adopting persistent IR ideas.
|
// TODO: This is a bit hacky. Think about adopting persistent IR ideas.
|
||||||
internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : DefaultInlineFunctionResolver(context) {
|
internal class NativeInlineFunctionResolver(override val context: Context, val generationState: NativeGenerationState) : InlineFunctionResolverReplacingCoroutineIntrinsics(context) {
|
||||||
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
override fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction {
|
||||||
val function = super.getFunctionDeclaration(symbol)
|
val function = super.getFunctionDeclaration(symbol)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user