From 621e3613669aaebab0fe451403c28f83f698f231 Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Tue, 18 Oct 2022 17:03:23 +0200 Subject: [PATCH] [JS IR] Pass a js generation granularity param to IC infrastructure --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 17 +++++++++-------- .../kotlin/ir/backend/js/compilerWithIC.kt | 3 +++ .../kotlin/ir/backend/js/ic/CacheUpdater.kt | 3 ++- .../incremental/AbstractInvalidationTest.kt | 9 ++++----- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index f8ea209937b..9136aebe7e0 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -57,6 +57,13 @@ import org.jetbrains.kotlin.utils.join import java.io.File import java.io.IOException +private val K2JSCompilerArguments.granularity: JsGenerationGranularity + get() = when { + this.irPerModule -> JsGenerationGranularity.PER_MODULE + this.irPerFile -> JsGenerationGranularity.PER_FILE + else -> JsGenerationGranularity.WHOLE_PROGRAM + } + class K2JsIrCompiler : CLICompiler() { override val defaultPerformanceManager: CommonCompilerPerformanceManager = @@ -76,12 +83,6 @@ class K2JsIrCompiler : CLICompiler() { val mainCallArguments: List? ) { private fun lowerIr(): LoweredIr { - val granularity = when { - arguments.irPerModule -> JsGenerationGranularity.PER_MODULE - arguments.irPerFile -> JsGenerationGranularity.PER_FILE - else -> JsGenerationGranularity.WHOLE_PROGRAM - } - val irFactory = when { arguments.irNewIr2Js -> IrFactoryImplForJsIC(WholeWorldStageController()) else -> IrFactoryImpl @@ -105,7 +106,7 @@ class K2JsIrCompiler : CLICompiler() { arguments.irSafeExternalBooleanDiagnostic, messageCollector ), - granularity = granularity, + granularity = arguments.granularity, icCompatibleIr2Js = arguments.irNewIr2Js, ) } @@ -290,7 +291,7 @@ class K2JsIrCompiler : CLICompiler() { compilerConfiguration = configurationJs, irFactory = { IrFactoryImplForJsIC(WholeWorldStageController()) }, mainArguments = mainCallArguments, - compilerInterfaceFactory = { mainModule, cfg -> JsIrCompilerWithIC(mainModule, cfg) } + compilerInterfaceFactory = { mainModule, cfg -> JsIrCompilerWithIC(mainModule, cfg, arguments.granularity) } ) var tp = System.currentTimeMillis() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compilerWithIC.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compilerWithIC.kt index 063d71b73f6..5c62bd2b3d7 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compilerWithIC.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compilerWithIC.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.PhaserState import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI +import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity import org.jetbrains.kotlin.ir.backend.js.ic.JsIrCompilerICInterface import org.jetbrains.kotlin.ir.backend.js.lower.collectNativeImplementations import org.jetbrains.kotlin.ir.backend.js.lower.generateJsTests @@ -23,6 +24,7 @@ import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors class JsIrCompilerWithIC( private val mainModule: IrModuleFragment, configuration: CompilerConfiguration, + granularity: JsGenerationGranularity, exportedDeclarations: Set = emptySet(), es6mode: Boolean = false ) : JsIrCompilerICInterface { @@ -41,6 +43,7 @@ class JsIrCompilerWithIC( keep = emptySet(), configuration = configuration, es6mode = es6mode, + granularity = granularity, icCompatibleIr2Js = IcCompatibleIr2Js.IC_MODE, ) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt index b6762ed0f5c..b66b6ebbd4e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.ic import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.ir.backend.js.* +import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrFragmentAndBinaryAst import org.jetbrains.kotlin.ir.declarations.* @@ -755,7 +756,7 @@ fun rebuildCacheForDirtyFiles( currentIrModule.files.filter { irFile -> irFile.fileEntry.name in files } } ?: currentIrModule.files - val compilerWithIC = JsIrCompilerWithIC(currentIrModule, configuration, exportedDeclarations) + val compilerWithIC = JsIrCompilerWithIC(currentIrModule, configuration, JsGenerationGranularity.PER_MODULE, exportedDeclarations) // Load declarations referenced during `context` initialization jsIrLinker.loadUnboundSymbols(true) diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt index 79947eb6848..493bd2244f7 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt @@ -20,12 +20,9 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.ic.* -import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker -import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsIrFragmentAndBinaryAst import org.jetbrains.kotlin.ir.backend.js.SourceMapsInfo +import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.safeModuleName -import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC import org.jetbrains.kotlin.js.config.JSConfigurationKeys @@ -239,7 +236,9 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() { compilerConfiguration = configuration, irFactory = { IrFactoryImplForJsIC(WholeWorldStageController()) }, mainArguments = null, - compilerInterfaceFactory = { mainModule, cfg -> JsIrCompilerWithIC(mainModule, cfg, setOf(FqName(BOX_FUNCTION_NAME))) } + compilerInterfaceFactory = { mainModule, cfg -> + JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, setOf(FqName(BOX_FUNCTION_NAME))) + } ) val icCaches = cacheUpdater.actualizeCaches()