diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt index db8bd93e1f1..ed51c0f23f7 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/OptimizationPipeline.kt @@ -37,6 +37,7 @@ data class LlvmPipelineConfig( val makeDeclarationsHidden: Boolean, val objCPasses: Boolean, val inlineThreshold: Int?, + val timePasses: Boolean = false, ) private fun getCpuModel(context: PhaseContext): String { @@ -100,7 +101,8 @@ internal fun createLTOPipelineConfigForRuntime(generationState: NativeGeneration internal fun createLTOFinalPipelineConfig( context: PhaseContext, targetTriple: String, - closedWorld: Boolean + closedWorld: Boolean, + timePasses: Boolean = false, ): LlvmPipelineConfig { val config = context.config val target = config.target @@ -161,6 +163,7 @@ internal fun createLTOFinalPipelineConfig( makeDeclarationsHidden, objcPasses, inlineThreshold, + timePasses = timePasses, ) } @@ -206,6 +209,9 @@ abstract class LlvmOptimizationPipeline( LLVMKotlinAddTargetLibraryInfoWrapperPass(passManager, config.targetTriple) // TargetTransformInfo pass. LLVMAddAnalysisPasses(targetMachine, passManager) + if (config.timePasses) { + LLVMSetTimePasses(1) + } configurePipeline(config, passManager, passBuilder) executeCustomPreprocessing(config, llvmModule) @@ -222,6 +228,10 @@ abstract class LlvmOptimizationPipeline( """.trimIndent() } LLVMRunPassManager(passManager, llvmModule) + if (config.timePasses) { + LLVMPrintAllTimersToStdOut() + LLVMClearAllTimers() + } } finally { LLVMPassManagerBuilderDispose(passBuilder) LLVMDisposePassManager(passManager) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt index caafabb6092..23e0da8f0b9 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt @@ -159,7 +159,12 @@ internal fun PhaseEngine.runBitcodePostProcessing() { if (checkExternalCalls) { runPhase(CheckExternalCallsPhase) } - val optimizationConfig = createLTOFinalPipelineConfig(context, context.llvm.targetTriple, closedWorld = context.llvmModuleSpecification.isFinal) + val optimizationConfig = createLTOFinalPipelineConfig( + context, + context.llvm.targetTriple, + closedWorld = context.llvmModuleSpecification.isFinal, + timePasses = context.config.flexiblePhaseConfig.needProfiling, + ) useContext(OptimizationState(context.config, context.llvmModule, optimizationConfig)) { it.runPhase(MandatoryBitcodeLLVMPostprocessingPhase) it.runPhase(ModuleBitcodeOptimizationPhase)