[JS IR] Enable IR dump for IC invalidation tests

Support 'fd.kotlin.js.debugMode' property in IC invalidation tests.
This commit is contained in:
Alexander Korepanov
2023-01-23 13:12:49 +01:00
committed by Space Team
parent c58314fddf
commit 1ec88ff560
6 changed files with 47 additions and 18 deletions
@@ -682,6 +682,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
mainModule,
cfg,
arguments.granularity,
PhaseConfig(jsPhases),
es6mode = arguments.useEsClasses
)
}
@@ -26,6 +26,7 @@ class JsIrCompilerWithIC(
private val mainModule: IrModuleFragment,
configuration: CompilerConfiguration,
granularity: JsGenerationGranularity,
private val phaseConfig: PhaseConfig,
exportedDeclarations: Set<FqName> = emptySet(),
es6mode: Boolean = false
) : JsIrCompilerICInterface {
@@ -64,7 +65,7 @@ class JsIrCompilerWithIC(
generateJsTests(context, mainModule)
lowerPreservingTags(allModules, context, PhaseConfig(jsPhases), context.irFactory.stageController as WholeWorldStageController)
lowerPreservingTags(allModules, context, phaseConfig, context.irFactory.stageController as WholeWorldStageController)
val transformer = IrModuleToJsTransformer(context, mainArguments)
return transformer.makeIrFragmentsGenerators(dirtyFiles, allModules)
@@ -72,7 +73,10 @@ class JsIrCompilerWithIC(
}
fun lowerPreservingTags(
modules: Iterable<IrModuleFragment>, context: JsIrBackendContext, phaseConfig: PhaseConfig, controller: WholeWorldStageController
modules: Iterable<IrModuleFragment>,
context: JsIrBackendContext,
phaseConfig: PhaseConfig,
controller: WholeWorldStageController
) {
// Lower all the things
controller.currentStage = 0
@@ -4,6 +4,7 @@
package org.jetbrains.kotlin.ir.backend.js.ic
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.serialization.cityHash64
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.ir.backend.js.*
@@ -758,6 +759,7 @@ fun rebuildCacheForDirtyFiles(
currentIrModule,
configuration,
JsGenerationGranularity.PER_MODULE,
PhaseConfig(jsPhases),
exportedDeclarations,
es6mode
)
+21 -15
View File
@@ -346,6 +346,23 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean, firEnabled: B
setUpBoxTests()
}
fun Test.forwardProperties() {
val rootLocalProperties = Properties().apply {
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
load(it)
}
}
val allProperties = properties + rootLocalProperties
val prefixForPropertiesToForward = "fd."
for ((key, value) in allProperties) {
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
}
}
}
fun Test.setUpBoxTests() {
workingDir = rootDir
dependsOn(antLauncherJar)
@@ -362,20 +379,7 @@ fun Test.setUpBoxTests() {
.forUseAtConfigurationTime().orNull ?: "false"
)
val rootLocalProperties = Properties().apply {
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
load(it)
}
}
val allProperties = properties + rootLocalProperties
val prefixForPropertiesToForward = "fd."
for ((key, value) in allProperties) {
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
}
}
forwardProperties()
}
val test = projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5, maxHeapSizeMb = 4096) {
@@ -507,8 +511,10 @@ projectTest("invalidationTest", jUnitMode = JUnitMode.JUnit4) {
systemProperty("kotlin.js.stdlib.klib.path", "libraries/stdlib/js-ir/build/libs/kotlin-stdlib-js-ir-js-$version.klib")
systemProperty("kotlin.js.test.root.out.dir", "$buildDir/")
forwardProperties()
}
tasks.named("check") {
dependsOn(runMocha)
}
}
@@ -10,6 +10,8 @@ import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.local.CoreLocalFileSystem
import com.intellij.psi.PsiManager
import com.intellij.psi.SingleRootFileViewProvider
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
@@ -36,6 +38,7 @@ import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.DebugMode
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
import org.jetbrains.kotlin.test.TargetBackend
@@ -285,6 +288,18 @@ abstract class AbstractInvalidationTest(
}
}
private fun getPhaseConfig(stepId: Int): PhaseConfig {
if (DebugMode.fromSystemProperty("kotlin.js.debugMode") < DebugMode.SUPER_DEBUG) {
return PhaseConfig(jsPhases)
}
return PhaseConfig(
jsPhases,
dumpToDirectory = buildDir.resolve("irdump").resolve("step-$stepId").path,
toDumpStateAfter = jsPhases.toPhaseMap().values.toSet()
)
}
fun execute() {
for (projStep in projectInfo.steps) {
val testInfo = projStep.order.map { setupTestStep(projStep, it, true) }
@@ -308,6 +323,7 @@ abstract class AbstractInvalidationTest(
mainModule,
cfg,
JsGenerationGranularity.PER_MODULE,
getPhaseConfig(projStep.id),
setOf(FqName(BOX_FUNCTION_NAME)),
targetBackend == TargetBackend.JS_IR_ES6
)
@@ -191,7 +191,7 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
irFactory = { IrFactoryImplForJsIC(WholeWorldStageController()) },
mainArguments = null,
compilerInterfaceFactory = { mainModule, cfg ->
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, setOf(BOX_FUN_FQN))
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, PhaseConfig(jsPhases), setOf(BOX_FUN_FQN))
}
)
val icCaches = cacheUpdater.actualizeCaches()