xref: /llvm-project/llvm/include/llvm-c/Comdat.h (revision ad523cc398d132ca48215f6499ba420cf0f7aaaa)
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