1e66458a8SReid Kleckner /*===-- llvm-c/Comdat.h - Module Comdat C Interface -------------*- C++ -*-===*\ 2e66458a8SReid Kleckner |* *| 32946cd70SChandler Carruth |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *| 42946cd70SChandler Carruth |* Exceptions. *| 52946cd70SChandler Carruth |* See https://llvm.org/LICENSE.txt for license information. *| 62946cd70SChandler Carruth |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *| 7e66458a8SReid Kleckner |* *| 8e66458a8SReid Kleckner |*===----------------------------------------------------------------------===*| 9e66458a8SReid Kleckner |* *| 10e66458a8SReid Kleckner |* This file defines the C interface to COMDAT. *| 11e66458a8SReid Kleckner |* *| 12e66458a8SReid Kleckner \*===----------------------------------------------------------------------===*/ 13e66458a8SReid Kleckner 14e66458a8SReid Kleckner #ifndef LLVM_C_COMDAT_H 15e66458a8SReid Kleckner #define LLVM_C_COMDAT_H 16e66458a8SReid Kleckner 178c484050SDuncan P. N. Exon Smith #include "llvm-c/ExternC.h" 18e66458a8SReid Kleckner #include "llvm-c/Types.h" 19e66458a8SReid Kleckner 208c484050SDuncan P. N. Exon Smith LLVM_C_EXTERN_C_BEGIN 21e66458a8SReid Kleckner 22*ad523cc3SMats Larsen /** 23*ad523cc3SMats Larsen * @defgroup LLVMCCoreComdat Comdats 24*ad523cc3SMats Larsen * @ingroup LLVMCCore 25*ad523cc3SMats Larsen * 26*ad523cc3SMats Larsen * @{ 27*ad523cc3SMats Larsen */ 28*ad523cc3SMats Larsen 29e66458a8SReid Kleckner typedef enum { 30e66458a8SReid Kleckner LLVMAnyComdatSelectionKind, ///< The linker may choose any COMDAT. 31e66458a8SReid Kleckner LLVMExactMatchComdatSelectionKind, ///< The data referenced by the COMDAT must 32e66458a8SReid Kleckner ///< be the same. 33e66458a8SReid Kleckner LLVMLargestComdatSelectionKind, ///< The linker will choose the largest 34e66458a8SReid Kleckner ///< COMDAT. 3539248779SFangrui Song LLVMNoDeduplicateComdatSelectionKind, ///< No deduplication is performed. 36e66458a8SReid Kleckner LLVMSameSizeComdatSelectionKind ///< The data referenced by the COMDAT must be 37e66458a8SReid Kleckner ///< the same size. 38e66458a8SReid Kleckner } LLVMComdatSelectionKind; 39e66458a8SReid Kleckner 40e66458a8SReid Kleckner /** 41e66458a8SReid Kleckner * Return the Comdat in the module with the specified name. It is created 42e66458a8SReid Kleckner * if it didn't already exist. 43e66458a8SReid Kleckner * 44e66458a8SReid Kleckner * @see llvm::Module::getOrInsertComdat() 45e66458a8SReid Kleckner */ 46e66458a8SReid Kleckner LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name); 47e66458a8SReid Kleckner 48e66458a8SReid Kleckner /** 49e66458a8SReid Kleckner * Get the Comdat assigned to the given global object. 50e66458a8SReid Kleckner * 51e66458a8SReid Kleckner * @see llvm::GlobalObject::getComdat() 52e66458a8SReid Kleckner */ 53e66458a8SReid Kleckner LLVMComdatRef LLVMGetComdat(LLVMValueRef V); 54e66458a8SReid Kleckner 55e66458a8SReid Kleckner /** 56e66458a8SReid Kleckner * Assign the Comdat to the given global object. 57e66458a8SReid Kleckner * 58e66458a8SReid Kleckner * @see llvm::GlobalObject::setComdat() 59e66458a8SReid Kleckner */ 60e66458a8SReid Kleckner void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C); 61e66458a8SReid Kleckner 62e66458a8SReid Kleckner /* 63e66458a8SReid Kleckner * Get the conflict resolution selection kind for the Comdat. 64e66458a8SReid Kleckner * 65e66458a8SReid Kleckner * @see llvm::Comdat::getSelectionKind() 66e66458a8SReid Kleckner */ 67e66458a8SReid Kleckner LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C); 68e66458a8SReid Kleckner 69e66458a8SReid Kleckner /* 70e66458a8SReid Kleckner * Set the conflict resolution selection kind for the Comdat. 71e66458a8SReid Kleckner * 72e66458a8SReid Kleckner * @see llvm::Comdat::setSelectionKind() 73e66458a8SReid Kleckner */ 74e66458a8SReid Kleckner void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind); 75e66458a8SReid Kleckner 76*ad523cc3SMats Larsen /** 77*ad523cc3SMats Larsen * @} 78*ad523cc3SMats Larsen */ 79*ad523cc3SMats Larsen 808c484050SDuncan P. N. Exon Smith LLVM_C_EXTERN_C_END 81e66458a8SReid Kleckner 82e66458a8SReid Kleckner #endif 83