From a20250c2aae35bab1117c6c87bf2fbbb6cfad8a5 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Tue, 26 Feb 2019 18:33:05 +0300 Subject: [PATCH] [kotlin compiler][update] 1.3.30-dev-2076 Move to the new IrReturnableBlock in the upstream. Eliminate KonanIrReturnableBlock. (cherry picked from commit 08405fc9fcd7d2a844a221524bfa7018ee80be18) --- .../kotlin/backend/konan/ir/KonanIr.kt | 45 ------------------- .../kotlin/backend/konan/llvm/IrToBitcode.kt | 2 +- .../konan/lower/FinallyBlocksLowering.kt | 5 +-- .../backend/konan/lower/FunctionInlining.kt | 10 ++--- .../konan/optimizations/Devirtualization.kt | 18 ++++---- backend.native/tests/build.gradle | 2 +- gradle.properties | 6 +-- 7 files changed, 20 insertions(+), 68 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt index 5412ea0e2ea..262ebbc519b 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/KonanIr.kt @@ -218,49 +218,4 @@ internal class IrPrivateClassReferenceImpl(startOffset: Int, { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitClassReference(this, data) -} - -class KonanIrReturnableBlockImpl( - startOffset: Int, - endOffset: Int, - type: IrType, - override val symbol: IrReturnableBlockSymbol, - origin: IrStatementOrigin? = null, - val sourceFile: IrFile? = null -) : - IrContainerExpressionBase(startOffset, endOffset, type, origin), - IrReturnableBlock { - - override val descriptor = symbol.descriptor - - constructor( - startOffset: Int, - endOffset: Int, - type: IrType, - symbol: IrReturnableBlockSymbol, - origin: IrStatementOrigin?, - statements: List, - sourceFile: IrFile? = null - ) : this(startOffset, endOffset, type, symbol, origin, sourceFile) { - this.statements.addAll(statements) - } - - override val sourceFileName: String = sourceFile?.fileEntry?.name ?: "no source file" - - init { - symbol.bind(this) - } - - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitBlock(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - statements.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - statements.forEachIndexed { i, irStatement -> - statements[i] = irStatement.transform(transformer, data) - } - } } \ No newline at end of file diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 5695fbc2750..65b742852a2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -1575,7 +1575,7 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map Unit) = - KonanIrReturnableBlockImpl(startOffset, endOffset, type, symbol, null, + IrReturnableBlockImpl(startOffset, endOffset, type, symbol, null, IrBlockBuilder(context, scope, startOffset, endOffset, null, type) .block(body).statements) -} \ No newline at end of file +} diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt index 65ab8ee8622..c040b9156fb 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/FunctionInlining.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.descriptors.isFunctionInvoke import org.jetbrains.kotlin.backend.konan.descriptors.needsInlining import org.jetbrains.kotlin.backend.konan.descriptors.resolveFakeOverride -import org.jetbrains.kotlin.backend.konan.ir.KonanIrReturnableBlockImpl import org.jetbrains.kotlin.backend.konan.irasdescriptors.constructedClass import org.jetbrains.kotlin.backend.konan.irasdescriptors.file import org.jetbrains.kotlin.backend.konan.irasdescriptors.isInlineParameter @@ -34,6 +33,7 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrReturnableBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl @@ -118,7 +118,7 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid } } - private fun inlineFunction(callSite: IrCall, callee: IrFunction): KonanIrReturnableBlockImpl { + private fun inlineFunction(callSite: IrCall, callee: IrFunction): IrReturnableBlock { val copiedCallee = copyIrElement.copy(callee) as IrFunction val evaluationStatements = evaluateArguments(callSite, copiedCallee) @@ -161,14 +161,14 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid val isCoroutineIntrinsicCall = callSite.descriptor.isBuiltInSuspendCoroutineUninterceptedOrReturn( context.config.configuration.languageVersionSettings) - return KonanIrReturnableBlockImpl( + return IrReturnableBlockImpl( startOffset = startOffset, endOffset = endOffset, type = callSite.type, symbol = irReturnableBlockSymbol, origin = if (isCoroutineIntrinsicCall) CoroutineIntrinsicLambdaOrigin else null, statements = statements, - sourceFile = sourceFile + sourceFileSymbol = sourceFile.symbol ).apply { transformChildrenVoid(object : IrElementTransformerVoid() { override fun visitReturn(expression: IrReturn): IrExpression { @@ -402,4 +402,4 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid return evaluationStatements } } -} \ No newline at end of file +} diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt index e714afa7802..17d8bd3c522 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/Devirtualization.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.backend.konan.descriptors.isInterface import org.jetbrains.kotlin.backend.konan.ir.IrPrivateClassReferenceImpl import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCall import org.jetbrains.kotlin.backend.konan.ir.IrPrivateFunctionCallImpl -import org.jetbrains.kotlin.backend.konan.ir.KonanIrReturnableBlockImpl import org.jetbrains.kotlin.backend.konan.irasdescriptors.getErasedTypeClass import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.IrElement @@ -1375,7 +1374,6 @@ internal object Devirtualization { } return when (expression) { is IrReturnableBlock -> { - check(expression is KonanIrReturnableBlockImpl) // TODO: need to obtain IrFile rather than just sourceFileName val foldedReturnableBlockValues = returnableBlockValues[expression]!!.associate { it to fold(it, coercion, cast, false) } @@ -1387,14 +1385,14 @@ internal object Devirtualization { val oldSymbol = expression.symbol val newSymbol = IrReturnableBlockSymbolImpl(expression.descriptor) val transformedReturnableBlock = with(expression) { - KonanIrReturnableBlockImpl( - startOffset = startOffset, - endOffset = endOffset, - type = coercion.type, - symbol = newSymbol, - origin = origin, - statements = statements, - sourceFile = sourceFile) + IrReturnableBlockImpl( + startOffset = startOffset, + endOffset = endOffset, + type = coercion.type, + symbol = newSymbol, + origin = origin, + statements = statements, + sourceFileSymbol = sourceFileSymbol) } transformedReturnableBlock.transformChildrenVoid(object: IrElementTransformerVoid() { override fun visitExpression(expression: IrExpression): IrExpression { diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 08621bbb3d1..c9cb487cf14 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -48,7 +48,7 @@ repositories { dependencies { cli_bc project(path: ':backend.native', configuration: 'cli_bc') - update_tests (group: 'org', name: 'Kotlin_1330_CompilerAllPlugins', version: testKotlinVersion) { + update_tests (group: 'org', name: 'Kotlin_dev_CompilerAllPlugins', version: testKotlinVersion) { artifact { name = 'internal/kotlin-test-data' type = 'zip' diff --git a/gradle.properties b/gradle.properties index 52b57d8ccba..9b4671cb044 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,9 +18,9 @@ buildKotlinVersion=1.3.30-dev-1945 buildKotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-1945,pinned:true/artifacts/content/maven remoteRoot=konan_tests -kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_1330_CompilerAllPlugins),number:1.3.30-eap-8,branch:default:true,pinned:true/artifacts/content/maven -kotlinVersion=1.3.30-eap-8 -testKotlinVersion=1.3.30-eap-8 +kotlinCompilerRepo=https://teamcity.jetbrains.com/guestAuth/app/rest/builds/buildType:(id:Kotlin_dev_CompilerAllPlugins),number:1.3.30-dev-2076,branch:default:true,pinned:true/artifacts/content/maven +kotlinVersion=1.3.30-dev-2076 +testKotlinVersion=1.3.30-dev-2076 konanVersion=1.2.0 org.gradle.jvmargs='-Dfile.encoding=UTF-8' org.gradle.workers.max=4