[K/N] Make -Xprofile-phases print profile of LLVM passes
This commit is contained in:
committed by
Space Cloud
parent
637258e175
commit
f86d28449f
+11
-1
@@ -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)
|
||||
|
||||
+6
-1
@@ -159,7 +159,12 @@ internal fun PhaseEngine<NativeGenerationState>.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)
|
||||
|
||||
Reference in New Issue
Block a user