[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 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)
|
||||||
|
|||||||
+6
-1
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user