[K/N] Add ObjCARCContract LLVM pass.

This commit is contained in:
Sergey Bogolepov
2021-08-16 14:12:38 +07:00
committed by TeamCityServer
parent 1eb960783a
commit 690d0689a1
3 changed files with 17 additions and 1 deletions
@@ -22,6 +22,7 @@ private fun initializeLlvmGlobalPassRegistry() {
LLVMInitializeIPA(passRegistry)
LLVMInitializeCodeGen(passRegistry)
LLVMInitializeTarget(passRegistry)
LLVMInitializeObjCARCOpts(passRegistry)
}
internal fun shouldRunLateBitcodePasses(context: Context): Boolean {
@@ -166,10 +167,16 @@ internal fun runLlvmOptimizationPipeline(context: Context) {
config.customInlineThreshold?.let { threshold ->
LLVMPassManagerBuilderUseInlinerWithThreshold(passBuilder, threshold)
}
// Pipeline that is similar to `llvm-lto`.
// TODO: Add ObjC optimization passes.
LLVMPassManagerBuilderPopulateLTOPassManager(passBuilder, modulePasses, Internalize = 0, RunInliner = 1)
// Lower ObjC ARC intrinsics (e.g. `@llvm.objc.clang.arc.use(...)`).
// While Kotlin/Native codegen itself doesn't produce these intrinsics, they might come
// from cinterop "glue" bitcode.
// TODO: Consider adding other ObjC passes.
LLVMAddObjCARCContractPass(modulePasses)
LLVMRunPassManager(modulePasses, llvmModule)
LLVMPassManagerBuilderDispose(passBuilder)