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 70387a116a5..5300d1d9667 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 @@ -99,6 +99,23 @@ private class LlvmPipelineConfiguration(context: Context) { DEFAULT(1), AGGRESSIVE(2) } + + companion object { + @Volatile + @JvmStatic + private var isInitialized: Boolean = false + + @Synchronized + @JvmStatic + fun initLLVMTargets() { + if (!isInitialized) { + memScoped { + LLVMKotlinInitializeTargets() + } + isInitialized = true + } + } + } } internal fun runLlvmOptimizationPipeline(context: Context) { @@ -115,9 +132,10 @@ internal fun runLlvmOptimizationPipeline(context: Context) { inline_threshold: ${config.customInlineThreshold ?: "default"} """.trimIndent() } - memScoped { - LLVMKotlinInitializeTargets() + LlvmPipelineConfiguration.initLLVMTargets() + + memScoped { initializeLlvmGlobalPassRegistry() val passBuilder = LLVMPassManagerBuilderCreate() val modulePasses = LLVMCreatePassManager()