From d17794481d209228662b4d39b3f6a5d9c967a3ed Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Wed, 19 Oct 2022 13:48:25 +0200 Subject: [PATCH] [JS IR] Replace IrModuleToJsTransformer with IrModuleToJsTransformerTmp --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 33 ++---------- .../kotlin/ir/backend/js/compiler.kt | 16 ------ .../JsEnvironmentConfigurationDirectives.kt | 5 -- .../kotlin/benchmarks/GenerateIrRuntime.kt | 7 +-- .../js/test/converters/JsIrBackendFacade.kt | 52 ++++++------------- .../kotlin/js/test/ir/AbstractJsIrTest.kt | 1 - 6 files changed, 25 insertions(+), 89 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 4f552d95c55..cc4893e137b 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 @@ -82,15 +82,10 @@ class K2JsIrCompiler : CLICompiler() { val mainCallArguments: List? ) { private fun lowerIr(): LoweredIr { - val irFactory = when { - arguments.irNewIr2Js -> IrFactoryImplForJsIC(WholeWorldStageController()) - else -> IrFactoryImpl - } - return compile( module, phaseConfig, - irFactory, + IrFactoryImplForJsIC(WholeWorldStageController()), keep = arguments.irKeep?.split(",") ?.filterNot { it.isEmpty() } ?.toSet() @@ -106,7 +101,7 @@ class K2JsIrCompiler : CLICompiler() { messageCollector ), granularity = arguments.granularity, - icCompatibleIr2Js = arguments.irNewIr2Js, + icCompatibleIr2Js = true, ) } @@ -123,22 +118,6 @@ class K2JsIrCompiler : CLICompiler() { val out = generator.generateJsCode(relativeRequirePath = true, outJsProgram = false) return TransformResult(out, dts) } - - fun compileAndTransformIrOld(): TransformResult { - val ir = lowerIr() - val transformer = IrModuleToJsTransformer( - ir.context, - mainCallArguments, - fullJs = !arguments.irDce, - dceJs = arguments.irDce, - multiModule = arguments.irPerModule, - relativeRequirePath = true, - moduleToName = ir.moduleFragmentToUniqueName - ) - - val result = transformer.generateModule(ir.allModules) - return TransformResult(result.outputs.values.single(), result.tsDefinitions ?: error("No ts definitions")) - } } @@ -427,12 +406,8 @@ class K2JsIrCompiler : CLICompiler() { val start = System.currentTimeMillis() try { - - val (outputs, tsDefinitions) = if (arguments.irNewIr2Js) { - Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments).compileAndTransformIrNew() - } else { - Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments).compileAndTransformIrOld() - } + val ir2JsTransformer = Ir2JsTransformer(arguments, module, phaseConfig, messageCollector, mainCallArguments) + val (outputs, tsDefinitions) = ir2JsTransformer.compileAndTransformIrNew() messageCollector.report(INFO, "Executable production duration: ${System.currentTimeMillis() - start}ms") diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt index c4bc7704a91..530af578e7e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.backend.js.lower.collectNativeImplementations import org.jetbrains.kotlin.ir.backend.js.lower.generateJsTests import org.jetbrains.kotlin.ir.backend.js.lower.moveBodilessDeclarationsToSeparatePlace import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker -import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode import org.jetbrains.kotlin.ir.backend.js.utils.NameTables import org.jetbrains.kotlin.ir.declarations.IrFactory @@ -160,21 +159,6 @@ fun compileIr( return LoweredIr(context, moduleFragment, allModules, moduleToName) } -fun generateJsCode( - context: JsIrBackendContext, - moduleFragment: IrModuleFragment, - nameTables: NameTables -): String { - if (context.configuration.getBoolean(JSConfigurationKeys.GENERATE_POLYFILLS)) { - collectNativeImplementations(context, moduleFragment) - } - moveBodilessDeclarationsToSeparatePlace(context, moduleFragment) - jsPhases.invokeToplevel(PhaseConfig(jsPhases), context, listOf(moduleFragment)) - - val transformer = IrModuleToJsTransformer(context, null, true, nameTables) - return transformer.generateModule(listOf(moduleFragment)).outputs[TranslationMode.FULL]!!.jsCode -} - fun CompilationOutputs.writeSourceMapIfPresent(outputJsFile: File) { sourceMap?.let { val mapFile = outputJsFile.resolveSibling("${outputJsFile.name}.map") diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/JsEnvironmentConfigurationDirectives.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/JsEnvironmentConfigurationDirectives.kt index 05bc1769bc2..a986aac460e 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/JsEnvironmentConfigurationDirectives.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/directives/JsEnvironmentConfigurationDirectives.kt @@ -245,11 +245,6 @@ object JsEnvironmentConfigurationDirectives : SimpleDirectivesContainer() { applicability = DirectiveApplicability.Global ) - val RUN_NEW_IR_2_JS by directive( - description = "", - applicability = DirectiveApplicability.Global - ) - val NO_COMMON_FILES by directive( """ Don't added helper files to prevent linking issues. diff --git a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt index f034cb08d98..6719c9da035 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/benchmarks/GenerateIrRuntime.kt @@ -37,7 +37,8 @@ import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc -import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformerTmp +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.util.ExternalDependenciesGenerator @@ -608,9 +609,9 @@ class GenerateIrRuntime { jsPhases.invokeToplevel(phaseConfig, context, listOf(module)) - val transformer = IrModuleToJsTransformer(context, null) + val transformer = IrModuleToJsTransformerTmp(context, null) - return transformer.generateModule(listOf(module)) + return transformer.generateModule(listOf(module), setOf(TranslationMode.PER_MODULE), false) } fun compile(files: List): String { diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt index 7390ace4605..3e8c8930dcc 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/converters/JsIrBackendFacade.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.js.test.converters import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap -import org.jetbrains.kotlin.backend.common.serialization.linkerissues.checkNoUnboundSymbols import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor import org.jetbrains.kotlin.cli.common.isWindows import org.jetbrains.kotlin.config.CommonConfigurationKeys @@ -16,7 +15,6 @@ import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity import org.jetbrains.kotlin.ir.backend.js.ic.JsExecutableProducer import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerDesc -import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformerTmp import org.jetbrains.kotlin.ir.backend.js.SourceMapsInfo import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.TranslationMode @@ -24,7 +22,6 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.irMessageLogger -import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy import org.jetbrains.kotlin.js.config.JSConfigurationKeys import org.jetbrains.kotlin.js.test.handlers.JsBoxRunner.Companion.TEST_FUNCTION import org.jetbrains.kotlin.js.test.utils.extractTestPackage @@ -77,7 +74,6 @@ class JsIrBackendFacade( val splitPerModule = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives val splitPerFile = JsEnvironmentConfigurationDirectives.SPLIT_PER_FILE in module.directives val perModule = JsEnvironmentConfigurationDirectives.PER_MODULE in module.directives - val runNewIr2Js = JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS in module.directives val keep = module.directives[JsEnvironmentConfigurationDirectives.KEEP].toSet() val granularity = when { @@ -151,7 +147,7 @@ class JsIrBackendFacade( safeExternalBoolean = JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN in module.directives, safeExternalBooleanDiagnostic = module.directives[JsEnvironmentConfigurationDirectives.SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC].singleOrNull(), granularity = granularity, - icCompatibleIr2Js = runNewIr2Js, + icCompatibleIr2Js = true, ) return loweredIr2JsArtifact(module, loweredIr, granularity) @@ -166,43 +162,29 @@ class JsIrBackendFacade( .run { if (shouldBeGenerated()) arguments() else null } val runIrDce = JsEnvironmentConfigurationDirectives.RUN_IR_DCE in module.directives val onlyIrDce = JsEnvironmentConfigurationDirectives.ONLY_IR_DCE in module.directives - val runNewIr2Js = JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS in module.directives val perModuleOnly = JsEnvironmentConfigurationDirectives.SPLIT_PER_MODULE in module.directives val isEsModules = JsEnvironmentConfigurationDirectives.ES_MODULES in module.directives || module.directives[JsEnvironmentConfigurationDirectives.MODULE_KIND].contains(ModuleKind.ES) val outputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name, TranslationMode.FULL) + module.kind.extension) - if (runNewIr2Js) { - val transformer = IrModuleToJsTransformerTmp( - loweredIr.context, - mainArguments, - moduleToName = JsIrModuleToPath( - testServices, - isEsModules && granularity != JsGenerationGranularity.WHOLE_PROGRAM - ) + val transformer = IrModuleToJsTransformerTmp( + loweredIr.context, + mainArguments, + moduleToName = JsIrModuleToPath( + testServices, + isEsModules && granularity != JsGenerationGranularity.WHOLE_PROGRAM ) - // If runIrDce then include DCE results - // If perModuleOnly then skip whole program - // (it.dce => runIrDce) && (perModuleOnly => it.perModule) - val translationModes = TranslationMode.values() - .filter { (it.dce || !onlyIrDce) && (!it.dce || runIrDce) && (!perModuleOnly || it.perModule) } - .filter { it.dce == it.minimizedMemberNames } - .toSet() - val compilationOut = transformer.generateModule(loweredIr.allModules, translationModes, false) - return BinaryArtifacts.Js.JsIrArtifact(outputFile, compilationOut).dump(module) - } else { - val transformer = IrModuleToJsTransformer( - loweredIr.context, - mainArguments, - fullJs = true, - dceJs = runIrDce, - multiModule = granularity == JsGenerationGranularity.PER_MODULE, - relativeRequirePath = false - ) - - return BinaryArtifacts.Js.JsIrArtifact(outputFile, transformer.generateModule(loweredIr.allModules)).dump(module) - } + ) + // If runIrDce then include DCE results + // If perModuleOnly then skip whole program + // (it.dce => runIrDce) && (perModuleOnly => it.perModule) + val translationModes = TranslationMode.values() + .filter { (it.dce || !onlyIrDce) && (!it.dce || runIrDce) && (!perModuleOnly || it.perModule) } + .filter { it.dce == it.minimizedMemberNames } + .toSet() + val compilationOut = transformer.generateModule(loweredIr.allModules, translationModes, false) + return BinaryArtifacts.Js.JsIrArtifact(outputFile, compilationOut).dump(module) } private fun IrModuleFragment.resolveTestPathes() { diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsIrTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsIrTest.kt index ddcf1951fed..9b1658c18f4 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsIrTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/AbstractJsIrTest.kt @@ -69,7 +69,6 @@ abstract class AbstractJsIrTest( if (getBoolean("kotlin.js.ir.klibMainModule")) +JsEnvironmentConfigurationDirectives.KLIB_MAIN_MODULE if (getBoolean("kotlin.js.ir.perModule", true)) +JsEnvironmentConfigurationDirectives.PER_MODULE if (getBoolean("kotlin.js.ir.dce", true)) +JsEnvironmentConfigurationDirectives.RUN_IR_DCE - if (getBoolean("kotlin.js.ir.newIr2Js", true)) +JsEnvironmentConfigurationDirectives.RUN_NEW_IR_2_JS -JsEnvironmentConfigurationDirectives.GENERATE_NODE_JS_RUNNER }