[K/N] Add LlvmIrHolder adapter interface for debugging purposes
Similar to KotlinBackendIrHolder and BackendContextHolder interfaces.
This commit is contained in:
committed by
Space Team
parent
60ff50dc51
commit
0febffedbd
+5
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.konan
|
|||||||
import llvm.*
|
import llvm.*
|
||||||
import org.jetbrains.kotlin.backend.konan.driver.BasicPhaseContext
|
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.BackendContextHolder
|
||||||
|
import org.jetbrains.kotlin.backend.konan.driver.utilities.LlvmIrHolder
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.*
|
import org.jetbrains.kotlin.backend.konan.llvm.*
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.coverage.CoverageManager
|
import org.jetbrains.kotlin.backend.konan.llvm.coverage.CoverageManager
|
||||||
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExport
|
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.
|
// It will reduce code coupling and make it easier to create NativeGenerationState instances.
|
||||||
val context: Context,
|
val context: Context,
|
||||||
val cacheDeserializationStrategy: CacheDeserializationStrategy?
|
val cacheDeserializationStrategy: CacheDeserializationStrategy?
|
||||||
) : BasicPhaseContext(config), BackendContextHolder<Context> {
|
) : BasicPhaseContext(config), BackendContextHolder<Context>, LlvmIrHolder {
|
||||||
private val outputPath = config.cacheSupport.tryGetImplicitOutput(cacheDeserializationStrategy) ?: config.outputPath
|
private val outputPath = config.cacheSupport.tryGetImplicitOutput(cacheDeserializationStrategy) ?: config.outputPath
|
||||||
val outputFiles = OutputFiles(outputPath, config.target, config.produce)
|
val outputFiles = OutputFiles(outputPath, config.target, config.produce)
|
||||||
val tempFiles = run {
|
val tempFiles = run {
|
||||||
@@ -127,4 +128,7 @@ internal class NativeGenerationState(
|
|||||||
|
|
||||||
override val backendContext: Context
|
override val backendContext: Context
|
||||||
get() = context
|
get() = context
|
||||||
|
|
||||||
|
override val llvmModule: LLVMModuleRef
|
||||||
|
get() = llvm.module
|
||||||
}
|
}
|
||||||
+3
-2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.backend.konan.checkLlvmModuleExternalCalls
|
|||||||
import org.jetbrains.kotlin.backend.konan.createLTOFinalPipelineConfig
|
import org.jetbrains.kotlin.backend.konan.createLTOFinalPipelineConfig
|
||||||
import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
|
import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
|
||||||
import org.jetbrains.kotlin.backend.konan.driver.PhaseEngine
|
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.insertAliasToEntryPoint
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.coverage.runCoveragePass
|
import org.jetbrains.kotlin.backend.konan.llvm.coverage.runCoveragePass
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.verifyModule
|
import org.jetbrains.kotlin.backend.konan.llvm.verifyModule
|
||||||
@@ -31,9 +32,9 @@ private val nativeLLVMDumper =
|
|||||||
private val llvmPhaseActions: Set<Action<Unit, NativeGenerationState>> = setOf(nativeLLVMDumper)
|
private val llvmPhaseActions: Set<Action<Unit, NativeGenerationState>> = setOf(nativeLLVMDumper)
|
||||||
|
|
||||||
internal data class WriteBitcodeFileInput(
|
internal data class WriteBitcodeFileInput(
|
||||||
val llvmModule: LLVMModuleRef,
|
override val llvmModule: LLVMModuleRef,
|
||||||
val outputFile: File,
|
val outputFile: File,
|
||||||
)
|
) : LlvmIrHolder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write in-memory LLVM module to filesystem as a bitcode.
|
* Write in-memory LLVM module to filesystem as a bitcode.
|
||||||
|
|||||||
+17
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user