JS IR: introduce 'lower per module' mode

This mode is closer to how IC supposed to work - reusing work
from dependencies, not re-lowering them.
This commit is contained in:
Anton Bannykh
2021-06-18 14:25:01 +03:00
committed by TeamCityServer
parent a4cb70af31
commit eb0c13793b
4 changed files with 110 additions and 4 deletions
@@ -49,11 +49,13 @@ abstract class BasicIrBoxTest(
private fun getBoolean(s: String, default: Boolean) = System.getProperty(s)?.let { parseBoolean(it) } ?: default
private val lowerPerModule: Boolean = getBoolean("kotlin.js.ir.lowerPerModule")
override val skipRegularMode: Boolean = getBoolean("kotlin.js.ir.skipRegularMode")
override val runIrDce: Boolean = getBoolean("kotlin.js.ir.dce", true)
override val runIrDce: Boolean = !lowerPerModule && getBoolean("kotlin.js.ir.dce", true)
override val runIrPir: Boolean = getBoolean("kotlin.js.ir.pir", true)
override val runIrPir: Boolean = !lowerPerModule && getBoolean("kotlin.js.ir.pir", true)
val runEs6Mode: Boolean = getBoolean("kotlin.js.ir.es6", false)
@@ -131,13 +133,14 @@ abstract class BasicIrBoxTest(
}
if (!skipRegularMode) {
val irFactory = if (lowerPerModule) PersistentIrFactory() else IrFactoryImpl
val compiledModule = compile(
project = config.project,
mainModule = MainModule.SourceFiles(filesToCompile),
analyzer = AnalyzerWithCompilerReport(config.configuration),
configuration = config.configuration,
phaseConfig = phaseConfig,
irFactory = IrFactoryImpl,
irFactory = irFactory,
allDependencies = resolvedLibraries,
friendDependencies = emptyList(),
mainArguments = mainCallParameters.run { if (shouldBeGenerated()) arguments() else null },
@@ -147,6 +150,7 @@ abstract class BasicIrBoxTest(
es6mode = runEs6Mode,
multiModule = splitPerModule || perModule,
propertyLazyInitialization = propertyLazyInitialization,
lowerPerModule = lowerPerModule
)
compiledModule.jsCode!!.writeTo(outputFile, config)