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
20LLVM_C_EXTERN_C_BEGIN
21
22/**
23 * @defgroup LLVMCCoreComdat Comdats
24 * @ingroup LLVMCCore
25 *
26 * @{
27 */
28
29typedef 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 */
46LLVMComdatRef 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 */
53LLVMComdatRef LLVMGetComdat(LLVMValueRef V);
54
55/**
56 * Assign the Comdat to the given global object.
57 *
58 * @see llvm::GlobalObject::setComdat()
59 */
60void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C);
61
62/*
63 * Get the conflict resolution selection kind for the Comdat.
64 *
65 * @see llvm::Comdat::getSelectionKind()
66 */
67LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C);
68
69/*
70 * Set the conflict resolution selection kind for the Comdat.
71 *
72 * @see llvm::Comdat::setSelectionKind()
73 */
74void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind);
75
76/**
77 * @}
78 */
79
80LLVM_C_EXTERN_C_END
81
82#endif
83