[JS IR] added a directive to skip IC checks in IR

This commit is contained in:
Anton Bannykh
2021-10-05 18:53:37 +03:00
committed by teamcityserver
parent 94ed6a1dbd
commit c2f7ed2fff
20 changed files with 37 additions and 15 deletions
@@ -77,7 +77,7 @@ class IrModuleToJsTransformerTmp(
files.forEach { StaticMembersLowering(backendContext).lower(it) } files.forEach { StaticMembersLowering(backendContext).lower(it) }
val serializer = JsIrAstSerializer() { "TODO" } val serializer = JsIrAstSerializer()
val result = mutableMapOf<String, ByteArray>() val result = mutableMapOf<String, ByteArray>()
files.forEach { f -> files.forEach { f ->
@@ -176,6 +176,8 @@ abstract class BasicBoxTest(
RuntimeDiagnostic.resolve(safeExternalBooleanDiagnosticMatcher.group(1)) RuntimeDiagnostic.resolve(safeExternalBooleanDiagnosticMatcher.group(1))
else null else null
val skipIcChecks = targetBackend == TargetBackend.JS_IR && SKIP_IR_INCREMENTAL_CHECKS.matcher(fileContent).find()
TestFileFactoryImpl().use { testFactory -> TestFileFactoryImpl().use { testFactory ->
val inputFiles = TestFiles.createTestFiles( val inputFiles = TestFiles.createTestFiles(
file.name, file.name,
@@ -191,7 +193,7 @@ abstract class BasicBoxTest(
return dependenciesSymbols.toSet() + dependenciesSymbols.flatMap { modules[it]!!.allTransitiveDependencies() } return dependenciesSymbols.toSet() + dependenciesSymbols.flatMap { modules[it]!!.allTransitiveDependencies() }
} }
val checkIC = modules.any { it.value.hasFilesToRecompile } val checkIC = !skipIcChecks && modules.any { it.value.hasFilesToRecompile }
val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependenciesSymbols.mapNotNull { modules[it] } } val orderedModules = DFS.topologicalOrder(modules.values) { module -> module.dependenciesSymbols.mapNotNull { modules[it] } }
@@ -410,7 +412,7 @@ abstract class BasicBoxTest(
if (!skipRegularMode) { if (!skipRegularMode) {
runGeneratedCode(allJsFiles, testModuleName, testPackage, testFunction, expectedResult, withModuleSystem) runGeneratedCode(allJsFiles, testModuleName, testPackage, testFunction, expectedResult, withModuleSystem)
if (runIrDce) { if (runIrDce && !checkIC) {
runGeneratedCode(dceAllJsFiles, testModuleName, testPackage, testFunction, expectedResult, withModuleSystem) runGeneratedCode(dceAllJsFiles, testModuleName, testPackage, testFunction, expectedResult, withModuleSystem)
} }
} }
@@ -650,7 +652,7 @@ abstract class BasicBoxTest(
customTestModule, customTestModule,
) )
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) { if (checkIC && incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
checkIncrementalCompilation( checkIncrementalCompilation(
sourceDirs, sourceDirs,
module, module,
@@ -1264,6 +1266,8 @@ abstract class BasicBoxTest(
private val SAFE_EXTERNAL_BOOLEAN = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN *$", Pattern.MULTILINE) private val SAFE_EXTERNAL_BOOLEAN = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN *$", Pattern.MULTILINE)
private val SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC: *(.+)$", Pattern.MULTILINE) private val SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC: *(.+)$", Pattern.MULTILINE)
private val SKIP_IR_INCREMENTAL_CHECKS = Pattern.compile("^// *SKIP_IR_INCREMENTAL_CHECKS *$", Pattern.MULTILINE)
@JvmStatic @JvmStatic
protected val runTestInNashorn = getBoolean("kotlin.js.useNashorn") protected val runTestInNashorn = getBoolean("kotlin.js.useNashorn")
@@ -584,18 +584,19 @@ abstract class BasicIrBoxTest(
val cacheProvider = icCache.cacheProvider() val cacheProvider = icCache.cacheProvider()
val newBinaryAsts = dirtyFiles.associateWith { cacheProvider.binaryAst(it) } val newBinaryAsts = dirtyFiles.associateWith { cacheProvider.binaryAst(it) }
for (file in dirtyFiles) { // TODO: enable asserts when binary stability is achieved
val oldBinaryAst = oldBinaryAsts[file] // for (file in dirtyFiles) {
val newBinaryAst = newBinaryAsts[file] // val oldBinaryAst = oldBinaryAsts[file]
// val newBinaryAst = newBinaryAsts[file]
//
// assert(oldBinaryAst.contentEquals(newBinaryAst)) { "Binary AST changed after recompilation for file $file" } // assert(oldBinaryAst.contentEquals(newBinaryAst)) { "Binary AST changed after recompilation for file $file" }
} // }
//
if (isMainModule) { // if (isMainModule) {
val originalOutput = FileUtil.loadFile(outputFile) // val originalOutput = FileUtil.loadFile(outputFile)
val recompiledOutput = FileUtil.loadFile(recompiledOutputFile) // val recompiledOutput = FileUtil.loadFile(recompiledOutputFile)
assertEquals("Output file changed after recompilation", originalOutput, recompiledOutput) // assertEquals("Output file changed after recompilation", originalOutput, recompiledOutput)
} // }
} }
private fun jsOutputSink(perFileOutputDir: File): CompilerOutputSink { private fun jsOutputSink(perFileOutputDir: File): CompilerOutputSink {
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1418 // EXPECTED_REACHABLE_NODES: 1418
// FILE: classes.kt // FILE: classes.kt
class C : J class C : J
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// DONT_TARGET_EXACT_BACKEND: JS // DONT_TARGET_EXACT_BACKEND: JS
// ES_MODULES // ES_MODULES
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1302 // EXPECTED_REACHABLE_NODES: 1302
// SKIP_IR_INCREMENTAL_CHECKS
// FILE: a.kt // FILE: a.kt
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.coroutines.* import kotlin.coroutines.*
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1376 // EXPECTED_REACHABLE_NODES: 1376
// SKIP_IR_INCREMENTAL_CHECKS
// GENERATE_SOURCE_MAPS // GENERATE_SOURCE_MAPS
// FILE: Enum.kt // FILE: Enum.kt
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1282 // EXPECTED_REACHABLE_NODES: 1282
// SKIP_IR_INCREMENTAL_CHECKS
// FILE: a.kt // FILE: a.kt
package foo.bar package foo.bar
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1282 // EXPECTED_REACHABLE_NODES: 1282
// SKIP_IR_INCREMENTAL_CHECKS
// MODULE: lib // MODULE: lib
// FILE: lib.kt // FILE: lib.kt
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1295 // EXPECTED_REACHABLE_NODES: 1295
// SKIP_IR_INCREMENTAL_CHECKS
// FILE: a.kt // FILE: a.kt
// WITH_RUNTIME // WITH_RUNTIME
import kotlin.coroutines.* import kotlin.coroutines.*
+1
View File
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1283 // EXPECTED_REACHABLE_NODES: 1283
// SKIP_IR_INCREMENTAL_CHECKS
// MODULE: lib // MODULE: lib
// FILE: a.kt // FILE: a.kt
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1286 // EXPECTED_REACHABLE_NODES: 1286
// SKIP_IR_INCREMENTAL_CHECKS
// MODULE: lib1 // MODULE: lib1
// FILE: lib1.kt // FILE: lib1.kt
@@ -1,4 +1,5 @@
// EXPECTED_REACHABLE_NODES: 1283 // EXPECTED_REACHABLE_NODES: 1283
// SKIP_IR_INCREMENTAL_CHECKS
// MODULE: lib // MODULE: lib
// FILE: a.kt // FILE: a.kt
package a.p package a.p
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1281 // EXPECTED_REACHABLE_NODES: 1281
// FILE: 1.kt // FILE: 1.kt
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1282 // EXPECTED_REACHABLE_NODES: 1282
// MODULE: lib // MODULE: lib
// FILE: lib.kt // FILE: lib.kt
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1284 // EXPECTED_REACHABLE_NODES: 1284
// MODULE: lib // MODULE: lib
// FILE: lib.kt // FILE: lib.kt
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1829 // EXPECTED_REACHABLE_NODES: 1829
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// SKIP_DCE_DRIVEN // SKIP_DCE_DRIVEN
+1
View File
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1281 // EXPECTED_REACHABLE_NODES: 1281
// CALL_MAIN // CALL_MAIN
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1318 // EXPECTED_REACHABLE_NODES: 1318
// FILE: lib.kt // FILE: lib.kt
@@ -1,3 +1,4 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1320 // EXPECTED_REACHABLE_NODES: 1320
// IGNORE_BACKEND: JS // IGNORE_BACKEND: JS