Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.