KT-78726: Add a separate PhaseType.IrLinkage for IR Linker
diff --git a/build-common/src/org/jetbrains/kotlin/build/report/compilerPerformanceReporting.kt b/build-common/src/org/jetbrains/kotlin/build/report/compilerPerformanceReporting.kt
index 17d6c47..40a1f4e 100644
--- a/build-common/src/org/jetbrains/kotlin/build/report/compilerPerformanceReporting.kt
+++ b/build-common/src/org/jetbrains/kotlin/build/report/compilerPerformanceReporting.kt
@@ -32,6 +32,7 @@
PhaseType.IrPreLowering -> GradleBuildTime.IR_PRE_LOWERING
PhaseType.IrSerialization -> GradleBuildTime.IR_SERIALIZATION
PhaseType.KlibWriting -> GradleBuildTime.KLIB_WRITING
+ PhaseType.IrLinkage -> GradleBuildTime.IR_LINKAGE
PhaseType.IrLowering -> {
codegenTime += time
GradleBuildTime.IR_LOWERING
diff --git a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt
index e482b6a..16a6a39 100644
--- a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt
+++ b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/metrics/BuildTime.kt
@@ -125,6 +125,7 @@
IR_PRE_LOWERING(COMPILER_PERFORMANCE, "Compiler IR pre-lowering"),
IR_SERIALIZATION(COMPILER_PERFORMANCE, "Compiler IR Serialization"),
KLIB_WRITING(COMPILER_PERFORMANCE, "Compiler Klib writing"),
+ IR_LINKAGE(COMPILER_PERFORMANCE, "Compiler IR linkage"),
CODE_GENERATION(COMPILER_PERFORMANCE, "Compiler code generation"),
IR_LOWERING(CODE_GENERATION, "Compiler IR lowering"),
BACKEND(CODE_GENERATION, "Compiler backend"),
diff --git a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt
index 3ca65a1..6f1115c 100644
--- a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt
+++ b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt
@@ -344,6 +344,7 @@
unitStats.irPreLoweringStats?.millis?.let { put("Pre-lowering", it) }
unitStats.irSerializationStats?.millis?.let { put("Serialization", it) }
unitStats.klibWritingStats?.millis?.let { put("Klib writing", it) }
+ unitStats.irLinkageStats?.millis?.let { put("IR linker", it) }
unitStats.irLoweringStats?.millis?.let { put("Lowering", it) }
unitStats.backendStats?.millis?.let { put("Generation", it) }
}
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/stats/StatsCalculator.kt b/core/compiler.common/src/org/jetbrains/kotlin/stats/StatsCalculator.kt
index 84f3407..f475625 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/stats/StatsCalculator.kt
+++ b/core/compiler.common/src/org/jetbrains/kotlin/stats/StatsCalculator.kt
@@ -98,6 +98,7 @@
var irPreLoweringStats: Time = Time.ZERO
var irSerializationStats: Time = Time.ZERO
var klibWritingStats: Time = Time.ZERO
+ var irLinkageStats: Time = Time.ZERO
var irLoweringStats: Time = Time.ZERO
var backendStats: Time = Time.ZERO
var findJavaClassStats: SideStats = SideStats.EMPTY
@@ -129,6 +130,7 @@
irPreLoweringStats += moduleStats.irPreLoweringStats
irSerializationStats += moduleStats.irSerializationStats
klibWritingStats += moduleStats.klibWritingStats
+ irLinkageStats += moduleStats.irLinkageStats
irLoweringStats += moduleStats.irLoweringStats
backendStats += moduleStats.backendStats
findJavaClassStats += moduleStats.findJavaClassStats
@@ -161,6 +163,7 @@
irPreLoweringStats = irPreLoweringStats.let { if (total) it else it / size },
irSerializationStats = irSerializationStats.let { if (total) it else it / size },
klibWritingStats = klibWritingStats.let { if (total) it else it / size },
+ irLinkageStats = irLinkageStats.let { if (total) it else it / size },
irLoweringStats = irLoweringStats.let { if (total) it else it / size },
backendStats = backendStats.let { if (total) it else it / size },
findJavaClassStats = findJavaClassStats.let { if (total) it else it / size },
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/util/PerformanceManager.kt b/core/compiler.common/src/org/jetbrains/kotlin/util/PerformanceManager.kt
index 7d114ca..169aace 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/util/PerformanceManager.kt
+++ b/core/compiler.common/src/org/jetbrains/kotlin/util/PerformanceManager.kt
@@ -80,6 +80,7 @@
var irPreLoweringTime: Time? = null
var irSerializationTime: Time? = null
var klibWritingTime: Time? = null
+ var irLinkageTime: Time? = null
var irLoweringTime: Time? = null
var backendTime: Time? = null
@@ -91,6 +92,7 @@
PhaseType.IrPreLowering -> irPreLoweringTime = time
PhaseType.IrSerialization -> irSerializationTime = time
PhaseType.KlibWriting -> klibWritingTime = time
+ PhaseType.IrLinkage -> irLinkageTime = time
PhaseType.IrLowering -> irLoweringTime = time
PhaseType.Backend -> backendTime = time
}
@@ -120,6 +122,7 @@
irPreLoweringTime,
irSerializationTime,
klibWritingTime,
+ irLinkageTime,
irLoweringTime,
backendTime,
findJavaClassStats,
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStats.kt b/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStats.kt
index 02098a3..b29b25e 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStats.kt
+++ b/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStats.kt
@@ -46,6 +46,7 @@
val irPreLoweringStats: Time?,
val irSerializationStats: Time?,
val klibWritingStats: Time?,
+ val irLinkageStats: Time?,
val irLoweringStats: Time?,
val backendStats: Time?,
@@ -69,6 +70,7 @@
irPreLoweringStats +
irSerializationStats +
klibWritingStats +
+ irLinkageStats +
irLoweringStats +
backendStats +
findJavaClassStats?.time +
@@ -105,6 +107,7 @@
IrPreLowering,
IrSerialization,
KlibWriting,
+ IrLinkage,
IrLowering,
Backend,
}
@@ -199,6 +202,7 @@
action(PhaseType.TranslationToIr, translationToIrStats)
action(PhaseType.IrPreLowering, irPreLoweringStats)
action(PhaseType.IrSerialization, irSerializationStats)
+ action(PhaseType.IrLinkage, irLinkageStats)
action(PhaseType.KlibWriting, klibWritingStats)
action(PhaseType.IrLowering, irLoweringStats)
action(PhaseType.Backend, backendStats)
@@ -216,6 +220,7 @@
PhaseType.IrPreLowering to "IR PRE-LOWERING",
PhaseType.IrSerialization to "IR SERIALIZATION",
PhaseType.KlibWriting to "KLIB WRITING",
+ PhaseType.IrLinkage to "IR LINKAGE",
PhaseType.IrLowering to "IR LOWERING",
PhaseType.Backend to "BACKEND",
)
diff --git a/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStatsJsonDumper.kt b/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStatsJsonDumper.kt
index 9bf2ad9..41c128d 100644
--- a/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStatsJsonDumper.kt
+++ b/core/compiler.common/src/org/jetbrains/kotlin/util/UnitStatsJsonDumper.kt
@@ -30,6 +30,7 @@
irPreLoweringStats?.let { appendTime(::irPreLoweringStats, it, indent = 1, trailingComma = true) }
irSerializationStats?.let { appendTime(::irSerializationStats, it, indent = 1, trailingComma = true) }
klibWritingStats?.let { appendTime(::klibWritingStats, it, indent = 1, trailingComma = true) }
+ irLinkageStats?.let { appendTime(::irLinkageStats, it, indent = 1, trailingComma = true) }
irLoweringStats?.let { appendTime(::irLoweringStats, it, indent = 1, trailingComma = true) }
backendStats?.let { appendTime(::backendStats, it, indent = 1, trailingComma = true) }
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/NativeCompilerDriver.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/NativeCompilerDriver.kt
index 83e2041..d85c1e5 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/NativeCompilerDriver.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/NativeCompilerDriver.kt
@@ -62,7 +62,7 @@
private fun produceObjCFramework(engine: PhaseEngine<PhaseContext>, config: KonanConfig, environment: KotlinCoreEnvironment) {
val frontendOutput = performanceManager.tryMeasurePhaseTime(PhaseType.Analysis) { engine.runFrontend(config, environment) } ?: return
- val (objCExportedInterface, linkKlibsOutput, objCCodeSpec) = performanceManager.tryMeasurePhaseTime(PhaseType.TranslationToIr) {
+ val (objCExportedInterface, linkKlibsOutput, objCCodeSpec) = performanceManager.tryMeasurePhaseTime(PhaseType.IrLinkage) {
val objCExportedInterface = engine.runPhase(ProduceObjCExportInterfacePhase, frontendOutput)
engine.runPhase(CreateObjCFrameworkPhase, CreateObjCFrameworkInput(frontendOutput.moduleDescriptor, objCExportedInterface))
val (linkKlibsOutput, objCCodeSpec) = engine.linkKlibs(frontendOutput) {
@@ -84,7 +84,7 @@
private fun produceCLibrary(engine: PhaseEngine<PhaseContext>, config: KonanConfig, environment: KotlinCoreEnvironment) {
val frontendOutput = performanceManager.tryMeasurePhaseTime(PhaseType.Analysis) { engine.runFrontend(config, environment) } ?: return
- val (linkKlibsOutput, cAdapterElements) = performanceManager.tryMeasurePhaseTime(PhaseType.TranslationToIr) {
+ val (linkKlibsOutput, cAdapterElements) = performanceManager.tryMeasurePhaseTime(PhaseType.IrLinkage) {
engine.linkKlibs(frontendOutput) {
if (config.cInterfaceGenerationMode == CInterfaceGenerationMode.V1) {
it.runPhase(BuildCExports, frontendOutput)
@@ -188,7 +188,7 @@
private fun produceBinary(engine: PhaseEngine<PhaseContext>, config: KonanConfig, environment: KotlinCoreEnvironment) {
val frontendOutput = performanceManager.tryMeasurePhaseTime(PhaseType.Analysis) { engine.runFrontend(config, environment) } ?: return
- val linkKlibsOutput = performanceManager.tryMeasurePhaseTime(PhaseType.TranslationToIr) { engine.linkKlibs(frontendOutput) }
+ val linkKlibsOutput = performanceManager.tryMeasurePhaseTime(PhaseType.IrLinkage) { engine.linkKlibs(frontendOutput) }
val backendContext = createBackendContext(config, frontendOutput, linkKlibsOutput)
engine.runBackend(backendContext, linkKlibsOutput.irModule, performanceManager)
}
@@ -223,7 +223,7 @@
require(config.produce == CompilerOutputKind.TEST_BUNDLE)
val frontendOutput = performanceManager.tryMeasurePhaseTime(PhaseType.Analysis) { engine.runFrontend(config, environment) } ?: return
- val linkKlibsOutput = performanceManager.tryMeasurePhaseTime(PhaseType.TranslationToIr) {
+ val linkKlibsOutput = performanceManager.tryMeasurePhaseTime(PhaseType.IrLinkage) {
engine.runPhase(CreateTestBundlePhase, frontendOutput)
engine.linkKlibs(frontendOutput)
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/internal/compilerRunner/native/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/internal/compilerRunner/native/KotlinNativeToolRunner.kt
index 9a2eb93..aa02a552 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/internal/compilerRunner/native/KotlinNativeToolRunner.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/internal/compilerRunner/native/KotlinNativeToolRunner.kt
@@ -309,6 +309,7 @@
PhaseType.IrPreLowering -> GradleBuildTime.IR_PRE_LOWERING
PhaseType.IrSerialization -> GradleBuildTime.IR_SERIALIZATION
PhaseType.KlibWriting -> GradleBuildTime.KLIB_WRITING
+ PhaseType.IrLinkage -> GradleBuildTime.IR_LINKAGE
PhaseType.IrLowering -> GradleBuildTime.IR_LOWERING
PhaseType.Backend -> GradleBuildTime.BACKEND
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/report/UnitStatsSerializationTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/report/UnitStatsSerializationTest.kt
index 94156b0..9ae1d90 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/report/UnitStatsSerializationTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/report/UnitStatsSerializationTest.kt
@@ -30,6 +30,7 @@
irPreLoweringStats = Time(3_500_000L, 3_500_001L, 3_500_002L),
irSerializationStats = Time(3_600_000L, 3_600_001L, 3_600_002L),
klibWritingStats = Time(3_700_000L, 3_700_001L, 3_700_002L),
+ irLinkageStats = Time(3_800_000L, 3_800_001L, 3_800_002L),
irLoweringStats = Time(4_000_000L, 4_000_001L, 4_000_002L),
backendStats = Time(5_000_000L, 5_000_001L, 5_000_002L),
findJavaClassStats = SideStats(1, Time(6_000_000L, 6_000_001L, 6_000_002L)),
diff --git a/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/StatsCalculatorTests.kt b/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/StatsCalculatorTests.kt
index 2aefb44..03c934b 100644
--- a/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/StatsCalculatorTests.kt
+++ b/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/StatsCalculatorTests.kt
@@ -34,6 +34,7 @@
assertEquals(moduleStats0.translationToIrStats!! + moduleStats1.translationToIrStats + moduleStats2.translationToIrStats, translationToIrStats)
assertEquals(moduleStats0.irPreLoweringStats!! + moduleStats1.irPreLoweringStats + moduleStats2.irPreLoweringStats, irPreLoweringStats)
assertEquals(moduleStats0.irSerializationStats!! + moduleStats1.irSerializationStats + moduleStats2.irSerializationStats, irSerializationStats)
+ assertEquals(moduleStats0.irLinkageStats!! + moduleStats1.irLinkageStats + moduleStats2.irLinkageStats, irLinkageStats)
assertEquals(moduleStats0.klibWritingStats!! + moduleStats1.klibWritingStats + moduleStats2.klibWritingStats, klibWritingStats)
assertEquals(moduleStats0.irLoweringStats!! + moduleStats1.irLoweringStats + moduleStats2.irLoweringStats, irLoweringStats)
assertEquals(moduleStats0.backendStats!! + moduleStats1.backendStats + moduleStats2.backendStats, backendStats)
diff --git a/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/TestData.kt b/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/TestData.kt
index 8de02f7..12977a4 100644
--- a/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/TestData.kt
+++ b/libraries/tools/stats-analyser/tests/org/jetbrains/kotlin/stats/TestData.kt
@@ -51,6 +51,7 @@
irPreLoweringStats = totalTime * 0.01,
irSerializationStats = totalTime * 0.01,
klibWritingStats = totalTime * 0.01,
+ irLinkageStats = totalTime * 0.01,
irLoweringStats = totalTime * 0.01,
backendStats = totalTime * 0.16,
findJavaClassStats = SideStats(increment, totalTime * 0.04),