From d0b4ca343b879d50e6cfab7463b24dff2915df9c Mon Sep 17 00:00:00 2001 From: Ivan Kylchik Date: Wed, 24 Jan 2024 15:56:48 +0100 Subject: [PATCH] [IR] Move some of extensions from `FunctionInlining` into `IrInlineUtils` #KT-64806 --- .../kotlin/backend/common/ir/IrInlineUtils.kt | 1 - .../backend/common/lower/LocalDeclarationsLowering.kt | 1 - .../backend/common/lower/SharedVariablesLowering.kt | 2 +- .../backend/common/lower/inline/FunctionInlining.kt | 6 ------ .../backend/common/lower/inline/LocalClasses.kt | 2 ++ ...arkNecessaryInlinedClassesAsRegeneratedLowering.kt | 2 +- .../src/org/jetbrains/kotlin/ir/util/IrInlineUtils.kt | 11 ++++++++++- 7 files changed, 14 insertions(+), 11 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt index bf2ba7c3f75..c9e533fda8e 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrInlineUtils.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.backend.common.ir import org.jetbrains.kotlin.backend.common.lower.LoweredStatementOrigins.INLINED_FUNCTION_ARGUMENTS import org.jetbrains.kotlin.backend.common.lower.LoweredStatementOrigins.INLINED_FUNCTION_DEFAULT_ARGUMENTS import org.jetbrains.kotlin.backend.common.lower.VariableRemapper -import org.jetbrains.kotlin.backend.common.lower.inline.isAdaptedFunctionReference import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt index 6560d4aa09c..716e0cc697f 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString import org.jetbrains.kotlin.ir.util.isFunctionInlining -import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter import org.jetbrains.kotlin.backend.common.runOnFilePostfix import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibility diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt index 61a90d47a23..543b17b35bf 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/SharedVariablesLowering.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.BackendContext import org.jetbrains.kotlin.backend.common.BodyLoweringPass -import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement @@ -27,6 +26,7 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.util.dump +import org.jetbrains.kotlin.ir.util.isInlineParameter import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index 2ea85afb75c..ff9b949fb38 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -38,12 +38,6 @@ import org.jetbrains.kotlin.ir.visitors.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.OperatorNameConventions -fun IrValueParameter.isInlineParameter(type: IrType = this.type) = - index >= 0 && !isNoinline && !type.isNullable() && (type.isFunction() || type.isSuspendFunction()) - -fun IrExpression.isAdaptedFunctionReference() = - this is IrBlock && this.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE - interface InlineFunctionResolver { fun getFunctionDeclaration(symbol: IrFunctionSymbol): IrFunction = symbol.owner fun shouldExcludeFunctionFromInlining(symbol: IrFunctionSymbol): Boolean { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt index ed680ba1ab2..5e50fe84450 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt @@ -14,6 +14,8 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl +import org.jetbrains.kotlin.ir.util.isAdaptedFunctionReference +import org.jetbrains.kotlin.ir.util.isInlineParameter import org.jetbrains.kotlin.ir.util.setDeclarationsParent import org.jetbrains.kotlin.ir.visitors.* diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MarkNecessaryInlinedClassesAsRegeneratedLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MarkNecessaryInlinedClassesAsRegeneratedLowering.kt index 40f6f67b2d8..a4df47c7f85 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MarkNecessaryInlinedClassesAsRegeneratedLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/MarkNecessaryInlinedClassesAsRegeneratedLowering.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.backend.jvm.lower import org.jetbrains.kotlin.backend.common.FileLoweringPass +import org.jetbrains.kotlin.backend.common.lower.LoweredStatementOrigins.INLINED_FUNCTION_REFERENCE import org.jetbrains.kotlin.ir.util.inlineDeclaration import org.jetbrains.kotlin.ir.util.isFunctionInlining -import org.jetbrains.kotlin.backend.common.lower.inline.INLINED_FUNCTION_REFERENCE import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.functionInliningPhase diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrInlineUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrInlineUtils.kt index 648565d4d8d..fbebf617dcf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrInlineUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrInlineUtils.kt @@ -7,8 +7,11 @@ package org.jetbrains.kotlin.ir.util import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrFileSymbol +import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.isNullable val IrInlinedFunctionBlock.inlineDeclaration: IrDeclaration get() = when (val element = inlinedElement) { @@ -39,4 +42,10 @@ val IrContainerExpression.innerInlinedBlockOrThis: IrContainerExpression val IrReturnableBlock.inlineFunction: IrFunction? get() = (this.statements.singleOrNull() as? IrInlinedFunctionBlock)?.inlineFunction val IrReturnableBlock.sourceFileSymbol: IrFileSymbol? - get() = inlineFunction?.fileOrNull?.symbol \ No newline at end of file + get() = inlineFunction?.fileOrNull?.symbol + +fun IrValueParameter.isInlineParameter(type: IrType = this.type) = + index >= 0 && !isNoinline && !type.isNullable() && (type.isFunction() || type.isSuspendFunction()) + +fun IrExpression.isAdaptedFunctionReference() = + this is IrBlock && this.origin == IrStatementOrigin.ADAPTED_FUNCTION_REFERENCE