[K/N] Add LlvmIrHolder adapter interface for debugging purposes

Similar to KotlinBackendIrHolder and BackendContextHolder interfaces.
This commit is contained in:
Sergey Bogolepov
2023-01-24 16:38:36 +02:00
committed by Space Team
parent 60ff50dc51
commit 0febffedbd
3 changed files with 25 additions and 3 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.konan
import llvm.*
import org.jetbrains.kotlin.backend.konan.driver.BasicPhaseContext
import org.jetbrains.kotlin.backend.konan.driver.utilities.BackendContextHolder
import org.jetbrains.kotlin.backend.konan.driver.utilities.LlvmIrHolder
import org.jetbrains.kotlin.backend.konan.llvm.*
import org.jetbrains.kotlin.backend.konan.llvm.coverage.CoverageManager
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExport
@@ -44,7 +45,7 @@ internal class NativeGenerationState(
// It will reduce code coupling and make it easier to create NativeGenerationState instances.
val context: Context,
val cacheDeserializationStrategy: CacheDeserializationStrategy?
) : BasicPhaseContext(config), BackendContextHolder<Context> {
) : BasicPhaseContext(config), BackendContextHolder<Context>, LlvmIrHolder {
private val outputPath = config.cacheSupport.tryGetImplicitOutput(cacheDeserializationStrategy) ?: config.outputPath
val outputFiles = OutputFiles(outputPath, config.target, config.produce)
val tempFiles = run {
@@ -127,4 +128,7 @@ internal class NativeGenerationState(
override val backendContext: Context
get() = context
override val llvmModule: LLVMModuleRef
get() = llvm.module
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.konan.checkLlvmModuleExternalCalls
import org.jetbrains.kotlin.backend.konan.createLTOFinalPipelineConfig
import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
import org.jetbrains.kotlin.backend.konan.driver.PhaseEngine
import org.jetbrains.kotlin.backend.konan.driver.utilities.LlvmIrHolder
import org.jetbrains.kotlin.backend.konan.insertAliasToEntryPoint
import org.jetbrains.kotlin.backend.konan.llvm.coverage.runCoveragePass
import org.jetbrains.kotlin.backend.konan.llvm.verifyModule
@@ -31,9 +32,9 @@ private val nativeLLVMDumper =
private val llvmPhaseActions: Set<Action<Unit, NativeGenerationState>> = setOf(nativeLLVMDumper)
internal data class WriteBitcodeFileInput(
val llvmModule: LLVMModuleRef,
override val llvmModule: LLVMModuleRef,
val outputFile: File,
)
) : LlvmIrHolder
/**
* Write in-memory LLVM module to filesystem as a bitcode.
@@ -0,0 +1,17 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.backend.konan.driver.utilities
import llvm.LLVMModuleRef
import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
/**
* Implementation of this interface in phase context, input or output
* enables LLVM IR validation and dumping
*/
interface LlvmIrHolder {
val llvmModule: LLVMModuleRef
}