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