]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm-c/Comdat.h
MFC r355940:
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm-c / Comdat.h
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/Types.h"
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 typedef enum {
24   LLVMAnyComdatSelectionKind,        ///< The linker may choose any COMDAT.
25   LLVMExactMatchComdatSelectionKind, ///< The data referenced by the COMDAT must
26                                      ///< be the same.
27   LLVMLargestComdatSelectionKind,    ///< The linker will choose the largest
28                                      ///< COMDAT.
29   LLVMNoDuplicatesComdatSelectionKind, ///< No other Module may specify this
30                                        ///< COMDAT.
31   LLVMSameSizeComdatSelectionKind ///< The data referenced by the COMDAT must be
32                                   ///< the same size.
33 } LLVMComdatSelectionKind;
34
35 /**
36  * Return the Comdat in the module with the specified name. It is created
37  * if it didn't already exist.
38  *
39  * @see llvm::Module::getOrInsertComdat()
40  */
41 LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name);
42
43 /**
44  * Get the Comdat assigned to the given global object.
45  *
46  * @see llvm::GlobalObject::getComdat()
47  */
48 LLVMComdatRef LLVMGetComdat(LLVMValueRef V);
49
50 /**
51  * Assign the Comdat to the given global object.
52  *
53  * @see llvm::GlobalObject::setComdat()
54  */
55 void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C);
56
57 /*
58  * Get the conflict resolution selection kind for the Comdat.
59  *
60  * @see llvm::Comdat::getSelectionKind()
61  */
62 LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C);
63
64 /*
65  * Set the conflict resolution selection kind for the Comdat.
66  *
67  * @see llvm::Comdat::setSelectionKind()
68  */
69 void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind);
70
71 #ifdef __cplusplus
72 }
73 #endif
74
75 #endif