From 0febffedbdb452da53626d212405a0b69a3b7830 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Tue, 24 Jan 2023 16:38:36 +0200 Subject: [PATCH] [K/N] Add LlvmIrHolder adapter interface for debugging purposes Similar to KotlinBackendIrHolder and BackendContextHolder interfaces. --- .../backend/konan/NativeGenerationState.kt | 6 +++++- .../backend/konan/driver/phases/Bitcode.kt | 5 +++-- .../driver/utilities/LlvmPassesUtilities.kt | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/LlvmPassesUtilities.kt diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt index 7981343f97f..b080fea817a 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/NativeGenerationState.kt @@ -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 { +) : BasicPhaseContext(config), BackendContextHolder, 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 } \ No newline at end of file diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt index 682dd30e56f..a44c0d39143 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/phases/Bitcode.kt @@ -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> = 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. diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/LlvmPassesUtilities.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/LlvmPassesUtilities.kt new file mode 100644 index 00000000000..67eeda4e28c --- /dev/null +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/utilities/LlvmPassesUtilities.kt @@ -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 +} \ No newline at end of file