[K/N] Make -Xprofile-phases print profile of LLVM passes

This commit is contained in:
Sergey Bogolepov
2023-02-09 17:01:12 +02:00
committed by Space Cloud
parent 637258e175
commit f86d28449f
2 changed files with 17 additions and 2 deletions
@@ -37,6 +37,7 @@ data class LlvmPipelineConfig(
val makeDeclarationsHidden: Boolean, val makeDeclarationsHidden: Boolean,
val objCPasses: Boolean, val objCPasses: Boolean,
val inlineThreshold: Int?, val inlineThreshold: Int?,
val timePasses: Boolean = false,
) )
private fun getCpuModel(context: PhaseContext): String { private fun getCpuModel(context: PhaseContext): String {
@@ -100,7 +101,8 @@ internal fun createLTOPipelineConfigForRuntime(generationState: NativeGeneration
internal fun createLTOFinalPipelineConfig( internal fun createLTOFinalPipelineConfig(
context: PhaseContext, context: PhaseContext,
targetTriple: String, targetTriple: String,
closedWorld: Boolean closedWorld: Boolean,
timePasses: Boolean = false,
): LlvmPipelineConfig { ): LlvmPipelineConfig {
val config = context.config val config = context.config
val target = config.target val target = config.target
@@ -161,6 +163,7 @@ internal fun createLTOFinalPipelineConfig(
makeDeclarationsHidden, makeDeclarationsHidden,
objcPasses, objcPasses,
inlineThreshold, inlineThreshold,
timePasses = timePasses,
) )
} }
@@ -206,6 +209,9 @@ abstract class LlvmOptimizationPipeline(
LLVMKotlinAddTargetLibraryInfoWrapperPass(passManager, config.targetTriple) LLVMKotlinAddTargetLibraryInfoWrapperPass(passManager, config.targetTriple)
// TargetTransformInfo pass. // TargetTransformInfo pass.
LLVMAddAnalysisPasses(targetMachine, passManager) LLVMAddAnalysisPasses(targetMachine, passManager)
if (config.timePasses) {
LLVMSetTimePasses(1)
}
configurePipeline(config, passManager, passBuilder) configurePipeline(config, passManager, passBuilder)
executeCustomPreprocessing(config, llvmModule) executeCustomPreprocessing(config, llvmModule)
@@ -222,6 +228,10 @@ abstract class LlvmOptimizationPipeline(
""".trimIndent() """.trimIndent()
} }
LLVMRunPassManager(passManager, llvmModule) LLVMRunPassManager(passManager, llvmModule)
if (config.timePasses) {
LLVMPrintAllTimersToStdOut()
LLVMClearAllTimers()
}
} finally { } finally {
LLVMPassManagerBuilderDispose(passBuilder) LLVMPassManagerBuilderDispose(passBuilder)
LLVMDisposePassManager(passManager) LLVMDisposePassManager(passManager)
@@ -159,7 +159,12 @@ internal fun PhaseEngine<NativeGenerationState>.runBitcodePostProcessing() {
if (checkExternalCalls) { if (checkExternalCalls) {
runPhase(CheckExternalCallsPhase) 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)) { useContext(OptimizationState(context.config, context.llvmModule, optimizationConfig)) {
it.runPhase(MandatoryBitcodeLLVMPostprocessingPhase) it.runPhase(MandatoryBitcodeLLVMPostprocessingPhase)
it.runPhase(ModuleBitcodeOptimizationPhase) it.runPhase(ModuleBitcodeOptimizationPhase)