[JS IR] Pass a js generation granularity param to IC infrastructure

This commit is contained in:
Alexander Korepanov
2022-10-18 17:03:23 +02:00
committed by Space Team
parent f2971504e1
commit 621e361366
4 changed files with 18 additions and 14 deletions
@@ -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<K2JSCompilerArguments>() {
override val defaultPerformanceManager: CommonCompilerPerformanceManager =
@@ -76,12 +83,6 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
val mainCallArguments: List<String>?
) {
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<K2JSCompilerArguments>() {
arguments.irSafeExternalBooleanDiagnostic,
messageCollector
),
granularity = granularity,
granularity = arguments.granularity,
icCompatibleIr2Js = arguments.irNewIr2Js,
)
}
@@ -290,7 +291,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
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()
@@ -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<FqName> = emptySet(),
es6mode: Boolean = false
) : JsIrCompilerICInterface {
@@ -41,6 +43,7 @@ class JsIrCompilerWithIC(
keep = emptySet(),
configuration = configuration,
es6mode = es6mode,
granularity = granularity,
icCompatibleIr2Js = IcCompatibleIr2Js.IC_MODE,
)
}
@@ -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)
@@ -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()