/*===-- llvm-c/Comdat.h - Module Comdat C Interface -------------*- C++ -*-===*\
 
|*                                                                            *|
 
|* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
 
|* Exceptions.                                                                *|
 
|* See https://llvm.org/LICENSE.txt for license information.                  *|
 
|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
 
|*                                                                            *|
 
|*===----------------------------------------------------------------------===*|
 
|*                                                                            *|
 
|* This file defines the C interface to COMDAT.                               *|
 
|*                                                                            *|
 
\*===----------------------------------------------------------------------===*/
 
 
 
#ifndef LLVM_C_COMDAT_H
 
#define LLVM_C_COMDAT_H
 
 
 
#include "llvm-c/ExternC.h"
 
#include "llvm-c/Types.h"
 
 
 
LLVM_C_EXTERN_C_BEGIN
 
 
 
/**
 
 * @defgroup LLVMCCoreComdat Comdats
 
 * @ingroup LLVMCCore
 
 *
 
 * @{
 
 */
 
 
 
typedef enum {
 
  LLVMAnyComdatSelectionKind,        ///< The linker may choose any COMDAT.
 
  LLVMExactMatchComdatSelectionKind, ///< The data referenced by the COMDAT must
 
                                     ///< be the same.
 
  LLVMLargestComdatSelectionKind,    ///< The linker will choose the largest
 
                                     ///< COMDAT.
 
  LLVMNoDeduplicateComdatSelectionKind, ///< No deduplication is performed.
 
  LLVMSameSizeComdatSelectionKind ///< The data referenced by the COMDAT must be
 
                                  ///< the same size.
 
} LLVMComdatSelectionKind;
 
 
 
/**
 
 * Return the Comdat in the module with the specified name. It is created
 
 * if it didn't already exist.
 
 *
 
 * @see llvm::Module::getOrInsertComdat()
 
 */
 
LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name);
 
 
 
/**
 
 * Get the Comdat assigned to the given global object.
 
 *
 
 * @see llvm::GlobalObject::getComdat()
 
 */
 
LLVMComdatRef LLVMGetComdat(LLVMValueRef V);
 
 
 
/**
 
 * Assign the Comdat to the given global object.
 
 *
 
 * @see llvm::GlobalObject::setComdat()
 
 */
 
void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C);
 
 
 
/*
 
 * Get the conflict resolution selection kind for the Comdat.
 
 *
 
 * @see llvm::Comdat::getSelectionKind()
 
 */
 
LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C);
 
 
 
/*
 
 * Set the conflict resolution selection kind for the Comdat.
 
 *
 
 * @see llvm::Comdat::setSelectionKind()
 
 */
 
void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind Kind);
 
 
 
/**
 
 * @}
 
 */
 
 
 
LLVM_C_EXTERN_C_END
 
 
 
#endif