[JS IR] Memory consumption optimization

- Remove IR after JS AST generation
 - Remove JS AST after/during JS code generation
This commit is contained in:
Alexander Korepanov
2022-08-15 14:35:37 +02:00
committed by Space
parent 14b7db0187
commit 453faeaa45
8 changed files with 218 additions and 167 deletions
@@ -258,7 +258,7 @@ abstract class AbstractInvalidationTest : KotlinTestWithEnvironment() {
)
val rebuiltModules = mutableSetOf<String>()
val jsOutput = jsExecutableProducer.buildExecutable(true) { rebuiltModules += it }
val jsOutput = jsExecutableProducer.buildExecutable(multiModule = true, outJsProgram = true) { rebuiltModules += it }
verifyJsExecutableProducerBuildModules(projStep.id, rebuiltModules, projStep.dirtyJS)
verifyJsCode(projStep.id, testInfo.last().moduleName, jsOutput)
}
@@ -70,13 +70,9 @@ abstract class AbstractJsKLibABITestCase : AbstractKlibABITestCase() {
icCompatibleIr2Js = true
)
val transformer = IrModuleToJsTransformerTmp(
ir.context,
emptyList(),
relativeRequirePath = false
)
val transformer = IrModuleToJsTransformerTmp(ir.context, emptyList())
val compiledResult = transformer.generateModule(ir.allModules, setOf(TranslationMode.FULL_DCE_MINIMIZED_NAMES))
val compiledResult = transformer.generateModule(ir.allModules, setOf(TranslationMode.FULL_DCE_MINIMIZED_NAMES), false)
val dceOutput = compiledResult.outputs[TranslationMode.FULL_DCE_MINIMIZED_NAMES] ?: error("No DCE output")
@@ -122,4 +118,4 @@ abstract class AbstractJsKLibABITestCase : AbstractKlibABITestCase() {
companion object {
private const val BIN_DIR_NAME = "_bins_js"
}
}
}
@@ -109,7 +109,7 @@ class JsIrBackendFacade(
caches = testServices.jsIrIncrementalDataProvider.getCaches(),
relativeRequirePath = false
)
jsExecutableProducer.buildExecutable(it.perModule)
jsExecutableProducer.buildExecutable(it.perModule, true)
},
tsDefinitions = null
)
@@ -173,11 +173,7 @@ class JsIrBackendFacade(
val dceOutputFile = File(JsEnvironmentConfigurator.getJsModuleArtifactPath(testServices, module.name, TranslationMode.FULL_DCE_MINIMIZED_NAMES) + ".js")
if (!esModules) {
if (runNewIr2Js) {
val transformer = IrModuleToJsTransformerTmp(
loweredIr.context,
mainArguments,
relativeRequirePath = false
)
val transformer = IrModuleToJsTransformerTmp(loweredIr.context, mainArguments)
// If runIrDce then include DCE results
// If perModuleOnly then skip whole program
@@ -186,7 +182,8 @@ class JsIrBackendFacade(
.filter { (!it.dce || runIrDce) && (!perModuleOnly || it.perModule) }
.filter { it.dce == it.minimizedMemberNames }
.toSet()
return BinaryArtifacts.Js.JsIrArtifact(outputFile, transformer.generateModule(loweredIr.allModules, translationModes)).dump(module)
val compilationOut = transformer.generateModule(loweredIr.allModules, translationModes, false)
return BinaryArtifacts.Js.JsIrArtifact(outputFile, compilationOut).dump(module)
} else {
val transformer = IrModuleToJsTransformer(
loweredIr.context,