aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/include/llvm-c
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/include/llvm-c
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/include/llvm-c')
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Analysis.h146
-rw-r--r--contrib/libs/llvm12/include/llvm-c/BitReader.h186
-rw-r--r--contrib/libs/llvm12/include/llvm-c/BitWriter.h134
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Comdat.h166
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Core.h8254
-rw-r--r--contrib/libs/llvm12/include/llvm-c/DataTypes.h182
-rw-r--r--contrib/libs/llvm12/include/llvm-c/DebugInfo.h2744
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Disassembler.h242
-rw-r--r--contrib/libs/llvm12/include/llvm-c/DisassemblerTypes.h342
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Error.h156
-rw-r--r--contrib/libs/llvm12/include/llvm-c/ErrorHandling.h116
-rw-r--r--contrib/libs/llvm12/include/llvm-c/ExecutionEngine.h426
-rw-r--r--contrib/libs/llvm12/include/llvm-c/ExternC.h100
-rw-r--r--contrib/libs/llvm12/include/llvm-c/IRReader.h96
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Initialization.h128
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Linker.h98
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Object.h482
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Orc.h444
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Remarks.h710
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Support.h146
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Target.h606
-rw-r--r--contrib/libs/llvm12/include/llvm-c/TargetMachine.h344
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/AggressiveInstCombine.h102
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/Coroutines.h134
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/IPO.h214
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/InstCombine.h102
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/PassManagerBuilder.h196
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/Scalar.h356
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/Utils.h122
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Transforms/Vectorize.h116
-rw-r--r--contrib/libs/llvm12/include/llvm-c/Types.h374
-rw-r--r--contrib/libs/llvm12/include/llvm-c/lto.h1888
-rw-r--r--contrib/libs/llvm12/include/llvm-c/module.modulemap8
33 files changed, 9930 insertions, 9930 deletions
diff --git a/contrib/libs/llvm12/include/llvm-c/Analysis.h b/contrib/libs/llvm12/include/llvm-c/Analysis.h
index c32cb2d5fff..4f2dff7557d 100644
--- a/contrib/libs/llvm12/include/llvm-c/Analysis.h
+++ b/contrib/libs/llvm12/include/llvm-c/Analysis.h
@@ -1,73 +1,73 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Analysis.h - Analysis Library 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 header declares the C interface to libLLVMAnalysis.a, which *|
-|* implements various analyses of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_ANALYSIS_H
-#define LLVM_C_ANALYSIS_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCAnalysis Analysis
- * @ingroup LLVMC
- *
- * @{
- */
-
-typedef enum {
- LLVMAbortProcessAction, /* verifier will print to stderr and abort() */
- LLVMPrintMessageAction, /* verifier will print to stderr and return 1 */
- LLVMReturnStatusAction /* verifier will just return 1 */
-} LLVMVerifierFailureAction;
-
-
-/* Verifies that a module is valid, taking the specified action if not.
- Optionally returns a human-readable description of any invalid constructs.
- OutMessage must be disposed with LLVMDisposeMessage. */
-LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
- char **OutMessage);
-
-/* Verifies that a single function is valid, taking the specified action. Useful
- for debugging. */
-LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action);
-
-/* Open up a ghostview window that displays the CFG of the current function.
- Useful for debugging. */
-void LLVMViewFunctionCFG(LLVMValueRef Fn);
-void LLVMViewFunctionCFGOnly(LLVMValueRef Fn);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Analysis.h - Analysis Library 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 header declares the C interface to libLLVMAnalysis.a, which *|
+|* implements various analyses of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_ANALYSIS_H
+#define LLVM_C_ANALYSIS_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCAnalysis Analysis
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+typedef enum {
+ LLVMAbortProcessAction, /* verifier will print to stderr and abort() */
+ LLVMPrintMessageAction, /* verifier will print to stderr and return 1 */
+ LLVMReturnStatusAction /* verifier will just return 1 */
+} LLVMVerifierFailureAction;
+
+
+/* Verifies that a module is valid, taking the specified action if not.
+ Optionally returns a human-readable description of any invalid constructs.
+ OutMessage must be disposed with LLVMDisposeMessage. */
+LLVMBool LLVMVerifyModule(LLVMModuleRef M, LLVMVerifierFailureAction Action,
+ char **OutMessage);
+
+/* Verifies that a single function is valid, taking the specified action. Useful
+ for debugging. */
+LLVMBool LLVMVerifyFunction(LLVMValueRef Fn, LLVMVerifierFailureAction Action);
+
+/* Open up a ghostview window that displays the CFG of the current function.
+ Useful for debugging. */
+void LLVMViewFunctionCFG(LLVMValueRef Fn);
+void LLVMViewFunctionCFGOnly(LLVMValueRef Fn);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/BitReader.h b/contrib/libs/llvm12/include/llvm-c/BitReader.h
index d1720a76848..482c0958360 100644
--- a/contrib/libs/llvm12/include/llvm-c/BitReader.h
+++ b/contrib/libs/llvm12/include/llvm-c/BitReader.h
@@ -1,93 +1,93 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/BitReader.h - BitReader Library 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 header declares the C interface to libLLVMBitReader.a, which *|
-|* implements input of the LLVM bitcode format. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_BITREADER_H
-#define LLVM_C_BITREADER_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCBitReader Bit Reader
- * @ingroup LLVMC
- *
- * @{
- */
-
-/* Builds a module from the bitcode in the specified memory buffer, returning a
- reference to the module via the OutModule parameter. Returns 0 on success.
- Optionally returns a human-readable error message via OutMessage.
-
- This is deprecated. Use LLVMParseBitcode2. */
-LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule,
- char **OutMessage);
-
-/* Builds a module from the bitcode in the specified memory buffer, returning a
- reference to the module via the OutModule parameter. Returns 0 on success. */
-LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf,
- LLVMModuleRef *OutModule);
-
-/* This is deprecated. Use LLVMParseBitcodeInContext2. */
-LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
- LLVMMemoryBufferRef MemBuf,
- LLVMModuleRef *OutModule, char **OutMessage);
-
-LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef,
- LLVMMemoryBufferRef MemBuf,
- LLVMModuleRef *OutModule);
-
-/** Reads a module from the specified path, returning via the OutMP parameter
- a module provider which performs lazy deserialization. Returns 0 on success.
- Optionally returns a human-readable error message via OutMessage.
- This is deprecated. Use LLVMGetBitcodeModuleInContext2. */
-LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
- LLVMMemoryBufferRef MemBuf,
- LLVMModuleRef *OutM, char **OutMessage);
-
-/** Reads a module from the specified path, returning via the OutMP parameter a
- * module provider which performs lazy deserialization. Returns 0 on success. */
-LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef,
- LLVMMemoryBufferRef MemBuf,
- LLVMModuleRef *OutM);
-
-/* This is deprecated. Use LLVMGetBitcodeModule2. */
-LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
- char **OutMessage);
-
-LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/BitReader.h - BitReader Library 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 header declares the C interface to libLLVMBitReader.a, which *|
+|* implements input of the LLVM bitcode format. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_BITREADER_H
+#define LLVM_C_BITREADER_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCBitReader Bit Reader
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+/* Builds a module from the bitcode in the specified memory buffer, returning a
+ reference to the module via the OutModule parameter. Returns 0 on success.
+ Optionally returns a human-readable error message via OutMessage.
+
+ This is deprecated. Use LLVMParseBitcode2. */
+LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule,
+ char **OutMessage);
+
+/* Builds a module from the bitcode in the specified memory buffer, returning a
+ reference to the module via the OutModule parameter. Returns 0 on success. */
+LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf,
+ LLVMModuleRef *OutModule);
+
+/* This is deprecated. Use LLVMParseBitcodeInContext2. */
+LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
+ LLVMMemoryBufferRef MemBuf,
+ LLVMModuleRef *OutModule, char **OutMessage);
+
+LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef,
+ LLVMMemoryBufferRef MemBuf,
+ LLVMModuleRef *OutModule);
+
+/** Reads a module from the specified path, returning via the OutMP parameter
+ a module provider which performs lazy deserialization. Returns 0 on success.
+ Optionally returns a human-readable error message via OutMessage.
+ This is deprecated. Use LLVMGetBitcodeModuleInContext2. */
+LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
+ LLVMMemoryBufferRef MemBuf,
+ LLVMModuleRef *OutM, char **OutMessage);
+
+/** Reads a module from the specified path, returning via the OutMP parameter a
+ * module provider which performs lazy deserialization. Returns 0 on success. */
+LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef,
+ LLVMMemoryBufferRef MemBuf,
+ LLVMModuleRef *OutM);
+
+/* This is deprecated. Use LLVMGetBitcodeModule2. */
+LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
+ char **OutMessage);
+
+LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/BitWriter.h b/contrib/libs/llvm12/include/llvm-c/BitWriter.h
index 23119379b06..0fb2a24c025 100644
--- a/contrib/libs/llvm12/include/llvm-c/BitWriter.h
+++ b/contrib/libs/llvm12/include/llvm-c/BitWriter.h
@@ -1,67 +1,67 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/BitWriter.h - BitWriter Library 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 header declares the C interface to libLLVMBitWriter.a, which *|
-|* implements output of the LLVM bitcode format. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_BITWRITER_H
-#define LLVM_C_BITWRITER_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCBitWriter Bit Writer
- * @ingroup LLVMC
- *
- * @{
- */
-
-/*===-- Operations on modules ---------------------------------------------===*/
-
-/** Writes a module to the specified path. Returns 0 on success. */
-int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path);
-
-/** Writes a module to an open file descriptor. Returns 0 on success. */
-int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
- int Unbuffered);
-
-/** Deprecated for LLVMWriteBitcodeToFD. Writes a module to an open file
- descriptor. Returns 0 on success. Closes the Handle. */
-int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int Handle);
-
-/** Writes a module to a new memory buffer and returns it. */
-LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/BitWriter.h - BitWriter Library 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 header declares the C interface to libLLVMBitWriter.a, which *|
+|* implements output of the LLVM bitcode format. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_BITWRITER_H
+#define LLVM_C_BITWRITER_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCBitWriter Bit Writer
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+/*===-- Operations on modules ---------------------------------------------===*/
+
+/** Writes a module to the specified path. Returns 0 on success. */
+int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path);
+
+/** Writes a module to an open file descriptor. Returns 0 on success. */
+int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
+ int Unbuffered);
+
+/** Deprecated for LLVMWriteBitcodeToFD. Writes a module to an open file
+ descriptor. Returns 0 on success. Closes the Handle. */
+int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int Handle);
+
+/** Writes a module to a new memory buffer and returns it. */
+LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Comdat.h b/contrib/libs/llvm12/include/llvm-c/Comdat.h
index d60fc8f184c..8b7a00913f1 100644
--- a/contrib/libs/llvm12/include/llvm-c/Comdat.h
+++ b/contrib/libs/llvm12/include/llvm-c/Comdat.h
@@ -1,83 +1,83 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- 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
-
-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.
- LLVMNoDuplicatesComdatSelectionKind, ///< No other Module may specify this
- ///< COMDAT.
- 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
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- 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
+
+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.
+ LLVMNoDuplicatesComdatSelectionKind, ///< No other Module may specify this
+ ///< COMDAT.
+ 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
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Core.h b/contrib/libs/llvm12/include/llvm-c/Core.h
index 788bc9997b1..5ba2c98b176 100644
--- a/contrib/libs/llvm12/include/llvm-c/Core.h
+++ b/contrib/libs/llvm12/include/llvm-c/Core.h
@@ -1,617 +1,617 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Core.h - Core Library 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 header declares the C interface to libLLVMCore.a, which implements *|
-|* the LLVM intermediate representation. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_CORE_H
-#define LLVM_C_CORE_H
-
-#include "llvm-c/ErrorHandling.h"
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMC LLVM-C: C interface to LLVM
- *
- * This module exposes parts of the LLVM library as a C API.
- *
- * @{
- */
-
-/**
- * @defgroup LLVMCTransforms Transforms
- */
-
-/**
- * @defgroup LLVMCCore Core
- *
- * This modules provide an interface to libLLVMCore, which implements
- * the LLVM intermediate representation as well as other related types
- * and utilities.
- *
- * Many exotic languages can interoperate with C code but have a harder time
- * with C++ due to name mangling. So in addition to C, this interface enables
- * tools written in such languages.
- *
- * @{
- */
-
-/**
- * @defgroup LLVMCCoreTypes Types and Enumerations
- *
- * @{
- */
-
-/// External users depend on the following values being stable. It is not safe
-/// to reorder them.
-typedef enum {
- /* Terminator Instructions */
- LLVMRet = 1,
- LLVMBr = 2,
- LLVMSwitch = 3,
- LLVMIndirectBr = 4,
- LLVMInvoke = 5,
- /* removed 6 due to API changes */
- LLVMUnreachable = 7,
- LLVMCallBr = 67,
-
- /* Standard Unary Operators */
- LLVMFNeg = 66,
-
- /* Standard Binary Operators */
- LLVMAdd = 8,
- LLVMFAdd = 9,
- LLVMSub = 10,
- LLVMFSub = 11,
- LLVMMul = 12,
- LLVMFMul = 13,
- LLVMUDiv = 14,
- LLVMSDiv = 15,
- LLVMFDiv = 16,
- LLVMURem = 17,
- LLVMSRem = 18,
- LLVMFRem = 19,
-
- /* Logical Operators */
- LLVMShl = 20,
- LLVMLShr = 21,
- LLVMAShr = 22,
- LLVMAnd = 23,
- LLVMOr = 24,
- LLVMXor = 25,
-
- /* Memory Operators */
- LLVMAlloca = 26,
- LLVMLoad = 27,
- LLVMStore = 28,
- LLVMGetElementPtr = 29,
-
- /* Cast Operators */
- LLVMTrunc = 30,
- LLVMZExt = 31,
- LLVMSExt = 32,
- LLVMFPToUI = 33,
- LLVMFPToSI = 34,
- LLVMUIToFP = 35,
- LLVMSIToFP = 36,
- LLVMFPTrunc = 37,
- LLVMFPExt = 38,
- LLVMPtrToInt = 39,
- LLVMIntToPtr = 40,
- LLVMBitCast = 41,
- LLVMAddrSpaceCast = 60,
-
- /* Other Operators */
- LLVMICmp = 42,
- LLVMFCmp = 43,
- LLVMPHI = 44,
- LLVMCall = 45,
- LLVMSelect = 46,
- LLVMUserOp1 = 47,
- LLVMUserOp2 = 48,
- LLVMVAArg = 49,
- LLVMExtractElement = 50,
- LLVMInsertElement = 51,
- LLVMShuffleVector = 52,
- LLVMExtractValue = 53,
- LLVMInsertValue = 54,
- LLVMFreeze = 68,
-
- /* Atomic operators */
- LLVMFence = 55,
- LLVMAtomicCmpXchg = 56,
- LLVMAtomicRMW = 57,
-
- /* Exception Handling Operators */
- LLVMResume = 58,
- LLVMLandingPad = 59,
- LLVMCleanupRet = 61,
- LLVMCatchRet = 62,
- LLVMCatchPad = 63,
- LLVMCleanupPad = 64,
- LLVMCatchSwitch = 65
-} LLVMOpcode;
-
-typedef enum {
- LLVMVoidTypeKind, /**< type with no size */
- LLVMHalfTypeKind, /**< 16 bit floating point type */
- LLVMFloatTypeKind, /**< 32 bit floating point type */
- LLVMDoubleTypeKind, /**< 64 bit floating point type */
- LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
- LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
- LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
- LLVMLabelTypeKind, /**< Labels */
- LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
- LLVMFunctionTypeKind, /**< Functions */
- LLVMStructTypeKind, /**< Structures */
- LLVMArrayTypeKind, /**< Arrays */
- LLVMPointerTypeKind, /**< Pointers */
- LLVMVectorTypeKind, /**< Fixed width SIMD vector type */
- LLVMMetadataTypeKind, /**< Metadata */
- LLVMX86_MMXTypeKind, /**< X86 MMX */
- LLVMTokenTypeKind, /**< Tokens */
- LLVMScalableVectorTypeKind, /**< Scalable SIMD vector type */
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Core.h - Core Library 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 header declares the C interface to libLLVMCore.a, which implements *|
+|* the LLVM intermediate representation. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_CORE_H
+#define LLVM_C_CORE_H
+
+#include "llvm-c/ErrorHandling.h"
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMC LLVM-C: C interface to LLVM
+ *
+ * This module exposes parts of the LLVM library as a C API.
+ *
+ * @{
+ */
+
+/**
+ * @defgroup LLVMCTransforms Transforms
+ */
+
+/**
+ * @defgroup LLVMCCore Core
+ *
+ * This modules provide an interface to libLLVMCore, which implements
+ * the LLVM intermediate representation as well as other related types
+ * and utilities.
+ *
+ * Many exotic languages can interoperate with C code but have a harder time
+ * with C++ due to name mangling. So in addition to C, this interface enables
+ * tools written in such languages.
+ *
+ * @{
+ */
+
+/**
+ * @defgroup LLVMCCoreTypes Types and Enumerations
+ *
+ * @{
+ */
+
+/// External users depend on the following values being stable. It is not safe
+/// to reorder them.
+typedef enum {
+ /* Terminator Instructions */
+ LLVMRet = 1,
+ LLVMBr = 2,
+ LLVMSwitch = 3,
+ LLVMIndirectBr = 4,
+ LLVMInvoke = 5,
+ /* removed 6 due to API changes */
+ LLVMUnreachable = 7,
+ LLVMCallBr = 67,
+
+ /* Standard Unary Operators */
+ LLVMFNeg = 66,
+
+ /* Standard Binary Operators */
+ LLVMAdd = 8,
+ LLVMFAdd = 9,
+ LLVMSub = 10,
+ LLVMFSub = 11,
+ LLVMMul = 12,
+ LLVMFMul = 13,
+ LLVMUDiv = 14,
+ LLVMSDiv = 15,
+ LLVMFDiv = 16,
+ LLVMURem = 17,
+ LLVMSRem = 18,
+ LLVMFRem = 19,
+
+ /* Logical Operators */
+ LLVMShl = 20,
+ LLVMLShr = 21,
+ LLVMAShr = 22,
+ LLVMAnd = 23,
+ LLVMOr = 24,
+ LLVMXor = 25,
+
+ /* Memory Operators */
+ LLVMAlloca = 26,
+ LLVMLoad = 27,
+ LLVMStore = 28,
+ LLVMGetElementPtr = 29,
+
+ /* Cast Operators */
+ LLVMTrunc = 30,
+ LLVMZExt = 31,
+ LLVMSExt = 32,
+ LLVMFPToUI = 33,
+ LLVMFPToSI = 34,
+ LLVMUIToFP = 35,
+ LLVMSIToFP = 36,
+ LLVMFPTrunc = 37,
+ LLVMFPExt = 38,
+ LLVMPtrToInt = 39,
+ LLVMIntToPtr = 40,
+ LLVMBitCast = 41,
+ LLVMAddrSpaceCast = 60,
+
+ /* Other Operators */
+ LLVMICmp = 42,
+ LLVMFCmp = 43,
+ LLVMPHI = 44,
+ LLVMCall = 45,
+ LLVMSelect = 46,
+ LLVMUserOp1 = 47,
+ LLVMUserOp2 = 48,
+ LLVMVAArg = 49,
+ LLVMExtractElement = 50,
+ LLVMInsertElement = 51,
+ LLVMShuffleVector = 52,
+ LLVMExtractValue = 53,
+ LLVMInsertValue = 54,
+ LLVMFreeze = 68,
+
+ /* Atomic operators */
+ LLVMFence = 55,
+ LLVMAtomicCmpXchg = 56,
+ LLVMAtomicRMW = 57,
+
+ /* Exception Handling Operators */
+ LLVMResume = 58,
+ LLVMLandingPad = 59,
+ LLVMCleanupRet = 61,
+ LLVMCatchRet = 62,
+ LLVMCatchPad = 63,
+ LLVMCleanupPad = 64,
+ LLVMCatchSwitch = 65
+} LLVMOpcode;
+
+typedef enum {
+ LLVMVoidTypeKind, /**< type with no size */
+ LLVMHalfTypeKind, /**< 16 bit floating point type */
+ LLVMFloatTypeKind, /**< 32 bit floating point type */
+ LLVMDoubleTypeKind, /**< 64 bit floating point type */
+ LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
+ LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
+ LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
+ LLVMLabelTypeKind, /**< Labels */
+ LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
+ LLVMFunctionTypeKind, /**< Functions */
+ LLVMStructTypeKind, /**< Structures */
+ LLVMArrayTypeKind, /**< Arrays */
+ LLVMPointerTypeKind, /**< Pointers */
+ LLVMVectorTypeKind, /**< Fixed width SIMD vector type */
+ LLVMMetadataTypeKind, /**< Metadata */
+ LLVMX86_MMXTypeKind, /**< X86 MMX */
+ LLVMTokenTypeKind, /**< Tokens */
+ LLVMScalableVectorTypeKind, /**< Scalable SIMD vector type */
LLVMBFloatTypeKind, /**< 16 bit brain floating point type */
LLVMX86_AMXTypeKind /**< X86 AMX */
-} LLVMTypeKind;
-
-typedef enum {
- LLVMExternalLinkage, /**< Externally visible function */
- LLVMAvailableExternallyLinkage,
- LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
- LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
- equivalent. */
- LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
- LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
- LLVMWeakODRLinkage, /**< Same, but only replaced by something
- equivalent. */
- LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
- LLVMInternalLinkage, /**< Rename collisions when linking (static
- functions) */
- LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
- LLVMDLLImportLinkage, /**< Obsolete */
- LLVMDLLExportLinkage, /**< Obsolete */
- LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
- LLVMGhostLinkage, /**< Obsolete */
- LLVMCommonLinkage, /**< Tentative definitions */
- LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
- LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
-} LLVMLinkage;
-
-typedef enum {
- LLVMDefaultVisibility, /**< The GV is visible */
- LLVMHiddenVisibility, /**< The GV is hidden */
- LLVMProtectedVisibility /**< The GV is protected */
-} LLVMVisibility;
-
-typedef enum {
- LLVMNoUnnamedAddr, /**< Address of the GV is significant. */
- LLVMLocalUnnamedAddr, /**< Address of the GV is locally insignificant. */
- LLVMGlobalUnnamedAddr /**< Address of the GV is globally insignificant. */
-} LLVMUnnamedAddr;
-
-typedef enum {
- LLVMDefaultStorageClass = 0,
- LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
- LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
-} LLVMDLLStorageClass;
-
-typedef enum {
- LLVMCCallConv = 0,
- LLVMFastCallConv = 8,
- LLVMColdCallConv = 9,
- LLVMGHCCallConv = 10,
- LLVMHiPECallConv = 11,
- LLVMWebKitJSCallConv = 12,
- LLVMAnyRegCallConv = 13,
- LLVMPreserveMostCallConv = 14,
- LLVMPreserveAllCallConv = 15,
- LLVMSwiftCallConv = 16,
- LLVMCXXFASTTLSCallConv = 17,
- LLVMX86StdcallCallConv = 64,
- LLVMX86FastcallCallConv = 65,
- LLVMARMAPCSCallConv = 66,
- LLVMARMAAPCSCallConv = 67,
- LLVMARMAAPCSVFPCallConv = 68,
- LLVMMSP430INTRCallConv = 69,
- LLVMX86ThisCallCallConv = 70,
- LLVMPTXKernelCallConv = 71,
- LLVMPTXDeviceCallConv = 72,
- LLVMSPIRFUNCCallConv = 75,
- LLVMSPIRKERNELCallConv = 76,
- LLVMIntelOCLBICallConv = 77,
- LLVMX8664SysVCallConv = 78,
- LLVMWin64CallConv = 79,
- LLVMX86VectorCallCallConv = 80,
- LLVMHHVMCallConv = 81,
- LLVMHHVMCCallConv = 82,
- LLVMX86INTRCallConv = 83,
- LLVMAVRINTRCallConv = 84,
- LLVMAVRSIGNALCallConv = 85,
- LLVMAVRBUILTINCallConv = 86,
- LLVMAMDGPUVSCallConv = 87,
- LLVMAMDGPUGSCallConv = 88,
- LLVMAMDGPUPSCallConv = 89,
- LLVMAMDGPUCSCallConv = 90,
- LLVMAMDGPUKERNELCallConv = 91,
- LLVMX86RegCallCallConv = 92,
- LLVMAMDGPUHSCallConv = 93,
- LLVMMSP430BUILTINCallConv = 94,
- LLVMAMDGPULSCallConv = 95,
- LLVMAMDGPUESCallConv = 96
-} LLVMCallConv;
-
-typedef enum {
- LLVMArgumentValueKind,
- LLVMBasicBlockValueKind,
- LLVMMemoryUseValueKind,
- LLVMMemoryDefValueKind,
- LLVMMemoryPhiValueKind,
-
- LLVMFunctionValueKind,
- LLVMGlobalAliasValueKind,
- LLVMGlobalIFuncValueKind,
- LLVMGlobalVariableValueKind,
- LLVMBlockAddressValueKind,
- LLVMConstantExprValueKind,
- LLVMConstantArrayValueKind,
- LLVMConstantStructValueKind,
- LLVMConstantVectorValueKind,
-
- LLVMUndefValueValueKind,
- LLVMConstantAggregateZeroValueKind,
- LLVMConstantDataArrayValueKind,
- LLVMConstantDataVectorValueKind,
- LLVMConstantIntValueKind,
- LLVMConstantFPValueKind,
- LLVMConstantPointerNullValueKind,
- LLVMConstantTokenNoneValueKind,
-
- LLVMMetadataAsValueValueKind,
- LLVMInlineAsmValueKind,
-
- LLVMInstructionValueKind,
+} LLVMTypeKind;
+
+typedef enum {
+ LLVMExternalLinkage, /**< Externally visible function */
+ LLVMAvailableExternallyLinkage,
+ LLVMLinkOnceAnyLinkage, /**< Keep one copy of function when linking (inline)*/
+ LLVMLinkOnceODRLinkage, /**< Same, but only replaced by something
+ equivalent. */
+ LLVMLinkOnceODRAutoHideLinkage, /**< Obsolete */
+ LLVMWeakAnyLinkage, /**< Keep one copy of function when linking (weak) */
+ LLVMWeakODRLinkage, /**< Same, but only replaced by something
+ equivalent. */
+ LLVMAppendingLinkage, /**< Special purpose, only applies to global arrays */
+ LLVMInternalLinkage, /**< Rename collisions when linking (static
+ functions) */
+ LLVMPrivateLinkage, /**< Like Internal, but omit from symbol table */
+ LLVMDLLImportLinkage, /**< Obsolete */
+ LLVMDLLExportLinkage, /**< Obsolete */
+ LLVMExternalWeakLinkage,/**< ExternalWeak linkage description */
+ LLVMGhostLinkage, /**< Obsolete */
+ LLVMCommonLinkage, /**< Tentative definitions */
+ LLVMLinkerPrivateLinkage, /**< Like Private, but linker removes. */
+ LLVMLinkerPrivateWeakLinkage /**< Like LinkerPrivate, but is weak. */
+} LLVMLinkage;
+
+typedef enum {
+ LLVMDefaultVisibility, /**< The GV is visible */
+ LLVMHiddenVisibility, /**< The GV is hidden */
+ LLVMProtectedVisibility /**< The GV is protected */
+} LLVMVisibility;
+
+typedef enum {
+ LLVMNoUnnamedAddr, /**< Address of the GV is significant. */
+ LLVMLocalUnnamedAddr, /**< Address of the GV is locally insignificant. */
+ LLVMGlobalUnnamedAddr /**< Address of the GV is globally insignificant. */
+} LLVMUnnamedAddr;
+
+typedef enum {
+ LLVMDefaultStorageClass = 0,
+ LLVMDLLImportStorageClass = 1, /**< Function to be imported from DLL. */
+ LLVMDLLExportStorageClass = 2 /**< Function to be accessible from DLL. */
+} LLVMDLLStorageClass;
+
+typedef enum {
+ LLVMCCallConv = 0,
+ LLVMFastCallConv = 8,
+ LLVMColdCallConv = 9,
+ LLVMGHCCallConv = 10,
+ LLVMHiPECallConv = 11,
+ LLVMWebKitJSCallConv = 12,
+ LLVMAnyRegCallConv = 13,
+ LLVMPreserveMostCallConv = 14,
+ LLVMPreserveAllCallConv = 15,
+ LLVMSwiftCallConv = 16,
+ LLVMCXXFASTTLSCallConv = 17,
+ LLVMX86StdcallCallConv = 64,
+ LLVMX86FastcallCallConv = 65,
+ LLVMARMAPCSCallConv = 66,
+ LLVMARMAAPCSCallConv = 67,
+ LLVMARMAAPCSVFPCallConv = 68,
+ LLVMMSP430INTRCallConv = 69,
+ LLVMX86ThisCallCallConv = 70,
+ LLVMPTXKernelCallConv = 71,
+ LLVMPTXDeviceCallConv = 72,
+ LLVMSPIRFUNCCallConv = 75,
+ LLVMSPIRKERNELCallConv = 76,
+ LLVMIntelOCLBICallConv = 77,
+ LLVMX8664SysVCallConv = 78,
+ LLVMWin64CallConv = 79,
+ LLVMX86VectorCallCallConv = 80,
+ LLVMHHVMCallConv = 81,
+ LLVMHHVMCCallConv = 82,
+ LLVMX86INTRCallConv = 83,
+ LLVMAVRINTRCallConv = 84,
+ LLVMAVRSIGNALCallConv = 85,
+ LLVMAVRBUILTINCallConv = 86,
+ LLVMAMDGPUVSCallConv = 87,
+ LLVMAMDGPUGSCallConv = 88,
+ LLVMAMDGPUPSCallConv = 89,
+ LLVMAMDGPUCSCallConv = 90,
+ LLVMAMDGPUKERNELCallConv = 91,
+ LLVMX86RegCallCallConv = 92,
+ LLVMAMDGPUHSCallConv = 93,
+ LLVMMSP430BUILTINCallConv = 94,
+ LLVMAMDGPULSCallConv = 95,
+ LLVMAMDGPUESCallConv = 96
+} LLVMCallConv;
+
+typedef enum {
+ LLVMArgumentValueKind,
+ LLVMBasicBlockValueKind,
+ LLVMMemoryUseValueKind,
+ LLVMMemoryDefValueKind,
+ LLVMMemoryPhiValueKind,
+
+ LLVMFunctionValueKind,
+ LLVMGlobalAliasValueKind,
+ LLVMGlobalIFuncValueKind,
+ LLVMGlobalVariableValueKind,
+ LLVMBlockAddressValueKind,
+ LLVMConstantExprValueKind,
+ LLVMConstantArrayValueKind,
+ LLVMConstantStructValueKind,
+ LLVMConstantVectorValueKind,
+
+ LLVMUndefValueValueKind,
+ LLVMConstantAggregateZeroValueKind,
+ LLVMConstantDataArrayValueKind,
+ LLVMConstantDataVectorValueKind,
+ LLVMConstantIntValueKind,
+ LLVMConstantFPValueKind,
+ LLVMConstantPointerNullValueKind,
+ LLVMConstantTokenNoneValueKind,
+
+ LLVMMetadataAsValueValueKind,
+ LLVMInlineAsmValueKind,
+
+ LLVMInstructionValueKind,
LLVMPoisonValueValueKind
-} LLVMValueKind;
-
-typedef enum {
- LLVMIntEQ = 32, /**< equal */
- LLVMIntNE, /**< not equal */
- LLVMIntUGT, /**< unsigned greater than */
- LLVMIntUGE, /**< unsigned greater or equal */
- LLVMIntULT, /**< unsigned less than */
- LLVMIntULE, /**< unsigned less or equal */
- LLVMIntSGT, /**< signed greater than */
- LLVMIntSGE, /**< signed greater or equal */
- LLVMIntSLT, /**< signed less than */
- LLVMIntSLE /**< signed less or equal */
-} LLVMIntPredicate;
-
-typedef enum {
- LLVMRealPredicateFalse, /**< Always false (always folded) */
- LLVMRealOEQ, /**< True if ordered and equal */
- LLVMRealOGT, /**< True if ordered and greater than */
- LLVMRealOGE, /**< True if ordered and greater than or equal */
- LLVMRealOLT, /**< True if ordered and less than */
- LLVMRealOLE, /**< True if ordered and less than or equal */
- LLVMRealONE, /**< True if ordered and operands are unequal */
- LLVMRealORD, /**< True if ordered (no nans) */
- LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
- LLVMRealUEQ, /**< True if unordered or equal */
- LLVMRealUGT, /**< True if unordered or greater than */
- LLVMRealUGE, /**< True if unordered, greater than, or equal */
- LLVMRealULT, /**< True if unordered or less than */
- LLVMRealULE, /**< True if unordered, less than, or equal */
- LLVMRealUNE, /**< True if unordered or not equal */
- LLVMRealPredicateTrue /**< Always true (always folded) */
-} LLVMRealPredicate;
-
-typedef enum {
- LLVMLandingPadCatch, /**< A catch clause */
- LLVMLandingPadFilter /**< A filter clause */
-} LLVMLandingPadClauseTy;
-
-typedef enum {
- LLVMNotThreadLocal = 0,
- LLVMGeneralDynamicTLSModel,
- LLVMLocalDynamicTLSModel,
- LLVMInitialExecTLSModel,
- LLVMLocalExecTLSModel
-} LLVMThreadLocalMode;
-
-typedef enum {
- LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
- LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
- somewhat sane results, lock free. */
- LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
- operations affecting a specific address,
- a consistent ordering exists */
- LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
- necessary to acquire a lock to access other
- memory with normal loads and stores. */
- LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
- a barrier of the sort necessary to release
- a lock. */
- LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
- Release barrier (for fences and
- operations which both read and write
- memory). */
- LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
- for loads and Release
- semantics for stores.
- Additionally, it guarantees
- that a total ordering exists
- between all
- SequentiallyConsistent
- operations. */
-} LLVMAtomicOrdering;
-
-typedef enum {
- LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
- LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
- LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
- LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
- LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
- LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
- LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
- LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
- original using a signed comparison and return
- the old one */
- LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
- original using a signed comparison and return
- the old one */
- LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
- original using an unsigned comparison and return
- the old one */
- LLVMAtomicRMWBinOpUMin, /**< Sets the value if it's greater than the
- original using an unsigned comparison and return
- the old one */
- LLVMAtomicRMWBinOpFAdd, /**< Add a floating point value and return the
- old one */
- LLVMAtomicRMWBinOpFSub /**< Subtract a floating point value and return the
- old one */
-} LLVMAtomicRMWBinOp;
-
-typedef enum {
- LLVMDSError,
- LLVMDSWarning,
- LLVMDSRemark,
- LLVMDSNote
-} LLVMDiagnosticSeverity;
-
-typedef enum {
- LLVMInlineAsmDialectATT,
- LLVMInlineAsmDialectIntel
-} LLVMInlineAsmDialect;
-
-typedef enum {
- /**
- * Emits an error if two values disagree, otherwise the resulting value is
- * that of the operands.
- *
- * @see Module::ModFlagBehavior::Error
- */
- LLVMModuleFlagBehaviorError,
- /**
- * Emits a warning if two values disagree. The result value will be the
- * operand for the flag from the first module being linked.
- *
- * @see Module::ModFlagBehavior::Warning
- */
- LLVMModuleFlagBehaviorWarning,
- /**
- * Adds a requirement that another module flag be present and have a
- * specified value after linking is performed. The value must be a metadata
- * pair, where the first element of the pair is the ID of the module flag
- * to be restricted, and the second element of the pair is the value the
- * module flag should be restricted to. This behavior can be used to
- * restrict the allowable results (via triggering of an error) of linking
- * IDs with the **Override** behavior.
- *
- * @see Module::ModFlagBehavior::Require
- */
- LLVMModuleFlagBehaviorRequire,
- /**
- * Uses the specified value, regardless of the behavior or value of the
- * other module. If both modules specify **Override**, but the values
- * differ, an error will be emitted.
- *
- * @see Module::ModFlagBehavior::Override
- */
- LLVMModuleFlagBehaviorOverride,
- /**
- * Appends the two values, which are required to be metadata nodes.
- *
- * @see Module::ModFlagBehavior::Append
- */
- LLVMModuleFlagBehaviorAppend,
- /**
- * Appends the two values, which are required to be metadata
- * nodes. However, duplicate entries in the second list are dropped
- * during the append operation.
- *
- * @see Module::ModFlagBehavior::AppendUnique
- */
- LLVMModuleFlagBehaviorAppendUnique,
-} LLVMModuleFlagBehavior;
-
-/**
- * Attribute index are either LLVMAttributeReturnIndex,
- * LLVMAttributeFunctionIndex or a parameter number from 1 to N.
- */
-enum {
- LLVMAttributeReturnIndex = 0U,
- // ISO C restricts enumerator values to range of 'int'
- // (4294967295 is too large)
- // LLVMAttributeFunctionIndex = ~0U,
- LLVMAttributeFunctionIndex = -1,
-};
-
-typedef unsigned LLVMAttributeIndex;
-
-/**
- * @}
- */
-
-void LLVMInitializeCore(LLVMPassRegistryRef R);
-
-/** Deallocate and destroy all ManagedStatic variables.
- @see llvm::llvm_shutdown
- @see ManagedStatic */
-void LLVMShutdown(void);
-
-/*===-- Error handling ----------------------------------------------------===*/
-
-char *LLVMCreateMessage(const char *Message);
-void LLVMDisposeMessage(char *Message);
-
-/**
- * @defgroup LLVMCCoreContext Contexts
- *
- * Contexts are execution states for the core LLVM IR system.
- *
- * Most types are tied to a context instance. Multiple contexts can
- * exist simultaneously. A single context is not thread safe. However,
- * different contexts can execute on different threads simultaneously.
- *
- * @{
- */
-
-typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
-typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
-
-/**
- * Create a new context.
- *
- * Every call to this function should be paired with a call to
- * LLVMContextDispose() or the context will leak memory.
- */
-LLVMContextRef LLVMContextCreate(void);
-
-/**
- * Obtain the global context instance.
- */
-LLVMContextRef LLVMGetGlobalContext(void);
-
-/**
- * Set the diagnostic handler for this context.
- */
-void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
- LLVMDiagnosticHandler Handler,
- void *DiagnosticContext);
-
-/**
- * Get the diagnostic handler of this context.
- */
-LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C);
-
-/**
- * Get the diagnostic context of this context.
- */
-void *LLVMContextGetDiagnosticContext(LLVMContextRef C);
-
-/**
- * Set the yield callback function for this context.
- *
- * @see LLVMContext::setYieldCallback()
- */
-void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
- void *OpaqueHandle);
-
-/**
- * Retrieve whether the given context is set to discard all value names.
- *
- * @see LLVMContext::shouldDiscardValueNames()
- */
-LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C);
-
-/**
- * Set whether the given context discards all value names.
- *
- * If true, only the names of GlobalValue objects will be available in the IR.
- * This can be used to save memory and runtime, especially in release mode.
- *
- * @see LLVMContext::setDiscardValueNames()
- */
-void LLVMContextSetDiscardValueNames(LLVMContextRef C, LLVMBool Discard);
-
-/**
- * Destroy a context instance.
- *
- * This should be called for every call to LLVMContextCreate() or memory
- * will be leaked.
- */
-void LLVMContextDispose(LLVMContextRef C);
-
-/**
- * Return a string representation of the DiagnosticInfo. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see DiagnosticInfo::print()
- */
-char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
-
-/**
- * Return an enum LLVMDiagnosticSeverity.
- *
- * @see DiagnosticInfo::getSeverity()
- */
-LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
-
-unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name,
- unsigned SLen);
-unsigned LLVMGetMDKindID(const char *Name, unsigned SLen);
-
-/**
- * Return an unique id given the name of a enum attribute,
- * or 0 if no attribute by that name exists.
- *
- * See http://llvm.org/docs/LangRef.html#parameter-attributes
- * and http://llvm.org/docs/LangRef.html#function-attributes
- * for the list of available attributes.
- *
- * NB: Attribute names and/or id are subject to change without
- * going through the C API deprecation cycle.
- */
-unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen);
-unsigned LLVMGetLastEnumAttributeKind(void);
-
-/**
- * Create an enum attribute.
- */
-LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID,
- uint64_t Val);
-
-/**
- * Get the unique id corresponding to the enum attribute
- * passed as argument.
- */
-unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A);
-
-/**
- * Get the enum attribute's value. 0 is returned if none exists.
- */
-uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A);
-
-/**
+} LLVMValueKind;
+
+typedef enum {
+ LLVMIntEQ = 32, /**< equal */
+ LLVMIntNE, /**< not equal */
+ LLVMIntUGT, /**< unsigned greater than */
+ LLVMIntUGE, /**< unsigned greater or equal */
+ LLVMIntULT, /**< unsigned less than */
+ LLVMIntULE, /**< unsigned less or equal */
+ LLVMIntSGT, /**< signed greater than */
+ LLVMIntSGE, /**< signed greater or equal */
+ LLVMIntSLT, /**< signed less than */
+ LLVMIntSLE /**< signed less or equal */
+} LLVMIntPredicate;
+
+typedef enum {
+ LLVMRealPredicateFalse, /**< Always false (always folded) */
+ LLVMRealOEQ, /**< True if ordered and equal */
+ LLVMRealOGT, /**< True if ordered and greater than */
+ LLVMRealOGE, /**< True if ordered and greater than or equal */
+ LLVMRealOLT, /**< True if ordered and less than */
+ LLVMRealOLE, /**< True if ordered and less than or equal */
+ LLVMRealONE, /**< True if ordered and operands are unequal */
+ LLVMRealORD, /**< True if ordered (no nans) */
+ LLVMRealUNO, /**< True if unordered: isnan(X) | isnan(Y) */
+ LLVMRealUEQ, /**< True if unordered or equal */
+ LLVMRealUGT, /**< True if unordered or greater than */
+ LLVMRealUGE, /**< True if unordered, greater than, or equal */
+ LLVMRealULT, /**< True if unordered or less than */
+ LLVMRealULE, /**< True if unordered, less than, or equal */
+ LLVMRealUNE, /**< True if unordered or not equal */
+ LLVMRealPredicateTrue /**< Always true (always folded) */
+} LLVMRealPredicate;
+
+typedef enum {
+ LLVMLandingPadCatch, /**< A catch clause */
+ LLVMLandingPadFilter /**< A filter clause */
+} LLVMLandingPadClauseTy;
+
+typedef enum {
+ LLVMNotThreadLocal = 0,
+ LLVMGeneralDynamicTLSModel,
+ LLVMLocalDynamicTLSModel,
+ LLVMInitialExecTLSModel,
+ LLVMLocalExecTLSModel
+} LLVMThreadLocalMode;
+
+typedef enum {
+ LLVMAtomicOrderingNotAtomic = 0, /**< A load or store which is not atomic */
+ LLVMAtomicOrderingUnordered = 1, /**< Lowest level of atomicity, guarantees
+ somewhat sane results, lock free. */
+ LLVMAtomicOrderingMonotonic = 2, /**< guarantees that if you take all the
+ operations affecting a specific address,
+ a consistent ordering exists */
+ LLVMAtomicOrderingAcquire = 4, /**< Acquire provides a barrier of the sort
+ necessary to acquire a lock to access other
+ memory with normal loads and stores. */
+ LLVMAtomicOrderingRelease = 5, /**< Release is similar to Acquire, but with
+ a barrier of the sort necessary to release
+ a lock. */
+ LLVMAtomicOrderingAcquireRelease = 6, /**< provides both an Acquire and a
+ Release barrier (for fences and
+ operations which both read and write
+ memory). */
+ LLVMAtomicOrderingSequentiallyConsistent = 7 /**< provides Acquire semantics
+ for loads and Release
+ semantics for stores.
+ Additionally, it guarantees
+ that a total ordering exists
+ between all
+ SequentiallyConsistent
+ operations. */
+} LLVMAtomicOrdering;
+
+typedef enum {
+ LLVMAtomicRMWBinOpXchg, /**< Set the new value and return the one old */
+ LLVMAtomicRMWBinOpAdd, /**< Add a value and return the old one */
+ LLVMAtomicRMWBinOpSub, /**< Subtract a value and return the old one */
+ LLVMAtomicRMWBinOpAnd, /**< And a value and return the old one */
+ LLVMAtomicRMWBinOpNand, /**< Not-And a value and return the old one */
+ LLVMAtomicRMWBinOpOr, /**< OR a value and return the old one */
+ LLVMAtomicRMWBinOpXor, /**< Xor a value and return the old one */
+ LLVMAtomicRMWBinOpMax, /**< Sets the value if it's greater than the
+ original using a signed comparison and return
+ the old one */
+ LLVMAtomicRMWBinOpMin, /**< Sets the value if it's Smaller than the
+ original using a signed comparison and return
+ the old one */
+ LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
+ original using an unsigned comparison and return
+ the old one */
+ LLVMAtomicRMWBinOpUMin, /**< Sets the value if it's greater than the
+ original using an unsigned comparison and return
+ the old one */
+ LLVMAtomicRMWBinOpFAdd, /**< Add a floating point value and return the
+ old one */
+ LLVMAtomicRMWBinOpFSub /**< Subtract a floating point value and return the
+ old one */
+} LLVMAtomicRMWBinOp;
+
+typedef enum {
+ LLVMDSError,
+ LLVMDSWarning,
+ LLVMDSRemark,
+ LLVMDSNote
+} LLVMDiagnosticSeverity;
+
+typedef enum {
+ LLVMInlineAsmDialectATT,
+ LLVMInlineAsmDialectIntel
+} LLVMInlineAsmDialect;
+
+typedef enum {
+ /**
+ * Emits an error if two values disagree, otherwise the resulting value is
+ * that of the operands.
+ *
+ * @see Module::ModFlagBehavior::Error
+ */
+ LLVMModuleFlagBehaviorError,
+ /**
+ * Emits a warning if two values disagree. The result value will be the
+ * operand for the flag from the first module being linked.
+ *
+ * @see Module::ModFlagBehavior::Warning
+ */
+ LLVMModuleFlagBehaviorWarning,
+ /**
+ * Adds a requirement that another module flag be present and have a
+ * specified value after linking is performed. The value must be a metadata
+ * pair, where the first element of the pair is the ID of the module flag
+ * to be restricted, and the second element of the pair is the value the
+ * module flag should be restricted to. This behavior can be used to
+ * restrict the allowable results (via triggering of an error) of linking
+ * IDs with the **Override** behavior.
+ *
+ * @see Module::ModFlagBehavior::Require
+ */
+ LLVMModuleFlagBehaviorRequire,
+ /**
+ * Uses the specified value, regardless of the behavior or value of the
+ * other module. If both modules specify **Override**, but the values
+ * differ, an error will be emitted.
+ *
+ * @see Module::ModFlagBehavior::Override
+ */
+ LLVMModuleFlagBehaviorOverride,
+ /**
+ * Appends the two values, which are required to be metadata nodes.
+ *
+ * @see Module::ModFlagBehavior::Append
+ */
+ LLVMModuleFlagBehaviorAppend,
+ /**
+ * Appends the two values, which are required to be metadata
+ * nodes. However, duplicate entries in the second list are dropped
+ * during the append operation.
+ *
+ * @see Module::ModFlagBehavior::AppendUnique
+ */
+ LLVMModuleFlagBehaviorAppendUnique,
+} LLVMModuleFlagBehavior;
+
+/**
+ * Attribute index are either LLVMAttributeReturnIndex,
+ * LLVMAttributeFunctionIndex or a parameter number from 1 to N.
+ */
+enum {
+ LLVMAttributeReturnIndex = 0U,
+ // ISO C restricts enumerator values to range of 'int'
+ // (4294967295 is too large)
+ // LLVMAttributeFunctionIndex = ~0U,
+ LLVMAttributeFunctionIndex = -1,
+};
+
+typedef unsigned LLVMAttributeIndex;
+
+/**
+ * @}
+ */
+
+void LLVMInitializeCore(LLVMPassRegistryRef R);
+
+/** Deallocate and destroy all ManagedStatic variables.
+ @see llvm::llvm_shutdown
+ @see ManagedStatic */
+void LLVMShutdown(void);
+
+/*===-- Error handling ----------------------------------------------------===*/
+
+char *LLVMCreateMessage(const char *Message);
+void LLVMDisposeMessage(char *Message);
+
+/**
+ * @defgroup LLVMCCoreContext Contexts
+ *
+ * Contexts are execution states for the core LLVM IR system.
+ *
+ * Most types are tied to a context instance. Multiple contexts can
+ * exist simultaneously. A single context is not thread safe. However,
+ * different contexts can execute on different threads simultaneously.
+ *
+ * @{
+ */
+
+typedef void (*LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *);
+typedef void (*LLVMYieldCallback)(LLVMContextRef, void *);
+
+/**
+ * Create a new context.
+ *
+ * Every call to this function should be paired with a call to
+ * LLVMContextDispose() or the context will leak memory.
+ */
+LLVMContextRef LLVMContextCreate(void);
+
+/**
+ * Obtain the global context instance.
+ */
+LLVMContextRef LLVMGetGlobalContext(void);
+
+/**
+ * Set the diagnostic handler for this context.
+ */
+void LLVMContextSetDiagnosticHandler(LLVMContextRef C,
+ LLVMDiagnosticHandler Handler,
+ void *DiagnosticContext);
+
+/**
+ * Get the diagnostic handler of this context.
+ */
+LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C);
+
+/**
+ * Get the diagnostic context of this context.
+ */
+void *LLVMContextGetDiagnosticContext(LLVMContextRef C);
+
+/**
+ * Set the yield callback function for this context.
+ *
+ * @see LLVMContext::setYieldCallback()
+ */
+void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback,
+ void *OpaqueHandle);
+
+/**
+ * Retrieve whether the given context is set to discard all value names.
+ *
+ * @see LLVMContext::shouldDiscardValueNames()
+ */
+LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C);
+
+/**
+ * Set whether the given context discards all value names.
+ *
+ * If true, only the names of GlobalValue objects will be available in the IR.
+ * This can be used to save memory and runtime, especially in release mode.
+ *
+ * @see LLVMContext::setDiscardValueNames()
+ */
+void LLVMContextSetDiscardValueNames(LLVMContextRef C, LLVMBool Discard);
+
+/**
+ * Destroy a context instance.
+ *
+ * This should be called for every call to LLVMContextCreate() or memory
+ * will be leaked.
+ */
+void LLVMContextDispose(LLVMContextRef C);
+
+/**
+ * Return a string representation of the DiagnosticInfo. Use
+ * LLVMDisposeMessage to free the string.
+ *
+ * @see DiagnosticInfo::print()
+ */
+char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI);
+
+/**
+ * Return an enum LLVMDiagnosticSeverity.
+ *
+ * @see DiagnosticInfo::getSeverity()
+ */
+LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI);
+
+unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name,
+ unsigned SLen);
+unsigned LLVMGetMDKindID(const char *Name, unsigned SLen);
+
+/**
+ * Return an unique id given the name of a enum attribute,
+ * or 0 if no attribute by that name exists.
+ *
+ * See http://llvm.org/docs/LangRef.html#parameter-attributes
+ * and http://llvm.org/docs/LangRef.html#function-attributes
+ * for the list of available attributes.
+ *
+ * NB: Attribute names and/or id are subject to change without
+ * going through the C API deprecation cycle.
+ */
+unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen);
+unsigned LLVMGetLastEnumAttributeKind(void);
+
+/**
+ * Create an enum attribute.
+ */
+LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID,
+ uint64_t Val);
+
+/**
+ * Get the unique id corresponding to the enum attribute
+ * passed as argument.
+ */
+unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A);
+
+/**
+ * Get the enum attribute's value. 0 is returned if none exists.
+ */
+uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A);
+
+/**
* Create a type attribute
*/
LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID,
@@ -623,857 +623,857 @@ LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID,
LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A);
/**
- * Create a string attribute.
- */
-LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C,
- const char *K, unsigned KLength,
- const char *V, unsigned VLength);
-
-/**
- * Get the string attribute's kind.
- */
-const char *LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length);
-
-/**
- * Get the string attribute's value.
- */
-const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length);
-
-/**
- * Check for the different types of attributes.
- */
-LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A);
-LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A);
+ * Create a string attribute.
+ */
+LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C,
+ const char *K, unsigned KLength,
+ const char *V, unsigned VLength);
+
+/**
+ * Get the string attribute's kind.
+ */
+const char *LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length);
+
+/**
+ * Get the string attribute's value.
+ */
+const char *LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length);
+
+/**
+ * Check for the different types of attributes.
+ */
+LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A);
+LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A);
LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A);
-
-/**
+
+/**
* Obtain a Type from a context by its registered name.
*/
LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name);
/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreModule Modules
- *
- * Modules represent the top-level structure in an LLVM program. An LLVM
- * module is effectively a translation unit or a collection of
- * translation units merged together.
- *
- * @{
- */
-
-/**
- * Create a new, empty module in the global context.
- *
- * This is equivalent to calling LLVMModuleCreateWithNameInContext with
- * LLVMGetGlobalContext() as the context parameter.
- *
- * Every invocation should be paired with LLVMDisposeModule() or memory
- * will be leaked.
- */
-LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
-
-/**
- * Create a new, empty module in a specific context.
- *
- * Every invocation should be paired with LLVMDisposeModule() or memory
- * will be leaked.
- */
-LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
- LLVMContextRef C);
-/**
- * Return an exact copy of the specified module.
- */
-LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
-
-/**
- * Destroy a module instance.
- *
- * This must be called for every created module or memory will be
- * leaked.
- */
-void LLVMDisposeModule(LLVMModuleRef M);
-
-/**
- * Obtain the identifier of a module.
- *
- * @param M Module to obtain identifier of
- * @param Len Out parameter which holds the length of the returned string.
- * @return The identifier of M.
- * @see Module::getModuleIdentifier()
- */
-const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
-
-/**
- * Set the identifier of a module to a string Ident with length Len.
- *
- * @param M The module to set identifier
- * @param Ident The string to set M's identifier to
- * @param Len Length of Ident
- * @see Module::setModuleIdentifier()
- */
-void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len);
-
-/**
- * Obtain the module's original source file name.
- *
- * @param M Module to obtain the name of
- * @param Len Out parameter which holds the length of the returned string
- * @return The original source file name of M
- * @see Module::getSourceFileName()
- */
-const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len);
-
-/**
- * Set the original source file name of a module to a string Name with length
- * Len.
- *
- * @param M The module to set the source file name of
- * @param Name The string to set M's source file name to
- * @param Len Length of Name
- * @see Module::setSourceFileName()
- */
-void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len);
-
-/**
- * Obtain the data layout for a module.
- *
- * @see Module::getDataLayoutStr()
- *
- * LLVMGetDataLayout is DEPRECATED, as the name is not only incorrect,
- * but match the name of another method on the module. Prefer the use
- * of LLVMGetDataLayoutStr, which is not ambiguous.
- */
-const char *LLVMGetDataLayoutStr(LLVMModuleRef M);
-const char *LLVMGetDataLayout(LLVMModuleRef M);
-
-/**
- * Set the data layout for a module.
- *
- * @see Module::setDataLayout()
- */
-void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr);
-
-/**
- * Obtain the target triple for a module.
- *
- * @see Module::getTargetTriple()
- */
-const char *LLVMGetTarget(LLVMModuleRef M);
-
-/**
- * Set the target triple for a module.
- *
- * @see Module::setTargetTriple()
- */
-void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
-
-/**
- * Returns the module flags as an array of flag-key-value triples. The caller
- * is responsible for freeing this array by calling
- * \c LLVMDisposeModuleFlagsMetadata.
- *
- * @see Module::getModuleFlagsMetadata()
- */
-LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len);
-
-/**
- * Destroys module flags metadata entries.
- */
-void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries);
-
-/**
- * Returns the flag behavior for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Behavior
- */
-LLVMModuleFlagBehavior
-LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries,
- unsigned Index);
-
-/**
- * Returns the key for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Key
- */
-const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries,
- unsigned Index, size_t *Len);
-
-/**
- * Returns the metadata for a module flag entry at a specific index.
- *
- * @see Module::ModuleFlagEntry::Val
- */
-LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries,
- unsigned Index);
-
-/**
- * Add a module-level flag to the module-level flags metadata if it doesn't
- * already exist.
- *
- * @see Module::getModuleFlag()
- */
-LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M,
- const char *Key, size_t KeyLen);
-
-/**
- * Add a module-level flag to the module-level flags metadata if it doesn't
- * already exist.
- *
- * @see Module::addModuleFlag()
- */
-void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior,
- const char *Key, size_t KeyLen,
- LLVMMetadataRef Val);
-
-/**
- * Dump a representation of a module to stderr.
- *
- * @see Module::dump()
- */
-void LLVMDumpModule(LLVMModuleRef M);
-
-/**
- * Print a representation of a module to a file. The ErrorMessage needs to be
- * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
- *
- * @see Module::print()
- */
-LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
- char **ErrorMessage);
-
-/**
- * Return a string representation of the module. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see Module::print()
- */
-char *LLVMPrintModuleToString(LLVMModuleRef M);
-
-/**
- * Get inline assembly for a module.
- *
- * @see Module::getModuleInlineAsm()
- */
-const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len);
-
-/**
- * Set inline assembly for a module.
- *
- * @see Module::setModuleInlineAsm()
- */
-void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len);
-
-/**
- * Append inline assembly to a module.
- *
- * @see Module::appendModuleInlineAsm()
- */
-void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len);
-
-/**
- * Create the specified uniqued inline asm string.
- *
- * @see InlineAsm::get()
- */
-LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,
- char *AsmString, size_t AsmStringSize,
- char *Constraints, size_t ConstraintsSize,
- LLVMBool HasSideEffects, LLVMBool IsAlignStack,
- LLVMInlineAsmDialect Dialect);
-
-/**
- * Obtain the context to which this module is associated.
- *
- * @see Module::getContext()
- */
-LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
-
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreModule Modules
+ *
+ * Modules represent the top-level structure in an LLVM program. An LLVM
+ * module is effectively a translation unit or a collection of
+ * translation units merged together.
+ *
+ * @{
+ */
+
+/**
+ * Create a new, empty module in the global context.
+ *
+ * This is equivalent to calling LLVMModuleCreateWithNameInContext with
+ * LLVMGetGlobalContext() as the context parameter.
+ *
+ * Every invocation should be paired with LLVMDisposeModule() or memory
+ * will be leaked.
+ */
+LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
+
+/**
+ * Create a new, empty module in a specific context.
+ *
+ * Every invocation should be paired with LLVMDisposeModule() or memory
+ * will be leaked.
+ */
+LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID,
+ LLVMContextRef C);
+/**
+ * Return an exact copy of the specified module.
+ */
+LLVMModuleRef LLVMCloneModule(LLVMModuleRef M);
+
+/**
+ * Destroy a module instance.
+ *
+ * This must be called for every created module or memory will be
+ * leaked.
+ */
+void LLVMDisposeModule(LLVMModuleRef M);
+
+/**
+ * Obtain the identifier of a module.
+ *
+ * @param M Module to obtain identifier of
+ * @param Len Out parameter which holds the length of the returned string.
+ * @return The identifier of M.
+ * @see Module::getModuleIdentifier()
+ */
+const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len);
+
+/**
+ * Set the identifier of a module to a string Ident with length Len.
+ *
+ * @param M The module to set identifier
+ * @param Ident The string to set M's identifier to
+ * @param Len Length of Ident
+ * @see Module::setModuleIdentifier()
+ */
+void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len);
+
+/**
+ * Obtain the module's original source file name.
+ *
+ * @param M Module to obtain the name of
+ * @param Len Out parameter which holds the length of the returned string
+ * @return The original source file name of M
+ * @see Module::getSourceFileName()
+ */
+const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len);
+
+/**
+ * Set the original source file name of a module to a string Name with length
+ * Len.
+ *
+ * @param M The module to set the source file name of
+ * @param Name The string to set M's source file name to
+ * @param Len Length of Name
+ * @see Module::setSourceFileName()
+ */
+void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len);
+
+/**
+ * Obtain the data layout for a module.
+ *
+ * @see Module::getDataLayoutStr()
+ *
+ * LLVMGetDataLayout is DEPRECATED, as the name is not only incorrect,
+ * but match the name of another method on the module. Prefer the use
+ * of LLVMGetDataLayoutStr, which is not ambiguous.
+ */
+const char *LLVMGetDataLayoutStr(LLVMModuleRef M);
+const char *LLVMGetDataLayout(LLVMModuleRef M);
+
+/**
+ * Set the data layout for a module.
+ *
+ * @see Module::setDataLayout()
+ */
+void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr);
+
+/**
+ * Obtain the target triple for a module.
+ *
+ * @see Module::getTargetTriple()
+ */
+const char *LLVMGetTarget(LLVMModuleRef M);
+
+/**
+ * Set the target triple for a module.
+ *
+ * @see Module::setTargetTriple()
+ */
+void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
+
+/**
+ * Returns the module flags as an array of flag-key-value triples. The caller
+ * is responsible for freeing this array by calling
+ * \c LLVMDisposeModuleFlagsMetadata.
+ *
+ * @see Module::getModuleFlagsMetadata()
+ */
+LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len);
+
+/**
+ * Destroys module flags metadata entries.
+ */
+void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries);
+
+/**
+ * Returns the flag behavior for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Behavior
+ */
+LLVMModuleFlagBehavior
+LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries,
+ unsigned Index);
+
+/**
+ * Returns the key for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Key
+ */
+const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries,
+ unsigned Index, size_t *Len);
+
+/**
+ * Returns the metadata for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Val
+ */
+LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries,
+ unsigned Index);
+
+/**
+ * Add a module-level flag to the module-level flags metadata if it doesn't
+ * already exist.
+ *
+ * @see Module::getModuleFlag()
+ */
+LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M,
+ const char *Key, size_t KeyLen);
+
+/**
+ * Add a module-level flag to the module-level flags metadata if it doesn't
+ * already exist.
+ *
+ * @see Module::addModuleFlag()
+ */
+void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior,
+ const char *Key, size_t KeyLen,
+ LLVMMetadataRef Val);
+
+/**
+ * Dump a representation of a module to stderr.
+ *
+ * @see Module::dump()
+ */
+void LLVMDumpModule(LLVMModuleRef M);
+
+/**
+ * Print a representation of a module to a file. The ErrorMessage needs to be
+ * disposed with LLVMDisposeMessage. Returns 0 on success, 1 otherwise.
+ *
+ * @see Module::print()
+ */
+LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename,
+ char **ErrorMessage);
+
+/**
+ * Return a string representation of the module. Use
+ * LLVMDisposeMessage to free the string.
+ *
+ * @see Module::print()
+ */
+char *LLVMPrintModuleToString(LLVMModuleRef M);
+
+/**
+ * Get inline assembly for a module.
+ *
+ * @see Module::getModuleInlineAsm()
+ */
+const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len);
+
+/**
+ * Set inline assembly for a module.
+ *
+ * @see Module::setModuleInlineAsm()
+ */
+void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len);
+
+/**
+ * Append inline assembly to a module.
+ *
+ * @see Module::appendModuleInlineAsm()
+ */
+void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len);
+
+/**
+ * Create the specified uniqued inline asm string.
+ *
+ * @see InlineAsm::get()
+ */
+LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,
+ char *AsmString, size_t AsmStringSize,
+ char *Constraints, size_t ConstraintsSize,
+ LLVMBool HasSideEffects, LLVMBool IsAlignStack,
+ LLVMInlineAsmDialect Dialect);
+
+/**
+ * Obtain the context to which this module is associated.
+ *
+ * @see Module::getContext()
+ */
+LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M);
+
/** Deprecated: Use LLVMGetTypeByName2 instead. */
-LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
-
-/**
- * Obtain an iterator to the first NamedMDNode in a Module.
- *
- * @see llvm::Module::named_metadata_begin()
- */
-LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M);
-
-/**
- * Obtain an iterator to the last NamedMDNode in a Module.
- *
- * @see llvm::Module::named_metadata_end()
- */
-LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M);
-
-/**
- * Advance a NamedMDNode iterator to the next NamedMDNode.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * named metadata nodes.
- */
-LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
-
-/**
- * Decrement a NamedMDNode iterator to the previous NamedMDNode.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous named metadata nodes.
- */
-LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
-
-/**
- * Retrieve a NamedMDNode with the given name, returning NULL if no such
- * node exists.
- *
- * @see llvm::Module::getNamedMetadata()
- */
-LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M,
- const char *Name, size_t NameLen);
-
-/**
- * Retrieve a NamedMDNode with the given name, creating a new node if no such
- * node exists.
- *
- * @see llvm::Module::getOrInsertNamedMetadata()
- */
-LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M,
- const char *Name,
- size_t NameLen);
-
-/**
- * Retrieve the name of a NamedMDNode.
- *
- * @see llvm::NamedMDNode::getName()
- */
-const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NamedMD,
- size_t *NameLen);
-
-/**
- * Obtain the number of operands for named metadata in a module.
- *
- * @see llvm::Module::getNamedMetadata()
- */
-unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name);
-
-/**
- * Obtain the named metadata operands for a module.
- *
- * The passed LLVMValueRef pointer should refer to an array of
- * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
- * array will be populated with the LLVMValueRef instances. Each
- * instance corresponds to a llvm::MDNode.
- *
- * @see llvm::Module::getNamedMetadata()
- * @see llvm::MDNode::getOperand()
- */
-void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name,
- LLVMValueRef *Dest);
-
-/**
- * Add an operand to named metadata.
- *
- * @see llvm::Module::getNamedMetadata()
- * @see llvm::MDNode::addOperand()
- */
-void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name,
- LLVMValueRef Val);
-
-/**
- * Return the directory of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
-const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length);
-
-/**
- * Return the filename of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
-const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length);
-
-/**
- * Return the line number of the debug location for this value, which must be
- * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
- *
- * @see llvm::Instruction::getDebugLoc()
- * @see llvm::GlobalVariable::getDebugInfo()
- * @see llvm::Function::getSubprogram()
- */
-unsigned LLVMGetDebugLocLine(LLVMValueRef Val);
-
-/**
- * Return the column number of the debug location for this value, which must be
- * an llvm::Instruction.
- *
- * @see llvm::Instruction::getDebugLoc()
- */
-unsigned LLVMGetDebugLocColumn(LLVMValueRef Val);
-
-/**
- * Add a function to a module under a specified name.
- *
- * @see llvm::Function::Create()
- */
-LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
- LLVMTypeRef FunctionTy);
-
-/**
- * Obtain a Function value from a Module by its name.
- *
- * The returned value corresponds to a llvm::Function value.
- *
- * @see llvm::Module::getFunction()
- */
-LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
-
-/**
- * Obtain an iterator to the first Function in a Module.
- *
- * @see llvm::Module::begin()
- */
-LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
-
-/**
- * Obtain an iterator to the last Function in a Module.
- *
- * @see llvm::Module::end()
- */
-LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
-
-/**
- * Advance a Function iterator to the next Function.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * functions.
- */
-LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
-
-/**
- * Decrement a Function iterator to the previous Function.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous functions.
- */
-LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
-
-/** Deprecated: Use LLVMSetModuleInlineAsm2 instead. */
-void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreType Types
- *
- * Types represent the type of a value.
- *
- * Types are associated with a context instance. The context internally
- * deduplicates types so there is only 1 instance of a specific type
- * alive at a time. In other words, a unique type is shared among all
- * consumers within a context.
- *
- * A Type in the C API corresponds to llvm::Type.
- *
- * Types have the following hierarchy:
- *
- * types:
- * integer type
- * real type
- * function type
- * sequence types:
- * array type
- * pointer type
- * vector type
- * void type
- * label type
- * opaque type
- *
- * @{
- */
-
-/**
- * Obtain the enumerated type of a Type instance.
- *
- * @see llvm::Type:getTypeID()
- */
-LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
-
-/**
- * Whether the type has a known size.
- *
- * Things that don't have a size are abstract types, labels, and void.a
- *
- * @see llvm::Type::isSized()
- */
-LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
-
-/**
- * Obtain the context to which this type instance is associated.
- *
- * @see llvm::Type::getContext()
- */
-LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
-
-/**
- * Dump a representation of a type to stderr.
- *
- * @see llvm::Type::dump()
- */
-void LLVMDumpType(LLVMTypeRef Val);
-
-/**
- * Return a string representation of the type. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see llvm::Type::print()
- */
-char *LLVMPrintTypeToString(LLVMTypeRef Val);
-
-/**
- * @defgroup LLVMCCoreTypeInt Integer Types
- *
- * Functions in this section operate on integer types.
- *
- * @{
- */
-
-/**
- * Obtain an integer type from a context with specified bit width.
- */
-LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
-LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
-
-/**
- * Obtain an integer type from the global context with a specified bit
- * width.
- */
-LLVMTypeRef LLVMInt1Type(void);
-LLVMTypeRef LLVMInt8Type(void);
-LLVMTypeRef LLVMInt16Type(void);
-LLVMTypeRef LLVMInt32Type(void);
-LLVMTypeRef LLVMInt64Type(void);
-LLVMTypeRef LLVMInt128Type(void);
-LLVMTypeRef LLVMIntType(unsigned NumBits);
-unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreTypeFloat Floating Point Types
- *
- * @{
- */
-
-/**
- * Obtain a 16-bit floating point type from a context.
- */
-LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 16-bit brain floating point type from a context.
- */
-LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 32-bit floating point type from a context.
- */
-LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 64-bit floating point type from a context.
- */
-LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 80-bit floating point type (X87) from a context.
- */
-LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 128-bit floating point type (112-bit mantissa) from a
- * context.
- */
-LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a 128-bit floating point type (two 64-bits) from a context.
- */
-LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
-
-/**
- * Obtain a floating point type from the global context.
- *
- * These map to the functions in this group of the same name.
- */
-LLVMTypeRef LLVMHalfType(void);
-LLVMTypeRef LLVMBFloatType(void);
-LLVMTypeRef LLVMFloatType(void);
-LLVMTypeRef LLVMDoubleType(void);
-LLVMTypeRef LLVMX86FP80Type(void);
-LLVMTypeRef LLVMFP128Type(void);
-LLVMTypeRef LLVMPPCFP128Type(void);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreTypeFunction Function Types
- *
- * @{
- */
-
-/**
- * Obtain a function type consisting of a specified signature.
- *
- * The function is defined as a tuple of a return Type, a list of
- * parameter types, and whether the function is variadic.
- */
-LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
- LLVMTypeRef *ParamTypes, unsigned ParamCount,
- LLVMBool IsVarArg);
-
-/**
- * Returns whether a function type is variadic.
- */
-LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
-
-/**
- * Obtain the Type this function Type returns.
- */
-LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
-
-/**
- * Obtain the number of parameters this function accepts.
- */
-unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
-
-/**
- * Obtain the types of a function's parameters.
- *
- * The Dest parameter should point to a pre-allocated array of
- * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
- * first LLVMCountParamTypes() entries in the array will be populated
- * with LLVMTypeRef instances.
- *
- * @param FunctionTy The function type to operate on.
- * @param Dest Memory address of an array to be filled with result.
- */
-void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreTypeStruct Structure Types
- *
- * These functions relate to LLVMTypeRef instances.
- *
- * @see llvm::StructType
- *
- * @{
- */
-
-/**
- * Create a new structure type in a context.
- *
- * A structure is specified by a list of inner elements/types and
- * whether these can be packed together.
- *
- * @see llvm::StructType::create()
- */
-LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
- unsigned ElementCount, LLVMBool Packed);
-
-/**
- * Create a new structure type in the global context.
- *
- * @see llvm::StructType::create()
- */
-LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
- LLVMBool Packed);
-
-/**
- * Create an empty structure in a context having a specified name.
- *
- * @see llvm::StructType::create()
- */
-LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
-
-/**
- * Obtain the name of a structure.
- *
- * @see llvm::StructType::getName()
- */
-const char *LLVMGetStructName(LLVMTypeRef Ty);
-
-/**
- * Set the contents of a structure type.
- *
- * @see llvm::StructType::setBody()
- */
-void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
- unsigned ElementCount, LLVMBool Packed);
-
-/**
- * Get the number of elements defined inside the structure.
- *
- * @see llvm::StructType::getNumElements()
- */
-unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
-
-/**
- * Get the elements within a structure.
- *
- * The function is passed the address of a pre-allocated array of
- * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
- * invocation, this array will be populated with the structure's
- * elements. The objects in the destination array will have a lifetime
- * of the structure type itself, which is the lifetime of the context it
- * is contained in.
- */
-void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
-
-/**
- * Get the type of the element at a given index in the structure.
- *
- * @see llvm::StructType::getTypeAtIndex()
- */
-LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i);
-
-/**
- * Determine whether a structure is packed.
- *
- * @see llvm::StructType::isPacked()
- */
-LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
-
-/**
- * Determine whether a structure is opaque.
- *
- * @see llvm::StructType::isOpaque()
- */
-LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
-
-/**
- * Determine whether a structure is literal.
- *
- * @see llvm::StructType::isLiteral()
- */
-LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreTypeSequential Sequential Types
- *
- * Sequential types represents "arrays" of types. This is a super class
- * for array, vector, and pointer types.
- *
- * @{
- */
-
-/**
- * Obtain the type of elements within a sequential type.
- *
- * This works on array, vector, and pointer types.
- *
- * @see llvm::SequentialType::getElementType()
- */
-LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
-
-/**
- * Returns type's subtypes
- *
- * @see llvm::Type::subtypes()
- */
-void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr);
-
-/**
- * Return the number of types in the derived type.
- *
- * @see llvm::Type::getNumContainedTypes()
- */
-unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp);
-
-/**
- * Create a fixed size array type that refers to a specific type.
- *
- * The created type will exist in the context that its element type
- * exists in.
- *
- * @see llvm::ArrayType::get()
- */
-LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
-
-/**
- * Obtain the length of an array type.
- *
- * This only works on types that represent arrays.
- *
- * @see llvm::ArrayType::getNumElements()
- */
-unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
-
-/**
- * Create a pointer type that points to a defined type.
- *
- * The created type will exist in the context that its pointee type
- * exists in.
- *
- * @see llvm::PointerType::get()
- */
-LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
-
-/**
- * Obtain the address space of a pointer type.
- *
- * This only works on types that represent pointers.
- *
- * @see llvm::PointerType::getAddressSpace()
- */
-unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
-
-/**
- * Create a vector type that contains a defined type and has a specific
- * number of elements.
- *
- * The created type will exist in the context thats its element type
- * exists in.
- *
- * @see llvm::VectorType::get()
- */
-LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
-
-/**
+LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name);
+
+/**
+ * Obtain an iterator to the first NamedMDNode in a Module.
+ *
+ * @see llvm::Module::named_metadata_begin()
+ */
+LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M);
+
+/**
+ * Obtain an iterator to the last NamedMDNode in a Module.
+ *
+ * @see llvm::Module::named_metadata_end()
+ */
+LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M);
+
+/**
+ * Advance a NamedMDNode iterator to the next NamedMDNode.
+ *
+ * Returns NULL if the iterator was already at the end and there are no more
+ * named metadata nodes.
+ */
+LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
+
+/**
+ * Decrement a NamedMDNode iterator to the previous NamedMDNode.
+ *
+ * Returns NULL if the iterator was already at the beginning and there are
+ * no previous named metadata nodes.
+ */
+LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NamedMDNode);
+
+/**
+ * Retrieve a NamedMDNode with the given name, returning NULL if no such
+ * node exists.
+ *
+ * @see llvm::Module::getNamedMetadata()
+ */
+LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M,
+ const char *Name, size_t NameLen);
+
+/**
+ * Retrieve a NamedMDNode with the given name, creating a new node if no such
+ * node exists.
+ *
+ * @see llvm::Module::getOrInsertNamedMetadata()
+ */
+LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M,
+ const char *Name,
+ size_t NameLen);
+
+/**
+ * Retrieve the name of a NamedMDNode.
+ *
+ * @see llvm::NamedMDNode::getName()
+ */
+const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NamedMD,
+ size_t *NameLen);
+
+/**
+ * Obtain the number of operands for named metadata in a module.
+ *
+ * @see llvm::Module::getNamedMetadata()
+ */
+unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name);
+
+/**
+ * Obtain the named metadata operands for a module.
+ *
+ * The passed LLVMValueRef pointer should refer to an array of
+ * LLVMValueRef at least LLVMGetNamedMetadataNumOperands long. This
+ * array will be populated with the LLVMValueRef instances. Each
+ * instance corresponds to a llvm::MDNode.
+ *
+ * @see llvm::Module::getNamedMetadata()
+ * @see llvm::MDNode::getOperand()
+ */
+void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name,
+ LLVMValueRef *Dest);
+
+/**
+ * Add an operand to named metadata.
+ *
+ * @see llvm::Module::getNamedMetadata()
+ * @see llvm::MDNode::addOperand()
+ */
+void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name,
+ LLVMValueRef Val);
+
+/**
+ * Return the directory of the debug location for this value, which must be
+ * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ * @see llvm::GlobalVariable::getDebugInfo()
+ * @see llvm::Function::getSubprogram()
+ */
+const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length);
+
+/**
+ * Return the filename of the debug location for this value, which must be
+ * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ * @see llvm::GlobalVariable::getDebugInfo()
+ * @see llvm::Function::getSubprogram()
+ */
+const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length);
+
+/**
+ * Return the line number of the debug location for this value, which must be
+ * an llvm::Instruction, llvm::GlobalVariable, or llvm::Function.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ * @see llvm::GlobalVariable::getDebugInfo()
+ * @see llvm::Function::getSubprogram()
+ */
+unsigned LLVMGetDebugLocLine(LLVMValueRef Val);
+
+/**
+ * Return the column number of the debug location for this value, which must be
+ * an llvm::Instruction.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ */
+unsigned LLVMGetDebugLocColumn(LLVMValueRef Val);
+
+/**
+ * Add a function to a module under a specified name.
+ *
+ * @see llvm::Function::Create()
+ */
+LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
+ LLVMTypeRef FunctionTy);
+
+/**
+ * Obtain a Function value from a Module by its name.
+ *
+ * The returned value corresponds to a llvm::Function value.
+ *
+ * @see llvm::Module::getFunction()
+ */
+LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name);
+
+/**
+ * Obtain an iterator to the first Function in a Module.
+ *
+ * @see llvm::Module::begin()
+ */
+LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M);
+
+/**
+ * Obtain an iterator to the last Function in a Module.
+ *
+ * @see llvm::Module::end()
+ */
+LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M);
+
+/**
+ * Advance a Function iterator to the next Function.
+ *
+ * Returns NULL if the iterator was already at the end and there are no more
+ * functions.
+ */
+LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn);
+
+/**
+ * Decrement a Function iterator to the previous Function.
+ *
+ * Returns NULL if the iterator was already at the beginning and there are
+ * no previous functions.
+ */
+LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
+
+/** Deprecated: Use LLVMSetModuleInlineAsm2 instead. */
+void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreType Types
+ *
+ * Types represent the type of a value.
+ *
+ * Types are associated with a context instance. The context internally
+ * deduplicates types so there is only 1 instance of a specific type
+ * alive at a time. In other words, a unique type is shared among all
+ * consumers within a context.
+ *
+ * A Type in the C API corresponds to llvm::Type.
+ *
+ * Types have the following hierarchy:
+ *
+ * types:
+ * integer type
+ * real type
+ * function type
+ * sequence types:
+ * array type
+ * pointer type
+ * vector type
+ * void type
+ * label type
+ * opaque type
+ *
+ * @{
+ */
+
+/**
+ * Obtain the enumerated type of a Type instance.
+ *
+ * @see llvm::Type:getTypeID()
+ */
+LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty);
+
+/**
+ * Whether the type has a known size.
+ *
+ * Things that don't have a size are abstract types, labels, and void.a
+ *
+ * @see llvm::Type::isSized()
+ */
+LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty);
+
+/**
+ * Obtain the context to which this type instance is associated.
+ *
+ * @see llvm::Type::getContext()
+ */
+LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty);
+
+/**
+ * Dump a representation of a type to stderr.
+ *
+ * @see llvm::Type::dump()
+ */
+void LLVMDumpType(LLVMTypeRef Val);
+
+/**
+ * Return a string representation of the type. Use
+ * LLVMDisposeMessage to free the string.
+ *
+ * @see llvm::Type::print()
+ */
+char *LLVMPrintTypeToString(LLVMTypeRef Val);
+
+/**
+ * @defgroup LLVMCCoreTypeInt Integer Types
+ *
+ * Functions in this section operate on integer types.
+ *
+ * @{
+ */
+
+/**
+ * Obtain an integer type from a context with specified bit width.
+ */
+LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C);
+LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits);
+
+/**
+ * Obtain an integer type from the global context with a specified bit
+ * width.
+ */
+LLVMTypeRef LLVMInt1Type(void);
+LLVMTypeRef LLVMInt8Type(void);
+LLVMTypeRef LLVMInt16Type(void);
+LLVMTypeRef LLVMInt32Type(void);
+LLVMTypeRef LLVMInt64Type(void);
+LLVMTypeRef LLVMInt128Type(void);
+LLVMTypeRef LLVMIntType(unsigned NumBits);
+unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreTypeFloat Floating Point Types
+ *
+ * @{
+ */
+
+/**
+ * Obtain a 16-bit floating point type from a context.
+ */
+LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 16-bit brain floating point type from a context.
+ */
+LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 32-bit floating point type from a context.
+ */
+LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 64-bit floating point type from a context.
+ */
+LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 80-bit floating point type (X87) from a context.
+ */
+LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 128-bit floating point type (112-bit mantissa) from a
+ * context.
+ */
+LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a 128-bit floating point type (two 64-bits) from a context.
+ */
+LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
+
+/**
+ * Obtain a floating point type from the global context.
+ *
+ * These map to the functions in this group of the same name.
+ */
+LLVMTypeRef LLVMHalfType(void);
+LLVMTypeRef LLVMBFloatType(void);
+LLVMTypeRef LLVMFloatType(void);
+LLVMTypeRef LLVMDoubleType(void);
+LLVMTypeRef LLVMX86FP80Type(void);
+LLVMTypeRef LLVMFP128Type(void);
+LLVMTypeRef LLVMPPCFP128Type(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreTypeFunction Function Types
+ *
+ * @{
+ */
+
+/**
+ * Obtain a function type consisting of a specified signature.
+ *
+ * The function is defined as a tuple of a return Type, a list of
+ * parameter types, and whether the function is variadic.
+ */
+LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType,
+ LLVMTypeRef *ParamTypes, unsigned ParamCount,
+ LLVMBool IsVarArg);
+
+/**
+ * Returns whether a function type is variadic.
+ */
+LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy);
+
+/**
+ * Obtain the Type this function Type returns.
+ */
+LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy);
+
+/**
+ * Obtain the number of parameters this function accepts.
+ */
+unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy);
+
+/**
+ * Obtain the types of a function's parameters.
+ *
+ * The Dest parameter should point to a pre-allocated array of
+ * LLVMTypeRef at least LLVMCountParamTypes() large. On return, the
+ * first LLVMCountParamTypes() entries in the array will be populated
+ * with LLVMTypeRef instances.
+ *
+ * @param FunctionTy The function type to operate on.
+ * @param Dest Memory address of an array to be filled with result.
+ */
+void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreTypeStruct Structure Types
+ *
+ * These functions relate to LLVMTypeRef instances.
+ *
+ * @see llvm::StructType
+ *
+ * @{
+ */
+
+/**
+ * Create a new structure type in a context.
+ *
+ * A structure is specified by a list of inner elements/types and
+ * whether these can be packed together.
+ *
+ * @see llvm::StructType::create()
+ */
+LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes,
+ unsigned ElementCount, LLVMBool Packed);
+
+/**
+ * Create a new structure type in the global context.
+ *
+ * @see llvm::StructType::create()
+ */
+LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount,
+ LLVMBool Packed);
+
+/**
+ * Create an empty structure in a context having a specified name.
+ *
+ * @see llvm::StructType::create()
+ */
+LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name);
+
+/**
+ * Obtain the name of a structure.
+ *
+ * @see llvm::StructType::getName()
+ */
+const char *LLVMGetStructName(LLVMTypeRef Ty);
+
+/**
+ * Set the contents of a structure type.
+ *
+ * @see llvm::StructType::setBody()
+ */
+void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
+ unsigned ElementCount, LLVMBool Packed);
+
+/**
+ * Get the number of elements defined inside the structure.
+ *
+ * @see llvm::StructType::getNumElements()
+ */
+unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy);
+
+/**
+ * Get the elements within a structure.
+ *
+ * The function is passed the address of a pre-allocated array of
+ * LLVMTypeRef at least LLVMCountStructElementTypes() long. After
+ * invocation, this array will be populated with the structure's
+ * elements. The objects in the destination array will have a lifetime
+ * of the structure type itself, which is the lifetime of the context it
+ * is contained in.
+ */
+void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest);
+
+/**
+ * Get the type of the element at a given index in the structure.
+ *
+ * @see llvm::StructType::getTypeAtIndex()
+ */
+LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i);
+
+/**
+ * Determine whether a structure is packed.
+ *
+ * @see llvm::StructType::isPacked()
+ */
+LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy);
+
+/**
+ * Determine whether a structure is opaque.
+ *
+ * @see llvm::StructType::isOpaque()
+ */
+LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy);
+
+/**
+ * Determine whether a structure is literal.
+ *
+ * @see llvm::StructType::isLiteral()
+ */
+LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreTypeSequential Sequential Types
+ *
+ * Sequential types represents "arrays" of types. This is a super class
+ * for array, vector, and pointer types.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the type of elements within a sequential type.
+ *
+ * This works on array, vector, and pointer types.
+ *
+ * @see llvm::SequentialType::getElementType()
+ */
+LLVMTypeRef LLVMGetElementType(LLVMTypeRef Ty);
+
+/**
+ * Returns type's subtypes
+ *
+ * @see llvm::Type::subtypes()
+ */
+void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr);
+
+/**
+ * Return the number of types in the derived type.
+ *
+ * @see llvm::Type::getNumContainedTypes()
+ */
+unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp);
+
+/**
+ * Create a fixed size array type that refers to a specific type.
+ *
+ * The created type will exist in the context that its element type
+ * exists in.
+ *
+ * @see llvm::ArrayType::get()
+ */
+LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount);
+
+/**
+ * Obtain the length of an array type.
+ *
+ * This only works on types that represent arrays.
+ *
+ * @see llvm::ArrayType::getNumElements()
+ */
+unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy);
+
+/**
+ * Create a pointer type that points to a defined type.
+ *
+ * The created type will exist in the context that its pointee type
+ * exists in.
+ *
+ * @see llvm::PointerType::get()
+ */
+LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace);
+
+/**
+ * Obtain the address space of a pointer type.
+ *
+ * This only works on types that represent pointers.
+ *
+ * @see llvm::PointerType::getAddressSpace()
+ */
+unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy);
+
+/**
+ * Create a vector type that contains a defined type and has a specific
+ * number of elements.
+ *
+ * The created type will exist in the context thats its element type
+ * exists in.
+ *
+ * @see llvm::VectorType::get()
+ */
+LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount);
+
+/**
* Create a vector type that contains a defined type and has a scalable
* number of elements.
- *
+ *
* The created type will exist in the context thats its element type
* exists in.
- *
+ *
* @see llvm::ScalableVectorType::get()
*/
LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType,
@@ -1484,412 +1484,412 @@ LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType,
*
* This only works on types that represent vectors (fixed or scalable).
*
- * @see llvm::VectorType::getNumElements()
- */
-unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreTypeOther Other Types
- *
- * @{
- */
-
-/**
- * Create a void type in a context.
- */
-LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
-
-/**
- * Create a label type in a context.
- */
-LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
-
-/**
- * Create a X86 MMX type in a context.
- */
-LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
-
-/**
+ * @see llvm::VectorType::getNumElements()
+ */
+unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreTypeOther Other Types
+ *
+ * @{
+ */
+
+/**
+ * Create a void type in a context.
+ */
+LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C);
+
+/**
+ * Create a label type in a context.
+ */
+LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C);
+
+/**
+ * Create a X86 MMX type in a context.
+ */
+LLVMTypeRef LLVMX86MMXTypeInContext(LLVMContextRef C);
+
+/**
* Create a X86 AMX type in a context.
*/
LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C);
/**
- * Create a token type in a context.
- */
-LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C);
-
-/**
- * Create a metadata type in a context.
- */
-LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C);
-
-/**
- * These are similar to the above functions except they operate on the
- * global context.
- */
-LLVMTypeRef LLVMVoidType(void);
-LLVMTypeRef LLVMLabelType(void);
-LLVMTypeRef LLVMX86MMXType(void);
+ * Create a token type in a context.
+ */
+LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C);
+
+/**
+ * Create a metadata type in a context.
+ */
+LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C);
+
+/**
+ * These are similar to the above functions except they operate on the
+ * global context.
+ */
+LLVMTypeRef LLVMVoidType(void);
+LLVMTypeRef LLVMLabelType(void);
+LLVMTypeRef LLVMX86MMXType(void);
LLVMTypeRef LLVMX86AMXType(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValues Values
- *
- * The bulk of LLVM's object model consists of values, which comprise a very
- * rich type hierarchy.
- *
- * LLVMValueRef essentially represents llvm::Value. There is a rich
- * hierarchy of classes within this type. Depending on the instance
- * obtained, not all APIs are available.
- *
- * Callers can determine the type of an LLVMValueRef by calling the
- * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
- * functions are defined by a macro, so it isn't obvious which are
- * available by looking at the Doxygen source code. Instead, look at the
- * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
- * of value names given. These value names also correspond to classes in
- * the llvm::Value hierarchy.
- *
- * @{
- */
-
-#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
- macro(Argument) \
- macro(BasicBlock) \
- macro(InlineAsm) \
- macro(User) \
- macro(Constant) \
- macro(BlockAddress) \
- macro(ConstantAggregateZero) \
- macro(ConstantArray) \
- macro(ConstantDataSequential) \
- macro(ConstantDataArray) \
- macro(ConstantDataVector) \
- macro(ConstantExpr) \
- macro(ConstantFP) \
- macro(ConstantInt) \
- macro(ConstantPointerNull) \
- macro(ConstantStruct) \
- macro(ConstantTokenNone) \
- macro(ConstantVector) \
- macro(GlobalValue) \
- macro(GlobalAlias) \
- macro(GlobalIFunc) \
- macro(GlobalObject) \
- macro(Function) \
- macro(GlobalVariable) \
- macro(UndefValue) \
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValues Values
+ *
+ * The bulk of LLVM's object model consists of values, which comprise a very
+ * rich type hierarchy.
+ *
+ * LLVMValueRef essentially represents llvm::Value. There is a rich
+ * hierarchy of classes within this type. Depending on the instance
+ * obtained, not all APIs are available.
+ *
+ * Callers can determine the type of an LLVMValueRef by calling the
+ * LLVMIsA* family of functions (e.g. LLVMIsAArgument()). These
+ * functions are defined by a macro, so it isn't obvious which are
+ * available by looking at the Doxygen source code. Instead, look at the
+ * source definition of LLVM_FOR_EACH_VALUE_SUBCLASS and note the list
+ * of value names given. These value names also correspond to classes in
+ * the llvm::Value hierarchy.
+ *
+ * @{
+ */
+
+#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro) \
+ macro(Argument) \
+ macro(BasicBlock) \
+ macro(InlineAsm) \
+ macro(User) \
+ macro(Constant) \
+ macro(BlockAddress) \
+ macro(ConstantAggregateZero) \
+ macro(ConstantArray) \
+ macro(ConstantDataSequential) \
+ macro(ConstantDataArray) \
+ macro(ConstantDataVector) \
+ macro(ConstantExpr) \
+ macro(ConstantFP) \
+ macro(ConstantInt) \
+ macro(ConstantPointerNull) \
+ macro(ConstantStruct) \
+ macro(ConstantTokenNone) \
+ macro(ConstantVector) \
+ macro(GlobalValue) \
+ macro(GlobalAlias) \
+ macro(GlobalIFunc) \
+ macro(GlobalObject) \
+ macro(Function) \
+ macro(GlobalVariable) \
+ macro(UndefValue) \
macro(PoisonValue) \
- macro(Instruction) \
- macro(UnaryOperator) \
- macro(BinaryOperator) \
- macro(CallInst) \
- macro(IntrinsicInst) \
- macro(DbgInfoIntrinsic) \
- macro(DbgVariableIntrinsic) \
- macro(DbgDeclareInst) \
- macro(DbgLabelInst) \
- macro(MemIntrinsic) \
- macro(MemCpyInst) \
- macro(MemMoveInst) \
- macro(MemSetInst) \
- macro(CmpInst) \
- macro(FCmpInst) \
- macro(ICmpInst) \
- macro(ExtractElementInst) \
- macro(GetElementPtrInst) \
- macro(InsertElementInst) \
- macro(InsertValueInst) \
- macro(LandingPadInst) \
- macro(PHINode) \
- macro(SelectInst) \
- macro(ShuffleVectorInst) \
- macro(StoreInst) \
- macro(BranchInst) \
- macro(IndirectBrInst) \
- macro(InvokeInst) \
- macro(ReturnInst) \
- macro(SwitchInst) \
- macro(UnreachableInst) \
- macro(ResumeInst) \
- macro(CleanupReturnInst) \
- macro(CatchReturnInst) \
- macro(CatchSwitchInst) \
- macro(CallBrInst) \
- macro(FuncletPadInst) \
- macro(CatchPadInst) \
- macro(CleanupPadInst) \
- macro(UnaryInstruction) \
- macro(AllocaInst) \
- macro(CastInst) \
- macro(AddrSpaceCastInst) \
- macro(BitCastInst) \
- macro(FPExtInst) \
- macro(FPToSIInst) \
- macro(FPToUIInst) \
- macro(FPTruncInst) \
- macro(IntToPtrInst) \
- macro(PtrToIntInst) \
- macro(SExtInst) \
- macro(SIToFPInst) \
- macro(TruncInst) \
- macro(UIToFPInst) \
- macro(ZExtInst) \
- macro(ExtractValueInst) \
- macro(LoadInst) \
- macro(VAArgInst) \
- macro(FreezeInst) \
- macro(AtomicCmpXchgInst) \
- macro(AtomicRMWInst) \
- macro(FenceInst)
-
-/**
- * @defgroup LLVMCCoreValueGeneral General APIs
- *
- * Functions in this section work on all LLVMValueRef instances,
- * regardless of their sub-type. They correspond to functions available
- * on llvm::Value.
- *
- * @{
- */
-
-/**
- * Obtain the type of a value.
- *
- * @see llvm::Value::getType()
- */
-LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
-
-/**
- * Obtain the enumerated type of a Value instance.
- *
- * @see llvm::Value::getValueID()
- */
-LLVMValueKind LLVMGetValueKind(LLVMValueRef Val);
-
-/**
- * Obtain the string name of a value.
- *
- * @see llvm::Value::getName()
- */
-const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length);
-
-/**
- * Set the string name of a value.
- *
- * @see llvm::Value::setName()
- */
-void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen);
-
-/**
- * Dump a representation of a value to stderr.
- *
- * @see llvm::Value::dump()
- */
-void LLVMDumpValue(LLVMValueRef Val);
-
-/**
- * Return a string representation of the value. Use
- * LLVMDisposeMessage to free the string.
- *
- * @see llvm::Value::print()
- */
-char *LLVMPrintValueToString(LLVMValueRef Val);
-
-/**
- * Replace all uses of a value with another one.
- *
- * @see llvm::Value::replaceAllUsesWith()
- */
-void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
-
-/**
- * Determine whether the specified value instance is constant.
- */
-LLVMBool LLVMIsConstant(LLVMValueRef Val);
-
-/**
- * Determine whether a value instance is undefined.
- */
-LLVMBool LLVMIsUndef(LLVMValueRef Val);
-
-/**
+ macro(Instruction) \
+ macro(UnaryOperator) \
+ macro(BinaryOperator) \
+ macro(CallInst) \
+ macro(IntrinsicInst) \
+ macro(DbgInfoIntrinsic) \
+ macro(DbgVariableIntrinsic) \
+ macro(DbgDeclareInst) \
+ macro(DbgLabelInst) \
+ macro(MemIntrinsic) \
+ macro(MemCpyInst) \
+ macro(MemMoveInst) \
+ macro(MemSetInst) \
+ macro(CmpInst) \
+ macro(FCmpInst) \
+ macro(ICmpInst) \
+ macro(ExtractElementInst) \
+ macro(GetElementPtrInst) \
+ macro(InsertElementInst) \
+ macro(InsertValueInst) \
+ macro(LandingPadInst) \
+ macro(PHINode) \
+ macro(SelectInst) \
+ macro(ShuffleVectorInst) \
+ macro(StoreInst) \
+ macro(BranchInst) \
+ macro(IndirectBrInst) \
+ macro(InvokeInst) \
+ macro(ReturnInst) \
+ macro(SwitchInst) \
+ macro(UnreachableInst) \
+ macro(ResumeInst) \
+ macro(CleanupReturnInst) \
+ macro(CatchReturnInst) \
+ macro(CatchSwitchInst) \
+ macro(CallBrInst) \
+ macro(FuncletPadInst) \
+ macro(CatchPadInst) \
+ macro(CleanupPadInst) \
+ macro(UnaryInstruction) \
+ macro(AllocaInst) \
+ macro(CastInst) \
+ macro(AddrSpaceCastInst) \
+ macro(BitCastInst) \
+ macro(FPExtInst) \
+ macro(FPToSIInst) \
+ macro(FPToUIInst) \
+ macro(FPTruncInst) \
+ macro(IntToPtrInst) \
+ macro(PtrToIntInst) \
+ macro(SExtInst) \
+ macro(SIToFPInst) \
+ macro(TruncInst) \
+ macro(UIToFPInst) \
+ macro(ZExtInst) \
+ macro(ExtractValueInst) \
+ macro(LoadInst) \
+ macro(VAArgInst) \
+ macro(FreezeInst) \
+ macro(AtomicCmpXchgInst) \
+ macro(AtomicRMWInst) \
+ macro(FenceInst)
+
+/**
+ * @defgroup LLVMCCoreValueGeneral General APIs
+ *
+ * Functions in this section work on all LLVMValueRef instances,
+ * regardless of their sub-type. They correspond to functions available
+ * on llvm::Value.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the type of a value.
+ *
+ * @see llvm::Value::getType()
+ */
+LLVMTypeRef LLVMTypeOf(LLVMValueRef Val);
+
+/**
+ * Obtain the enumerated type of a Value instance.
+ *
+ * @see llvm::Value::getValueID()
+ */
+LLVMValueKind LLVMGetValueKind(LLVMValueRef Val);
+
+/**
+ * Obtain the string name of a value.
+ *
+ * @see llvm::Value::getName()
+ */
+const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length);
+
+/**
+ * Set the string name of a value.
+ *
+ * @see llvm::Value::setName()
+ */
+void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen);
+
+/**
+ * Dump a representation of a value to stderr.
+ *
+ * @see llvm::Value::dump()
+ */
+void LLVMDumpValue(LLVMValueRef Val);
+
+/**
+ * Return a string representation of the value. Use
+ * LLVMDisposeMessage to free the string.
+ *
+ * @see llvm::Value::print()
+ */
+char *LLVMPrintValueToString(LLVMValueRef Val);
+
+/**
+ * Replace all uses of a value with another one.
+ *
+ * @see llvm::Value::replaceAllUsesWith()
+ */
+void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal);
+
+/**
+ * Determine whether the specified value instance is constant.
+ */
+LLVMBool LLVMIsConstant(LLVMValueRef Val);
+
+/**
+ * Determine whether a value instance is undefined.
+ */
+LLVMBool LLVMIsUndef(LLVMValueRef Val);
+
+/**
* Determine whether a value instance is poisonous.
*/
LLVMBool LLVMIsPoison(LLVMValueRef Val);
/**
- * Convert value instances between types.
- *
- * Internally, an LLVMValueRef is "pinned" to a specific type. This
- * series of functions allows you to cast an instance to a specific
- * type.
- *
- * If the cast is not valid for the specified type, NULL is returned.
- *
- * @see llvm::dyn_cast_or_null<>
- */
-#define LLVM_DECLARE_VALUE_CAST(name) \
- LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
-LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
-
-LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
-LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
-
-/** Deprecated: Use LLVMGetValueName2 instead. */
-const char *LLVMGetValueName(LLVMValueRef Val);
-/** Deprecated: Use LLVMSetValueName2 instead. */
-void LLVMSetValueName(LLVMValueRef Val, const char *Name);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueUses Usage
- *
- * This module defines functions that allow you to inspect the uses of a
- * LLVMValueRef.
- *
- * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
- * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
- * llvm::User and llvm::Value.
- *
- * @{
- */
-
-/**
- * Obtain the first use of a value.
- *
- * Uses are obtained in an iterator fashion. First, call this function
- * to obtain a reference to the first use. Then, call LLVMGetNextUse()
- * on that instance and all subsequently obtained instances until
- * LLVMGetNextUse() returns NULL.
- *
- * @see llvm::Value::use_begin()
- */
-LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
-
-/**
- * Obtain the next use of a value.
- *
- * This effectively advances the iterator. It returns NULL if you are on
- * the final use and no more are available.
- */
-LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
-
-/**
- * Obtain the user value for a user.
- *
- * The returned value corresponds to a llvm::User type.
- *
- * @see llvm::Use::getUser()
- */
-LLVMValueRef LLVMGetUser(LLVMUseRef U);
-
-/**
- * Obtain the value this use corresponds to.
- *
- * @see llvm::Use::get().
- */
-LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueUser User value
- *
- * Function in this group pertain to LLVMValueRef instances that descent
- * from llvm::User. This includes constants, instructions, and
- * operators.
- *
- * @{
- */
-
-/**
- * Obtain an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::getOperand()
- */
-LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
-
-/**
- * Obtain the use of an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::getOperandUse()
- */
-LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
-
-/**
- * Set an operand at a specific index in a llvm::User value.
- *
- * @see llvm::User::setOperand()
- */
-void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
-
-/**
- * Obtain the number of operands in a llvm::User value.
- *
- * @see llvm::User::getNumOperands()
- */
-int LLVMGetNumOperands(LLVMValueRef Val);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueConstant Constants
- *
- * This section contains APIs for interacting with LLVMValueRef that
- * correspond to llvm::Constant instances.
- *
- * These functions will work for any LLVMValueRef in the llvm::Constant
- * class hierarchy.
- *
- * @{
- */
-
-/**
- * Obtain a constant value referring to the null instance of a type.
- *
- * @see llvm::Constant::getNullValue()
- */
-LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
-
-/**
- * Obtain a constant value referring to the instance of a type
- * consisting of all ones.
- *
- * This is only valid for integer types.
- *
- * @see llvm::Constant::getAllOnesValue()
- */
-LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
-
-/**
- * Obtain a constant value referring to an undefined value of a type.
- *
- * @see llvm::UndefValue::get()
- */
-LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
-
-/**
+ * Convert value instances between types.
+ *
+ * Internally, an LLVMValueRef is "pinned" to a specific type. This
+ * series of functions allows you to cast an instance to a specific
+ * type.
+ *
+ * If the cast is not valid for the specified type, NULL is returned.
+ *
+ * @see llvm::dyn_cast_or_null<>
+ */
+#define LLVM_DECLARE_VALUE_CAST(name) \
+ LLVMValueRef LLVMIsA##name(LLVMValueRef Val);
+LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST)
+
+LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
+LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
+
+/** Deprecated: Use LLVMGetValueName2 instead. */
+const char *LLVMGetValueName(LLVMValueRef Val);
+/** Deprecated: Use LLVMSetValueName2 instead. */
+void LLVMSetValueName(LLVMValueRef Val, const char *Name);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueUses Usage
+ *
+ * This module defines functions that allow you to inspect the uses of a
+ * LLVMValueRef.
+ *
+ * It is possible to obtain an LLVMUseRef for any LLVMValueRef instance.
+ * Each LLVMUseRef (which corresponds to a llvm::Use instance) holds a
+ * llvm::User and llvm::Value.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the first use of a value.
+ *
+ * Uses are obtained in an iterator fashion. First, call this function
+ * to obtain a reference to the first use. Then, call LLVMGetNextUse()
+ * on that instance and all subsequently obtained instances until
+ * LLVMGetNextUse() returns NULL.
+ *
+ * @see llvm::Value::use_begin()
+ */
+LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val);
+
+/**
+ * Obtain the next use of a value.
+ *
+ * This effectively advances the iterator. It returns NULL if you are on
+ * the final use and no more are available.
+ */
+LLVMUseRef LLVMGetNextUse(LLVMUseRef U);
+
+/**
+ * Obtain the user value for a user.
+ *
+ * The returned value corresponds to a llvm::User type.
+ *
+ * @see llvm::Use::getUser()
+ */
+LLVMValueRef LLVMGetUser(LLVMUseRef U);
+
+/**
+ * Obtain the value this use corresponds to.
+ *
+ * @see llvm::Use::get().
+ */
+LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueUser User value
+ *
+ * Function in this group pertain to LLVMValueRef instances that descent
+ * from llvm::User. This includes constants, instructions, and
+ * operators.
+ *
+ * @{
+ */
+
+/**
+ * Obtain an operand at a specific index in a llvm::User value.
+ *
+ * @see llvm::User::getOperand()
+ */
+LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
+
+/**
+ * Obtain the use of an operand at a specific index in a llvm::User value.
+ *
+ * @see llvm::User::getOperandUse()
+ */
+LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index);
+
+/**
+ * Set an operand at a specific index in a llvm::User value.
+ *
+ * @see llvm::User::setOperand()
+ */
+void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
+
+/**
+ * Obtain the number of operands in a llvm::User value.
+ *
+ * @see llvm::User::getNumOperands()
+ */
+int LLVMGetNumOperands(LLVMValueRef Val);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueConstant Constants
+ *
+ * This section contains APIs for interacting with LLVMValueRef that
+ * correspond to llvm::Constant instances.
+ *
+ * These functions will work for any LLVMValueRef in the llvm::Constant
+ * class hierarchy.
+ *
+ * @{
+ */
+
+/**
+ * Obtain a constant value referring to the null instance of a type.
+ *
+ * @see llvm::Constant::getNullValue()
+ */
+LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
+
+/**
+ * Obtain a constant value referring to the instance of a type
+ * consisting of all ones.
+ *
+ * This is only valid for integer types.
+ *
+ * @see llvm::Constant::getAllOnesValue()
+ */
+LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty);
+
+/**
+ * Obtain a constant value referring to an undefined value of a type.
+ *
+ * @see llvm::UndefValue::get()
+ */
+LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
+
+/**
* Obtain a constant value referring to a poison value of a type.
*
* @see llvm::PoisonValue::get()
@@ -1897,2285 +1897,2285 @@ LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty);
LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty);
/**
- * Determine whether a value instance is null.
- *
- * @see llvm::Constant::isNullValue()
- */
-LLVMBool LLVMIsNull(LLVMValueRef Val);
-
-/**
- * Obtain a constant that is a constant pointer pointing to NULL for a
- * specified type.
- */
-LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
-
-/**
- * @defgroup LLVMCCoreValueConstantScalar Scalar constants
- *
- * Functions in this group model LLVMValueRef instances that correspond
- * to constants referring to scalar types.
- *
- * For integer types, the LLVMTypeRef parameter should correspond to a
- * llvm::IntegerType instance and the returned LLVMValueRef will
- * correspond to a llvm::ConstantInt.
- *
- * For floating point types, the LLVMTypeRef returned corresponds to a
- * llvm::ConstantFP.
- *
- * @{
- */
-
-/**
- * Obtain a constant value for an integer type.
- *
- * The returned value corresponds to a llvm::ConstantInt.
- *
- * @see llvm::ConstantInt::get()
- *
- * @param IntTy Integer type to obtain value of.
- * @param N The value the returned instance should refer to.
- * @param SignExtend Whether to sign extend the produced value.
- */
-LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
- LLVMBool SignExtend);
-
-/**
- * Obtain a constant value for an integer of arbitrary precision.
- *
- * @see llvm::ConstantInt::get()
- */
-LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
- unsigned NumWords,
- const uint64_t Words[]);
-
-/**
- * Obtain a constant value for an integer parsed from a string.
- *
- * A similar API, LLVMConstIntOfStringAndSize is also available. If the
- * string's length is available, it is preferred to call that function
- * instead.
- *
- * @see llvm::ConstantInt::get()
- */
-LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
- uint8_t Radix);
-
-/**
- * Obtain a constant value for an integer parsed from a string with
- * specified length.
- *
- * @see llvm::ConstantInt::get()
- */
-LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
- unsigned SLen, uint8_t Radix);
-
-/**
- * Obtain a constant value referring to a double floating point value.
- */
-LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
-
-/**
- * Obtain a constant for a floating point value parsed from a string.
- *
- * A similar API, LLVMConstRealOfStringAndSize is also available. It
- * should be used if the input string's length is known.
- */
-LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
-
-/**
- * Obtain a constant for a floating point value parsed from a string.
- */
-LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
- unsigned SLen);
-
-/**
- * Obtain the zero extended value for an integer constant value.
- *
- * @see llvm::ConstantInt::getZExtValue()
- */
-unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
-
-/**
- * Obtain the sign extended value for an integer constant value.
- *
- * @see llvm::ConstantInt::getSExtValue()
- */
-long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
-
-/**
- * Obtain the double value for an floating point constant value.
- * losesInfo indicates if some precision was lost in the conversion.
- *
- * @see llvm::ConstantFP::getDoubleValue
- */
-double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueConstantComposite Composite Constants
- *
- * Functions in this group operate on composite constants.
- *
- * @{
- */
-
-/**
- * Create a ConstantDataSequential and initialize it with a string.
- *
- * @see llvm::ConstantDataArray::getString()
- */
-LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
- unsigned Length, LLVMBool DontNullTerminate);
-
-/**
- * Create a ConstantDataSequential with string content in the global context.
- *
- * This is the same as LLVMConstStringInContext except it operates on the
- * global context.
- *
- * @see LLVMConstStringInContext()
- * @see llvm::ConstantDataArray::getString()
- */
-LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
- LLVMBool DontNullTerminate);
-
-/**
- * Returns true if the specified constant is an array of i8.
- *
- * @see ConstantDataSequential::getAsString()
- */
-LLVMBool LLVMIsConstantString(LLVMValueRef c);
-
-/**
- * Get the given constant data sequential as a string.
- *
- * @see ConstantDataSequential::getAsString()
- */
-const char *LLVMGetAsString(LLVMValueRef c, size_t *Length);
-
-/**
- * Create an anonymous ConstantStruct with the specified values.
- *
- * @see llvm::ConstantStruct::getAnon()
- */
-LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
- LLVMValueRef *ConstantVals,
- unsigned Count, LLVMBool Packed);
-
-/**
- * Create a ConstantStruct in the global Context.
- *
- * This is the same as LLVMConstStructInContext except it operates on the
- * global Context.
- *
- * @see LLVMConstStructInContext()
- */
-LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
- LLVMBool Packed);
-
-/**
- * Create a ConstantArray from values.
- *
- * @see llvm::ConstantArray::get()
- */
-LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
- LLVMValueRef *ConstantVals, unsigned Length);
-
-/**
- * Create a non-anonymous ConstantStruct from values.
- *
- * @see llvm::ConstantStruct::get()
- */
-LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
- LLVMValueRef *ConstantVals,
- unsigned Count);
-
-/**
- * Get an element at specified index as a constant.
- *
- * @see ConstantDataSequential::getElementAsConstant()
- */
-LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx);
-
-/**
- * Create a ConstantVector from values.
- *
- * @see llvm::ConstantVector::get()
- */
-LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
- *
- * Functions in this group correspond to APIs on llvm::ConstantExpr.
- *
- * @see llvm::ConstantExpr.
- *
- * @{
- */
-LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
-LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
-LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
-LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstExactUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
- LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
- LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
-LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices, unsigned NumIndices);
-LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices, unsigned NumIndices);
-LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices,
- unsigned NumIndices);
-LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
- LLVMValueRef *ConstantIndices,
- unsigned NumIndices);
-LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
-LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
-LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
-LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
- LLVMTypeRef ToType);
-LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
- LLVMBool isSigned);
-LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
-LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
- LLVMValueRef ConstantIfTrue,
- LLVMValueRef ConstantIfFalse);
-LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
- LLVMValueRef IndexConstant);
-LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
- LLVMValueRef ElementValueConstant,
- LLVMValueRef IndexConstant);
-LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
- LLVMValueRef VectorBConstant,
- LLVMValueRef MaskConstant);
-LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
- unsigned NumIdx);
-LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
- LLVMValueRef ElementValueConstant,
- unsigned *IdxList, unsigned NumIdx);
-LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
-
-/** Deprecated: Use LLVMGetInlineAsm instead. */
-LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
- const char *AsmString, const char *Constraints,
- LLVMBool HasSideEffects, LLVMBool IsAlignStack);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueConstantGlobals Global Values
- *
- * This group contains functions that operate on global values. Functions in
- * this group relate to functions in the llvm::GlobalValue class tree.
- *
- * @see llvm::GlobalValue
- *
- * @{
- */
-
-LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
-LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
-LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
-void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
-const char *LLVMGetSection(LLVMValueRef Global);
-void LLVMSetSection(LLVMValueRef Global, const char *Section);
-LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
-void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
-LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
-void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
-LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global);
-void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr);
-
-/**
- * Returns the "value type" of a global value. This differs from the formal
- * type of a global value which is always a pointer type.
- *
- * @see llvm::GlobalValue::getValueType()
- */
-LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global);
-
-/** Deprecated: Use LLVMGetUnnamedAddress instead. */
-LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
-/** Deprecated: Use LLVMSetUnnamedAddress instead. */
-void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
-
-/**
- * @defgroup LLVMCCoreValueWithAlignment Values with alignment
- *
- * Functions in this group only apply to values with alignment, i.e.
- * global variables, load and store instructions.
- */
-
-/**
- * Obtain the preferred alignment of the value.
- * @see llvm::AllocaInst::getAlignment()
- * @see llvm::LoadInst::getAlignment()
- * @see llvm::StoreInst::getAlignment()
- * @see llvm::GlobalValue::getAlignment()
- */
-unsigned LLVMGetAlignment(LLVMValueRef V);
-
-/**
- * Set the preferred alignment of the value.
- * @see llvm::AllocaInst::setAlignment()
- * @see llvm::LoadInst::setAlignment()
- * @see llvm::StoreInst::setAlignment()
- * @see llvm::GlobalValue::setAlignment()
- */
-void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
-
-/**
- * Sets a metadata attachment, erasing the existing metadata attachment if
- * it already exists for the given kind.
- *
- * @see llvm::GlobalObject::setMetadata()
- */
-void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind,
- LLVMMetadataRef MD);
-
-/**
- * Erases a metadata attachment of the given kind if it exists.
- *
- * @see llvm::GlobalObject::eraseMetadata()
- */
-void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind);
-
-/**
- * Removes all metadata attachments from this value.
- *
- * @see llvm::GlobalObject::clearMetadata()
- */
-void LLVMGlobalClearMetadata(LLVMValueRef Global);
-
-/**
- * Retrieves an array of metadata entries representing the metadata attached to
- * this value. The caller is responsible for freeing this array by calling
- * \c LLVMDisposeValueMetadataEntries.
- *
- * @see llvm::GlobalObject::getAllMetadata()
- */
-LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value,
- size_t *NumEntries);
-
-/**
- * Destroys value metadata entries.
- */
-void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries);
-
-/**
- * Returns the kind of a value metadata entry at a specific index.
- */
-unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries,
- unsigned Index);
-
-/**
- * Returns the underlying metadata node of a value metadata entry at a
- * specific index.
- */
-LLVMMetadataRef
-LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries,
- unsigned Index);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
- *
- * This group contains functions that operate on global variable values.
- *
- * @see llvm::GlobalVariable
- *
- * @{
- */
-LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
-LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
- const char *Name,
- unsigned AddressSpace);
-LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
-LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
-LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
-LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
-LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
-void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
-LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
-void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
-LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
-void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
-LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
-void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
-LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
-void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
-LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
-void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
- *
- * This group contains function that operate on global alias values.
- *
- * @see llvm::GlobalAlias
- *
- * @{
- */
-LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
- const char *Name);
-
-/**
- * Obtain a GlobalAlias value from a Module by its name.
- *
- * The returned value corresponds to a llvm::GlobalAlias value.
- *
- * @see llvm::Module::getNamedAlias()
- */
-LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M,
- const char *Name, size_t NameLen);
-
-/**
- * Obtain an iterator to the first GlobalAlias in a Module.
- *
- * @see llvm::Module::alias_begin()
- */
-LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M);
-
-/**
- * Obtain an iterator to the last GlobalAlias in a Module.
- *
- * @see llvm::Module::alias_end()
- */
-LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M);
-
-/**
- * Advance a GlobalAlias iterator to the next GlobalAlias.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * global aliases.
- */
-LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA);
-
-/**
- * Decrement a GlobalAlias iterator to the previous GlobalAlias.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous global aliases.
- */
-LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA);
-
-/**
- * Retrieve the target value of an alias.
- */
-LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias);
-
-/**
- * Set the target value of an alias.
- */
-void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueFunction Function values
- *
- * Functions in this group operate on LLVMValueRef instances that
- * correspond to llvm::Function instances.
- *
- * @see llvm::Function
- *
- * @{
- */
-
-/**
- * Remove a function from its containing module and deletes it.
- *
- * @see llvm::Function::eraseFromParent()
- */
-void LLVMDeleteFunction(LLVMValueRef Fn);
-
-/**
- * Check whether the given function has a personality function.
- *
- * @see llvm::Function::hasPersonalityFn()
- */
-LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn);
-
-/**
- * Obtain the personality function attached to the function.
- *
- * @see llvm::Function::getPersonalityFn()
- */
-LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
-
-/**
- * Set the personality function attached to the function.
- *
- * @see llvm::Function::setPersonalityFn()
- */
-void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
-
-/**
- * Obtain the intrinsic ID number which matches the given function name.
- *
- * @see llvm::Function::lookupIntrinsicID()
- */
-unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen);
-
-/**
- * Obtain the ID number from a function instance.
- *
- * @see llvm::Function::getIntrinsicID()
- */
-unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
-
-/**
- * Create or insert the declaration of an intrinsic. For overloaded intrinsics,
- * parameter types must be provided to uniquely identify an overload.
- *
- * @see llvm::Intrinsic::getDeclaration()
- */
-LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod,
- unsigned ID,
- LLVMTypeRef *ParamTypes,
- size_t ParamCount);
-
-/**
- * Retrieves the type of an intrinsic. For overloaded intrinsics, parameter
- * types must be provided to uniquely identify an overload.
- *
- * @see llvm::Intrinsic::getType()
- */
-LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID,
- LLVMTypeRef *ParamTypes, size_t ParamCount);
-
-/**
- * Retrieves the name of an intrinsic.
- *
- * @see llvm::Intrinsic::getName()
- */
-const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength);
-
-/**
- * Copies the name of an overloaded intrinsic identified by a given list of
- * parameter types.
- *
- * Unlike LLVMIntrinsicGetName, the caller is responsible for freeing the
- * returned string.
- *
- * @see llvm::Intrinsic::getName()
- */
-const char *LLVMIntrinsicCopyOverloadedName(unsigned ID,
- LLVMTypeRef *ParamTypes,
- size_t ParamCount,
- size_t *NameLength);
-
-/**
- * Obtain if the intrinsic identified by the given ID is overloaded.
- *
- * @see llvm::Intrinsic::isOverloaded()
- */
-LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID);
-
-/**
- * Obtain the calling function of a function.
- *
- * The returned value corresponds to the LLVMCallConv enumeration.
- *
- * @see llvm::Function::getCallingConv()
- */
-unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
-
-/**
- * Set the calling convention of a function.
- *
- * @see llvm::Function::setCallingConv()
- *
- * @param Fn Function to operate on
- * @param CC LLVMCallConv to set calling convention to
- */
-void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
-
-/**
- * Obtain the name of the garbage collector to use during code
- * generation.
- *
- * @see llvm::Function::getGC()
- */
-const char *LLVMGetGC(LLVMValueRef Fn);
-
-/**
- * Define the garbage collector to use during code generation.
- *
- * @see llvm::Function::setGC()
- */
-void LLVMSetGC(LLVMValueRef Fn, const char *Name);
-
-/**
- * Add an attribute to a function.
- *
- * @see llvm::Function::addAttribute()
- */
-void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- LLVMAttributeRef A);
-unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx);
-void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- LLVMAttributeRef *Attrs);
-LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F,
- LLVMAttributeIndex Idx,
- unsigned KindID);
-LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F,
- LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
-void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- unsigned KindID);
-void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
-
-/**
- * Add a target-dependent attribute to a function
- * @see llvm::AttrBuilder::addAttribute()
- */
-void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
- const char *V);
-
-/**
- * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
- *
- * Functions in this group relate to arguments/parameters on functions.
- *
- * Functions in this group expect LLVMValueRef instances that correspond
- * to llvm::Function instances.
- *
- * @{
- */
-
-/**
- * Obtain the number of parameters in a function.
- *
- * @see llvm::Function::arg_size()
- */
-unsigned LLVMCountParams(LLVMValueRef Fn);
-
-/**
- * Obtain the parameters in a function.
- *
- * The takes a pointer to a pre-allocated array of LLVMValueRef that is
- * at least LLVMCountParams() long. This array will be filled with
- * LLVMValueRef instances which correspond to the parameters the
- * function receives. Each LLVMValueRef corresponds to a llvm::Argument
- * instance.
- *
- * @see llvm::Function::arg_begin()
- */
-void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
-
-/**
- * Obtain the parameter at the specified index.
- *
- * Parameters are indexed from 0.
- *
- * @see llvm::Function::arg_begin()
- */
-LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
-
-/**
- * Obtain the function to which this argument belongs.
- *
- * Unlike other functions in this group, this one takes an LLVMValueRef
- * that corresponds to a llvm::Attribute.
- *
- * The returned LLVMValueRef is the llvm::Function to which this
- * argument belongs.
- */
-LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
-
-/**
- * Obtain the first parameter to a function.
- *
- * @see llvm::Function::arg_begin()
- */
-LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
-
-/**
- * Obtain the last parameter to a function.
- *
- * @see llvm::Function::arg_end()
- */
-LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
-
-/**
- * Obtain the next parameter to a function.
- *
- * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
- * actually a wrapped iterator) and obtains the next parameter from the
- * underlying iterator.
- */
-LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
-
-/**
- * Obtain the previous parameter to a function.
- *
- * This is the opposite of LLVMGetNextParam().
- */
-LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
-
-/**
- * Set the alignment for a function parameter.
- *
- * @see llvm::Argument::addAttr()
- * @see llvm::AttrBuilder::addAlignmentAttr()
- */
-void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueGlobalIFunc IFuncs
- *
- * Functions in this group relate to indirect functions.
- *
- * Functions in this group expect LLVMValueRef instances that correspond
- * to llvm::GlobalIFunc instances.
- *
- * @{
- */
-
-/**
- * Add a global indirect function to a module under a specified name.
- *
- * @see llvm::GlobalIFunc::create()
- */
-LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M,
- const char *Name, size_t NameLen,
- LLVMTypeRef Ty, unsigned AddrSpace,
- LLVMValueRef Resolver);
-
-/**
- * Obtain a GlobalIFunc value from a Module by its name.
- *
- * The returned value corresponds to a llvm::GlobalIFunc value.
- *
- * @see llvm::Module::getNamedIFunc()
- */
-LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M,
- const char *Name, size_t NameLen);
-
-/**
- * Obtain an iterator to the first GlobalIFunc in a Module.
- *
- * @see llvm::Module::ifunc_begin()
- */
-LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M);
-
-/**
- * Obtain an iterator to the last GlobalIFunc in a Module.
- *
- * @see llvm::Module::ifunc_end()
- */
-LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M);
-
-/**
- * Advance a GlobalIFunc iterator to the next GlobalIFunc.
- *
- * Returns NULL if the iterator was already at the end and there are no more
- * global aliases.
- */
-LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc);
-
-/**
- * Decrement a GlobalIFunc iterator to the previous GlobalIFunc.
- *
- * Returns NULL if the iterator was already at the beginning and there are
- * no previous global aliases.
- */
-LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc);
-
-/**
- * Retrieves the resolver function associated with this indirect function, or
- * NULL if it doesn't not exist.
- *
- * @see llvm::GlobalIFunc::getResolver()
- */
-LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc);
-
-/**
- * Sets the resolver function associated with this indirect function.
- *
- * @see llvm::GlobalIFunc::setResolver()
- */
-void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver);
-
-/**
- * Remove a global indirect function from its parent module and delete it.
- *
- * @see llvm::GlobalIFunc::eraseFromParent()
- */
-void LLVMEraseGlobalIFunc(LLVMValueRef IFunc);
-
-/**
- * Remove a global indirect function from its parent module.
- *
- * This unlinks the global indirect function from its containing module but
- * keeps it alive.
- *
- * @see llvm::GlobalIFunc::removeFromParent()
- */
-void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueMetadata Metadata
- *
- * @{
- */
-
-/**
- * Create an MDString value from a given string value.
- *
- * The MDString value does not take ownership of the given string, it remains
- * the responsibility of the caller to free it.
- *
- * @see llvm::MDString::get()
- */
-LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str,
- size_t SLen);
-
-/**
- * Create an MDNode value with the given array of operands.
- *
- * @see llvm::MDNode::get()
- */
-LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs,
- size_t Count);
-
-/**
- * Obtain a Metadata as a Value.
- */
-LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD);
-
-/**
- * Obtain a Value as a Metadata.
- */
-LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val);
-
-/**
- * Obtain the underlying string from a MDString value.
- *
- * @param V Instance to obtain string from.
- * @param Length Memory address which will hold length of returned string.
- * @return String data in MDString.
- */
-const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length);
-
-/**
- * Obtain the number of operands from an MDNode value.
- *
- * @param V MDNode to get number of operands from.
- * @return Number of operands of the MDNode.
- */
-unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
-
-/**
- * Obtain the given MDNode's operands.
- *
- * The passed LLVMValueRef pointer should point to enough memory to hold all of
- * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
- * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
- * MDNode's operands.
- *
- * @param V MDNode to get the operands from.
- * @param Dest Destination array for operands.
- */
-void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
-
-/** Deprecated: Use LLVMMDStringInContext2 instead. */
-LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
- unsigned SLen);
-/** Deprecated: Use LLVMMDStringInContext2 instead. */
-LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
-/** Deprecated: Use LLVMMDNodeInContext2 instead. */
-LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
- unsigned Count);
-/** Deprecated: Use LLVMMDNodeInContext2 instead. */
-LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueBasicBlock Basic Block
- *
- * A basic block represents a single entry single exit section of code.
- * Basic blocks contain a list of instructions which form the body of
- * the block.
- *
- * Basic blocks belong to functions. They have the type of label.
- *
- * Basic blocks are themselves values. However, the C API models them as
- * LLVMBasicBlockRef.
- *
- * @see llvm::BasicBlock
- *
- * @{
- */
-
-/**
- * Convert a basic block instance to a value type.
- */
-LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
-
-/**
- * Determine whether an LLVMValueRef is itself a basic block.
- */
-LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
-
-/**
- * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
- */
-LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
-
-/**
- * Obtain the string name of a basic block.
- */
-const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB);
-
-/**
- * Obtain the function to which a basic block belongs.
- *
- * @see llvm::BasicBlock::getParent()
- */
-LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
-
-/**
- * Obtain the terminator instruction for a basic block.
- *
- * If the basic block does not have a terminator (it is not well-formed
- * if it doesn't), then NULL is returned.
- *
- * The returned LLVMValueRef corresponds to an llvm::Instruction.
- *
- * @see llvm::BasicBlock::getTerminator()
- */
-LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
-
-/**
- * Obtain the number of basic blocks in a function.
- *
- * @param Fn Function value to operate on.
- */
-unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
-
-/**
- * Obtain all of the basic blocks in a function.
- *
- * This operates on a function value. The BasicBlocks parameter is a
- * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
- * LLVMCountBasicBlocks() in length. This array is populated with
- * LLVMBasicBlockRef instances.
- */
-void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
-
-/**
- * Obtain the first basic block in a function.
- *
- * The returned basic block can be used as an iterator. You will likely
- * eventually call into LLVMGetNextBasicBlock() with it.
- *
- * @see llvm::Function::begin()
- */
-LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
-
-/**
- * Obtain the last basic block in a function.
- *
- * @see llvm::Function::end()
- */
-LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
-
-/**
- * Advance a basic block iterator.
- */
-LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
-
-/**
- * Go backwards in a basic block iterator.
- */
-LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
-
-/**
- * Obtain the basic block that corresponds to the entry point of a
- * function.
- *
- * @see llvm::Function::getEntryBlock()
- */
-LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
-
-/**
- * Insert the given basic block after the insertion point of the given builder.
- *
- * The insertion point must be valid.
- *
- * @see llvm::Function::BasicBlockListType::insertAfter()
- */
-void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder,
- LLVMBasicBlockRef BB);
-
-/**
- * Append the given basic block to the basic block list of the given function.
- *
- * @see llvm::Function::BasicBlockListType::push_back()
- */
-void LLVMAppendExistingBasicBlock(LLVMValueRef Fn,
- LLVMBasicBlockRef BB);
-
-/**
- * Create a new basic block without inserting it into a function.
- *
- * @see llvm::BasicBlock::Create()
- */
-LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C,
- const char *Name);
-
-/**
- * Append a basic block to the end of a function.
- *
- * @see llvm::BasicBlock::Create()
- */
-LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
- LLVMValueRef Fn,
- const char *Name);
-
-/**
- * Append a basic block to the end of a function using the global
- * context.
- *
- * @see llvm::BasicBlock::Create()
- */
-LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
-
-/**
- * Insert a basic block in a function before another basic block.
- *
- * The function to add to is determined by the function of the
- * passed basic block.
- *
- * @see llvm::BasicBlock::Create()
- */
-LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
- LLVMBasicBlockRef BB,
- const char *Name);
-
-/**
- * Insert a basic block in a function using the global context.
- *
- * @see llvm::BasicBlock::Create()
- */
-LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
- const char *Name);
-
-/**
- * Remove a basic block from a function and delete it.
- *
- * This deletes the basic block from its containing function and deletes
- * the basic block itself.
- *
- * @see llvm::BasicBlock::eraseFromParent()
- */
-void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
-
-/**
- * Remove a basic block from a function.
- *
- * This deletes the basic block from its containing function but keep
- * the basic block alive.
- *
- * @see llvm::BasicBlock::removeFromParent()
- */
-void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
-
-/**
- * Move a basic block to before another one.
- *
- * @see llvm::BasicBlock::moveBefore()
- */
-void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
-
-/**
- * Move a basic block to after another one.
- *
- * @see llvm::BasicBlock::moveAfter()
- */
-void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
-
-/**
- * Obtain the first instruction in a basic block.
- *
- * The returned LLVMValueRef corresponds to a llvm::Instruction
- * instance.
- */
-LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
-
-/**
- * Obtain the last instruction in a basic block.
- *
- * The returned LLVMValueRef corresponds to an LLVM:Instruction.
- */
-LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstruction Instructions
- *
- * Functions in this group relate to the inspection and manipulation of
- * individual instructions.
- *
- * In the C++ API, an instruction is modeled by llvm::Instruction. This
- * class has a large number of descendents. llvm::Instruction is a
- * llvm::Value and in the C API, instructions are modeled by
- * LLVMValueRef.
- *
- * This group also contains sub-groups which operate on specific
- * llvm::Instruction types, e.g. llvm::CallInst.
- *
- * @{
- */
-
-/**
- * Determine whether an instruction has any metadata attached.
- */
-int LLVMHasMetadata(LLVMValueRef Val);
-
-/**
- * Return metadata associated with an instruction value.
- */
-LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
-
-/**
- * Set metadata associated with an instruction value.
- */
-void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
-
-/**
- * Returns the metadata associated with an instruction value, but filters out
- * all the debug locations.
- *
- * @see llvm::Instruction::getAllMetadataOtherThanDebugLoc()
- */
-LLVMValueMetadataEntry *
-LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr,
- size_t *NumEntries);
-
-/**
- * Obtain the basic block to which an instruction belongs.
- *
- * @see llvm::Instruction::getParent()
- */
-LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
-
-/**
- * Obtain the instruction that occurs after the one specified.
- *
- * The next instruction will be from the same basic block.
- *
- * If this is the last instruction in a basic block, NULL will be
- * returned.
- */
-LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
-
-/**
- * Obtain the instruction that occurred before this one.
- *
- * If the instruction is the first instruction in a basic block, NULL
- * will be returned.
- */
-LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
-
-/**
- * Remove and delete an instruction.
- *
- * The instruction specified is removed from its containing building
- * block but is kept alive.
- *
- * @see llvm::Instruction::removeFromParent()
- */
-void LLVMInstructionRemoveFromParent(LLVMValueRef Inst);
-
-/**
- * Remove and delete an instruction.
- *
- * The instruction specified is removed from its containing building
- * block and then deleted.
- *
- * @see llvm::Instruction::eraseFromParent()
- */
-void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
-
-/**
- * Obtain the code opcode for an individual instruction.
- *
- * @see llvm::Instruction::getOpCode()
- */
-LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
-
-/**
- * Obtain the predicate of an instruction.
- *
- * This is only valid for instructions that correspond to llvm::ICmpInst
- * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
- *
- * @see llvm::ICmpInst::getPredicate()
- */
-LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
-
-/**
- * Obtain the float predicate of an instruction.
- *
- * This is only valid for instructions that correspond to llvm::FCmpInst
- * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
- *
- * @see llvm::FCmpInst::getPredicate()
- */
-LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
-
-/**
- * Create a copy of 'this' instruction that is identical in all ways
- * except the following:
- * * The instruction has no parent
- * * The instruction has no name
- *
- * @see llvm::Instruction::clone()
- */
-LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
-
-/**
- * Determine whether an instruction is a terminator. This routine is named to
- * be compatible with historical functions that did this by querying the
- * underlying C++ type.
- *
- * @see llvm::Instruction::isTerminator()
- */
-LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst);
-
-/**
- * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
- *
- * Functions in this group apply to instructions that refer to call
- * sites and invocations. These correspond to C++ types in the
- * llvm::CallInst class tree.
- *
- * @{
- */
-
-/**
- * Obtain the argument count for a call instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst,
- * llvm::InvokeInst, or llvm:FuncletPadInst.
- *
- * @see llvm::CallInst::getNumArgOperands()
- * @see llvm::InvokeInst::getNumArgOperands()
- * @see llvm::FuncletPadInst::getNumArgOperands()
- */
-unsigned LLVMGetNumArgOperands(LLVMValueRef Instr);
-
-/**
- * Set the calling convention for a call instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
- * llvm::InvokeInst.
- *
- * @see llvm::CallInst::setCallingConv()
- * @see llvm::InvokeInst::setCallingConv()
- */
-void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
-
-/**
- * Obtain the calling convention for a call instruction.
- *
- * This is the opposite of LLVMSetInstructionCallConv(). Reads its
- * usage.
- *
- * @see LLVMSetInstructionCallConv()
- */
-unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
-
-void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
- unsigned Align);
-
-void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- LLVMAttributeRef A);
-unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx);
-void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx,
- LLVMAttributeRef *Attrs);
-LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C,
- LLVMAttributeIndex Idx,
- unsigned KindID);
-LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C,
- LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
-void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- unsigned KindID);
-void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
- const char *K, unsigned KLen);
-
-/**
- * Obtain the function type called by this instruction.
- *
- * @see llvm::CallBase::getFunctionType()
- */
-LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C);
-
-/**
- * Obtain the pointer to the function invoked by this instruction.
- *
- * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
- * llvm::InvokeInst.
- *
- * @see llvm::CallInst::getCalledOperand()
- * @see llvm::InvokeInst::getCalledOperand()
- */
-LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr);
-
-/**
- * Obtain whether a call instruction is a tail call.
- *
- * This only works on llvm::CallInst instructions.
- *
- * @see llvm::CallInst::isTailCall()
- */
-LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
-
-/**
- * Set whether a call instruction is a tail call.
- *
- * This only works on llvm::CallInst instructions.
- *
- * @see llvm::CallInst::setTailCall()
- */
-void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
-
-/**
- * Return the normal destination basic block.
- *
- * This only works on llvm::InvokeInst instructions.
- *
- * @see llvm::InvokeInst::getNormalDest()
- */
-LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst);
-
-/**
- * Return the unwind destination basic block.
- *
- * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
- * llvm::CatchSwitchInst instructions.
- *
- * @see llvm::InvokeInst::getUnwindDest()
- * @see llvm::CleanupReturnInst::getUnwindDest()
- * @see llvm::CatchSwitchInst::getUnwindDest()
- */
-LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst);
-
-/**
- * Set the normal destination basic block.
- *
- * This only works on llvm::InvokeInst instructions.
- *
- * @see llvm::InvokeInst::setNormalDest()
- */
-void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
-
-/**
- * Set the unwind destination basic block.
- *
- * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
- * llvm::CatchSwitchInst instructions.
- *
- * @see llvm::InvokeInst::setUnwindDest()
- * @see llvm::CleanupReturnInst::setUnwindDest()
- * @see llvm::CatchSwitchInst::setUnwindDest()
- */
-void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstructionTerminator Terminators
- *
- * Functions in this group only apply to instructions for which
- * LLVMIsATerminatorInst returns true.
- *
- * @{
- */
-
-/**
- * Return the number of successors that this terminator has.
- *
- * @see llvm::Instruction::getNumSuccessors
- */
-unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
-
-/**
- * Return the specified successor.
- *
- * @see llvm::Instruction::getSuccessor
- */
-LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
-
-/**
- * Update the specified successor to point at the provided block.
- *
- * @see llvm::Instruction::setSuccessor
- */
-void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
-
-/**
- * Return if a branch is conditional.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::isConditional
- */
-LLVMBool LLVMIsConditional(LLVMValueRef Branch);
-
-/**
- * Return the condition of a branch instruction.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::getCondition
- */
-LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
-
-/**
- * Set the condition of a branch instruction.
- *
- * This only works on llvm::BranchInst instructions.
- *
- * @see llvm::BranchInst::setCondition
- */
-void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
-
-/**
- * Obtain the default destination basic block of a switch instruction.
- *
- * This only works on llvm::SwitchInst instructions.
- *
- * @see llvm::SwitchInst::getDefaultDest()
- */
-LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstructionAlloca Allocas
- *
- * Functions in this group only apply to instructions that map to
- * llvm::AllocaInst instances.
- *
- * @{
- */
-
-/**
- * Obtain the type that is being allocated by the alloca instruction.
- */
-LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstructionGetElementPointer GEPs
- *
- * Functions in this group only apply to instructions that map to
- * llvm::GetElementPtrInst instances.
- *
- * @{
- */
-
-/**
- * Check whether the given GEP instruction is inbounds.
- */
-LLVMBool LLVMIsInBounds(LLVMValueRef GEP);
-
-/**
- * Set the given GEP instruction to be inbounds or not.
- */
-void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
- *
- * Functions in this group only apply to instructions that map to
- * llvm::PHINode instances.
- *
- * @{
- */
-
-/**
- * Add an incoming value to the end of a PHI list.
- */
-void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
- LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
-
-/**
- * Obtain the number of incoming basic blocks to a PHI node.
- */
-unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
-
-/**
- * Obtain an incoming value to a PHI node as an LLVMValueRef.
- */
-LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
-
-/**
- * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
- */
-LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreValueInstructionExtractValue ExtractValue
- * @defgroup LLVMCCoreValueInstructionInsertValue InsertValue
- *
- * Functions in this group only apply to instructions that map to
- * llvm::ExtractValue and llvm::InsertValue instances.
- *
- * @{
- */
-
-/**
- * Obtain the number of indices.
- * NB: This also works on GEP.
- */
-unsigned LLVMGetNumIndices(LLVMValueRef Inst);
-
-/**
- * Obtain the indices as an array.
- */
-const unsigned *LLVMGetIndices(LLVMValueRef Inst);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
- *
- * An instruction builder represents a point within a basic block and is
- * the exclusive means of building instructions using the C interface.
- *
- * @{
- */
-
-LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
-LLVMBuilderRef LLVMCreateBuilder(void);
-void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
- LLVMValueRef Instr);
-void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
-void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
-LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
-void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
-void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
-void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
- const char *Name);
-void LLVMDisposeBuilder(LLVMBuilderRef Builder);
-
-/* Metadata */
-
-/**
- * Get location information used by debugging information.
- *
- * @see llvm::IRBuilder::getCurrentDebugLocation()
- */
-LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder);
-
-/**
- * Set location information used by debugging information.
- *
- * To clear the location metadata of the given instruction, pass NULL to \p Loc.
- *
- * @see llvm::IRBuilder::SetCurrentDebugLocation()
- */
-void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc);
-
-/**
- * Attempts to set the debug location for the given instruction using the
- * current debug location for the given builder. If the builder has no current
- * debug location, this function is a no-op.
- *
- * @see llvm::IRBuilder::SetInstDebugLocation()
- */
-void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
-
-/**
- * Get the dafult floating-point math metadata for a given builder.
- *
- * @see llvm::IRBuilder::getDefaultFPMathTag()
- */
-LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder);
-
-/**
- * Set the default floating-point math metadata for the given builder.
- *
- * To clear the metadata, pass NULL to \p FPMathTag.
- *
- * @see llvm::IRBuilder::setDefaultFPMathTag()
- */
-void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder,
- LLVMMetadataRef FPMathTag);
-
-/**
- * Deprecated: Passing the NULL location will crash.
- * Use LLVMGetCurrentDebugLocation2 instead.
- */
-void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
-/**
- * Deprecated: Returning the NULL location will crash.
- * Use LLVMGetCurrentDebugLocation2 instead.
- */
-LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
-
-/* Terminators */
-LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
-LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
-LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
- unsigned N);
-LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
-LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
- LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
-LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
- LLVMBasicBlockRef Else, unsigned NumCases);
-LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
- unsigned NumDests);
-// LLVMBuildInvoke is deprecated in favor of LLVMBuildInvoke2, in preparation
-// for opaque pointer types.
-LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
- const char *Name);
-LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
- const char *Name);
-LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
-
-/* Exception Handling */
-LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
-LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef PersFn, unsigned NumClauses,
- const char *Name);
-LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
- LLVMBasicBlockRef BB);
-LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
- LLVMBasicBlockRef BB);
-LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
-LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
-LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad,
- LLVMBasicBlockRef UnwindBB,
- unsigned NumHandlers, const char *Name);
-
-/* Add a case to the switch instruction */
-void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
- LLVMBasicBlockRef Dest);
-
-/* Add a destination to the indirectbr instruction */
-void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
-
-/* Get the number of clauses on the landingpad instruction */
-unsigned LLVMGetNumClauses(LLVMValueRef LandingPad);
-
-/* Get the value of the clause at index Idx on the landingpad instruction */
-LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx);
-
-/* Add a catch or filter clause to the landingpad instruction */
-void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
-
-/* Get the 'cleanup' flag in the landingpad instruction */
-LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad);
-
-/* Set the 'cleanup' flag in the landingpad instruction */
-void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
-
-/* Add a destination to the catchswitch instruction */
-void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest);
-
-/* Get the number of handlers on the catchswitch instruction */
-unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch);
-
-/**
- * Obtain the basic blocks acting as handlers for a catchswitch instruction.
- *
- * The Handlers parameter should point to a pre-allocated array of
- * LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the
- * first LLVMGetNumHandlers() entries in the array will be populated
- * with LLVMBasicBlockRef instances.
- *
- * @param CatchSwitch The catchswitch instruction to operate on.
- * @param Handlers Memory address of an array to be filled with basic blocks.
- */
-void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers);
-
-/* Funclets */
-
-/* Get the number of funcletpad arguments. */
-LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i);
-
-/* Set a funcletpad argument at the given index. */
-void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value);
-
-/**
- * Get the parent catchswitch instruction of a catchpad instruction.
- *
- * This only works on llvm::CatchPadInst instructions.
- *
- * @see llvm::CatchPadInst::getCatchSwitch()
- */
-LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad);
-
-/**
- * Set the parent catchswitch instruction of a catchpad instruction.
- *
- * This only works on llvm::CatchPadInst instructions.
- *
- * @see llvm::CatchPadInst::setCatchSwitch()
- */
-void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch);
-
-/* Arithmetic */
-LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
-LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
- const char *Name);
-LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
- const char *Name);
-LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
-LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
-
-/* Memory */
-LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
-LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef Val, const char *Name);
-
-/**
- * Creates and inserts a memset to the specified pointer and the
- * specified value.
- *
- * @see llvm::IRRBuilder::CreateMemSet()
- */
-LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr,
- LLVMValueRef Val, LLVMValueRef Len,
- unsigned Align);
-/**
- * Creates and inserts a memcpy between the specified pointers.
- *
- * @see llvm::IRRBuilder::CreateMemCpy()
- */
-LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B,
- LLVMValueRef Dst, unsigned DstAlign,
- LLVMValueRef Src, unsigned SrcAlign,
- LLVMValueRef Size);
-/**
- * Creates and inserts a memmove between the specified pointers.
- *
- * @see llvm::IRRBuilder::CreateMemMove()
- */
-LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B,
- LLVMValueRef Dst, unsigned DstAlign,
- LLVMValueRef Src, unsigned SrcAlign,
- LLVMValueRef Size);
-
-LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
-LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef Val, const char *Name);
-LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
-// LLVMBuildLoad is deprecated in favor of LLVMBuildLoad2, in preparation for
-// opaque pointer types.
-LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
- const char *Name);
-LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty,
- LLVMValueRef PointerVal, const char *Name);
-LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
-// LLVMBuildGEP, LLVMBuildInBoundsGEP, and LLVMBuildStructGEP are deprecated in
-// favor of LLVMBuild*GEP2, in preparation for opaque pointer types.
-LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- LLVMValueRef *Indices, unsigned NumIndices,
- const char *Name);
-LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- LLVMValueRef *Indices, unsigned NumIndices,
- const char *Name);
-LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
- unsigned Idx, const char *Name);
-LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, LLVMValueRef *Indices,
- unsigned NumIndices, const char *Name);
-LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, LLVMValueRef *Indices,
- unsigned NumIndices, const char *Name);
-LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
- LLVMValueRef Pointer, unsigned Idx,
- const char *Name);
-LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
- const char *Name);
-LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
- const char *Name);
-LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
-void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
-LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst);
-void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak);
-LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
-void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
-LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst);
-void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp);
-
-/* Casts */
-LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, LLVMBool IsSigned,
- const char *Name);
-LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
- LLVMTypeRef DestTy, const char *Name);
-
-/** Deprecated: This cast is always signed. Use LLVMBuildIntCast2 instead. */
-LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
- LLVMTypeRef DestTy, const char *Name);
-
-/* Comparisons */
-LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
- LLVMValueRef LHS, LLVMValueRef RHS,
- const char *Name);
-
-/* Miscellaneous instructions */
-LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
-// LLVMBuildCall is deprecated in favor of LLVMBuildCall2, in preparation for
-// opaque pointer types.
-LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
-LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn,
- LLVMValueRef *Args, unsigned NumArgs,
- const char *Name);
-LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
- LLVMValueRef Then, LLVMValueRef Else,
- const char *Name);
-LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
- const char *Name);
-LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
- LLVMValueRef Index, const char *Name);
-LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
- LLVMValueRef EltVal, LLVMValueRef Index,
- const char *Name);
-LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
- LLVMValueRef V2, LLVMValueRef Mask,
- const char *Name);
-LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
- unsigned Index, const char *Name);
-LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
- LLVMValueRef EltVal, unsigned Index,
- const char *Name);
-LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
-
-LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
-LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
- const char *Name);
-LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
- LLVMValueRef RHS, const char *Name);
-LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
- LLVMBool singleThread, const char *Name);
-LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
- LLVMValueRef PTR, LLVMValueRef Val,
- LLVMAtomicOrdering ordering,
- LLVMBool singleThread);
-LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
- LLVMValueRef Cmp, LLVMValueRef New,
- LLVMAtomicOrdering SuccessOrdering,
- LLVMAtomicOrdering FailureOrdering,
- LLVMBool SingleThread);
-
-/**
- * Get the number of elements in the mask of a ShuffleVector instruction.
- */
-unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst);
-
-/**
- * \returns a constant that specifies that the result of a \c ShuffleVectorInst
- * is undefined.
- */
-int LLVMGetUndefMaskElem(void);
-
-/**
- * Get the mask value at position Elt in the mask of a ShuffleVector
- * instruction.
- *
- * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is undef
- * at that position.
- */
-int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt);
-
-LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst);
-void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread);
-
-LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst);
-void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst,
- LLVMAtomicOrdering Ordering);
-LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst);
-void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst,
- LLVMAtomicOrdering Ordering);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreModuleProvider Module Providers
- *
- * @{
- */
-
-/**
- * Changes the type of M so it can be passed to FunctionPassManagers and the
- * JIT. They take ModuleProviders for historical reasons.
- */
-LLVMModuleProviderRef
-LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
-
-/**
- * Destroys the module M.
- */
-void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
- *
- * @{
- */
-
-LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
- LLVMMemoryBufferRef *OutMemBuf,
- char **OutMessage);
-LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
- char **OutMessage);
-LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
- size_t InputDataLength,
- const char *BufferName,
- LLVMBool RequiresNullTerminator);
-LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
- size_t InputDataLength,
- const char *BufferName);
-const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
-size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
-void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCorePassRegistry Pass Registry
- *
- * @{
- */
-
-/** Return the global pass registry, for use with initialization functions.
- @see llvm::PassRegistry::getPassRegistry */
-LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCorePassManagers Pass Managers
- *
- * @{
- */
-
-/** Constructs a new whole-module pass pipeline. This type of pipeline is
- suitable for link-time optimization and whole-module transformations.
- @see llvm::PassManager::PassManager */
-LLVMPassManagerRef LLVMCreatePassManager(void);
-
-/** Constructs a new function-by-function pass pipeline over the module
- provider. It does not take ownership of the module provider. This type of
- pipeline is suitable for code generation and JIT compilation tasks.
- @see llvm::FunctionPassManager::FunctionPassManager */
-LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
-
-/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
-LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
-
-/** Initializes, executes on the provided module, and finalizes all of the
- passes scheduled in the pass manager. Returns 1 if any of the passes
- modified the module, 0 otherwise.
- @see llvm::PassManager::run(Module&) */
-LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
-
-/** Initializes all of the function passes scheduled in the function pass
- manager. Returns 1 if any of the passes modified the module, 0 otherwise.
- @see llvm::FunctionPassManager::doInitialization */
-LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
-
-/** Executes all of the function passes scheduled in the function pass manager
- on the provided function. Returns 1 if any of the passes modified the
- function, false otherwise.
- @see llvm::FunctionPassManager::run(Function&) */
-LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
-
-/** Finalizes all of the function passes scheduled in the function pass
- manager. Returns 1 if any of the passes modified the module, 0 otherwise.
- @see llvm::FunctionPassManager::doFinalization */
-LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
-
-/** Frees the memory of a pass pipeline. For function pipelines, does not free
- the module provider.
- @see llvm::PassManagerBase::~PassManagerBase. */
-void LLVMDisposePassManager(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-/**
- * @defgroup LLVMCCoreThreading Threading
- *
- * Handle the structures needed to make LLVM safe for multithreading.
- *
- * @{
- */
-
-/** Deprecated: Multi-threading can only be enabled/disabled with the compile
- time define LLVM_ENABLE_THREADS. This function always returns
- LLVMIsMultithreaded(). */
-LLVMBool LLVMStartMultithreaded(void);
-
-/** Deprecated: Multi-threading can only be enabled/disabled with the compile
- time define LLVM_ENABLE_THREADS. */
-void LLVMStopMultithreaded(void);
-
-/** Check whether LLVM is executing in thread-safe mode or not.
- @see llvm::llvm_is_multithreaded */
-LLVMBool LLVMIsMultithreaded(void);
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif /* LLVM_C_CORE_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+ * Determine whether a value instance is null.
+ *
+ * @see llvm::Constant::isNullValue()
+ */
+LLVMBool LLVMIsNull(LLVMValueRef Val);
+
+/**
+ * Obtain a constant that is a constant pointer pointing to NULL for a
+ * specified type.
+ */
+LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty);
+
+/**
+ * @defgroup LLVMCCoreValueConstantScalar Scalar constants
+ *
+ * Functions in this group model LLVMValueRef instances that correspond
+ * to constants referring to scalar types.
+ *
+ * For integer types, the LLVMTypeRef parameter should correspond to a
+ * llvm::IntegerType instance and the returned LLVMValueRef will
+ * correspond to a llvm::ConstantInt.
+ *
+ * For floating point types, the LLVMTypeRef returned corresponds to a
+ * llvm::ConstantFP.
+ *
+ * @{
+ */
+
+/**
+ * Obtain a constant value for an integer type.
+ *
+ * The returned value corresponds to a llvm::ConstantInt.
+ *
+ * @see llvm::ConstantInt::get()
+ *
+ * @param IntTy Integer type to obtain value of.
+ * @param N The value the returned instance should refer to.
+ * @param SignExtend Whether to sign extend the produced value.
+ */
+LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
+ LLVMBool SignExtend);
+
+/**
+ * Obtain a constant value for an integer of arbitrary precision.
+ *
+ * @see llvm::ConstantInt::get()
+ */
+LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy,
+ unsigned NumWords,
+ const uint64_t Words[]);
+
+/**
+ * Obtain a constant value for an integer parsed from a string.
+ *
+ * A similar API, LLVMConstIntOfStringAndSize is also available. If the
+ * string's length is available, it is preferred to call that function
+ * instead.
+ *
+ * @see llvm::ConstantInt::get()
+ */
+LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text,
+ uint8_t Radix);
+
+/**
+ * Obtain a constant value for an integer parsed from a string with
+ * specified length.
+ *
+ * @see llvm::ConstantInt::get()
+ */
+LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text,
+ unsigned SLen, uint8_t Radix);
+
+/**
+ * Obtain a constant value referring to a double floating point value.
+ */
+LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N);
+
+/**
+ * Obtain a constant for a floating point value parsed from a string.
+ *
+ * A similar API, LLVMConstRealOfStringAndSize is also available. It
+ * should be used if the input string's length is known.
+ */
+LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text);
+
+/**
+ * Obtain a constant for a floating point value parsed from a string.
+ */
+LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char *Text,
+ unsigned SLen);
+
+/**
+ * Obtain the zero extended value for an integer constant value.
+ *
+ * @see llvm::ConstantInt::getZExtValue()
+ */
+unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal);
+
+/**
+ * Obtain the sign extended value for an integer constant value.
+ *
+ * @see llvm::ConstantInt::getSExtValue()
+ */
+long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal);
+
+/**
+ * Obtain the double value for an floating point constant value.
+ * losesInfo indicates if some precision was lost in the conversion.
+ *
+ * @see llvm::ConstantFP::getDoubleValue
+ */
+double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueConstantComposite Composite Constants
+ *
+ * Functions in this group operate on composite constants.
+ *
+ * @{
+ */
+
+/**
+ * Create a ConstantDataSequential and initialize it with a string.
+ *
+ * @see llvm::ConstantDataArray::getString()
+ */
+LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str,
+ unsigned Length, LLVMBool DontNullTerminate);
+
+/**
+ * Create a ConstantDataSequential with string content in the global context.
+ *
+ * This is the same as LLVMConstStringInContext except it operates on the
+ * global context.
+ *
+ * @see LLVMConstStringInContext()
+ * @see llvm::ConstantDataArray::getString()
+ */
+LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
+ LLVMBool DontNullTerminate);
+
+/**
+ * Returns true if the specified constant is an array of i8.
+ *
+ * @see ConstantDataSequential::getAsString()
+ */
+LLVMBool LLVMIsConstantString(LLVMValueRef c);
+
+/**
+ * Get the given constant data sequential as a string.
+ *
+ * @see ConstantDataSequential::getAsString()
+ */
+const char *LLVMGetAsString(LLVMValueRef c, size_t *Length);
+
+/**
+ * Create an anonymous ConstantStruct with the specified values.
+ *
+ * @see llvm::ConstantStruct::getAnon()
+ */
+LLVMValueRef LLVMConstStructInContext(LLVMContextRef C,
+ LLVMValueRef *ConstantVals,
+ unsigned Count, LLVMBool Packed);
+
+/**
+ * Create a ConstantStruct in the global Context.
+ *
+ * This is the same as LLVMConstStructInContext except it operates on the
+ * global Context.
+ *
+ * @see LLVMConstStructInContext()
+ */
+LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count,
+ LLVMBool Packed);
+
+/**
+ * Create a ConstantArray from values.
+ *
+ * @see llvm::ConstantArray::get()
+ */
+LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy,
+ LLVMValueRef *ConstantVals, unsigned Length);
+
+/**
+ * Create a non-anonymous ConstantStruct from values.
+ *
+ * @see llvm::ConstantStruct::get()
+ */
+LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy,
+ LLVMValueRef *ConstantVals,
+ unsigned Count);
+
+/**
+ * Get an element at specified index as a constant.
+ *
+ * @see ConstantDataSequential::getElementAsConstant()
+ */
+LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx);
+
+/**
+ * Create a ConstantVector from values.
+ *
+ * @see llvm::ConstantVector::get()
+ */
+LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueConstantExpressions Constant Expressions
+ *
+ * Functions in this group correspond to APIs on llvm::ConstantExpr.
+ *
+ * @see llvm::ConstantExpr.
+ *
+ * @{
+ */
+LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty);
+LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty);
+LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMConstFNeg(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal);
+LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstExactUDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstExactSDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFDiv(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstURem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstSRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFRem(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstAnd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstOr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstICmp(LLVMIntPredicate Predicate,
+ LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstFCmp(LLVMRealPredicate Predicate,
+ LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
+LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
+ LLVMValueRef *ConstantIndices, unsigned NumIndices);
+LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
+ LLVMValueRef *ConstantIndices, unsigned NumIndices);
+LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
+ LLVMValueRef *ConstantIndices,
+ unsigned NumIndices);
+LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
+ LLVMValueRef *ConstantIndices,
+ unsigned NumIndices);
+LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstFPTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstFPExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstUIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstSIToFP(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstFPToUI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstFPToSI(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstZExtOrBitCast(LLVMValueRef ConstantVal,
+ LLVMTypeRef ToType);
+LLVMValueRef LLVMConstSExtOrBitCast(LLVMValueRef ConstantVal,
+ LLVMTypeRef ToType);
+LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal,
+ LLVMTypeRef ToType);
+LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal,
+ LLVMTypeRef ToType);
+LLVMValueRef LLVMConstIntCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType,
+ LLVMBool isSigned);
+LLVMValueRef LLVMConstFPCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
+LLVMValueRef LLVMConstSelect(LLVMValueRef ConstantCondition,
+ LLVMValueRef ConstantIfTrue,
+ LLVMValueRef ConstantIfFalse);
+LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant,
+ LLVMValueRef IndexConstant);
+LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant,
+ LLVMValueRef ElementValueConstant,
+ LLVMValueRef IndexConstant);
+LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant,
+ LLVMValueRef VectorBConstant,
+ LLVMValueRef MaskConstant);
+LLVMValueRef LLVMConstExtractValue(LLVMValueRef AggConstant, unsigned *IdxList,
+ unsigned NumIdx);
+LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
+ LLVMValueRef ElementValueConstant,
+ unsigned *IdxList, unsigned NumIdx);
+LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
+
+/** Deprecated: Use LLVMGetInlineAsm instead. */
+LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
+ const char *AsmString, const char *Constraints,
+ LLVMBool HasSideEffects, LLVMBool IsAlignStack);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueConstantGlobals Global Values
+ *
+ * This group contains functions that operate on global values. Functions in
+ * this group relate to functions in the llvm::GlobalValue class tree.
+ *
+ * @see llvm::GlobalValue
+ *
+ * @{
+ */
+
+LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global);
+LLVMBool LLVMIsDeclaration(LLVMValueRef Global);
+LLVMLinkage LLVMGetLinkage(LLVMValueRef Global);
+void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage);
+const char *LLVMGetSection(LLVMValueRef Global);
+void LLVMSetSection(LLVMValueRef Global, const char *Section);
+LLVMVisibility LLVMGetVisibility(LLVMValueRef Global);
+void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz);
+LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global);
+void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class);
+LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global);
+void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr);
+
+/**
+ * Returns the "value type" of a global value. This differs from the formal
+ * type of a global value which is always a pointer type.
+ *
+ * @see llvm::GlobalValue::getValueType()
+ */
+LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global);
+
+/** Deprecated: Use LLVMGetUnnamedAddress instead. */
+LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global);
+/** Deprecated: Use LLVMSetUnnamedAddress instead. */
+void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr);
+
+/**
+ * @defgroup LLVMCCoreValueWithAlignment Values with alignment
+ *
+ * Functions in this group only apply to values with alignment, i.e.
+ * global variables, load and store instructions.
+ */
+
+/**
+ * Obtain the preferred alignment of the value.
+ * @see llvm::AllocaInst::getAlignment()
+ * @see llvm::LoadInst::getAlignment()
+ * @see llvm::StoreInst::getAlignment()
+ * @see llvm::GlobalValue::getAlignment()
+ */
+unsigned LLVMGetAlignment(LLVMValueRef V);
+
+/**
+ * Set the preferred alignment of the value.
+ * @see llvm::AllocaInst::setAlignment()
+ * @see llvm::LoadInst::setAlignment()
+ * @see llvm::StoreInst::setAlignment()
+ * @see llvm::GlobalValue::setAlignment()
+ */
+void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes);
+
+/**
+ * Sets a metadata attachment, erasing the existing metadata attachment if
+ * it already exists for the given kind.
+ *
+ * @see llvm::GlobalObject::setMetadata()
+ */
+void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind,
+ LLVMMetadataRef MD);
+
+/**
+ * Erases a metadata attachment of the given kind if it exists.
+ *
+ * @see llvm::GlobalObject::eraseMetadata()
+ */
+void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind);
+
+/**
+ * Removes all metadata attachments from this value.
+ *
+ * @see llvm::GlobalObject::clearMetadata()
+ */
+void LLVMGlobalClearMetadata(LLVMValueRef Global);
+
+/**
+ * Retrieves an array of metadata entries representing the metadata attached to
+ * this value. The caller is responsible for freeing this array by calling
+ * \c LLVMDisposeValueMetadataEntries.
+ *
+ * @see llvm::GlobalObject::getAllMetadata()
+ */
+LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value,
+ size_t *NumEntries);
+
+/**
+ * Destroys value metadata entries.
+ */
+void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries);
+
+/**
+ * Returns the kind of a value metadata entry at a specific index.
+ */
+unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries,
+ unsigned Index);
+
+/**
+ * Returns the underlying metadata node of a value metadata entry at a
+ * specific index.
+ */
+LLVMMetadataRef
+LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries,
+ unsigned Index);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCoreValueConstantGlobalVariable Global Variables
+ *
+ * This group contains functions that operate on global variable values.
+ *
+ * @see llvm::GlobalVariable
+ *
+ * @{
+ */
+LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name);
+LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty,
+ const char *Name,
+ unsigned AddressSpace);
+LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name);
+LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M);
+LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M);
+LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar);
+LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar);
+void LLVMDeleteGlobal(LLVMValueRef GlobalVar);
+LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
+void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
+LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar);
+void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal);
+LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
+void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant);
+LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar);
+void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode);
+LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar);
+void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCoreValueConstantGlobalAlias Global Aliases
+ *
+ * This group contains function that operate on global alias values.
+ *
+ * @see llvm::GlobalAlias
+ *
+ * @{
+ */
+LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee,
+ const char *Name);
+
+/**
+ * Obtain a GlobalAlias value from a Module by its name.
+ *
+ * The returned value corresponds to a llvm::GlobalAlias value.
+ *
+ * @see llvm::Module::getNamedAlias()
+ */
+LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M,
+ const char *Name, size_t NameLen);
+
+/**
+ * Obtain an iterator to the first GlobalAlias in a Module.
+ *
+ * @see llvm::Module::alias_begin()
+ */
+LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M);
+
+/**
+ * Obtain an iterator to the last GlobalAlias in a Module.
+ *
+ * @see llvm::Module::alias_end()
+ */
+LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M);
+
+/**
+ * Advance a GlobalAlias iterator to the next GlobalAlias.
+ *
+ * Returns NULL if the iterator was already at the end and there are no more
+ * global aliases.
+ */
+LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA);
+
+/**
+ * Decrement a GlobalAlias iterator to the previous GlobalAlias.
+ *
+ * Returns NULL if the iterator was already at the beginning and there are
+ * no previous global aliases.
+ */
+LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA);
+
+/**
+ * Retrieve the target value of an alias.
+ */
+LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias);
+
+/**
+ * Set the target value of an alias.
+ */
+void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueFunction Function values
+ *
+ * Functions in this group operate on LLVMValueRef instances that
+ * correspond to llvm::Function instances.
+ *
+ * @see llvm::Function
+ *
+ * @{
+ */
+
+/**
+ * Remove a function from its containing module and deletes it.
+ *
+ * @see llvm::Function::eraseFromParent()
+ */
+void LLVMDeleteFunction(LLVMValueRef Fn);
+
+/**
+ * Check whether the given function has a personality function.
+ *
+ * @see llvm::Function::hasPersonalityFn()
+ */
+LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn);
+
+/**
+ * Obtain the personality function attached to the function.
+ *
+ * @see llvm::Function::getPersonalityFn()
+ */
+LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn);
+
+/**
+ * Set the personality function attached to the function.
+ *
+ * @see llvm::Function::setPersonalityFn()
+ */
+void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn);
+
+/**
+ * Obtain the intrinsic ID number which matches the given function name.
+ *
+ * @see llvm::Function::lookupIntrinsicID()
+ */
+unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen);
+
+/**
+ * Obtain the ID number from a function instance.
+ *
+ * @see llvm::Function::getIntrinsicID()
+ */
+unsigned LLVMGetIntrinsicID(LLVMValueRef Fn);
+
+/**
+ * Create or insert the declaration of an intrinsic. For overloaded intrinsics,
+ * parameter types must be provided to uniquely identify an overload.
+ *
+ * @see llvm::Intrinsic::getDeclaration()
+ */
+LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod,
+ unsigned ID,
+ LLVMTypeRef *ParamTypes,
+ size_t ParamCount);
+
+/**
+ * Retrieves the type of an intrinsic. For overloaded intrinsics, parameter
+ * types must be provided to uniquely identify an overload.
+ *
+ * @see llvm::Intrinsic::getType()
+ */
+LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID,
+ LLVMTypeRef *ParamTypes, size_t ParamCount);
+
+/**
+ * Retrieves the name of an intrinsic.
+ *
+ * @see llvm::Intrinsic::getName()
+ */
+const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength);
+
+/**
+ * Copies the name of an overloaded intrinsic identified by a given list of
+ * parameter types.
+ *
+ * Unlike LLVMIntrinsicGetName, the caller is responsible for freeing the
+ * returned string.
+ *
+ * @see llvm::Intrinsic::getName()
+ */
+const char *LLVMIntrinsicCopyOverloadedName(unsigned ID,
+ LLVMTypeRef *ParamTypes,
+ size_t ParamCount,
+ size_t *NameLength);
+
+/**
+ * Obtain if the intrinsic identified by the given ID is overloaded.
+ *
+ * @see llvm::Intrinsic::isOverloaded()
+ */
+LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID);
+
+/**
+ * Obtain the calling function of a function.
+ *
+ * The returned value corresponds to the LLVMCallConv enumeration.
+ *
+ * @see llvm::Function::getCallingConv()
+ */
+unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn);
+
+/**
+ * Set the calling convention of a function.
+ *
+ * @see llvm::Function::setCallingConv()
+ *
+ * @param Fn Function to operate on
+ * @param CC LLVMCallConv to set calling convention to
+ */
+void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC);
+
+/**
+ * Obtain the name of the garbage collector to use during code
+ * generation.
+ *
+ * @see llvm::Function::getGC()
+ */
+const char *LLVMGetGC(LLVMValueRef Fn);
+
+/**
+ * Define the garbage collector to use during code generation.
+ *
+ * @see llvm::Function::setGC()
+ */
+void LLVMSetGC(LLVMValueRef Fn, const char *Name);
+
+/**
+ * Add an attribute to a function.
+ *
+ * @see llvm::Function::addAttribute()
+ */
+void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
+ LLVMAttributeRef A);
+unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx);
+void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
+ LLVMAttributeRef *Attrs);
+LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F,
+ LLVMAttributeIndex Idx,
+ unsigned KindID);
+LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F,
+ LLVMAttributeIndex Idx,
+ const char *K, unsigned KLen);
+void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
+ unsigned KindID);
+void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx,
+ const char *K, unsigned KLen);
+
+/**
+ * Add a target-dependent attribute to a function
+ * @see llvm::AttrBuilder::addAttribute()
+ */
+void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A,
+ const char *V);
+
+/**
+ * @defgroup LLVMCCoreValueFunctionParameters Function Parameters
+ *
+ * Functions in this group relate to arguments/parameters on functions.
+ *
+ * Functions in this group expect LLVMValueRef instances that correspond
+ * to llvm::Function instances.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the number of parameters in a function.
+ *
+ * @see llvm::Function::arg_size()
+ */
+unsigned LLVMCountParams(LLVMValueRef Fn);
+
+/**
+ * Obtain the parameters in a function.
+ *
+ * The takes a pointer to a pre-allocated array of LLVMValueRef that is
+ * at least LLVMCountParams() long. This array will be filled with
+ * LLVMValueRef instances which correspond to the parameters the
+ * function receives. Each LLVMValueRef corresponds to a llvm::Argument
+ * instance.
+ *
+ * @see llvm::Function::arg_begin()
+ */
+void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params);
+
+/**
+ * Obtain the parameter at the specified index.
+ *
+ * Parameters are indexed from 0.
+ *
+ * @see llvm::Function::arg_begin()
+ */
+LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index);
+
+/**
+ * Obtain the function to which this argument belongs.
+ *
+ * Unlike other functions in this group, this one takes an LLVMValueRef
+ * that corresponds to a llvm::Attribute.
+ *
+ * The returned LLVMValueRef is the llvm::Function to which this
+ * argument belongs.
+ */
+LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst);
+
+/**
+ * Obtain the first parameter to a function.
+ *
+ * @see llvm::Function::arg_begin()
+ */
+LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn);
+
+/**
+ * Obtain the last parameter to a function.
+ *
+ * @see llvm::Function::arg_end()
+ */
+LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn);
+
+/**
+ * Obtain the next parameter to a function.
+ *
+ * This takes an LLVMValueRef obtained from LLVMGetFirstParam() (which is
+ * actually a wrapped iterator) and obtains the next parameter from the
+ * underlying iterator.
+ */
+LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg);
+
+/**
+ * Obtain the previous parameter to a function.
+ *
+ * This is the opposite of LLVMGetNextParam().
+ */
+LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg);
+
+/**
+ * Set the alignment for a function parameter.
+ *
+ * @see llvm::Argument::addAttr()
+ * @see llvm::AttrBuilder::addAlignmentAttr()
+ */
+void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueGlobalIFunc IFuncs
+ *
+ * Functions in this group relate to indirect functions.
+ *
+ * Functions in this group expect LLVMValueRef instances that correspond
+ * to llvm::GlobalIFunc instances.
+ *
+ * @{
+ */
+
+/**
+ * Add a global indirect function to a module under a specified name.
+ *
+ * @see llvm::GlobalIFunc::create()
+ */
+LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M,
+ const char *Name, size_t NameLen,
+ LLVMTypeRef Ty, unsigned AddrSpace,
+ LLVMValueRef Resolver);
+
+/**
+ * Obtain a GlobalIFunc value from a Module by its name.
+ *
+ * The returned value corresponds to a llvm::GlobalIFunc value.
+ *
+ * @see llvm::Module::getNamedIFunc()
+ */
+LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M,
+ const char *Name, size_t NameLen);
+
+/**
+ * Obtain an iterator to the first GlobalIFunc in a Module.
+ *
+ * @see llvm::Module::ifunc_begin()
+ */
+LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M);
+
+/**
+ * Obtain an iterator to the last GlobalIFunc in a Module.
+ *
+ * @see llvm::Module::ifunc_end()
+ */
+LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M);
+
+/**
+ * Advance a GlobalIFunc iterator to the next GlobalIFunc.
+ *
+ * Returns NULL if the iterator was already at the end and there are no more
+ * global aliases.
+ */
+LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc);
+
+/**
+ * Decrement a GlobalIFunc iterator to the previous GlobalIFunc.
+ *
+ * Returns NULL if the iterator was already at the beginning and there are
+ * no previous global aliases.
+ */
+LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc);
+
+/**
+ * Retrieves the resolver function associated with this indirect function, or
+ * NULL if it doesn't not exist.
+ *
+ * @see llvm::GlobalIFunc::getResolver()
+ */
+LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc);
+
+/**
+ * Sets the resolver function associated with this indirect function.
+ *
+ * @see llvm::GlobalIFunc::setResolver()
+ */
+void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver);
+
+/**
+ * Remove a global indirect function from its parent module and delete it.
+ *
+ * @see llvm::GlobalIFunc::eraseFromParent()
+ */
+void LLVMEraseGlobalIFunc(LLVMValueRef IFunc);
+
+/**
+ * Remove a global indirect function from its parent module.
+ *
+ * This unlinks the global indirect function from its containing module but
+ * keeps it alive.
+ *
+ * @see llvm::GlobalIFunc::removeFromParent()
+ */
+void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueMetadata Metadata
+ *
+ * @{
+ */
+
+/**
+ * Create an MDString value from a given string value.
+ *
+ * The MDString value does not take ownership of the given string, it remains
+ * the responsibility of the caller to free it.
+ *
+ * @see llvm::MDString::get()
+ */
+LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str,
+ size_t SLen);
+
+/**
+ * Create an MDNode value with the given array of operands.
+ *
+ * @see llvm::MDNode::get()
+ */
+LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs,
+ size_t Count);
+
+/**
+ * Obtain a Metadata as a Value.
+ */
+LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD);
+
+/**
+ * Obtain a Value as a Metadata.
+ */
+LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val);
+
+/**
+ * Obtain the underlying string from a MDString value.
+ *
+ * @param V Instance to obtain string from.
+ * @param Length Memory address which will hold length of returned string.
+ * @return String data in MDString.
+ */
+const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length);
+
+/**
+ * Obtain the number of operands from an MDNode value.
+ *
+ * @param V MDNode to get number of operands from.
+ * @return Number of operands of the MDNode.
+ */
+unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V);
+
+/**
+ * Obtain the given MDNode's operands.
+ *
+ * The passed LLVMValueRef pointer should point to enough memory to hold all of
+ * the operands of the given MDNode (see LLVMGetMDNodeNumOperands) as
+ * LLVMValueRefs. This memory will be populated with the LLVMValueRefs of the
+ * MDNode's operands.
+ *
+ * @param V MDNode to get the operands from.
+ * @param Dest Destination array for operands.
+ */
+void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest);
+
+/** Deprecated: Use LLVMMDStringInContext2 instead. */
+LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str,
+ unsigned SLen);
+/** Deprecated: Use LLVMMDStringInContext2 instead. */
+LLVMValueRef LLVMMDString(const char *Str, unsigned SLen);
+/** Deprecated: Use LLVMMDNodeInContext2 instead. */
+LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals,
+ unsigned Count);
+/** Deprecated: Use LLVMMDNodeInContext2 instead. */
+LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueBasicBlock Basic Block
+ *
+ * A basic block represents a single entry single exit section of code.
+ * Basic blocks contain a list of instructions which form the body of
+ * the block.
+ *
+ * Basic blocks belong to functions. They have the type of label.
+ *
+ * Basic blocks are themselves values. However, the C API models them as
+ * LLVMBasicBlockRef.
+ *
+ * @see llvm::BasicBlock
+ *
+ * @{
+ */
+
+/**
+ * Convert a basic block instance to a value type.
+ */
+LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB);
+
+/**
+ * Determine whether an LLVMValueRef is itself a basic block.
+ */
+LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val);
+
+/**
+ * Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
+ */
+LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val);
+
+/**
+ * Obtain the string name of a basic block.
+ */
+const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB);
+
+/**
+ * Obtain the function to which a basic block belongs.
+ *
+ * @see llvm::BasicBlock::getParent()
+ */
+LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB);
+
+/**
+ * Obtain the terminator instruction for a basic block.
+ *
+ * If the basic block does not have a terminator (it is not well-formed
+ * if it doesn't), then NULL is returned.
+ *
+ * The returned LLVMValueRef corresponds to an llvm::Instruction.
+ *
+ * @see llvm::BasicBlock::getTerminator()
+ */
+LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB);
+
+/**
+ * Obtain the number of basic blocks in a function.
+ *
+ * @param Fn Function value to operate on.
+ */
+unsigned LLVMCountBasicBlocks(LLVMValueRef Fn);
+
+/**
+ * Obtain all of the basic blocks in a function.
+ *
+ * This operates on a function value. The BasicBlocks parameter is a
+ * pointer to a pre-allocated array of LLVMBasicBlockRef of at least
+ * LLVMCountBasicBlocks() in length. This array is populated with
+ * LLVMBasicBlockRef instances.
+ */
+void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks);
+
+/**
+ * Obtain the first basic block in a function.
+ *
+ * The returned basic block can be used as an iterator. You will likely
+ * eventually call into LLVMGetNextBasicBlock() with it.
+ *
+ * @see llvm::Function::begin()
+ */
+LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn);
+
+/**
+ * Obtain the last basic block in a function.
+ *
+ * @see llvm::Function::end()
+ */
+LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn);
+
+/**
+ * Advance a basic block iterator.
+ */
+LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB);
+
+/**
+ * Go backwards in a basic block iterator.
+ */
+LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB);
+
+/**
+ * Obtain the basic block that corresponds to the entry point of a
+ * function.
+ *
+ * @see llvm::Function::getEntryBlock()
+ */
+LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn);
+
+/**
+ * Insert the given basic block after the insertion point of the given builder.
+ *
+ * The insertion point must be valid.
+ *
+ * @see llvm::Function::BasicBlockListType::insertAfter()
+ */
+void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder,
+ LLVMBasicBlockRef BB);
+
+/**
+ * Append the given basic block to the basic block list of the given function.
+ *
+ * @see llvm::Function::BasicBlockListType::push_back()
+ */
+void LLVMAppendExistingBasicBlock(LLVMValueRef Fn,
+ LLVMBasicBlockRef BB);
+
+/**
+ * Create a new basic block without inserting it into a function.
+ *
+ * @see llvm::BasicBlock::Create()
+ */
+LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C,
+ const char *Name);
+
+/**
+ * Append a basic block to the end of a function.
+ *
+ * @see llvm::BasicBlock::Create()
+ */
+LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C,
+ LLVMValueRef Fn,
+ const char *Name);
+
+/**
+ * Append a basic block to the end of a function using the global
+ * context.
+ *
+ * @see llvm::BasicBlock::Create()
+ */
+LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name);
+
+/**
+ * Insert a basic block in a function before another basic block.
+ *
+ * The function to add to is determined by the function of the
+ * passed basic block.
+ *
+ * @see llvm::BasicBlock::Create()
+ */
+LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C,
+ LLVMBasicBlockRef BB,
+ const char *Name);
+
+/**
+ * Insert a basic block in a function using the global context.
+ *
+ * @see llvm::BasicBlock::Create()
+ */
+LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
+ const char *Name);
+
+/**
+ * Remove a basic block from a function and delete it.
+ *
+ * This deletes the basic block from its containing function and deletes
+ * the basic block itself.
+ *
+ * @see llvm::BasicBlock::eraseFromParent()
+ */
+void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
+
+/**
+ * Remove a basic block from a function.
+ *
+ * This deletes the basic block from its containing function but keep
+ * the basic block alive.
+ *
+ * @see llvm::BasicBlock::removeFromParent()
+ */
+void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB);
+
+/**
+ * Move a basic block to before another one.
+ *
+ * @see llvm::BasicBlock::moveBefore()
+ */
+void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
+
+/**
+ * Move a basic block to after another one.
+ *
+ * @see llvm::BasicBlock::moveAfter()
+ */
+void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos);
+
+/**
+ * Obtain the first instruction in a basic block.
+ *
+ * The returned LLVMValueRef corresponds to a llvm::Instruction
+ * instance.
+ */
+LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB);
+
+/**
+ * Obtain the last instruction in a basic block.
+ *
+ * The returned LLVMValueRef corresponds to an LLVM:Instruction.
+ */
+LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstruction Instructions
+ *
+ * Functions in this group relate to the inspection and manipulation of
+ * individual instructions.
+ *
+ * In the C++ API, an instruction is modeled by llvm::Instruction. This
+ * class has a large number of descendents. llvm::Instruction is a
+ * llvm::Value and in the C API, instructions are modeled by
+ * LLVMValueRef.
+ *
+ * This group also contains sub-groups which operate on specific
+ * llvm::Instruction types, e.g. llvm::CallInst.
+ *
+ * @{
+ */
+
+/**
+ * Determine whether an instruction has any metadata attached.
+ */
+int LLVMHasMetadata(LLVMValueRef Val);
+
+/**
+ * Return metadata associated with an instruction value.
+ */
+LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID);
+
+/**
+ * Set metadata associated with an instruction value.
+ */
+void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node);
+
+/**
+ * Returns the metadata associated with an instruction value, but filters out
+ * all the debug locations.
+ *
+ * @see llvm::Instruction::getAllMetadataOtherThanDebugLoc()
+ */
+LLVMValueMetadataEntry *
+LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr,
+ size_t *NumEntries);
+
+/**
+ * Obtain the basic block to which an instruction belongs.
+ *
+ * @see llvm::Instruction::getParent()
+ */
+LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst);
+
+/**
+ * Obtain the instruction that occurs after the one specified.
+ *
+ * The next instruction will be from the same basic block.
+ *
+ * If this is the last instruction in a basic block, NULL will be
+ * returned.
+ */
+LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
+
+/**
+ * Obtain the instruction that occurred before this one.
+ *
+ * If the instruction is the first instruction in a basic block, NULL
+ * will be returned.
+ */
+LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
+
+/**
+ * Remove and delete an instruction.
+ *
+ * The instruction specified is removed from its containing building
+ * block but is kept alive.
+ *
+ * @see llvm::Instruction::removeFromParent()
+ */
+void LLVMInstructionRemoveFromParent(LLVMValueRef Inst);
+
+/**
+ * Remove and delete an instruction.
+ *
+ * The instruction specified is removed from its containing building
+ * block and then deleted.
+ *
+ * @see llvm::Instruction::eraseFromParent()
+ */
+void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
+
+/**
+ * Obtain the code opcode for an individual instruction.
+ *
+ * @see llvm::Instruction::getOpCode()
+ */
+LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst);
+
+/**
+ * Obtain the predicate of an instruction.
+ *
+ * This is only valid for instructions that correspond to llvm::ICmpInst
+ * or llvm::ConstantExpr whose opcode is llvm::Instruction::ICmp.
+ *
+ * @see llvm::ICmpInst::getPredicate()
+ */
+LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst);
+
+/**
+ * Obtain the float predicate of an instruction.
+ *
+ * This is only valid for instructions that correspond to llvm::FCmpInst
+ * or llvm::ConstantExpr whose opcode is llvm::Instruction::FCmp.
+ *
+ * @see llvm::FCmpInst::getPredicate()
+ */
+LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst);
+
+/**
+ * Create a copy of 'this' instruction that is identical in all ways
+ * except the following:
+ * * The instruction has no parent
+ * * The instruction has no name
+ *
+ * @see llvm::Instruction::clone()
+ */
+LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst);
+
+/**
+ * Determine whether an instruction is a terminator. This routine is named to
+ * be compatible with historical functions that did this by querying the
+ * underlying C++ type.
+ *
+ * @see llvm::Instruction::isTerminator()
+ */
+LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst);
+
+/**
+ * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations
+ *
+ * Functions in this group apply to instructions that refer to call
+ * sites and invocations. These correspond to C++ types in the
+ * llvm::CallInst class tree.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the argument count for a call instruction.
+ *
+ * This expects an LLVMValueRef that corresponds to a llvm::CallInst,
+ * llvm::InvokeInst, or llvm:FuncletPadInst.
+ *
+ * @see llvm::CallInst::getNumArgOperands()
+ * @see llvm::InvokeInst::getNumArgOperands()
+ * @see llvm::FuncletPadInst::getNumArgOperands()
+ */
+unsigned LLVMGetNumArgOperands(LLVMValueRef Instr);
+
+/**
+ * Set the calling convention for a call instruction.
+ *
+ * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
+ * llvm::InvokeInst.
+ *
+ * @see llvm::CallInst::setCallingConv()
+ * @see llvm::InvokeInst::setCallingConv()
+ */
+void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
+
+/**
+ * Obtain the calling convention for a call instruction.
+ *
+ * This is the opposite of LLVMSetInstructionCallConv(). Reads its
+ * usage.
+ *
+ * @see LLVMSetInstructionCallConv()
+ */
+unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
+
+void LLVMSetInstrParamAlignment(LLVMValueRef Instr, unsigned index,
+ unsigned Align);
+
+void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
+ LLVMAttributeRef A);
+unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx);
+void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx,
+ LLVMAttributeRef *Attrs);
+LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C,
+ LLVMAttributeIndex Idx,
+ unsigned KindID);
+LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C,
+ LLVMAttributeIndex Idx,
+ const char *K, unsigned KLen);
+void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
+ unsigned KindID);
+void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx,
+ const char *K, unsigned KLen);
+
+/**
+ * Obtain the function type called by this instruction.
+ *
+ * @see llvm::CallBase::getFunctionType()
+ */
+LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C);
+
+/**
+ * Obtain the pointer to the function invoked by this instruction.
+ *
+ * This expects an LLVMValueRef that corresponds to a llvm::CallInst or
+ * llvm::InvokeInst.
+ *
+ * @see llvm::CallInst::getCalledOperand()
+ * @see llvm::InvokeInst::getCalledOperand()
+ */
+LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr);
+
+/**
+ * Obtain whether a call instruction is a tail call.
+ *
+ * This only works on llvm::CallInst instructions.
+ *
+ * @see llvm::CallInst::isTailCall()
+ */
+LLVMBool LLVMIsTailCall(LLVMValueRef CallInst);
+
+/**
+ * Set whether a call instruction is a tail call.
+ *
+ * This only works on llvm::CallInst instructions.
+ *
+ * @see llvm::CallInst::setTailCall()
+ */
+void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall);
+
+/**
+ * Return the normal destination basic block.
+ *
+ * This only works on llvm::InvokeInst instructions.
+ *
+ * @see llvm::InvokeInst::getNormalDest()
+ */
+LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst);
+
+/**
+ * Return the unwind destination basic block.
+ *
+ * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
+ * llvm::CatchSwitchInst instructions.
+ *
+ * @see llvm::InvokeInst::getUnwindDest()
+ * @see llvm::CleanupReturnInst::getUnwindDest()
+ * @see llvm::CatchSwitchInst::getUnwindDest()
+ */
+LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst);
+
+/**
+ * Set the normal destination basic block.
+ *
+ * This only works on llvm::InvokeInst instructions.
+ *
+ * @see llvm::InvokeInst::setNormalDest()
+ */
+void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
+
+/**
+ * Set the unwind destination basic block.
+ *
+ * Works on llvm::InvokeInst, llvm::CleanupReturnInst, and
+ * llvm::CatchSwitchInst instructions.
+ *
+ * @see llvm::InvokeInst::setUnwindDest()
+ * @see llvm::CleanupReturnInst::setUnwindDest()
+ * @see llvm::CatchSwitchInst::setUnwindDest()
+ */
+void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstructionTerminator Terminators
+ *
+ * Functions in this group only apply to instructions for which
+ * LLVMIsATerminatorInst returns true.
+ *
+ * @{
+ */
+
+/**
+ * Return the number of successors that this terminator has.
+ *
+ * @see llvm::Instruction::getNumSuccessors
+ */
+unsigned LLVMGetNumSuccessors(LLVMValueRef Term);
+
+/**
+ * Return the specified successor.
+ *
+ * @see llvm::Instruction::getSuccessor
+ */
+LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i);
+
+/**
+ * Update the specified successor to point at the provided block.
+ *
+ * @see llvm::Instruction::setSuccessor
+ */
+void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block);
+
+/**
+ * Return if a branch is conditional.
+ *
+ * This only works on llvm::BranchInst instructions.
+ *
+ * @see llvm::BranchInst::isConditional
+ */
+LLVMBool LLVMIsConditional(LLVMValueRef Branch);
+
+/**
+ * Return the condition of a branch instruction.
+ *
+ * This only works on llvm::BranchInst instructions.
+ *
+ * @see llvm::BranchInst::getCondition
+ */
+LLVMValueRef LLVMGetCondition(LLVMValueRef Branch);
+
+/**
+ * Set the condition of a branch instruction.
+ *
+ * This only works on llvm::BranchInst instructions.
+ *
+ * @see llvm::BranchInst::setCondition
+ */
+void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond);
+
+/**
+ * Obtain the default destination basic block of a switch instruction.
+ *
+ * This only works on llvm::SwitchInst instructions.
+ *
+ * @see llvm::SwitchInst::getDefaultDest()
+ */
+LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstructionAlloca Allocas
+ *
+ * Functions in this group only apply to instructions that map to
+ * llvm::AllocaInst instances.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the type that is being allocated by the alloca instruction.
+ */
+LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstructionGetElementPointer GEPs
+ *
+ * Functions in this group only apply to instructions that map to
+ * llvm::GetElementPtrInst instances.
+ *
+ * @{
+ */
+
+/**
+ * Check whether the given GEP instruction is inbounds.
+ */
+LLVMBool LLVMIsInBounds(LLVMValueRef GEP);
+
+/**
+ * Set the given GEP instruction to be inbounds or not.
+ */
+void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstructionPHINode PHI Nodes
+ *
+ * Functions in this group only apply to instructions that map to
+ * llvm::PHINode instances.
+ *
+ * @{
+ */
+
+/**
+ * Add an incoming value to the end of a PHI list.
+ */
+void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
+ LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
+
+/**
+ * Obtain the number of incoming basic blocks to a PHI node.
+ */
+unsigned LLVMCountIncoming(LLVMValueRef PhiNode);
+
+/**
+ * Obtain an incoming value to a PHI node as an LLVMValueRef.
+ */
+LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index);
+
+/**
+ * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
+ */
+LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreValueInstructionExtractValue ExtractValue
+ * @defgroup LLVMCCoreValueInstructionInsertValue InsertValue
+ *
+ * Functions in this group only apply to instructions that map to
+ * llvm::ExtractValue and llvm::InsertValue instances.
+ *
+ * @{
+ */
+
+/**
+ * Obtain the number of indices.
+ * NB: This also works on GEP.
+ */
+unsigned LLVMGetNumIndices(LLVMValueRef Inst);
+
+/**
+ * Obtain the indices as an array.
+ */
+const unsigned *LLVMGetIndices(LLVMValueRef Inst);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreInstructionBuilder Instruction Builders
+ *
+ * An instruction builder represents a point within a basic block and is
+ * the exclusive means of building instructions using the C interface.
+ *
+ * @{
+ */
+
+LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C);
+LLVMBuilderRef LLVMCreateBuilder(void);
+void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block,
+ LLVMValueRef Instr);
+void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr);
+void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block);
+LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder);
+void LLVMClearInsertionPosition(LLVMBuilderRef Builder);
+void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr);
+void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr,
+ const char *Name);
+void LLVMDisposeBuilder(LLVMBuilderRef Builder);
+
+/* Metadata */
+
+/**
+ * Get location information used by debugging information.
+ *
+ * @see llvm::IRBuilder::getCurrentDebugLocation()
+ */
+LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder);
+
+/**
+ * Set location information used by debugging information.
+ *
+ * To clear the location metadata of the given instruction, pass NULL to \p Loc.
+ *
+ * @see llvm::IRBuilder::SetCurrentDebugLocation()
+ */
+void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc);
+
+/**
+ * Attempts to set the debug location for the given instruction using the
+ * current debug location for the given builder. If the builder has no current
+ * debug location, this function is a no-op.
+ *
+ * @see llvm::IRBuilder::SetInstDebugLocation()
+ */
+void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst);
+
+/**
+ * Get the dafult floating-point math metadata for a given builder.
+ *
+ * @see llvm::IRBuilder::getDefaultFPMathTag()
+ */
+LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder);
+
+/**
+ * Set the default floating-point math metadata for the given builder.
+ *
+ * To clear the metadata, pass NULL to \p FPMathTag.
+ *
+ * @see llvm::IRBuilder::setDefaultFPMathTag()
+ */
+void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder,
+ LLVMMetadataRef FPMathTag);
+
+/**
+ * Deprecated: Passing the NULL location will crash.
+ * Use LLVMGetCurrentDebugLocation2 instead.
+ */
+void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L);
+/**
+ * Deprecated: Returning the NULL location will crash.
+ * Use LLVMGetCurrentDebugLocation2 instead.
+ */
+LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder);
+
+/* Terminators */
+LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef);
+LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V);
+LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, LLVMValueRef *RetVals,
+ unsigned N);
+LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest);
+LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If,
+ LLVMBasicBlockRef Then, LLVMBasicBlockRef Else);
+LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V,
+ LLVMBasicBlockRef Else, unsigned NumCases);
+LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr,
+ unsigned NumDests);
+// LLVMBuildInvoke is deprecated in favor of LLVMBuildInvoke2, in preparation
+// for opaque pointer types.
+LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
+ LLVMValueRef *Args, unsigned NumArgs,
+ LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
+ const char *Name);
+LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn,
+ LLVMValueRef *Args, unsigned NumArgs,
+ LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
+ const char *Name);
+LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
+
+/* Exception Handling */
+LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
+LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
+ LLVMValueRef PersFn, unsigned NumClauses,
+ const char *Name);
+LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
+ LLVMBasicBlockRef BB);
+LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad,
+ LLVMBasicBlockRef BB);
+LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
+ LLVMValueRef *Args, unsigned NumArgs,
+ const char *Name);
+LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad,
+ LLVMValueRef *Args, unsigned NumArgs,
+ const char *Name);
+LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad,
+ LLVMBasicBlockRef UnwindBB,
+ unsigned NumHandlers, const char *Name);
+
+/* Add a case to the switch instruction */
+void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal,
+ LLVMBasicBlockRef Dest);
+
+/* Add a destination to the indirectbr instruction */
+void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
+
+/* Get the number of clauses on the landingpad instruction */
+unsigned LLVMGetNumClauses(LLVMValueRef LandingPad);
+
+/* Get the value of the clause at index Idx on the landingpad instruction */
+LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx);
+
+/* Add a catch or filter clause to the landingpad instruction */
+void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal);
+
+/* Get the 'cleanup' flag in the landingpad instruction */
+LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad);
+
+/* Set the 'cleanup' flag in the landingpad instruction */
+void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val);
+
+/* Add a destination to the catchswitch instruction */
+void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest);
+
+/* Get the number of handlers on the catchswitch instruction */
+unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch);
+
+/**
+ * Obtain the basic blocks acting as handlers for a catchswitch instruction.
+ *
+ * The Handlers parameter should point to a pre-allocated array of
+ * LLVMBasicBlockRefs at least LLVMGetNumHandlers() large. On return, the
+ * first LLVMGetNumHandlers() entries in the array will be populated
+ * with LLVMBasicBlockRef instances.
+ *
+ * @param CatchSwitch The catchswitch instruction to operate on.
+ * @param Handlers Memory address of an array to be filled with basic blocks.
+ */
+void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers);
+
+/* Funclets */
+
+/* Get the number of funcletpad arguments. */
+LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i);
+
+/* Set a funcletpad argument at the given index. */
+void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value);
+
+/**
+ * Get the parent catchswitch instruction of a catchpad instruction.
+ *
+ * This only works on llvm::CatchPadInst instructions.
+ *
+ * @see llvm::CatchPadInst::getCatchSwitch()
+ */
+LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad);
+
+/**
+ * Set the parent catchswitch instruction of a catchpad instruction.
+ *
+ * This only works on llvm::CatchPadInst instructions.
+ *
+ * @see llvm::CatchPadInst::setCatchSwitch()
+ */
+void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch);
+
+/* Arithmetic */
+LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
+ LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
+LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V,
+ const char *Name);
+LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V,
+ const char *Name);
+LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name);
+LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name);
+
+/* Memory */
+LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
+LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty,
+ LLVMValueRef Val, const char *Name);
+
+/**
+ * Creates and inserts a memset to the specified pointer and the
+ * specified value.
+ *
+ * @see llvm::IRRBuilder::CreateMemSet()
+ */
+LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr,
+ LLVMValueRef Val, LLVMValueRef Len,
+ unsigned Align);
+/**
+ * Creates and inserts a memcpy between the specified pointers.
+ *
+ * @see llvm::IRRBuilder::CreateMemCpy()
+ */
+LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B,
+ LLVMValueRef Dst, unsigned DstAlign,
+ LLVMValueRef Src, unsigned SrcAlign,
+ LLVMValueRef Size);
+/**
+ * Creates and inserts a memmove between the specified pointers.
+ *
+ * @see llvm::IRRBuilder::CreateMemMove()
+ */
+LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B,
+ LLVMValueRef Dst, unsigned DstAlign,
+ LLVMValueRef Src, unsigned SrcAlign,
+ LLVMValueRef Size);
+
+LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
+LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty,
+ LLVMValueRef Val, const char *Name);
+LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal);
+// LLVMBuildLoad is deprecated in favor of LLVMBuildLoad2, in preparation for
+// opaque pointer types.
+LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
+ const char *Name);
+LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty,
+ LLVMValueRef PointerVal, const char *Name);
+LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
+// LLVMBuildGEP, LLVMBuildInBoundsGEP, and LLVMBuildStructGEP are deprecated in
+// favor of LLVMBuild*GEP2, in preparation for opaque pointer types.
+LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
+ LLVMValueRef *Indices, unsigned NumIndices,
+ const char *Name);
+LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
+ LLVMValueRef *Indices, unsigned NumIndices,
+ const char *Name);
+LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
+ unsigned Idx, const char *Name);
+LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
+ LLVMValueRef Pointer, LLVMValueRef *Indices,
+ unsigned NumIndices, const char *Name);
+LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
+ LLVMValueRef Pointer, LLVMValueRef *Indices,
+ unsigned NumIndices, const char *Name);
+LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
+ LLVMValueRef Pointer, unsigned Idx,
+ const char *Name);
+LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
+ const char *Name);
+LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
+ const char *Name);
+LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
+void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
+LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst);
+void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak);
+LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
+void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
+LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst);
+void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp);
+
+/* Casts */
+LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, LLVMBool IsSigned,
+ const char *Name);
+LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef, LLVMValueRef Val,
+ LLVMTypeRef DestTy, const char *Name);
+
+/** Deprecated: This cast is always signed. Use LLVMBuildIntCast2 instead. */
+LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, LLVMValueRef Val, /*Signed cast!*/
+ LLVMTypeRef DestTy, const char *Name);
+
+/* Comparisons */
+LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op,
+ LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op,
+ LLVMValueRef LHS, LLVMValueRef RHS,
+ const char *Name);
+
+/* Miscellaneous instructions */
+LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name);
+// LLVMBuildCall is deprecated in favor of LLVMBuildCall2, in preparation for
+// opaque pointer types.
+LLVMValueRef LLVMBuildCall(LLVMBuilderRef, LLVMValueRef Fn,
+ LLVMValueRef *Args, unsigned NumArgs,
+ const char *Name);
+LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn,
+ LLVMValueRef *Args, unsigned NumArgs,
+ const char *Name);
+LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If,
+ LLVMValueRef Then, LLVMValueRef Else,
+ const char *Name);
+LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, LLVMTypeRef Ty,
+ const char *Name);
+LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, LLVMValueRef VecVal,
+ LLVMValueRef Index, const char *Name);
+LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, LLVMValueRef VecVal,
+ LLVMValueRef EltVal, LLVMValueRef Index,
+ const char *Name);
+LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1,
+ LLVMValueRef V2, LLVMValueRef Mask,
+ const char *Name);
+LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
+ unsigned Index, const char *Name);
+LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, LLVMValueRef AggVal,
+ LLVMValueRef EltVal, unsigned Index,
+ const char *Name);
+LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val,
+ const char *Name);
+
+LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val,
+ const char *Name);
+LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val,
+ const char *Name);
+LLVMValueRef LLVMBuildPtrDiff(LLVMBuilderRef, LLVMValueRef LHS,
+ LLVMValueRef RHS, const char *Name);
+LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering,
+ LLVMBool singleThread, const char *Name);
+LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op,
+ LLVMValueRef PTR, LLVMValueRef Val,
+ LLVMAtomicOrdering ordering,
+ LLVMBool singleThread);
+LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
+ LLVMValueRef Cmp, LLVMValueRef New,
+ LLVMAtomicOrdering SuccessOrdering,
+ LLVMAtomicOrdering FailureOrdering,
+ LLVMBool SingleThread);
+
+/**
+ * Get the number of elements in the mask of a ShuffleVector instruction.
+ */
+unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst);
+
+/**
+ * \returns a constant that specifies that the result of a \c ShuffleVectorInst
+ * is undefined.
+ */
+int LLVMGetUndefMaskElem(void);
+
+/**
+ * Get the mask value at position Elt in the mask of a ShuffleVector
+ * instruction.
+ *
+ * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is undef
+ * at that position.
+ */
+int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt);
+
+LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst);
+void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread);
+
+LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst);
+void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst,
+ LLVMAtomicOrdering Ordering);
+LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst);
+void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst,
+ LLVMAtomicOrdering Ordering);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreModuleProvider Module Providers
+ *
+ * @{
+ */
+
+/**
+ * Changes the type of M so it can be passed to FunctionPassManagers and the
+ * JIT. They take ModuleProviders for historical reasons.
+ */
+LLVMModuleProviderRef
+LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M);
+
+/**
+ * Destroys the module M.
+ */
+void LLVMDisposeModuleProvider(LLVMModuleProviderRef M);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreMemoryBuffers Memory Buffers
+ *
+ * @{
+ */
+
+LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path,
+ LLVMMemoryBufferRef *OutMemBuf,
+ char **OutMessage);
+LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf,
+ char **OutMessage);
+LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData,
+ size_t InputDataLength,
+ const char *BufferName,
+ LLVMBool RequiresNullTerminator);
+LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData,
+ size_t InputDataLength,
+ const char *BufferName);
+const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf);
+size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf);
+void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCorePassRegistry Pass Registry
+ *
+ * @{
+ */
+
+/** Return the global pass registry, for use with initialization functions.
+ @see llvm::PassRegistry::getPassRegistry */
+LLVMPassRegistryRef LLVMGetGlobalPassRegistry(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCorePassManagers Pass Managers
+ *
+ * @{
+ */
+
+/** Constructs a new whole-module pass pipeline. This type of pipeline is
+ suitable for link-time optimization and whole-module transformations.
+ @see llvm::PassManager::PassManager */
+LLVMPassManagerRef LLVMCreatePassManager(void);
+
+/** Constructs a new function-by-function pass pipeline over the module
+ provider. It does not take ownership of the module provider. This type of
+ pipeline is suitable for code generation and JIT compilation tasks.
+ @see llvm::FunctionPassManager::FunctionPassManager */
+LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M);
+
+/** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */
+LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP);
+
+/** Initializes, executes on the provided module, and finalizes all of the
+ passes scheduled in the pass manager. Returns 1 if any of the passes
+ modified the module, 0 otherwise.
+ @see llvm::PassManager::run(Module&) */
+LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M);
+
+/** Initializes all of the function passes scheduled in the function pass
+ manager. Returns 1 if any of the passes modified the module, 0 otherwise.
+ @see llvm::FunctionPassManager::doInitialization */
+LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM);
+
+/** Executes all of the function passes scheduled in the function pass manager
+ on the provided function. Returns 1 if any of the passes modified the
+ function, false otherwise.
+ @see llvm::FunctionPassManager::run(Function&) */
+LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F);
+
+/** Finalizes all of the function passes scheduled in the function pass
+ manager. Returns 1 if any of the passes modified the module, 0 otherwise.
+ @see llvm::FunctionPassManager::doFinalization */
+LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM);
+
+/** Frees the memory of a pass pipeline. For function pipelines, does not free
+ the module provider.
+ @see llvm::PassManagerBase::~PassManagerBase. */
+void LLVMDisposePassManager(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup LLVMCCoreThreading Threading
+ *
+ * Handle the structures needed to make LLVM safe for multithreading.
+ *
+ * @{
+ */
+
+/** Deprecated: Multi-threading can only be enabled/disabled with the compile
+ time define LLVM_ENABLE_THREADS. This function always returns
+ LLVMIsMultithreaded(). */
+LLVMBool LLVMStartMultithreaded(void);
+
+/** Deprecated: Multi-threading can only be enabled/disabled with the compile
+ time define LLVM_ENABLE_THREADS. */
+void LLVMStopMultithreaded(void);
+
+/** Check whether LLVM is executing in thread-safe mode or not.
+ @see llvm::llvm_is_multithreaded */
+LLVMBool LLVMIsMultithreaded(void);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif /* LLVM_C_CORE_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/DataTypes.h b/contrib/libs/llvm12/include/llvm-c/DataTypes.h
index b406f7fc562..45744ad5c8c 100644
--- a/contrib/libs/llvm12/include/llvm-c/DataTypes.h
+++ b/contrib/libs/llvm12/include/llvm-c/DataTypes.h
@@ -1,91 +1,91 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- include/llvm-c/DataTypes.h - Define fixed size types ------*- 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 contains definitions to figure out the size of _HOST_ data types.*|
-|* This file is important because different host OS's define different macros,*|
-|* which makes portability tough. This file exports the following *|
-|* definitions: *|
-|* *|
-|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*|
-|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *|
-|* *|
-|* No library is required when using these functions. *|
-|* *|
-|*===----------------------------------------------------------------------===*/
-
-/* Please leave this file C-compatible. */
-
-#ifndef LLVM_C_DATATYPES_H
-#define LLVM_C_DATATYPES_H
-
-#include <inttypes.h>
-#include <stdint.h>
-
-#ifndef _MSC_VER
-
-#if !defined(UINT32_MAX)
-# error "The standard header <cstdint> is not C++11 compliant. Must #define "\
- "__STDC_LIMIT_MACROS before #including llvm-c/DataTypes.h"
-#endif
-
-#if !defined(UINT32_C)
-# error "The standard header <cstdint> is not C++11 compliant. Must #define "\
- "__STDC_CONSTANT_MACROS before #including llvm-c/DataTypes.h"
-#endif
-
-/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */
-#include <sys/types.h>
-
-#ifdef _AIX
-// GCC is strict about defining large constants: they must have LL modifier.
-#undef INT64_MAX
-#undef INT64_MIN
-#endif
-
-#else /* _MSC_VER */
-#ifdef __cplusplus
-#include <cstddef>
-#include <cstdlib>
-#else
-#include <stddef.h>
-#include <stdlib.h>
-#endif
-#include <sys/types.h>
-
-#if defined(_WIN64)
-typedef signed __int64 ssize_t;
-#else
-typedef signed int ssize_t;
-#endif /* _WIN64 */
-
-#endif /* _MSC_VER */
-
-/* Set defaults for constants which we cannot find. */
-#if !defined(INT64_MAX)
-# define INT64_MAX 9223372036854775807LL
-#endif
-#if !defined(INT64_MIN)
-# define INT64_MIN ((-INT64_MAX)-1)
-#endif
-#if !defined(UINT64_MAX)
-# define UINT64_MAX 0xffffffffffffffffULL
-#endif
-
-#endif /* LLVM_C_DATATYPES_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- include/llvm-c/DataTypes.h - Define fixed size types ------*- 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 contains definitions to figure out the size of _HOST_ data types.*|
+|* This file is important because different host OS's define different macros,*|
+|* which makes portability tough. This file exports the following *|
+|* definitions: *|
+|* *|
+|* [u]int(32|64)_t : typedefs for signed and unsigned 32/64 bit system types*|
+|* [U]INT(8|16|32|64)_(MIN|MAX) : Constants for the min and max values. *|
+|* *|
+|* No library is required when using these functions. *|
+|* *|
+|*===----------------------------------------------------------------------===*/
+
+/* Please leave this file C-compatible. */
+
+#ifndef LLVM_C_DATATYPES_H
+#define LLVM_C_DATATYPES_H
+
+#include <inttypes.h>
+#include <stdint.h>
+
+#ifndef _MSC_VER
+
+#if !defined(UINT32_MAX)
+# error "The standard header <cstdint> is not C++11 compliant. Must #define "\
+ "__STDC_LIMIT_MACROS before #including llvm-c/DataTypes.h"
+#endif
+
+#if !defined(UINT32_C)
+# error "The standard header <cstdint> is not C++11 compliant. Must #define "\
+ "__STDC_CONSTANT_MACROS before #including llvm-c/DataTypes.h"
+#endif
+
+/* Note that <inttypes.h> includes <stdint.h>, if this is a C99 system. */
+#include <sys/types.h>
+
+#ifdef _AIX
+// GCC is strict about defining large constants: they must have LL modifier.
+#undef INT64_MAX
+#undef INT64_MIN
+#endif
+
+#else /* _MSC_VER */
+#ifdef __cplusplus
+#include <cstddef>
+#include <cstdlib>
+#else
+#include <stddef.h>
+#include <stdlib.h>
+#endif
+#include <sys/types.h>
+
+#if defined(_WIN64)
+typedef signed __int64 ssize_t;
+#else
+typedef signed int ssize_t;
+#endif /* _WIN64 */
+
+#endif /* _MSC_VER */
+
+/* Set defaults for constants which we cannot find. */
+#if !defined(INT64_MAX)
+# define INT64_MAX 9223372036854775807LL
+#endif
+#if !defined(INT64_MIN)
+# define INT64_MIN ((-INT64_MAX)-1)
+#endif
+#if !defined(UINT64_MAX)
+# define UINT64_MAX 0xffffffffffffffffULL
+#endif
+
+#endif /* LLVM_C_DATATYPES_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/DebugInfo.h b/contrib/libs/llvm12/include/llvm-c/DebugInfo.h
index d4382ec4fb2..e0a82729a6f 100644
--- a/contrib/libs/llvm12/include/llvm-c/DebugInfo.h
+++ b/contrib/libs/llvm12/include/llvm-c/DebugInfo.h
@@ -1,1375 +1,1375 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-//===------------ DebugInfo.h - LLVM C API Debug Info API -----------------===//
-//
-// 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 declares the C API endpoints for generating DWARF Debug Info
-///
-/// Note: This interface is experimental. It is *NOT* stable, and may be
-/// changed without warning.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_C_DEBUGINFO_H
-#define LLVM_C_DEBUGINFO_H
-
-#include "llvm-c/Core.h"
-#include "llvm-c/ExternC.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * Debug info flags.
- */
-typedef enum {
- LLVMDIFlagZero = 0,
- LLVMDIFlagPrivate = 1,
- LLVMDIFlagProtected = 2,
- LLVMDIFlagPublic = 3,
- LLVMDIFlagFwdDecl = 1 << 2,
- LLVMDIFlagAppleBlock = 1 << 3,
- LLVMDIFlagReservedBit4 = 1 << 4,
- LLVMDIFlagVirtual = 1 << 5,
- LLVMDIFlagArtificial = 1 << 6,
- LLVMDIFlagExplicit = 1 << 7,
- LLVMDIFlagPrototyped = 1 << 8,
- LLVMDIFlagObjcClassComplete = 1 << 9,
- LLVMDIFlagObjectPointer = 1 << 10,
- LLVMDIFlagVector = 1 << 11,
- LLVMDIFlagStaticMember = 1 << 12,
- LLVMDIFlagLValueReference = 1 << 13,
- LLVMDIFlagRValueReference = 1 << 14,
- LLVMDIFlagReserved = 1 << 15,
- LLVMDIFlagSingleInheritance = 1 << 16,
- LLVMDIFlagMultipleInheritance = 2 << 16,
- LLVMDIFlagVirtualInheritance = 3 << 16,
- LLVMDIFlagIntroducedVirtual = 1 << 18,
- LLVMDIFlagBitField = 1 << 19,
- LLVMDIFlagNoReturn = 1 << 20,
- LLVMDIFlagTypePassByValue = 1 << 22,
- LLVMDIFlagTypePassByReference = 1 << 23,
- LLVMDIFlagEnumClass = 1 << 24,
- LLVMDIFlagFixedEnum = LLVMDIFlagEnumClass, // Deprecated.
- LLVMDIFlagThunk = 1 << 25,
- LLVMDIFlagNonTrivial = 1 << 26,
- LLVMDIFlagBigEndian = 1 << 27,
- LLVMDIFlagLittleEndian = 1 << 28,
- LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5),
- LLVMDIFlagAccessibility = LLVMDIFlagPrivate | LLVMDIFlagProtected |
- LLVMDIFlagPublic,
- LLVMDIFlagPtrToMemberRep = LLVMDIFlagSingleInheritance |
- LLVMDIFlagMultipleInheritance |
- LLVMDIFlagVirtualInheritance
-} LLVMDIFlags;
-
-/**
- * Source languages known by DWARF.
- */
-typedef enum {
- LLVMDWARFSourceLanguageC89,
- LLVMDWARFSourceLanguageC,
- LLVMDWARFSourceLanguageAda83,
- LLVMDWARFSourceLanguageC_plus_plus,
- LLVMDWARFSourceLanguageCobol74,
- LLVMDWARFSourceLanguageCobol85,
- LLVMDWARFSourceLanguageFortran77,
- LLVMDWARFSourceLanguageFortran90,
- LLVMDWARFSourceLanguagePascal83,
- LLVMDWARFSourceLanguageModula2,
- // New in DWARF v3:
- LLVMDWARFSourceLanguageJava,
- LLVMDWARFSourceLanguageC99,
- LLVMDWARFSourceLanguageAda95,
- LLVMDWARFSourceLanguageFortran95,
- LLVMDWARFSourceLanguagePLI,
- LLVMDWARFSourceLanguageObjC,
- LLVMDWARFSourceLanguageObjC_plus_plus,
- LLVMDWARFSourceLanguageUPC,
- LLVMDWARFSourceLanguageD,
- // New in DWARF v4:
- LLVMDWARFSourceLanguagePython,
- // New in DWARF v5:
- LLVMDWARFSourceLanguageOpenCL,
- LLVMDWARFSourceLanguageGo,
- LLVMDWARFSourceLanguageModula3,
- LLVMDWARFSourceLanguageHaskell,
- LLVMDWARFSourceLanguageC_plus_plus_03,
- LLVMDWARFSourceLanguageC_plus_plus_11,
- LLVMDWARFSourceLanguageOCaml,
- LLVMDWARFSourceLanguageRust,
- LLVMDWARFSourceLanguageC11,
- LLVMDWARFSourceLanguageSwift,
- LLVMDWARFSourceLanguageJulia,
- LLVMDWARFSourceLanguageDylan,
- LLVMDWARFSourceLanguageC_plus_plus_14,
- LLVMDWARFSourceLanguageFortran03,
- LLVMDWARFSourceLanguageFortran08,
- LLVMDWARFSourceLanguageRenderScript,
- LLVMDWARFSourceLanguageBLISS,
- // Vendor extensions:
- LLVMDWARFSourceLanguageMips_Assembler,
- LLVMDWARFSourceLanguageGOOGLE_RenderScript,
- LLVMDWARFSourceLanguageBORLAND_Delphi
-} LLVMDWARFSourceLanguage;
-
-/**
- * The amount of debug information to emit.
- */
-typedef enum {
- LLVMDWARFEmissionNone = 0,
- LLVMDWARFEmissionFull,
- LLVMDWARFEmissionLineTablesOnly
-} LLVMDWARFEmissionKind;
-
-/**
- * The kind of metadata nodes.
- */
-enum {
- LLVMMDStringMetadataKind,
- LLVMConstantAsMetadataMetadataKind,
- LLVMLocalAsMetadataMetadataKind,
- LLVMDistinctMDOperandPlaceholderMetadataKind,
- LLVMMDTupleMetadataKind,
- LLVMDILocationMetadataKind,
- LLVMDIExpressionMetadataKind,
- LLVMDIGlobalVariableExpressionMetadataKind,
- LLVMGenericDINodeMetadataKind,
- LLVMDISubrangeMetadataKind,
- LLVMDIEnumeratorMetadataKind,
- LLVMDIBasicTypeMetadataKind,
- LLVMDIDerivedTypeMetadataKind,
- LLVMDICompositeTypeMetadataKind,
- LLVMDISubroutineTypeMetadataKind,
- LLVMDIFileMetadataKind,
- LLVMDICompileUnitMetadataKind,
- LLVMDISubprogramMetadataKind,
- LLVMDILexicalBlockMetadataKind,
- LLVMDILexicalBlockFileMetadataKind,
- LLVMDINamespaceMetadataKind,
- LLVMDIModuleMetadataKind,
- LLVMDITemplateTypeParameterMetadataKind,
- LLVMDITemplateValueParameterMetadataKind,
- LLVMDIGlobalVariableMetadataKind,
- LLVMDILocalVariableMetadataKind,
- LLVMDILabelMetadataKind,
- LLVMDIObjCPropertyMetadataKind,
- LLVMDIImportedEntityMetadataKind,
- LLVMDIMacroMetadataKind,
- LLVMDIMacroFileMetadataKind,
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+//===------------ DebugInfo.h - LLVM C API Debug Info API -----------------===//
+//
+// 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 declares the C API endpoints for generating DWARF Debug Info
+///
+/// Note: This interface is experimental. It is *NOT* stable, and may be
+/// changed without warning.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_C_DEBUGINFO_H
+#define LLVM_C_DEBUGINFO_H
+
+#include "llvm-c/Core.h"
+#include "llvm-c/ExternC.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * Debug info flags.
+ */
+typedef enum {
+ LLVMDIFlagZero = 0,
+ LLVMDIFlagPrivate = 1,
+ LLVMDIFlagProtected = 2,
+ LLVMDIFlagPublic = 3,
+ LLVMDIFlagFwdDecl = 1 << 2,
+ LLVMDIFlagAppleBlock = 1 << 3,
+ LLVMDIFlagReservedBit4 = 1 << 4,
+ LLVMDIFlagVirtual = 1 << 5,
+ LLVMDIFlagArtificial = 1 << 6,
+ LLVMDIFlagExplicit = 1 << 7,
+ LLVMDIFlagPrototyped = 1 << 8,
+ LLVMDIFlagObjcClassComplete = 1 << 9,
+ LLVMDIFlagObjectPointer = 1 << 10,
+ LLVMDIFlagVector = 1 << 11,
+ LLVMDIFlagStaticMember = 1 << 12,
+ LLVMDIFlagLValueReference = 1 << 13,
+ LLVMDIFlagRValueReference = 1 << 14,
+ LLVMDIFlagReserved = 1 << 15,
+ LLVMDIFlagSingleInheritance = 1 << 16,
+ LLVMDIFlagMultipleInheritance = 2 << 16,
+ LLVMDIFlagVirtualInheritance = 3 << 16,
+ LLVMDIFlagIntroducedVirtual = 1 << 18,
+ LLVMDIFlagBitField = 1 << 19,
+ LLVMDIFlagNoReturn = 1 << 20,
+ LLVMDIFlagTypePassByValue = 1 << 22,
+ LLVMDIFlagTypePassByReference = 1 << 23,
+ LLVMDIFlagEnumClass = 1 << 24,
+ LLVMDIFlagFixedEnum = LLVMDIFlagEnumClass, // Deprecated.
+ LLVMDIFlagThunk = 1 << 25,
+ LLVMDIFlagNonTrivial = 1 << 26,
+ LLVMDIFlagBigEndian = 1 << 27,
+ LLVMDIFlagLittleEndian = 1 << 28,
+ LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5),
+ LLVMDIFlagAccessibility = LLVMDIFlagPrivate | LLVMDIFlagProtected |
+ LLVMDIFlagPublic,
+ LLVMDIFlagPtrToMemberRep = LLVMDIFlagSingleInheritance |
+ LLVMDIFlagMultipleInheritance |
+ LLVMDIFlagVirtualInheritance
+} LLVMDIFlags;
+
+/**
+ * Source languages known by DWARF.
+ */
+typedef enum {
+ LLVMDWARFSourceLanguageC89,
+ LLVMDWARFSourceLanguageC,
+ LLVMDWARFSourceLanguageAda83,
+ LLVMDWARFSourceLanguageC_plus_plus,
+ LLVMDWARFSourceLanguageCobol74,
+ LLVMDWARFSourceLanguageCobol85,
+ LLVMDWARFSourceLanguageFortran77,
+ LLVMDWARFSourceLanguageFortran90,
+ LLVMDWARFSourceLanguagePascal83,
+ LLVMDWARFSourceLanguageModula2,
+ // New in DWARF v3:
+ LLVMDWARFSourceLanguageJava,
+ LLVMDWARFSourceLanguageC99,
+ LLVMDWARFSourceLanguageAda95,
+ LLVMDWARFSourceLanguageFortran95,
+ LLVMDWARFSourceLanguagePLI,
+ LLVMDWARFSourceLanguageObjC,
+ LLVMDWARFSourceLanguageObjC_plus_plus,
+ LLVMDWARFSourceLanguageUPC,
+ LLVMDWARFSourceLanguageD,
+ // New in DWARF v4:
+ LLVMDWARFSourceLanguagePython,
+ // New in DWARF v5:
+ LLVMDWARFSourceLanguageOpenCL,
+ LLVMDWARFSourceLanguageGo,
+ LLVMDWARFSourceLanguageModula3,
+ LLVMDWARFSourceLanguageHaskell,
+ LLVMDWARFSourceLanguageC_plus_plus_03,
+ LLVMDWARFSourceLanguageC_plus_plus_11,
+ LLVMDWARFSourceLanguageOCaml,
+ LLVMDWARFSourceLanguageRust,
+ LLVMDWARFSourceLanguageC11,
+ LLVMDWARFSourceLanguageSwift,
+ LLVMDWARFSourceLanguageJulia,
+ LLVMDWARFSourceLanguageDylan,
+ LLVMDWARFSourceLanguageC_plus_plus_14,
+ LLVMDWARFSourceLanguageFortran03,
+ LLVMDWARFSourceLanguageFortran08,
+ LLVMDWARFSourceLanguageRenderScript,
+ LLVMDWARFSourceLanguageBLISS,
+ // Vendor extensions:
+ LLVMDWARFSourceLanguageMips_Assembler,
+ LLVMDWARFSourceLanguageGOOGLE_RenderScript,
+ LLVMDWARFSourceLanguageBORLAND_Delphi
+} LLVMDWARFSourceLanguage;
+
+/**
+ * The amount of debug information to emit.
+ */
+typedef enum {
+ LLVMDWARFEmissionNone = 0,
+ LLVMDWARFEmissionFull,
+ LLVMDWARFEmissionLineTablesOnly
+} LLVMDWARFEmissionKind;
+
+/**
+ * The kind of metadata nodes.
+ */
+enum {
+ LLVMMDStringMetadataKind,
+ LLVMConstantAsMetadataMetadataKind,
+ LLVMLocalAsMetadataMetadataKind,
+ LLVMDistinctMDOperandPlaceholderMetadataKind,
+ LLVMMDTupleMetadataKind,
+ LLVMDILocationMetadataKind,
+ LLVMDIExpressionMetadataKind,
+ LLVMDIGlobalVariableExpressionMetadataKind,
+ LLVMGenericDINodeMetadataKind,
+ LLVMDISubrangeMetadataKind,
+ LLVMDIEnumeratorMetadataKind,
+ LLVMDIBasicTypeMetadataKind,
+ LLVMDIDerivedTypeMetadataKind,
+ LLVMDICompositeTypeMetadataKind,
+ LLVMDISubroutineTypeMetadataKind,
+ LLVMDIFileMetadataKind,
+ LLVMDICompileUnitMetadataKind,
+ LLVMDISubprogramMetadataKind,
+ LLVMDILexicalBlockMetadataKind,
+ LLVMDILexicalBlockFileMetadataKind,
+ LLVMDINamespaceMetadataKind,
+ LLVMDIModuleMetadataKind,
+ LLVMDITemplateTypeParameterMetadataKind,
+ LLVMDITemplateValueParameterMetadataKind,
+ LLVMDIGlobalVariableMetadataKind,
+ LLVMDILocalVariableMetadataKind,
+ LLVMDILabelMetadataKind,
+ LLVMDIObjCPropertyMetadataKind,
+ LLVMDIImportedEntityMetadataKind,
+ LLVMDIMacroMetadataKind,
+ LLVMDIMacroFileMetadataKind,
LLVMDICommonBlockMetadataKind,
LLVMDIStringTypeMetadataKind,
LLVMDIGenericSubrangeMetadataKind
-};
-typedef unsigned LLVMMetadataKind;
-
-/**
- * An LLVM DWARF type encoding.
- */
-typedef unsigned LLVMDWARFTypeEncoding;
-
-/**
- * Describes the kind of macro declaration used for LLVMDIBuilderCreateMacro.
- * @see llvm::dwarf::MacinfoRecordType
- * @note Values are from DW_MACINFO_* constants in the DWARF specification.
- */
-typedef enum {
- LLVMDWARFMacinfoRecordTypeDefine = 0x01,
- LLVMDWARFMacinfoRecordTypeMacro = 0x02,
- LLVMDWARFMacinfoRecordTypeStartFile = 0x03,
- LLVMDWARFMacinfoRecordTypeEndFile = 0x04,
- LLVMDWARFMacinfoRecordTypeVendorExt = 0xff
-} LLVMDWARFMacinfoRecordType;
-
-/**
- * The current debug metadata version number.
- */
-unsigned LLVMDebugMetadataVersion(void);
-
-/**
- * The version of debug metadata that's present in the provided \c Module.
- */
-unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module);
-
-/**
- * Strip debug info in the module if it exists.
- * To do this, we remove all calls to the debugger intrinsics and any named
- * metadata for debugging. We also remove debug locations for instructions.
- * Return true if module is modified.
- */
-LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module);
-
-/**
- * Construct a builder for a module, and do not allow for unresolved nodes
- * attached to the module.
- */
-LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M);
-
-/**
- * Construct a builder for a module and collect unresolved nodes attached
- * to the module in order to resolve cycles during a call to
- * \c LLVMDIBuilderFinalize.
- */
-LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M);
-
-/**
- * Deallocates the \c DIBuilder and everything it owns.
- * @note You must call \c LLVMDIBuilderFinalize before this
- */
-void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder);
-
-/**
- * Construct any deferred debug info descriptors.
- */
-void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder);
-
-/**
- * A CompileUnit provides an anchor for all debugging
- * information generated during this instance of compilation.
- * \param Lang Source programming language, eg.
- * \c LLVMDWARFSourceLanguageC99
- * \param FileRef File info.
- * \param Producer Identify the producer of debugging information
- * and code. Usually this is a compiler
- * version string.
- * \param ProducerLen The length of the C string passed to \c Producer.
- * \param isOptimized A boolean flag which indicates whether optimization
- * is enabled or not.
- * \param Flags This string lists command line options. This
- * string is directly embedded in debug info
- * output which may be used by a tool
- * analyzing generated debugging information.
- * \param FlagsLen The length of the C string passed to \c Flags.
- * \param RuntimeVer This indicates runtime version for languages like
- * Objective-C.
- * \param SplitName The name of the file that we'll split debug info
- * out into.
- * \param SplitNameLen The length of the C string passed to \c SplitName.
- * \param Kind The kind of debug information to generate.
- * \param DWOId The DWOId if this is a split skeleton compile unit.
- * \param SplitDebugInlining Whether to emit inline debug info.
- * \param DebugInfoForProfiling Whether to emit extra debug info for
- * profile collection.
- * \param SysRoot The Clang system root (value of -isysroot).
- * \param SysRootLen The length of the C string passed to \c SysRoot.
- * \param SDK The SDK. On Darwin, the last component of the sysroot.
- * \param SDKLen The length of the C string passed to \c SDK.
- */
-LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(
- LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
- LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
- LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
- unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
- LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
- LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen,
- const char *SDK, size_t SDKLen);
-
-/**
- * Create a file descriptor to hold debugging information for a file.
- * \param Builder The \c DIBuilder.
- * \param Filename File name.
- * \param FilenameLen The length of the C string passed to \c Filename.
- * \param Directory Directory.
- * \param DirectoryLen The length of the C string passed to \c Directory.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename,
- size_t FilenameLen, const char *Directory,
- size_t DirectoryLen);
-
-/**
- * Creates a new descriptor for a module with the specified parent scope.
- * \param Builder The \c DIBuilder.
- * \param ParentScope The parent scope containing this module declaration.
- * \param Name Module name.
- * \param NameLen The length of the C string passed to \c Name.
- * \param ConfigMacros A space-separated shell-quoted list of -D macro
- definitions as they would appear on a command line.
- * \param ConfigMacrosLen The length of the C string passed to \c ConfigMacros.
- * \param IncludePath The path to the module map file.
- * \param IncludePathLen The length of the C string passed to \c IncludePath.
- * \param APINotesFile The path to an API notes file for the module.
- * \param APINotesFileLen The length of the C string passed to \c APINotestFile.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope,
- const char *Name, size_t NameLen,
- const char *ConfigMacros, size_t ConfigMacrosLen,
- const char *IncludePath, size_t IncludePathLen,
- const char *APINotesFile, size_t APINotesFileLen);
-
-/**
- * Creates a new descriptor for a namespace with the specified parent scope.
- * \param Builder The \c DIBuilder.
- * \param ParentScope The parent scope containing this module declaration.
- * \param Name NameSpace name.
- * \param NameLen The length of the C string passed to \c Name.
- * \param ExportSymbols Whether or not the namespace exports symbols, e.g.
- * this is true of C++ inline namespaces.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder,
- LLVMMetadataRef ParentScope,
- const char *Name, size_t NameLen,
- LLVMBool ExportSymbols);
-
-/**
- * Create a new descriptor for the specified subprogram.
- * \param Builder The \c DIBuilder.
- * \param Scope Function scope.
- * \param Name Function name.
- * \param NameLen Length of enumeration name.
- * \param LinkageName Mangled function name.
- * \param LinkageNameLen Length of linkage name.
- * \param File File where this variable is defined.
- * \param LineNo Line number.
- * \param Ty Function type.
- * \param IsLocalToUnit True if this function is not externally visible.
- * \param IsDefinition True if this is a function definition.
- * \param ScopeLine Set to the beginning of the scope this starts
- * \param Flags E.g.: \c LLVMDIFlagLValueReference. These flags are
- * used to emit dwarf attributes.
- * \param IsOptimized True if optimization is ON.
- */
-LLVMMetadataRef LLVMDIBuilderCreateFunction(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, const char *LinkageName, size_t LinkageNameLen,
- LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
- LLVMBool IsLocalToUnit, LLVMBool IsDefinition,
- unsigned ScopeLine, LLVMDIFlags Flags, LLVMBool IsOptimized);
-
-/**
- * Create a descriptor for a lexical block with the specified parent context.
- * \param Builder The \c DIBuilder.
- * \param Scope Parent lexical block.
- * \param File Source file.
- * \param Line The line in the source file.
- * \param Column The column in the source file.
- */
-LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope,
- LLVMMetadataRef File, unsigned Line, unsigned Column);
-
-/**
- * Create a descriptor for a lexical block with a new file attached.
- * \param Builder The \c DIBuilder.
- * \param Scope Lexical block.
- * \param File Source file.
- * \param Discriminator DWARF path discriminator value.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- LLVMMetadataRef File,
- unsigned Discriminator);
-
-/**
- * Create a descriptor for an imported namespace. Suitable for e.g. C++
- * using declarations.
- * \param Builder The \c DIBuilder.
- * \param Scope The scope this module is imported into
- * \param File File where the declaration is located.
- * \param Line Line number of the declaration.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- LLVMMetadataRef NS,
- LLVMMetadataRef File,
- unsigned Line);
-
-/**
- * Create a descriptor for an imported module that aliases another
- * imported entity descriptor.
- * \param Builder The \c DIBuilder.
- * \param Scope The scope this module is imported into
- * \param ImportedEntity Previous imported entity to alias.
- * \param File File where the declaration is located.
- * \param Line Line number of the declaration.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateImportedModuleFromAlias(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- LLVMMetadataRef ImportedEntity,
- LLVMMetadataRef File,
- unsigned Line);
-
-/**
- * Create a descriptor for an imported module.
- * \param Builder The \c DIBuilder.
- * \param Scope The scope this module is imported into
- * \param M The module being imported here
- * \param File File where the declaration is located.
- * \param Line Line number of the declaration.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateImportedModuleFromModule(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- LLVMMetadataRef M,
- LLVMMetadataRef File,
- unsigned Line);
-
-/**
- * Create a descriptor for an imported function, type, or variable. Suitable
- * for e.g. FORTRAN-style USE declarations.
- * \param Builder The DIBuilder.
- * \param Scope The scope this module is imported into.
- * \param Decl The declaration (or definition) of a function, type,
- or variable.
- * \param File File where the declaration is located.
- * \param Line Line number of the declaration.
- * \param Name A name that uniquely identifies this imported declaration.
- * \param NameLen The length of the C string passed to \c Name.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateImportedDeclaration(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- LLVMMetadataRef Decl,
- LLVMMetadataRef File,
- unsigned Line,
- const char *Name, size_t NameLen);
-
-/**
- * Creates a new DebugLocation that describes a source location.
- * \param Line The line in the source file.
- * \param Column The column in the source file.
- * \param Scope The scope in which the location resides.
- * \param InlinedAt The scope where this location was inlined, if at all.
- * (optional).
- * \note If the item to which this location is attached cannot be
- * attributed to a source line, pass 0 for the line and column.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
- unsigned Column, LLVMMetadataRef Scope,
- LLVMMetadataRef InlinedAt);
-
-/**
- * Get the line number of this debug location.
- * \param Location The debug location.
- *
- * @see DILocation::getLine()
- */
-unsigned LLVMDILocationGetLine(LLVMMetadataRef Location);
-
-/**
- * Get the column number of this debug location.
- * \param Location The debug location.
- *
- * @see DILocation::getColumn()
- */
-unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location);
-
-/**
- * Get the local scope associated with this debug location.
- * \param Location The debug location.
- *
- * @see DILocation::getScope()
- */
-LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
-
-/**
- * Get the "inline at" location associated with this debug location.
- * \param Location The debug location.
- *
- * @see DILocation::getInlinedAt()
- */
-LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location);
-
-/**
- * Get the metadata of the file associated with a given scope.
- * \param Scope The scope object.
- *
- * @see DIScope::getFile()
- */
-LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope);
-
-/**
- * Get the directory of a given file.
- * \param File The file object.
- * \param Len The length of the returned string.
- *
- * @see DIFile::getDirectory()
- */
-const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len);
-
-/**
- * Get the name of a given file.
- * \param File The file object.
- * \param Len The length of the returned string.
- *
- * @see DIFile::getFilename()
- */
-const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len);
-
-/**
- * Get the source of a given file.
- * \param File The file object.
- * \param Len The length of the returned string.
- *
- * @see DIFile::getSource()
- */
-const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len);
-
-/**
- * Create a type array.
- * \param Builder The DIBuilder.
- * \param Data The type elements.
- * \param NumElements Number of type elements.
- */
-LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder,
- LLVMMetadataRef *Data,
- size_t NumElements);
-
-/**
- * Create subroutine type.
- * \param Builder The DIBuilder.
- * \param File The file in which the subroutine resides.
- * \param ParameterTypes An array of subroutine parameter types. This
- * includes return type at 0th index.
- * \param NumParameterTypes The number of parameter types in \c ParameterTypes
- * \param Flags E.g.: \c LLVMDIFlagLValueReference.
- * These flags are used to emit dwarf attributes.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef File,
- LLVMMetadataRef *ParameterTypes,
- unsigned NumParameterTypes,
- LLVMDIFlags Flags);
-
-/**
- * Create debugging information entry for a macro.
- * @param Builder The DIBuilder.
- * @param ParentMacroFile Macro parent (could be NULL).
- * @param Line Source line number where the macro is defined.
- * @param RecordType DW_MACINFO_define or DW_MACINFO_undef.
- * @param Name Macro name.
- * @param NameLen Macro name length.
- * @param Value Macro value.
- * @param ValueLen Macro value length.
- */
-LLVMMetadataRef LLVMDIBuilderCreateMacro(LLVMDIBuilderRef Builder,
- LLVMMetadataRef ParentMacroFile,
- unsigned Line,
- LLVMDWARFMacinfoRecordType RecordType,
- const char *Name, size_t NameLen,
- const char *Value, size_t ValueLen);
-
-/**
- * Create debugging information temporary entry for a macro file.
- * List of macro node direct children will be calculated by DIBuilder,
- * using the \p ParentMacroFile relationship.
- * @param Builder The DIBuilder.
- * @param ParentMacroFile Macro parent (could be NULL).
- * @param Line Source line number where the macro file is included.
- * @param File File descriptor containing the name of the macro file.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateTempMacroFile(LLVMDIBuilderRef Builder,
- LLVMMetadataRef ParentMacroFile, unsigned Line,
- LLVMMetadataRef File);
-
-/**
- * Create debugging information entry for an enumerator.
- * @param Builder The DIBuilder.
- * @param Name Enumerator name.
- * @param NameLen Length of enumerator name.
- * @param Value Enumerator value.
- * @param IsUnsigned True if the value is unsigned.
- */
-LLVMMetadataRef LLVMDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder,
- const char *Name, size_t NameLen,
- int64_t Value,
- LLVMBool IsUnsigned);
-
-/**
- * Create debugging information entry for an enumeration.
- * \param Builder The DIBuilder.
- * \param Scope Scope in which this enumeration is defined.
- * \param Name Enumeration name.
- * \param NameLen Length of enumeration name.
- * \param File File where this member is defined.
- * \param LineNumber Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param Elements Enumeration elements.
- * \param NumElements Number of enumeration elements.
- * \param ClassTy Underlying type of a C++11/ObjC fixed enum.
- */
-LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
- uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
- unsigned NumElements, LLVMMetadataRef ClassTy);
-
-/**
- * Create debugging information entry for a union.
- * \param Builder The DIBuilder.
- * \param Scope Scope in which this union is defined.
- * \param Name Union name.
- * \param NameLen Length of union name.
- * \param File File where this member is defined.
- * \param LineNumber Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param Flags Flags to encode member attribute, e.g. private
- * \param Elements Union elements.
- * \param NumElements Number of union elements.
- * \param RunTimeLang Optional parameter, Objective-C runtime version.
- * \param UniqueId A unique identifier for the union.
- * \param UniqueIdLen Length of unique identifier.
- */
-LLVMMetadataRef LLVMDIBuilderCreateUnionType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
- uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
- LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
- const char *UniqueId, size_t UniqueIdLen);
-
-
-/**
- * Create debugging information entry for an array.
- * \param Builder The DIBuilder.
- * \param Size Array size.
- * \param AlignInBits Alignment.
- * \param Ty Element type.
- * \param Subscripts Subscripts.
- * \param NumSubscripts Number of subscripts.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
- uint32_t AlignInBits, LLVMMetadataRef Ty,
- LLVMMetadataRef *Subscripts,
- unsigned NumSubscripts);
-
-/**
- * Create debugging information entry for a vector type.
- * \param Builder The DIBuilder.
- * \param Size Vector size.
- * \param AlignInBits Alignment.
- * \param Ty Element type.
- * \param Subscripts Subscripts.
- * \param NumSubscripts Number of subscripts.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
- uint32_t AlignInBits, LLVMMetadataRef Ty,
- LLVMMetadataRef *Subscripts,
- unsigned NumSubscripts);
-
-/**
- * Create a DWARF unspecified type.
- * \param Builder The DIBuilder.
- * \param Name The unspecified type's name.
- * \param NameLen Length of type name.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name,
- size_t NameLen);
-
-/**
- * Create debugging information entry for a basic
- * type.
- * \param Builder The DIBuilder.
- * \param Name Type name.
- * \param NameLen Length of type name.
- * \param SizeInBits Size of the type.
- * \param Encoding DWARF encoding code, e.g. \c LLVMDWARFTypeEncoding_float.
- * \param Flags Flags to encode optional attribute like endianity
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
- size_t NameLen, uint64_t SizeInBits,
- LLVMDWARFTypeEncoding Encoding,
- LLVMDIFlags Flags);
-
-/**
- * Create debugging information entry for a pointer.
- * \param Builder The DIBuilder.
- * \param PointeeTy Type pointed by this pointer.
- * \param SizeInBits Size.
- * \param AlignInBits Alignment. (optional, pass 0 to ignore)
- * \param AddressSpace DWARF address space. (optional, pass 0 to ignore)
- * \param Name Pointer type name. (optional)
- * \param NameLen Length of pointer type name. (optional)
- */
-LLVMMetadataRef LLVMDIBuilderCreatePointerType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
- uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
- const char *Name, size_t NameLen);
-
-/**
- * Create debugging information entry for a struct.
- * \param Builder The DIBuilder.
- * \param Scope Scope in which this struct is defined.
- * \param Name Struct name.
- * \param NameLen Struct name length.
- * \param File File where this member is defined.
- * \param LineNumber Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param Flags Flags to encode member attribute, e.g. private
- * \param Elements Struct elements.
- * \param NumElements Number of struct elements.
- * \param RunTimeLang Optional parameter, Objective-C runtime version.
- * \param VTableHolder The object containing the vtable for the struct.
- * \param UniqueId A unique identifier for the struct.
- * \param UniqueIdLen Length of the unique identifier for the struct.
- */
-LLVMMetadataRef LLVMDIBuilderCreateStructType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
- uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
- LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
- unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
- const char *UniqueId, size_t UniqueIdLen);
-
-/**
- * Create debugging information entry for a member.
- * \param Builder The DIBuilder.
- * \param Scope Member scope.
- * \param Name Member name.
- * \param NameLen Length of member name.
- * \param File File where this member is defined.
- * \param LineNo Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param OffsetInBits Member offset.
- * \param Flags Flags to encode member attribute, e.g. private
- * \param Ty Parent type.
- */
-LLVMMetadataRef LLVMDIBuilderCreateMemberType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNo,
- uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
- LLVMDIFlags Flags, LLVMMetadataRef Ty);
-
-/**
- * Create debugging information entry for a
- * C++ static data member.
- * \param Builder The DIBuilder.
- * \param Scope Member scope.
- * \param Name Member name.
- * \param NameLen Length of member name.
- * \param File File where this member is declared.
- * \param LineNumber Line number.
- * \param Type Type of the static member.
- * \param Flags Flags to encode member attribute, e.g. private.
- * \param ConstantVal Const initializer of the member.
- * \param AlignInBits Member alignment.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateStaticMemberType(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
- LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
- uint32_t AlignInBits);
-
-/**
- * Create debugging information entry for a pointer to member.
- * \param Builder The DIBuilder.
- * \param PointeeType Type pointed to by this pointer.
- * \param ClassType Type for which this pointer points to members of.
- * \param SizeInBits Size.
- * \param AlignInBits Alignment.
- * \param Flags Flags.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef PointeeType,
- LLVMMetadataRef ClassType,
- uint64_t SizeInBits,
- uint32_t AlignInBits,
- LLVMDIFlags Flags);
-/**
- * Create debugging information entry for Objective-C instance variable.
- * \param Builder The DIBuilder.
- * \param Name Member name.
- * \param NameLen The length of the C string passed to \c Name.
- * \param File File where this member is defined.
- * \param LineNo Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param OffsetInBits Member offset.
- * \param Flags Flags to encode member attribute, e.g. private
- * \param Ty Parent type.
- * \param PropertyNode Property associated with this ivar.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder,
- const char *Name, size_t NameLen,
- LLVMMetadataRef File, unsigned LineNo,
- uint64_t SizeInBits, uint32_t AlignInBits,
- uint64_t OffsetInBits, LLVMDIFlags Flags,
- LLVMMetadataRef Ty, LLVMMetadataRef PropertyNode);
-
-/**
- * Create debugging information entry for Objective-C property.
- * \param Builder The DIBuilder.
- * \param Name Property name.
- * \param NameLen The length of the C string passed to \c Name.
- * \param File File where this property is defined.
- * \param LineNo Line number.
- * \param GetterName Name of the Objective C property getter selector.
- * \param GetterNameLen The length of the C string passed to \c GetterName.
- * \param SetterName Name of the Objective C property setter selector.
- * \param SetterNameLen The length of the C string passed to \c SetterName.
- * \param PropertyAttributes Objective C property attributes.
- * \param Ty Type.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder,
- const char *Name, size_t NameLen,
- LLVMMetadataRef File, unsigned LineNo,
- const char *GetterName, size_t GetterNameLen,
- const char *SetterName, size_t SetterNameLen,
- unsigned PropertyAttributes,
- LLVMMetadataRef Ty);
-
-/**
- * Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
- * \param Builder The DIBuilder.
- * \param Type The underlying type to which this pointer points.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Type);
-
-/**
- * Create debugging information entry for a qualified
- * type, e.g. 'const int'.
- * \param Builder The DIBuilder.
- * \param Tag Tag identifying type,
- * e.g. LLVMDWARFTypeQualifier_volatile_type
- * \param Type Base Type.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag,
- LLVMMetadataRef Type);
-
-/**
- * Create debugging information entry for a c++
- * style reference or rvalue reference type.
- * \param Builder The DIBuilder.
- * \param Tag Tag identifying type,
- * \param Type Base Type.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, unsigned Tag,
- LLVMMetadataRef Type);
-
-/**
- * Create C++11 nullptr type.
- * \param Builder The DIBuilder.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
-
-/**
- * Create debugging information entry for a typedef.
- * \param Builder The DIBuilder.
- * \param Type Original type.
- * \param Name Typedef name.
- * \param File File where this type is defined.
- * \param LineNo Line number.
- * \param Scope The surrounding context for the typedef.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
- const char *Name, size_t NameLen,
- LLVMMetadataRef File, unsigned LineNo,
- LLVMMetadataRef Scope, uint32_t AlignInBits);
-
-/**
- * Create debugging information entry to establish inheritance relationship
- * between two types.
- * \param Builder The DIBuilder.
- * \param Ty Original type.
- * \param BaseTy Base type. Ty is inherits from base.
- * \param BaseOffset Base offset.
- * \param VBPtrOffset Virtual base pointer offset.
- * \param Flags Flags to describe inheritance attribute, e.g. private
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Ty, LLVMMetadataRef BaseTy,
- uint64_t BaseOffset, uint32_t VBPtrOffset,
- LLVMDIFlags Flags);
-
-/**
- * Create a permanent forward-declared type.
- * \param Builder The DIBuilder.
- * \param Tag A unique tag for this type.
- * \param Name Type name.
- * \param NameLen Length of type name.
- * \param Scope Type scope.
- * \param File File where this type is defined.
- * \param Line Line number where this type is defined.
- * \param RuntimeLang Indicates runtime version for languages like
- * Objective-C.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param UniqueIdentifier A unique identifier for the type.
- * \param UniqueIdentifierLen Length of the unique identifier.
- */
-LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(
- LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
- size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
- unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
- const char *UniqueIdentifier, size_t UniqueIdentifierLen);
-
-/**
- * Create a temporary forward-declared type.
- * \param Builder The DIBuilder.
- * \param Tag A unique tag for this type.
- * \param Name Type name.
- * \param NameLen Length of type name.
- * \param Scope Type scope.
- * \param File File where this type is defined.
- * \param Line Line number where this type is defined.
- * \param RuntimeLang Indicates runtime version for languages like
- * Objective-C.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param Flags Flags.
- * \param UniqueIdentifier A unique identifier for the type.
- * \param UniqueIdentifierLen Length of the unique identifier.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateReplaceableCompositeType(
- LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
- size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
- unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
- LLVMDIFlags Flags, const char *UniqueIdentifier,
- size_t UniqueIdentifierLen);
-
-/**
- * Create debugging information entry for a bit field member.
- * \param Builder The DIBuilder.
- * \param Scope Member scope.
- * \param Name Member name.
- * \param NameLen Length of member name.
- * \param File File where this member is defined.
- * \param LineNumber Line number.
- * \param SizeInBits Member size.
- * \param OffsetInBits Member offset.
- * \param StorageOffsetInBits Member storage offset.
- * \param Flags Flags to encode member attribute.
- * \param Type Parent type.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope,
- const char *Name, size_t NameLen,
- LLVMMetadataRef File, unsigned LineNumber,
- uint64_t SizeInBits,
- uint64_t OffsetInBits,
- uint64_t StorageOffsetInBits,
- LLVMDIFlags Flags, LLVMMetadataRef Type);
-
-/**
- * Create debugging information entry for a class.
- * \param Scope Scope in which this class is defined.
- * \param Name Class name.
- * \param NameLen The length of the C string passed to \c Name.
- * \param File File where this member is defined.
- * \param LineNumber Line number.
- * \param SizeInBits Member size.
- * \param AlignInBits Member alignment.
- * \param OffsetInBits Member offset.
- * \param Flags Flags to encode member attribute, e.g. private.
- * \param DerivedFrom Debug info of the base class of this type.
- * \param Elements Class members.
- * \param NumElements Number of class elements.
- * \param VTableHolder Debug info of the base class that contains vtable
- * for this type. This is used in
- * DW_AT_containing_type. See DWARF documentation
- * for more info.
- * \param TemplateParamsNode Template type parameters.
- * \param UniqueIdentifier A unique identifier for the type.
- * \param UniqueIdentifierLen Length of the unique identifier.
- */
-LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Scope, const char *Name, size_t NameLen,
- LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
- uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
- LLVMMetadataRef DerivedFrom,
- LLVMMetadataRef *Elements, unsigned NumElements,
- LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
- const char *UniqueIdentifier, size_t UniqueIdentifierLen);
-
-/**
- * Create a uniqued DIType* clone with FlagArtificial set.
- * \param Builder The DIBuilder.
- * \param Type The underlying type.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
- LLVMMetadataRef Type);
-
-/**
- * Get the name of this DIType.
- * \param DType The DIType.
- * \param Length The length of the returned string.
- *
- * @see DIType::getName()
- */
-const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length);
-
-/**
- * Get the size of this DIType in bits.
- * \param DType The DIType.
- *
- * @see DIType::getSizeInBits()
- */
-uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);
-
-/**
- * Get the offset of this DIType in bits.
- * \param DType The DIType.
- *
- * @see DIType::getOffsetInBits()
- */
-uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);
-
-/**
- * Get the alignment of this DIType in bits.
- * \param DType The DIType.
- *
- * @see DIType::getAlignInBits()
- */
-uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);
-
-/**
- * Get the source line where this DIType is declared.
- * \param DType The DIType.
- *
- * @see DIType::getLine()
- */
-unsigned LLVMDITypeGetLine(LLVMMetadataRef DType);
-
-/**
- * Get the flags associated with this DIType.
- * \param DType The DIType.
- *
- * @see DIType::getFlags()
- */
-LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);
-
-/**
- * Create a descriptor for a value range.
- * \param Builder The DIBuilder.
- * \param LowerBound Lower bound of the subrange, e.g. 0 for C, 1 for Fortran.
- * \param Count Count of elements in the subrange.
- */
-LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder,
- int64_t LowerBound,
- int64_t Count);
-
-/**
- * Create an array of DI Nodes.
- * \param Builder The DIBuilder.
- * \param Data The DI Node elements.
- * \param NumElements Number of DI Node elements.
- */
-LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder,
- LLVMMetadataRef *Data,
- size_t NumElements);
-
-/**
- * Create a new descriptor for the specified variable which has a complex
- * address expression for its address.
- * \param Builder The DIBuilder.
- * \param Addr An array of complex address operations.
- * \param Length Length of the address operation array.
- */
-LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder,
- int64_t *Addr, size_t Length);
-
-/**
- * Create a new descriptor for the specified variable that does not have an
- * address, but does have a constant value.
- * \param Builder The DIBuilder.
- * \param Value The constant value.
- */
-LLVMMetadataRef
-LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder,
- int64_t Value);
-
-/**
- * Create a new descriptor for the specified variable.
- * \param Scope Variable scope.
- * \param Name Name of the variable.
- * \param NameLen The length of the C string passed to \c Name.
- * \param Linkage Mangled name of the variable.
- * \param LinkLen The length of the C string passed to \c Linkage.
- * \param File File where this variable is defined.
- * \param LineNo Line number.
- * \param Ty Variable Type.
- * \param LocalToUnit Boolean flag indicate whether this variable is
- * externally visible or not.
- * \param Expr The location of the global relative to the attached
- * GlobalVariable.
- * \param Decl Reference to the corresponding declaration.
- * variables.
- * \param AlignInBits Variable alignment(or 0 if no alignment attr was
- * specified)
- */
-LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, const char *Linkage, size_t LinkLen, LLVMMetadataRef File,
- unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
- LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
-
-/**
- * Retrieves the \c DIVariable associated with this global variable expression.
- * \param GVE The global variable expression.
- *
- * @see llvm::DIGlobalVariableExpression::getVariable()
- */
-LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE);
-
-/**
- * Retrieves the \c DIExpression associated with this global variable expression.
- * \param GVE The global variable expression.
- *
- * @see llvm::DIGlobalVariableExpression::getExpression()
- */
-LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
- LLVMMetadataRef GVE);
-
-/**
- * Get the metadata of the file associated with a given variable.
- * \param Var The variable object.
- *
- * @see DIVariable::getFile()
- */
-LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var);
-
-/**
- * Get the metadata of the scope associated with a given variable.
- * \param Var The variable object.
- *
- * @see DIVariable::getScope()
- */
-LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var);
-
-/**
- * Get the source line where this \c DIVariable is declared.
- * \param Var The DIVariable.
- *
- * @see DIVariable::getLine()
- */
-unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var);
-
-/**
- * Create a new temporary \c MDNode. Suitable for use in constructing cyclic
- * \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
- * and must be manually deleted with \c LLVMDisposeTemporaryMDNode.
- * \param Ctx The context in which to construct the temporary node.
- * \param Data The metadata elements.
- * \param NumElements Number of metadata elements.
- */
-LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
- size_t NumElements);
-
-/**
- * Deallocate a temporary node.
- *
- * Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
- * references will be reset.
- * \param TempNode The temporary metadata node.
- */
-void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
-
-/**
- * Replace all uses of temporary metadata.
- * \param TempTargetMetadata The temporary metadata node.
- * \param Replacement The replacement metadata node.
- */
-void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata,
- LLVMMetadataRef Replacement);
-
-/**
- * Create a new descriptor for the specified global variable that is temporary
- * and meant to be RAUWed.
- * \param Scope Variable scope.
- * \param Name Name of the variable.
- * \param NameLen The length of the C string passed to \c Name.
- * \param Linkage Mangled name of the variable.
- * \param LnkLen The length of the C string passed to \c Linkage.
- * \param File File where this variable is defined.
- * \param LineNo Line number.
- * \param Ty Variable Type.
- * \param LocalToUnit Boolean flag indicate whether this variable is
- * externally visible or not.
- * \param Decl Reference to the corresponding declaration.
- * \param AlignInBits Variable alignment(or 0 if no alignment attr was
- * specified)
- */
-LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, const char *Linkage, size_t LnkLen, LLVMMetadataRef File,
- unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
- LLVMMetadataRef Decl, uint32_t AlignInBits);
-
-/**
- * Insert a new llvm.dbg.declare intrinsic call before the given instruction.
- * \param Builder The DIBuilder.
- * \param Storage The storage of the variable to declare.
- * \param VarInfo The variable's debug info descriptor.
- * \param Expr A complex location expression for the variable.
- * \param DebugLoc Debug info location.
- * \param Instr Instruction acting as a location for the new intrinsic.
- */
-LLVMValueRef LLVMDIBuilderInsertDeclareBefore(
- LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
- LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
-
-/**
- * Insert a new llvm.dbg.declare intrinsic call at the end of the given basic
- * block. If the basic block has a terminator instruction, the intrinsic is
- * inserted before that terminator instruction.
- * \param Builder The DIBuilder.
- * \param Storage The storage of the variable to declare.
- * \param VarInfo The variable's debug info descriptor.
- * \param Expr A complex location expression for the variable.
- * \param DebugLoc Debug info location.
- * \param Block Basic block acting as a location for the new intrinsic.
- */
-LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
- LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
- LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
-
-/**
- * Insert a new llvm.dbg.value intrinsic call before the given instruction.
- * \param Builder The DIBuilder.
- * \param Val The value of the variable.
- * \param VarInfo The variable's debug info descriptor.
- * \param Expr A complex location expression for the variable.
- * \param DebugLoc Debug info location.
- * \param Instr Instruction acting as a location for the new intrinsic.
- */
-LLVMValueRef LLVMDIBuilderInsertDbgValueBefore(LLVMDIBuilderRef Builder,
- LLVMValueRef Val,
- LLVMMetadataRef VarInfo,
- LLVMMetadataRef Expr,
- LLVMMetadataRef DebugLoc,
- LLVMValueRef Instr);
-
-/**
- * Insert a new llvm.dbg.value intrinsic call at the end of the given basic
- * block. If the basic block has a terminator instruction, the intrinsic is
- * inserted before that terminator instruction.
- * \param Builder The DIBuilder.
- * \param Val The value of the variable.
- * \param VarInfo The variable's debug info descriptor.
- * \param Expr A complex location expression for the variable.
- * \param DebugLoc Debug info location.
- * \param Block Basic block acting as a location for the new intrinsic.
- */
-LLVMValueRef LLVMDIBuilderInsertDbgValueAtEnd(LLVMDIBuilderRef Builder,
- LLVMValueRef Val,
- LLVMMetadataRef VarInfo,
- LLVMMetadataRef Expr,
- LLVMMetadataRef DebugLoc,
- LLVMBasicBlockRef Block);
-
-/**
- * Create a new descriptor for a local auto variable.
- * \param Builder The DIBuilder.
- * \param Scope The local scope the variable is declared in.
- * \param Name Variable name.
- * \param NameLen Length of variable name.
- * \param File File where this variable is defined.
- * \param LineNo Line number.
- * \param Ty Metadata describing the type of the variable.
- * \param AlwaysPreserve If true, this descriptor will survive optimizations.
- * \param Flags Flags.
- * \param AlignInBits Variable alignment.
- */
-LLVMMetadataRef LLVMDIBuilderCreateAutoVariable(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
- LLVMBool AlwaysPreserve, LLVMDIFlags Flags, uint32_t AlignInBits);
-
-/**
- * Create a new descriptor for a function parameter variable.
- * \param Builder The DIBuilder.
- * \param Scope The local scope the variable is declared in.
- * \param Name Variable name.
- * \param NameLen Length of variable name.
- * \param ArgNo Unique argument number for this variable; starts at 1.
- * \param File File where this variable is defined.
- * \param LineNo Line number.
- * \param Ty Metadata describing the type of the variable.
- * \param AlwaysPreserve If true, this descriptor will survive optimizations.
- * \param Flags Flags.
- */
-LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
- LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
- size_t NameLen, unsigned ArgNo, LLVMMetadataRef File, unsigned LineNo,
- LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags);
-
-/**
- * Get the metadata of the subprogram attached to a function.
- *
- * @see llvm::Function::getSubprogram()
- */
-LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
-
-/**
- * Set the subprogram attached to a function.
- *
- * @see llvm::Function::setSubprogram()
- */
-void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
-
-/**
- * Get the line associated with a given subprogram.
- * \param Subprogram The subprogram object.
- *
- * @see DISubprogram::getLine()
- */
-unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram);
-
-/**
- * Get the debug location for the given instruction.
- *
- * @see llvm::Instruction::getDebugLoc()
- */
-LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst);
-
-/**
- * Set the debug location for the given instruction.
- *
- * To clear the location metadata of the given instruction, pass NULL to \p Loc.
- *
- * @see llvm::Instruction::setDebugLoc()
- */
-void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc);
-
-/**
- * Obtain the enumerated type of a Metadata instance.
- *
- * @see llvm::Metadata::getMetadataID()
- */
-LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+};
+typedef unsigned LLVMMetadataKind;
+
+/**
+ * An LLVM DWARF type encoding.
+ */
+typedef unsigned LLVMDWARFTypeEncoding;
+
+/**
+ * Describes the kind of macro declaration used for LLVMDIBuilderCreateMacro.
+ * @see llvm::dwarf::MacinfoRecordType
+ * @note Values are from DW_MACINFO_* constants in the DWARF specification.
+ */
+typedef enum {
+ LLVMDWARFMacinfoRecordTypeDefine = 0x01,
+ LLVMDWARFMacinfoRecordTypeMacro = 0x02,
+ LLVMDWARFMacinfoRecordTypeStartFile = 0x03,
+ LLVMDWARFMacinfoRecordTypeEndFile = 0x04,
+ LLVMDWARFMacinfoRecordTypeVendorExt = 0xff
+} LLVMDWARFMacinfoRecordType;
+
+/**
+ * The current debug metadata version number.
+ */
+unsigned LLVMDebugMetadataVersion(void);
+
+/**
+ * The version of debug metadata that's present in the provided \c Module.
+ */
+unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module);
+
+/**
+ * Strip debug info in the module if it exists.
+ * To do this, we remove all calls to the debugger intrinsics and any named
+ * metadata for debugging. We also remove debug locations for instructions.
+ * Return true if module is modified.
+ */
+LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module);
+
+/**
+ * Construct a builder for a module, and do not allow for unresolved nodes
+ * attached to the module.
+ */
+LLVMDIBuilderRef LLVMCreateDIBuilderDisallowUnresolved(LLVMModuleRef M);
+
+/**
+ * Construct a builder for a module and collect unresolved nodes attached
+ * to the module in order to resolve cycles during a call to
+ * \c LLVMDIBuilderFinalize.
+ */
+LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M);
+
+/**
+ * Deallocates the \c DIBuilder and everything it owns.
+ * @note You must call \c LLVMDIBuilderFinalize before this
+ */
+void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder);
+
+/**
+ * Construct any deferred debug info descriptors.
+ */
+void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder);
+
+/**
+ * A CompileUnit provides an anchor for all debugging
+ * information generated during this instance of compilation.
+ * \param Lang Source programming language, eg.
+ * \c LLVMDWARFSourceLanguageC99
+ * \param FileRef File info.
+ * \param Producer Identify the producer of debugging information
+ * and code. Usually this is a compiler
+ * version string.
+ * \param ProducerLen The length of the C string passed to \c Producer.
+ * \param isOptimized A boolean flag which indicates whether optimization
+ * is enabled or not.
+ * \param Flags This string lists command line options. This
+ * string is directly embedded in debug info
+ * output which may be used by a tool
+ * analyzing generated debugging information.
+ * \param FlagsLen The length of the C string passed to \c Flags.
+ * \param RuntimeVer This indicates runtime version for languages like
+ * Objective-C.
+ * \param SplitName The name of the file that we'll split debug info
+ * out into.
+ * \param SplitNameLen The length of the C string passed to \c SplitName.
+ * \param Kind The kind of debug information to generate.
+ * \param DWOId The DWOId if this is a split skeleton compile unit.
+ * \param SplitDebugInlining Whether to emit inline debug info.
+ * \param DebugInfoForProfiling Whether to emit extra debug info for
+ * profile collection.
+ * \param SysRoot The Clang system root (value of -isysroot).
+ * \param SysRootLen The length of the C string passed to \c SysRoot.
+ * \param SDK The SDK. On Darwin, the last component of the sysroot.
+ * \param SDKLen The length of the C string passed to \c SDK.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateCompileUnit(
+ LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
+ LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
+ LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
+ unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
+ LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
+ LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen,
+ const char *SDK, size_t SDKLen);
+
+/**
+ * Create a file descriptor to hold debugging information for a file.
+ * \param Builder The \c DIBuilder.
+ * \param Filename File name.
+ * \param FilenameLen The length of the C string passed to \c Filename.
+ * \param Directory Directory.
+ * \param DirectoryLen The length of the C string passed to \c Directory.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename,
+ size_t FilenameLen, const char *Directory,
+ size_t DirectoryLen);
+
+/**
+ * Creates a new descriptor for a module with the specified parent scope.
+ * \param Builder The \c DIBuilder.
+ * \param ParentScope The parent scope containing this module declaration.
+ * \param Name Module name.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param ConfigMacros A space-separated shell-quoted list of -D macro
+ definitions as they would appear on a command line.
+ * \param ConfigMacrosLen The length of the C string passed to \c ConfigMacros.
+ * \param IncludePath The path to the module map file.
+ * \param IncludePathLen The length of the C string passed to \c IncludePath.
+ * \param APINotesFile The path to an API notes file for the module.
+ * \param APINotesFileLen The length of the C string passed to \c APINotestFile.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope,
+ const char *Name, size_t NameLen,
+ const char *ConfigMacros, size_t ConfigMacrosLen,
+ const char *IncludePath, size_t IncludePathLen,
+ const char *APINotesFile, size_t APINotesFileLen);
+
+/**
+ * Creates a new descriptor for a namespace with the specified parent scope.
+ * \param Builder The \c DIBuilder.
+ * \param ParentScope The parent scope containing this module declaration.
+ * \param Name NameSpace name.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param ExportSymbols Whether or not the namespace exports symbols, e.g.
+ * this is true of C++ inline namespaces.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef ParentScope,
+ const char *Name, size_t NameLen,
+ LLVMBool ExportSymbols);
+
+/**
+ * Create a new descriptor for the specified subprogram.
+ * \param Builder The \c DIBuilder.
+ * \param Scope Function scope.
+ * \param Name Function name.
+ * \param NameLen Length of enumeration name.
+ * \param LinkageName Mangled function name.
+ * \param LinkageNameLen Length of linkage name.
+ * \param File File where this variable is defined.
+ * \param LineNo Line number.
+ * \param Ty Function type.
+ * \param IsLocalToUnit True if this function is not externally visible.
+ * \param IsDefinition True if this is a function definition.
+ * \param ScopeLine Set to the beginning of the scope this starts
+ * \param Flags E.g.: \c LLVMDIFlagLValueReference. These flags are
+ * used to emit dwarf attributes.
+ * \param IsOptimized True if optimization is ON.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateFunction(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, const char *LinkageName, size_t LinkageNameLen,
+ LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
+ LLVMBool IsLocalToUnit, LLVMBool IsDefinition,
+ unsigned ScopeLine, LLVMDIFlags Flags, LLVMBool IsOptimized);
+
+/**
+ * Create a descriptor for a lexical block with the specified parent context.
+ * \param Builder The \c DIBuilder.
+ * \param Scope Parent lexical block.
+ * \param File Source file.
+ * \param Line The line in the source file.
+ * \param Column The column in the source file.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope,
+ LLVMMetadataRef File, unsigned Line, unsigned Column);
+
+/**
+ * Create a descriptor for a lexical block with a new file attached.
+ * \param Builder The \c DIBuilder.
+ * \param Scope Lexical block.
+ * \param File Source file.
+ * \param Discriminator DWARF path discriminator value.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ LLVMMetadataRef File,
+ unsigned Discriminator);
+
+/**
+ * Create a descriptor for an imported namespace. Suitable for e.g. C++
+ * using declarations.
+ * \param Builder The \c DIBuilder.
+ * \param Scope The scope this module is imported into
+ * \param File File where the declaration is located.
+ * \param Line Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ LLVMMetadataRef NS,
+ LLVMMetadataRef File,
+ unsigned Line);
+
+/**
+ * Create a descriptor for an imported module that aliases another
+ * imported entity descriptor.
+ * \param Builder The \c DIBuilder.
+ * \param Scope The scope this module is imported into
+ * \param ImportedEntity Previous imported entity to alias.
+ * \param File File where the declaration is located.
+ * \param Line Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromAlias(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ LLVMMetadataRef ImportedEntity,
+ LLVMMetadataRef File,
+ unsigned Line);
+
+/**
+ * Create a descriptor for an imported module.
+ * \param Builder The \c DIBuilder.
+ * \param Scope The scope this module is imported into
+ * \param M The module being imported here
+ * \param File File where the declaration is located.
+ * \param Line Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromModule(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ LLVMMetadataRef M,
+ LLVMMetadataRef File,
+ unsigned Line);
+
+/**
+ * Create a descriptor for an imported function, type, or variable. Suitable
+ * for e.g. FORTRAN-style USE declarations.
+ * \param Builder The DIBuilder.
+ * \param Scope The scope this module is imported into.
+ * \param Decl The declaration (or definition) of a function, type,
+ or variable.
+ * \param File File where the declaration is located.
+ * \param Line Line number of the declaration.
+ * \param Name A name that uniquely identifies this imported declaration.
+ * \param NameLen The length of the C string passed to \c Name.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedDeclaration(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ LLVMMetadataRef Decl,
+ LLVMMetadataRef File,
+ unsigned Line,
+ const char *Name, size_t NameLen);
+
+/**
+ * Creates a new DebugLocation that describes a source location.
+ * \param Line The line in the source file.
+ * \param Column The column in the source file.
+ * \param Scope The scope in which the location resides.
+ * \param InlinedAt The scope where this location was inlined, if at all.
+ * (optional).
+ * \note If the item to which this location is attached cannot be
+ * attributed to a source line, pass 0 for the line and column.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line,
+ unsigned Column, LLVMMetadataRef Scope,
+ LLVMMetadataRef InlinedAt);
+
+/**
+ * Get the line number of this debug location.
+ * \param Location The debug location.
+ *
+ * @see DILocation::getLine()
+ */
+unsigned LLVMDILocationGetLine(LLVMMetadataRef Location);
+
+/**
+ * Get the column number of this debug location.
+ * \param Location The debug location.
+ *
+ * @see DILocation::getColumn()
+ */
+unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location);
+
+/**
+ * Get the local scope associated with this debug location.
+ * \param Location The debug location.
+ *
+ * @see DILocation::getScope()
+ */
+LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
+
+/**
+ * Get the "inline at" location associated with this debug location.
+ * \param Location The debug location.
+ *
+ * @see DILocation::getInlinedAt()
+ */
+LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location);
+
+/**
+ * Get the metadata of the file associated with a given scope.
+ * \param Scope The scope object.
+ *
+ * @see DIScope::getFile()
+ */
+LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope);
+
+/**
+ * Get the directory of a given file.
+ * \param File The file object.
+ * \param Len The length of the returned string.
+ *
+ * @see DIFile::getDirectory()
+ */
+const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len);
+
+/**
+ * Get the name of a given file.
+ * \param File The file object.
+ * \param Len The length of the returned string.
+ *
+ * @see DIFile::getFilename()
+ */
+const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len);
+
+/**
+ * Get the source of a given file.
+ * \param File The file object.
+ * \param Len The length of the returned string.
+ *
+ * @see DIFile::getSource()
+ */
+const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len);
+
+/**
+ * Create a type array.
+ * \param Builder The DIBuilder.
+ * \param Data The type elements.
+ * \param NumElements Number of type elements.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef *Data,
+ size_t NumElements);
+
+/**
+ * Create subroutine type.
+ * \param Builder The DIBuilder.
+ * \param File The file in which the subroutine resides.
+ * \param ParameterTypes An array of subroutine parameter types. This
+ * includes return type at 0th index.
+ * \param NumParameterTypes The number of parameter types in \c ParameterTypes
+ * \param Flags E.g.: \c LLVMDIFlagLValueReference.
+ * These flags are used to emit dwarf attributes.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef File,
+ LLVMMetadataRef *ParameterTypes,
+ unsigned NumParameterTypes,
+ LLVMDIFlags Flags);
+
+/**
+ * Create debugging information entry for a macro.
+ * @param Builder The DIBuilder.
+ * @param ParentMacroFile Macro parent (could be NULL).
+ * @param Line Source line number where the macro is defined.
+ * @param RecordType DW_MACINFO_define or DW_MACINFO_undef.
+ * @param Name Macro name.
+ * @param NameLen Macro name length.
+ * @param Value Macro value.
+ * @param ValueLen Macro value length.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateMacro(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef ParentMacroFile,
+ unsigned Line,
+ LLVMDWARFMacinfoRecordType RecordType,
+ const char *Name, size_t NameLen,
+ const char *Value, size_t ValueLen);
+
+/**
+ * Create debugging information temporary entry for a macro file.
+ * List of macro node direct children will be calculated by DIBuilder,
+ * using the \p ParentMacroFile relationship.
+ * @param Builder The DIBuilder.
+ * @param ParentMacroFile Macro parent (could be NULL).
+ * @param Line Source line number where the macro file is included.
+ * @param File File descriptor containing the name of the macro file.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateTempMacroFile(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef ParentMacroFile, unsigned Line,
+ LLVMMetadataRef File);
+
+/**
+ * Create debugging information entry for an enumerator.
+ * @param Builder The DIBuilder.
+ * @param Name Enumerator name.
+ * @param NameLen Length of enumerator name.
+ * @param Value Enumerator value.
+ * @param IsUnsigned True if the value is unsigned.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder,
+ const char *Name, size_t NameLen,
+ int64_t Value,
+ LLVMBool IsUnsigned);
+
+/**
+ * Create debugging information entry for an enumeration.
+ * \param Builder The DIBuilder.
+ * \param Scope Scope in which this enumeration is defined.
+ * \param Name Enumeration name.
+ * \param NameLen Length of enumeration name.
+ * \param File File where this member is defined.
+ * \param LineNumber Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param Elements Enumeration elements.
+ * \param NumElements Number of enumeration elements.
+ * \param ClassTy Underlying type of a C++11/ObjC fixed enum.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+ uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
+ unsigned NumElements, LLVMMetadataRef ClassTy);
+
+/**
+ * Create debugging information entry for a union.
+ * \param Builder The DIBuilder.
+ * \param Scope Scope in which this union is defined.
+ * \param Name Union name.
+ * \param NameLen Length of union name.
+ * \param File File where this member is defined.
+ * \param LineNumber Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param Flags Flags to encode member attribute, e.g. private
+ * \param Elements Union elements.
+ * \param NumElements Number of union elements.
+ * \param RunTimeLang Optional parameter, Objective-C runtime version.
+ * \param UniqueId A unique identifier for the union.
+ * \param UniqueIdLen Length of unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateUnionType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+ uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
+ LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
+ const char *UniqueId, size_t UniqueIdLen);
+
+
+/**
+ * Create debugging information entry for an array.
+ * \param Builder The DIBuilder.
+ * \param Size Array size.
+ * \param AlignInBits Alignment.
+ * \param Ty Element type.
+ * \param Subscripts Subscripts.
+ * \param NumSubscripts Number of subscripts.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
+ uint32_t AlignInBits, LLVMMetadataRef Ty,
+ LLVMMetadataRef *Subscripts,
+ unsigned NumSubscripts);
+
+/**
+ * Create debugging information entry for a vector type.
+ * \param Builder The DIBuilder.
+ * \param Size Vector size.
+ * \param AlignInBits Alignment.
+ * \param Ty Element type.
+ * \param Subscripts Subscripts.
+ * \param NumSubscripts Number of subscripts.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
+ uint32_t AlignInBits, LLVMMetadataRef Ty,
+ LLVMMetadataRef *Subscripts,
+ unsigned NumSubscripts);
+
+/**
+ * Create a DWARF unspecified type.
+ * \param Builder The DIBuilder.
+ * \param Name The unspecified type's name.
+ * \param NameLen Length of type name.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name,
+ size_t NameLen);
+
+/**
+ * Create debugging information entry for a basic
+ * type.
+ * \param Builder The DIBuilder.
+ * \param Name Type name.
+ * \param NameLen Length of type name.
+ * \param SizeInBits Size of the type.
+ * \param Encoding DWARF encoding code, e.g. \c LLVMDWARFTypeEncoding_float.
+ * \param Flags Flags to encode optional attribute like endianity
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
+ size_t NameLen, uint64_t SizeInBits,
+ LLVMDWARFTypeEncoding Encoding,
+ LLVMDIFlags Flags);
+
+/**
+ * Create debugging information entry for a pointer.
+ * \param Builder The DIBuilder.
+ * \param PointeeTy Type pointed by this pointer.
+ * \param SizeInBits Size.
+ * \param AlignInBits Alignment. (optional, pass 0 to ignore)
+ * \param AddressSpace DWARF address space. (optional, pass 0 to ignore)
+ * \param Name Pointer type name. (optional)
+ * \param NameLen Length of pointer type name. (optional)
+ */
+LLVMMetadataRef LLVMDIBuilderCreatePointerType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
+ uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
+ const char *Name, size_t NameLen);
+
+/**
+ * Create debugging information entry for a struct.
+ * \param Builder The DIBuilder.
+ * \param Scope Scope in which this struct is defined.
+ * \param Name Struct name.
+ * \param NameLen Struct name length.
+ * \param File File where this member is defined.
+ * \param LineNumber Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param Flags Flags to encode member attribute, e.g. private
+ * \param Elements Struct elements.
+ * \param NumElements Number of struct elements.
+ * \param RunTimeLang Optional parameter, Objective-C runtime version.
+ * \param VTableHolder The object containing the vtable for the struct.
+ * \param UniqueId A unique identifier for the struct.
+ * \param UniqueIdLen Length of the unique identifier for the struct.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateStructType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+ uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
+ LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
+ unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
+ const char *UniqueId, size_t UniqueIdLen);
+
+/**
+ * Create debugging information entry for a member.
+ * \param Builder The DIBuilder.
+ * \param Scope Member scope.
+ * \param Name Member name.
+ * \param NameLen Length of member name.
+ * \param File File where this member is defined.
+ * \param LineNo Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param OffsetInBits Member offset.
+ * \param Flags Flags to encode member attribute, e.g. private
+ * \param Ty Parent type.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateMemberType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNo,
+ uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
+ LLVMDIFlags Flags, LLVMMetadataRef Ty);
+
+/**
+ * Create debugging information entry for a
+ * C++ static data member.
+ * \param Builder The DIBuilder.
+ * \param Scope Member scope.
+ * \param Name Member name.
+ * \param NameLen Length of member name.
+ * \param File File where this member is declared.
+ * \param LineNumber Line number.
+ * \param Type Type of the static member.
+ * \param Flags Flags to encode member attribute, e.g. private.
+ * \param ConstantVal Const initializer of the member.
+ * \param AlignInBits Member alignment.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateStaticMemberType(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+ LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
+ uint32_t AlignInBits);
+
+/**
+ * Create debugging information entry for a pointer to member.
+ * \param Builder The DIBuilder.
+ * \param PointeeType Type pointed to by this pointer.
+ * \param ClassType Type for which this pointer points to members of.
+ * \param SizeInBits Size.
+ * \param AlignInBits Alignment.
+ * \param Flags Flags.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef PointeeType,
+ LLVMMetadataRef ClassType,
+ uint64_t SizeInBits,
+ uint32_t AlignInBits,
+ LLVMDIFlags Flags);
+/**
+ * Create debugging information entry for Objective-C instance variable.
+ * \param Builder The DIBuilder.
+ * \param Name Member name.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param File File where this member is defined.
+ * \param LineNo Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param OffsetInBits Member offset.
+ * \param Flags Flags to encode member attribute, e.g. private
+ * \param Ty Parent type.
+ * \param PropertyNode Property associated with this ivar.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder,
+ const char *Name, size_t NameLen,
+ LLVMMetadataRef File, unsigned LineNo,
+ uint64_t SizeInBits, uint32_t AlignInBits,
+ uint64_t OffsetInBits, LLVMDIFlags Flags,
+ LLVMMetadataRef Ty, LLVMMetadataRef PropertyNode);
+
+/**
+ * Create debugging information entry for Objective-C property.
+ * \param Builder The DIBuilder.
+ * \param Name Property name.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param File File where this property is defined.
+ * \param LineNo Line number.
+ * \param GetterName Name of the Objective C property getter selector.
+ * \param GetterNameLen The length of the C string passed to \c GetterName.
+ * \param SetterName Name of the Objective C property setter selector.
+ * \param SetterNameLen The length of the C string passed to \c SetterName.
+ * \param PropertyAttributes Objective C property attributes.
+ * \param Ty Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder,
+ const char *Name, size_t NameLen,
+ LLVMMetadataRef File, unsigned LineNo,
+ const char *GetterName, size_t GetterNameLen,
+ const char *SetterName, size_t SetterNameLen,
+ unsigned PropertyAttributes,
+ LLVMMetadataRef Ty);
+
+/**
+ * Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
+ * \param Builder The DIBuilder.
+ * \param Type The underlying type to which this pointer points.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a qualified
+ * type, e.g. 'const int'.
+ * \param Builder The DIBuilder.
+ * \param Tag Tag identifying type,
+ * e.g. LLVMDWARFTypeQualifier_volatile_type
+ * \param Type Base Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag,
+ LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a c++
+ * style reference or rvalue reference type.
+ * \param Builder The DIBuilder.
+ * \param Tag Tag identifying type,
+ * \param Type Base Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, unsigned Tag,
+ LLVMMetadataRef Type);
+
+/**
+ * Create C++11 nullptr type.
+ * \param Builder The DIBuilder.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
+
+/**
+ * Create debugging information entry for a typedef.
+ * \param Builder The DIBuilder.
+ * \param Type Original type.
+ * \param Name Typedef name.
+ * \param File File where this type is defined.
+ * \param LineNo Line number.
+ * \param Scope The surrounding context for the typedef.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
+ const char *Name, size_t NameLen,
+ LLVMMetadataRef File, unsigned LineNo,
+ LLVMMetadataRef Scope, uint32_t AlignInBits);
+
+/**
+ * Create debugging information entry to establish inheritance relationship
+ * between two types.
+ * \param Builder The DIBuilder.
+ * \param Ty Original type.
+ * \param BaseTy Base type. Ty is inherits from base.
+ * \param BaseOffset Base offset.
+ * \param VBPtrOffset Virtual base pointer offset.
+ * \param Flags Flags to describe inheritance attribute, e.g. private
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Ty, LLVMMetadataRef BaseTy,
+ uint64_t BaseOffset, uint32_t VBPtrOffset,
+ LLVMDIFlags Flags);
+
+/**
+ * Create a permanent forward-declared type.
+ * \param Builder The DIBuilder.
+ * \param Tag A unique tag for this type.
+ * \param Name Type name.
+ * \param NameLen Length of type name.
+ * \param Scope Type scope.
+ * \param File File where this type is defined.
+ * \param Line Line number where this type is defined.
+ * \param RuntimeLang Indicates runtime version for languages like
+ * Objective-C.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param UniqueIdentifier A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(
+ LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
+ size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
+ unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
+ const char *UniqueIdentifier, size_t UniqueIdentifierLen);
+
+/**
+ * Create a temporary forward-declared type.
+ * \param Builder The DIBuilder.
+ * \param Tag A unique tag for this type.
+ * \param Name Type name.
+ * \param NameLen Length of type name.
+ * \param Scope Type scope.
+ * \param File File where this type is defined.
+ * \param Line Line number where this type is defined.
+ * \param RuntimeLang Indicates runtime version for languages like
+ * Objective-C.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param Flags Flags.
+ * \param UniqueIdentifier A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateReplaceableCompositeType(
+ LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
+ size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
+ unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
+ LLVMDIFlags Flags, const char *UniqueIdentifier,
+ size_t UniqueIdentifierLen);
+
+/**
+ * Create debugging information entry for a bit field member.
+ * \param Builder The DIBuilder.
+ * \param Scope Member scope.
+ * \param Name Member name.
+ * \param NameLen Length of member name.
+ * \param File File where this member is defined.
+ * \param LineNumber Line number.
+ * \param SizeInBits Member size.
+ * \param OffsetInBits Member offset.
+ * \param StorageOffsetInBits Member storage offset.
+ * \param Flags Flags to encode member attribute.
+ * \param Type Parent type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope,
+ const char *Name, size_t NameLen,
+ LLVMMetadataRef File, unsigned LineNumber,
+ uint64_t SizeInBits,
+ uint64_t OffsetInBits,
+ uint64_t StorageOffsetInBits,
+ LLVMDIFlags Flags, LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a class.
+ * \param Scope Scope in which this class is defined.
+ * \param Name Class name.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param File File where this member is defined.
+ * \param LineNumber Line number.
+ * \param SizeInBits Member size.
+ * \param AlignInBits Member alignment.
+ * \param OffsetInBits Member offset.
+ * \param Flags Flags to encode member attribute, e.g. private.
+ * \param DerivedFrom Debug info of the base class of this type.
+ * \param Elements Class members.
+ * \param NumElements Number of class elements.
+ * \param VTableHolder Debug info of the base class that contains vtable
+ * for this type. This is used in
+ * DW_AT_containing_type. See DWARF documentation
+ * for more info.
+ * \param TemplateParamsNode Template type parameters.
+ * \param UniqueIdentifier A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Scope, const char *Name, size_t NameLen,
+ LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
+ uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
+ LLVMMetadataRef DerivedFrom,
+ LLVMMetadataRef *Elements, unsigned NumElements,
+ LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
+ const char *UniqueIdentifier, size_t UniqueIdentifierLen);
+
+/**
+ * Create a uniqued DIType* clone with FlagArtificial set.
+ * \param Builder The DIBuilder.
+ * \param Type The underlying type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef Type);
+
+/**
+ * Get the name of this DIType.
+ * \param DType The DIType.
+ * \param Length The length of the returned string.
+ *
+ * @see DIType::getName()
+ */
+const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length);
+
+/**
+ * Get the size of this DIType in bits.
+ * \param DType The DIType.
+ *
+ * @see DIType::getSizeInBits()
+ */
+uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the offset of this DIType in bits.
+ * \param DType The DIType.
+ *
+ * @see DIType::getOffsetInBits()
+ */
+uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the alignment of this DIType in bits.
+ * \param DType The DIType.
+ *
+ * @see DIType::getAlignInBits()
+ */
+uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the source line where this DIType is declared.
+ * \param DType The DIType.
+ *
+ * @see DIType::getLine()
+ */
+unsigned LLVMDITypeGetLine(LLVMMetadataRef DType);
+
+/**
+ * Get the flags associated with this DIType.
+ * \param DType The DIType.
+ *
+ * @see DIType::getFlags()
+ */
+LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);
+
+/**
+ * Create a descriptor for a value range.
+ * \param Builder The DIBuilder.
+ * \param LowerBound Lower bound of the subrange, e.g. 0 for C, 1 for Fortran.
+ * \param Count Count of elements in the subrange.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder,
+ int64_t LowerBound,
+ int64_t Count);
+
+/**
+ * Create an array of DI Nodes.
+ * \param Builder The DIBuilder.
+ * \param Data The DI Node elements.
+ * \param NumElements Number of DI Node elements.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder,
+ LLVMMetadataRef *Data,
+ size_t NumElements);
+
+/**
+ * Create a new descriptor for the specified variable which has a complex
+ * address expression for its address.
+ * \param Builder The DIBuilder.
+ * \param Addr An array of complex address operations.
+ * \param Length Length of the address operation array.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder,
+ int64_t *Addr, size_t Length);
+
+/**
+ * Create a new descriptor for the specified variable that does not have an
+ * address, but does have a constant value.
+ * \param Builder The DIBuilder.
+ * \param Value The constant value.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder,
+ int64_t Value);
+
+/**
+ * Create a new descriptor for the specified variable.
+ * \param Scope Variable scope.
+ * \param Name Name of the variable.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param Linkage Mangled name of the variable.
+ * \param LinkLen The length of the C string passed to \c Linkage.
+ * \param File File where this variable is defined.
+ * \param LineNo Line number.
+ * \param Ty Variable Type.
+ * \param LocalToUnit Boolean flag indicate whether this variable is
+ * externally visible or not.
+ * \param Expr The location of the global relative to the attached
+ * GlobalVariable.
+ * \param Decl Reference to the corresponding declaration.
+ * variables.
+ * \param AlignInBits Variable alignment(or 0 if no alignment attr was
+ * specified)
+ */
+LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, const char *Linkage, size_t LinkLen, LLVMMetadataRef File,
+ unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
+ LLVMMetadataRef Expr, LLVMMetadataRef Decl, uint32_t AlignInBits);
+
+/**
+ * Retrieves the \c DIVariable associated with this global variable expression.
+ * \param GVE The global variable expression.
+ *
+ * @see llvm::DIGlobalVariableExpression::getVariable()
+ */
+LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE);
+
+/**
+ * Retrieves the \c DIExpression associated with this global variable expression.
+ * \param GVE The global variable expression.
+ *
+ * @see llvm::DIGlobalVariableExpression::getExpression()
+ */
+LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression(
+ LLVMMetadataRef GVE);
+
+/**
+ * Get the metadata of the file associated with a given variable.
+ * \param Var The variable object.
+ *
+ * @see DIVariable::getFile()
+ */
+LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var);
+
+/**
+ * Get the metadata of the scope associated with a given variable.
+ * \param Var The variable object.
+ *
+ * @see DIVariable::getScope()
+ */
+LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var);
+
+/**
+ * Get the source line where this \c DIVariable is declared.
+ * \param Var The DIVariable.
+ *
+ * @see DIVariable::getLine()
+ */
+unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var);
+
+/**
+ * Create a new temporary \c MDNode. Suitable for use in constructing cyclic
+ * \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
+ * and must be manually deleted with \c LLVMDisposeTemporaryMDNode.
+ * \param Ctx The context in which to construct the temporary node.
+ * \param Data The metadata elements.
+ * \param NumElements Number of metadata elements.
+ */
+LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
+ size_t NumElements);
+
+/**
+ * Deallocate a temporary node.
+ *
+ * Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
+ * references will be reset.
+ * \param TempNode The temporary metadata node.
+ */
+void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
+
+/**
+ * Replace all uses of temporary metadata.
+ * \param TempTargetMetadata The temporary metadata node.
+ * \param Replacement The replacement metadata node.
+ */
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata,
+ LLVMMetadataRef Replacement);
+
+/**
+ * Create a new descriptor for the specified global variable that is temporary
+ * and meant to be RAUWed.
+ * \param Scope Variable scope.
+ * \param Name Name of the variable.
+ * \param NameLen The length of the C string passed to \c Name.
+ * \param Linkage Mangled name of the variable.
+ * \param LnkLen The length of the C string passed to \c Linkage.
+ * \param File File where this variable is defined.
+ * \param LineNo Line number.
+ * \param Ty Variable Type.
+ * \param LocalToUnit Boolean flag indicate whether this variable is
+ * externally visible or not.
+ * \param Decl Reference to the corresponding declaration.
+ * \param AlignInBits Variable alignment(or 0 if no alignment attr was
+ * specified)
+ */
+LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, const char *Linkage, size_t LnkLen, LLVMMetadataRef File,
+ unsigned LineNo, LLVMMetadataRef Ty, LLVMBool LocalToUnit,
+ LLVMMetadataRef Decl, uint32_t AlignInBits);
+
+/**
+ * Insert a new llvm.dbg.declare intrinsic call before the given instruction.
+ * \param Builder The DIBuilder.
+ * \param Storage The storage of the variable to declare.
+ * \param VarInfo The variable's debug info descriptor.
+ * \param Expr A complex location expression for the variable.
+ * \param DebugLoc Debug info location.
+ * \param Instr Instruction acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDeclareBefore(
+ LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
+ LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
+
+/**
+ * Insert a new llvm.dbg.declare intrinsic call at the end of the given basic
+ * block. If the basic block has a terminator instruction, the intrinsic is
+ * inserted before that terminator instruction.
+ * \param Builder The DIBuilder.
+ * \param Storage The storage of the variable to declare.
+ * \param VarInfo The variable's debug info descriptor.
+ * \param Expr A complex location expression for the variable.
+ * \param DebugLoc Debug info location.
+ * \param Block Basic block acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
+ LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
+ LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
+
+/**
+ * Insert a new llvm.dbg.value intrinsic call before the given instruction.
+ * \param Builder The DIBuilder.
+ * \param Val The value of the variable.
+ * \param VarInfo The variable's debug info descriptor.
+ * \param Expr A complex location expression for the variable.
+ * \param DebugLoc Debug info location.
+ * \param Instr Instruction acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDbgValueBefore(LLVMDIBuilderRef Builder,
+ LLVMValueRef Val,
+ LLVMMetadataRef VarInfo,
+ LLVMMetadataRef Expr,
+ LLVMMetadataRef DebugLoc,
+ LLVMValueRef Instr);
+
+/**
+ * Insert a new llvm.dbg.value intrinsic call at the end of the given basic
+ * block. If the basic block has a terminator instruction, the intrinsic is
+ * inserted before that terminator instruction.
+ * \param Builder The DIBuilder.
+ * \param Val The value of the variable.
+ * \param VarInfo The variable's debug info descriptor.
+ * \param Expr A complex location expression for the variable.
+ * \param DebugLoc Debug info location.
+ * \param Block Basic block acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDbgValueAtEnd(LLVMDIBuilderRef Builder,
+ LLVMValueRef Val,
+ LLVMMetadataRef VarInfo,
+ LLVMMetadataRef Expr,
+ LLVMMetadataRef DebugLoc,
+ LLVMBasicBlockRef Block);
+
+/**
+ * Create a new descriptor for a local auto variable.
+ * \param Builder The DIBuilder.
+ * \param Scope The local scope the variable is declared in.
+ * \param Name Variable name.
+ * \param NameLen Length of variable name.
+ * \param File File where this variable is defined.
+ * \param LineNo Line number.
+ * \param Ty Metadata describing the type of the variable.
+ * \param AlwaysPreserve If true, this descriptor will survive optimizations.
+ * \param Flags Flags.
+ * \param AlignInBits Variable alignment.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateAutoVariable(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
+ LLVMBool AlwaysPreserve, LLVMDIFlags Flags, uint32_t AlignInBits);
+
+/**
+ * Create a new descriptor for a function parameter variable.
+ * \param Builder The DIBuilder.
+ * \param Scope The local scope the variable is declared in.
+ * \param Name Variable name.
+ * \param NameLen Length of variable name.
+ * \param ArgNo Unique argument number for this variable; starts at 1.
+ * \param File File where this variable is defined.
+ * \param LineNo Line number.
+ * \param Ty Metadata describing the type of the variable.
+ * \param AlwaysPreserve If true, this descriptor will survive optimizations.
+ * \param Flags Flags.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
+ LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+ size_t NameLen, unsigned ArgNo, LLVMMetadataRef File, unsigned LineNo,
+ LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags);
+
+/**
+ * Get the metadata of the subprogram attached to a function.
+ *
+ * @see llvm::Function::getSubprogram()
+ */
+LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
+
+/**
+ * Set the subprogram attached to a function.
+ *
+ * @see llvm::Function::setSubprogram()
+ */
+void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
+
+/**
+ * Get the line associated with a given subprogram.
+ * \param Subprogram The subprogram object.
+ *
+ * @see DISubprogram::getLine()
+ */
+unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram);
+
+/**
+ * Get the debug location for the given instruction.
+ *
+ * @see llvm::Instruction::getDebugLoc()
+ */
+LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst);
+
+/**
+ * Set the debug location for the given instruction.
+ *
+ * To clear the location metadata of the given instruction, pass NULL to \p Loc.
+ *
+ * @see llvm::Instruction::setDebugLoc()
+ */
+void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc);
+
+/**
+ * Obtain the enumerated type of a Metadata instance.
+ *
+ * @see llvm::Metadata::getMetadataID()
+ */
+LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Disassembler.h b/contrib/libs/llvm12/include/llvm-c/Disassembler.h
index 0bd7a0aeec1..3f275cd74bf 100644
--- a/contrib/libs/llvm12/include/llvm-c/Disassembler.h
+++ b/contrib/libs/llvm12/include/llvm-c/Disassembler.h
@@ -1,121 +1,121 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Disassembler.h - Disassembler Public 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 header provides a public interface to a disassembler library. *|
-|* LLVM provides an implementation of this interface. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_DISASSEMBLER_H
-#define LLVM_C_DISASSEMBLER_H
-
-#include "llvm-c/DisassemblerTypes.h"
-#include "llvm-c/ExternC.h"
-
-/**
- * @defgroup LLVMCDisassembler Disassembler
- * @ingroup LLVMC
- *
- * @{
- */
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * Create a disassembler for the TripleName. Symbolic disassembly is supported
- * by passing a block of information in the DisInfo parameter and specifying the
- * TagType and callback functions as described above. These can all be passed
- * as NULL. If successful, this returns a disassembler context. If not, it
- * returns NULL. This function is equivalent to calling
- * LLVMCreateDisasmCPUFeatures() with an empty CPU name and feature set.
- */
-LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
- int TagType, LLVMOpInfoCallback GetOpInfo,
- LLVMSymbolLookupCallback SymbolLookUp);
-
-/**
- * Create a disassembler for the TripleName and a specific CPU. Symbolic
- * disassembly is supported by passing a block of information in the DisInfo
- * parameter and specifying the TagType and callback functions as described
- * above. These can all be passed * as NULL. If successful, this returns a
- * disassembler context. If not, it returns NULL. This function is equivalent
- * to calling LLVMCreateDisasmCPUFeatures() with an empty feature set.
- */
-LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU,
- void *DisInfo, int TagType,
- LLVMOpInfoCallback GetOpInfo,
- LLVMSymbolLookupCallback SymbolLookUp);
-
-/**
- * Create a disassembler for the TripleName, a specific CPU and specific feature
- * string. Symbolic disassembly is supported by passing a block of information
- * in the DisInfo parameter and specifying the TagType and callback functions as
- * described above. These can all be passed * as NULL. If successful, this
- * returns a disassembler context. If not, it returns NULL.
- */
-LLVMDisasmContextRef
-LLVMCreateDisasmCPUFeatures(const char *Triple, const char *CPU,
- const char *Features, void *DisInfo, int TagType,
- LLVMOpInfoCallback GetOpInfo,
- LLVMSymbolLookupCallback SymbolLookUp);
-
-/**
- * Set the disassembler's options. Returns 1 if it can set the Options and 0
- * otherwise.
- */
-int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options);
-
-/* The option to produce marked up assembly. */
-#define LLVMDisassembler_Option_UseMarkup 1
-/* The option to print immediates as hex. */
-#define LLVMDisassembler_Option_PrintImmHex 2
-/* The option use the other assembler printer variant */
-#define LLVMDisassembler_Option_AsmPrinterVariant 4
-/* The option to set comment on instructions */
-#define LLVMDisassembler_Option_SetInstrComments 8
- /* The option to print latency information alongside instructions */
-#define LLVMDisassembler_Option_PrintLatency 16
-
-/**
- * Dispose of a disassembler context.
- */
-void LLVMDisasmDispose(LLVMDisasmContextRef DC);
-
-/**
- * Disassemble a single instruction using the disassembler context specified in
- * the parameter DC. The bytes of the instruction are specified in the
- * parameter Bytes, and contains at least BytesSize number of bytes. The
- * instruction is at the address specified by the PC parameter. If a valid
- * instruction can be disassembled, its string is returned indirectly in
- * OutString whose size is specified in the parameter OutStringSize. This
- * function returns the number of bytes in the instruction or zero if there was
- * no valid instruction.
- */
-size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, uint8_t *Bytes,
- uint64_t BytesSize, uint64_t PC,
- char *OutString, size_t OutStringSize);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif /* LLVM_C_DISASSEMBLER_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Disassembler.h - Disassembler Public 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 header provides a public interface to a disassembler library. *|
+|* LLVM provides an implementation of this interface. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_DISASSEMBLER_H
+#define LLVM_C_DISASSEMBLER_H
+
+#include "llvm-c/DisassemblerTypes.h"
+#include "llvm-c/ExternC.h"
+
+/**
+ * @defgroup LLVMCDisassembler Disassembler
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * Create a disassembler for the TripleName. Symbolic disassembly is supported
+ * by passing a block of information in the DisInfo parameter and specifying the
+ * TagType and callback functions as described above. These can all be passed
+ * as NULL. If successful, this returns a disassembler context. If not, it
+ * returns NULL. This function is equivalent to calling
+ * LLVMCreateDisasmCPUFeatures() with an empty CPU name and feature set.
+ */
+LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
+ int TagType, LLVMOpInfoCallback GetOpInfo,
+ LLVMSymbolLookupCallback SymbolLookUp);
+
+/**
+ * Create a disassembler for the TripleName and a specific CPU. Symbolic
+ * disassembly is supported by passing a block of information in the DisInfo
+ * parameter and specifying the TagType and callback functions as described
+ * above. These can all be passed * as NULL. If successful, this returns a
+ * disassembler context. If not, it returns NULL. This function is equivalent
+ * to calling LLVMCreateDisasmCPUFeatures() with an empty feature set.
+ */
+LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU,
+ void *DisInfo, int TagType,
+ LLVMOpInfoCallback GetOpInfo,
+ LLVMSymbolLookupCallback SymbolLookUp);
+
+/**
+ * Create a disassembler for the TripleName, a specific CPU and specific feature
+ * string. Symbolic disassembly is supported by passing a block of information
+ * in the DisInfo parameter and specifying the TagType and callback functions as
+ * described above. These can all be passed * as NULL. If successful, this
+ * returns a disassembler context. If not, it returns NULL.
+ */
+LLVMDisasmContextRef
+LLVMCreateDisasmCPUFeatures(const char *Triple, const char *CPU,
+ const char *Features, void *DisInfo, int TagType,
+ LLVMOpInfoCallback GetOpInfo,
+ LLVMSymbolLookupCallback SymbolLookUp);
+
+/**
+ * Set the disassembler's options. Returns 1 if it can set the Options and 0
+ * otherwise.
+ */
+int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options);
+
+/* The option to produce marked up assembly. */
+#define LLVMDisassembler_Option_UseMarkup 1
+/* The option to print immediates as hex. */
+#define LLVMDisassembler_Option_PrintImmHex 2
+/* The option use the other assembler printer variant */
+#define LLVMDisassembler_Option_AsmPrinterVariant 4
+/* The option to set comment on instructions */
+#define LLVMDisassembler_Option_SetInstrComments 8
+ /* The option to print latency information alongside instructions */
+#define LLVMDisassembler_Option_PrintLatency 16
+
+/**
+ * Dispose of a disassembler context.
+ */
+void LLVMDisasmDispose(LLVMDisasmContextRef DC);
+
+/**
+ * Disassemble a single instruction using the disassembler context specified in
+ * the parameter DC. The bytes of the instruction are specified in the
+ * parameter Bytes, and contains at least BytesSize number of bytes. The
+ * instruction is at the address specified by the PC parameter. If a valid
+ * instruction can be disassembled, its string is returned indirectly in
+ * OutString whose size is specified in the parameter OutStringSize. This
+ * function returns the number of bytes in the instruction or zero if there was
+ * no valid instruction.
+ */
+size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, uint8_t *Bytes,
+ uint64_t BytesSize, uint64_t PC,
+ char *OutString, size_t OutStringSize);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif /* LLVM_C_DISASSEMBLER_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/DisassemblerTypes.h b/contrib/libs/llvm12/include/llvm-c/DisassemblerTypes.h
index f352abbfab5..6b758daabbe 100644
--- a/contrib/libs/llvm12/include/llvm-c/DisassemblerTypes.h
+++ b/contrib/libs/llvm12/include/llvm-c/DisassemblerTypes.h
@@ -1,171 +1,171 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/DisassemblerTypedefs.h -----------------------------*- 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 *|
-|* *|
-|*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_DISASSEMBLER_TYPES_H
-#define LLVM_DISASSEMBLER_TYPES_H
-
-#include "llvm-c/DataTypes.h"
-#ifdef __cplusplus
-#include <cstddef>
-#else
-#include <stddef.h>
-#endif
-
-/**
- * An opaque reference to a disassembler context.
- */
-typedef void *LLVMDisasmContextRef;
-
-/**
- * The type for the operand information call back function. This is called to
- * get the symbolic information for an operand of an instruction. Typically
- * this is from the relocation information, symbol table, etc. That block of
- * information is saved when the disassembler context is created and passed to
- * the call back in the DisInfo parameter. The instruction containing operand
- * is at the PC parameter. For some instruction sets, there can be more than
- * one operand with symbolic information. To determine the symbolic operand
- * information for each operand, the bytes for the specific operand in the
- * instruction are specified by the Offset parameter and its byte widith is the
- * size parameter. For instructions sets with fixed widths and one symbolic
- * operand per instruction, the Offset parameter will be zero and Size parameter
- * will be the instruction width. The information is returned in TagBuf and is
- * Triple specific with its specific information defined by the value of
- * TagType for that Triple. If symbolic information is returned the function
- * returns 1, otherwise it returns 0.
- */
-typedef int (*LLVMOpInfoCallback)(void *DisInfo, uint64_t PC,
- uint64_t Offset, uint64_t Size,
- int TagType, void *TagBuf);
-
-/**
- * The initial support in LLVM MC for the most general form of a relocatable
- * expression is "AddSymbol - SubtractSymbol + Offset". For some Darwin targets
- * this full form is encoded in the relocation information so that AddSymbol and
- * SubtractSymbol can be link edited independent of each other. Many other
- * platforms only allow a relocatable expression of the form AddSymbol + Offset
- * to be encoded.
- *
- * The LLVMOpInfoCallback() for the TagType value of 1 uses the struct
- * LLVMOpInfo1. The value of the relocatable expression for the operand,
- * including any PC adjustment, is passed in to the call back in the Value
- * field. The symbolic information about the operand is returned using all
- * the fields of the structure with the Offset of the relocatable expression
- * returned in the Value field. It is possible that some symbols in the
- * relocatable expression were assembly temporary symbols, for example
- * "Ldata - LpicBase + constant", and only the Values of the symbols without
- * symbol names are present in the relocation information. The VariantKind
- * type is one of the Target specific #defines below and is used to print
- * operands like "_foo@GOT", ":lower16:_foo", etc.
- */
-struct LLVMOpInfoSymbol1 {
- uint64_t Present; /* 1 if this symbol is present */
- const char *Name; /* symbol name if not NULL */
- uint64_t Value; /* symbol value if name is NULL */
-};
-
-struct LLVMOpInfo1 {
- struct LLVMOpInfoSymbol1 AddSymbol;
- struct LLVMOpInfoSymbol1 SubtractSymbol;
- uint64_t Value;
- uint64_t VariantKind;
-};
-
-/**
- * The operand VariantKinds for symbolic disassembly.
- */
-#define LLVMDisassembler_VariantKind_None 0 /* all targets */
-
-/**
- * The ARM target VariantKinds.
- */
-#define LLVMDisassembler_VariantKind_ARM_HI16 1 /* :upper16: */
-#define LLVMDisassembler_VariantKind_ARM_LO16 2 /* :lower16: */
-
-/**
- * The ARM64 target VariantKinds.
- */
-#define LLVMDisassembler_VariantKind_ARM64_PAGE 1 /* @page */
-#define LLVMDisassembler_VariantKind_ARM64_PAGEOFF 2 /* @pageoff */
-#define LLVMDisassembler_VariantKind_ARM64_GOTPAGE 3 /* @gotpage */
-#define LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF 4 /* @gotpageoff */
-#define LLVMDisassembler_VariantKind_ARM64_TLVP 5 /* @tvlppage */
-#define LLVMDisassembler_VariantKind_ARM64_TLVOFF 6 /* @tvlppageoff */
-
-/**
- * The type for the symbol lookup function. This may be called by the
- * disassembler for things like adding a comment for a PC plus a constant
- * offset load instruction to use a symbol name instead of a load address value.
- * It is passed the block information is saved when the disassembler context is
- * created and the ReferenceValue to look up as a symbol. If no symbol is found
- * for the ReferenceValue NULL is returned. The ReferenceType of the
- * instruction is passed indirectly as is the PC of the instruction in
- * ReferencePC. If the output reference can be determined its type is returned
- * indirectly in ReferenceType along with ReferenceName if any, or that is set
- * to NULL.
- */
-typedef const char *(*LLVMSymbolLookupCallback)(void *DisInfo,
- uint64_t ReferenceValue,
- uint64_t *ReferenceType,
- uint64_t ReferencePC,
- const char **ReferenceName);
-/**
- * The reference types on input and output.
- */
-/* No input reference type or no output reference type. */
-#define LLVMDisassembler_ReferenceType_InOut_None 0
-
-/* The input reference is from a branch instruction. */
-#define LLVMDisassembler_ReferenceType_In_Branch 1
-/* The input reference is from a PC relative load instruction. */
-#define LLVMDisassembler_ReferenceType_In_PCrel_Load 2
-
-/* The input reference is from an ARM64::ADRP instruction. */
-#define LLVMDisassembler_ReferenceType_In_ARM64_ADRP 0x100000001
-/* The input reference is from an ARM64::ADDXri instruction. */
-#define LLVMDisassembler_ReferenceType_In_ARM64_ADDXri 0x100000002
-/* The input reference is from an ARM64::LDRXui instruction. */
-#define LLVMDisassembler_ReferenceType_In_ARM64_LDRXui 0x100000003
-/* The input reference is from an ARM64::LDRXl instruction. */
-#define LLVMDisassembler_ReferenceType_In_ARM64_LDRXl 0x100000004
-/* The input reference is from an ARM64::ADR instruction. */
-#define LLVMDisassembler_ReferenceType_In_ARM64_ADR 0x100000005
-
-/* The output reference is to as symbol stub. */
-#define LLVMDisassembler_ReferenceType_Out_SymbolStub 1
-/* The output reference is to a symbol address in a literal pool. */
-#define LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr 2
-/* The output reference is to a cstring address in a literal pool. */
-#define LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr 3
-
-/* The output reference is to a Objective-C CoreFoundation string. */
-#define LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref 4
-/* The output reference is to a Objective-C message. */
-#define LLVMDisassembler_ReferenceType_Out_Objc_Message 5
-/* The output reference is to a Objective-C message ref. */
-#define LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref 6
-/* The output reference is to a Objective-C selector ref. */
-#define LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref 7
-/* The output reference is to a Objective-C class ref. */
-#define LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref 8
-
-/* The output reference is to a C++ symbol name. */
-#define LLVMDisassembler_ReferenceType_DeMangled_Name 9
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/DisassemblerTypedefs.h -----------------------------*- 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 *|
+|* *|
+|*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_DISASSEMBLER_TYPES_H
+#define LLVM_DISASSEMBLER_TYPES_H
+
+#include "llvm-c/DataTypes.h"
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+
+/**
+ * An opaque reference to a disassembler context.
+ */
+typedef void *LLVMDisasmContextRef;
+
+/**
+ * The type for the operand information call back function. This is called to
+ * get the symbolic information for an operand of an instruction. Typically
+ * this is from the relocation information, symbol table, etc. That block of
+ * information is saved when the disassembler context is created and passed to
+ * the call back in the DisInfo parameter. The instruction containing operand
+ * is at the PC parameter. For some instruction sets, there can be more than
+ * one operand with symbolic information. To determine the symbolic operand
+ * information for each operand, the bytes for the specific operand in the
+ * instruction are specified by the Offset parameter and its byte widith is the
+ * size parameter. For instructions sets with fixed widths and one symbolic
+ * operand per instruction, the Offset parameter will be zero and Size parameter
+ * will be the instruction width. The information is returned in TagBuf and is
+ * Triple specific with its specific information defined by the value of
+ * TagType for that Triple. If symbolic information is returned the function
+ * returns 1, otherwise it returns 0.
+ */
+typedef int (*LLVMOpInfoCallback)(void *DisInfo, uint64_t PC,
+ uint64_t Offset, uint64_t Size,
+ int TagType, void *TagBuf);
+
+/**
+ * The initial support in LLVM MC for the most general form of a relocatable
+ * expression is "AddSymbol - SubtractSymbol + Offset". For some Darwin targets
+ * this full form is encoded in the relocation information so that AddSymbol and
+ * SubtractSymbol can be link edited independent of each other. Many other
+ * platforms only allow a relocatable expression of the form AddSymbol + Offset
+ * to be encoded.
+ *
+ * The LLVMOpInfoCallback() for the TagType value of 1 uses the struct
+ * LLVMOpInfo1. The value of the relocatable expression for the operand,
+ * including any PC adjustment, is passed in to the call back in the Value
+ * field. The symbolic information about the operand is returned using all
+ * the fields of the structure with the Offset of the relocatable expression
+ * returned in the Value field. It is possible that some symbols in the
+ * relocatable expression were assembly temporary symbols, for example
+ * "Ldata - LpicBase + constant", and only the Values of the symbols without
+ * symbol names are present in the relocation information. The VariantKind
+ * type is one of the Target specific #defines below and is used to print
+ * operands like "_foo@GOT", ":lower16:_foo", etc.
+ */
+struct LLVMOpInfoSymbol1 {
+ uint64_t Present; /* 1 if this symbol is present */
+ const char *Name; /* symbol name if not NULL */
+ uint64_t Value; /* symbol value if name is NULL */
+};
+
+struct LLVMOpInfo1 {
+ struct LLVMOpInfoSymbol1 AddSymbol;
+ struct LLVMOpInfoSymbol1 SubtractSymbol;
+ uint64_t Value;
+ uint64_t VariantKind;
+};
+
+/**
+ * The operand VariantKinds for symbolic disassembly.
+ */
+#define LLVMDisassembler_VariantKind_None 0 /* all targets */
+
+/**
+ * The ARM target VariantKinds.
+ */
+#define LLVMDisassembler_VariantKind_ARM_HI16 1 /* :upper16: */
+#define LLVMDisassembler_VariantKind_ARM_LO16 2 /* :lower16: */
+
+/**
+ * The ARM64 target VariantKinds.
+ */
+#define LLVMDisassembler_VariantKind_ARM64_PAGE 1 /* @page */
+#define LLVMDisassembler_VariantKind_ARM64_PAGEOFF 2 /* @pageoff */
+#define LLVMDisassembler_VariantKind_ARM64_GOTPAGE 3 /* @gotpage */
+#define LLVMDisassembler_VariantKind_ARM64_GOTPAGEOFF 4 /* @gotpageoff */
+#define LLVMDisassembler_VariantKind_ARM64_TLVP 5 /* @tvlppage */
+#define LLVMDisassembler_VariantKind_ARM64_TLVOFF 6 /* @tvlppageoff */
+
+/**
+ * The type for the symbol lookup function. This may be called by the
+ * disassembler for things like adding a comment for a PC plus a constant
+ * offset load instruction to use a symbol name instead of a load address value.
+ * It is passed the block information is saved when the disassembler context is
+ * created and the ReferenceValue to look up as a symbol. If no symbol is found
+ * for the ReferenceValue NULL is returned. The ReferenceType of the
+ * instruction is passed indirectly as is the PC of the instruction in
+ * ReferencePC. If the output reference can be determined its type is returned
+ * indirectly in ReferenceType along with ReferenceName if any, or that is set
+ * to NULL.
+ */
+typedef const char *(*LLVMSymbolLookupCallback)(void *DisInfo,
+ uint64_t ReferenceValue,
+ uint64_t *ReferenceType,
+ uint64_t ReferencePC,
+ const char **ReferenceName);
+/**
+ * The reference types on input and output.
+ */
+/* No input reference type or no output reference type. */
+#define LLVMDisassembler_ReferenceType_InOut_None 0
+
+/* The input reference is from a branch instruction. */
+#define LLVMDisassembler_ReferenceType_In_Branch 1
+/* The input reference is from a PC relative load instruction. */
+#define LLVMDisassembler_ReferenceType_In_PCrel_Load 2
+
+/* The input reference is from an ARM64::ADRP instruction. */
+#define LLVMDisassembler_ReferenceType_In_ARM64_ADRP 0x100000001
+/* The input reference is from an ARM64::ADDXri instruction. */
+#define LLVMDisassembler_ReferenceType_In_ARM64_ADDXri 0x100000002
+/* The input reference is from an ARM64::LDRXui instruction. */
+#define LLVMDisassembler_ReferenceType_In_ARM64_LDRXui 0x100000003
+/* The input reference is from an ARM64::LDRXl instruction. */
+#define LLVMDisassembler_ReferenceType_In_ARM64_LDRXl 0x100000004
+/* The input reference is from an ARM64::ADR instruction. */
+#define LLVMDisassembler_ReferenceType_In_ARM64_ADR 0x100000005
+
+/* The output reference is to as symbol stub. */
+#define LLVMDisassembler_ReferenceType_Out_SymbolStub 1
+/* The output reference is to a symbol address in a literal pool. */
+#define LLVMDisassembler_ReferenceType_Out_LitPool_SymAddr 2
+/* The output reference is to a cstring address in a literal pool. */
+#define LLVMDisassembler_ReferenceType_Out_LitPool_CstrAddr 3
+
+/* The output reference is to a Objective-C CoreFoundation string. */
+#define LLVMDisassembler_ReferenceType_Out_Objc_CFString_Ref 4
+/* The output reference is to a Objective-C message. */
+#define LLVMDisassembler_ReferenceType_Out_Objc_Message 5
+/* The output reference is to a Objective-C message ref. */
+#define LLVMDisassembler_ReferenceType_Out_Objc_Message_Ref 6
+/* The output reference is to a Objective-C selector ref. */
+#define LLVMDisassembler_ReferenceType_Out_Objc_Selector_Ref 7
+/* The output reference is to a Objective-C class ref. */
+#define LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref 8
+
+/* The output reference is to a C++ symbol name. */
+#define LLVMDisassembler_ReferenceType_DeMangled_Name 9
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Error.h b/contrib/libs/llvm12/include/llvm-c/Error.h
index 5e33613bd8e..6f21a40d0a1 100644
--- a/contrib/libs/llvm12/include/llvm-c/Error.h
+++ b/contrib/libs/llvm12/include/llvm-c/Error.h
@@ -1,83 +1,83 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===------- llvm-c/Error.h - llvm::Error class 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 LLVM's Error class. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_ERROR_H
-#define LLVM_C_ERROR_H
-
-#include "llvm-c/ExternC.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-#define LLVMErrorSuccess 0
-
-/**
- * Opaque reference to an error instance. Null serves as the 'success' value.
- */
-typedef struct LLVMOpaqueError *LLVMErrorRef;
-
-/**
- * Error type identifier.
- */
-typedef const void *LLVMErrorTypeId;
-
-/**
- * Returns the type id for the given error instance, which must be a failure
- * value (i.e. non-null).
- */
-LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err);
-
-/**
- * Dispose of the given error without handling it. This operation consumes the
- * error, and the given LLVMErrorRef value is not usable once this call returns.
- * Note: This method *only* needs to be called if the error is not being passed
- * to some other consuming operation, e.g. LLVMGetErrorMessage.
- */
-void LLVMConsumeError(LLVMErrorRef Err);
-
-/**
- * Returns the given string's error message. This operation consumes the error,
- * and the given LLVMErrorRef value is not usable once this call returns.
- * The caller is responsible for disposing of the string by calling
- * LLVMDisposeErrorMessage.
- */
-char *LLVMGetErrorMessage(LLVMErrorRef Err);
-
-/**
- * Dispose of the given error message.
- */
-void LLVMDisposeErrorMessage(char *ErrMsg);
-
-/**
- * Returns the type id for llvm StringError.
- */
-LLVMErrorTypeId LLVMGetStringErrorTypeId(void);
-
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===------- llvm-c/Error.h - llvm::Error class 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 LLVM's Error class. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_ERROR_H
+#define LLVM_C_ERROR_H
+
+#include "llvm-c/ExternC.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+#define LLVMErrorSuccess 0
+
+/**
+ * Opaque reference to an error instance. Null serves as the 'success' value.
+ */
+typedef struct LLVMOpaqueError *LLVMErrorRef;
+
+/**
+ * Error type identifier.
+ */
+typedef const void *LLVMErrorTypeId;
+
+/**
+ * Returns the type id for the given error instance, which must be a failure
+ * value (i.e. non-null).
+ */
+LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err);
+
+/**
+ * Dispose of the given error without handling it. This operation consumes the
+ * error, and the given LLVMErrorRef value is not usable once this call returns.
+ * Note: This method *only* needs to be called if the error is not being passed
+ * to some other consuming operation, e.g. LLVMGetErrorMessage.
+ */
+void LLVMConsumeError(LLVMErrorRef Err);
+
+/**
+ * Returns the given string's error message. This operation consumes the error,
+ * and the given LLVMErrorRef value is not usable once this call returns.
+ * The caller is responsible for disposing of the string by calling
+ * LLVMDisposeErrorMessage.
+ */
+char *LLVMGetErrorMessage(LLVMErrorRef Err);
+
+/**
+ * Dispose of the given error message.
+ */
+void LLVMDisposeErrorMessage(char *ErrMsg);
+
+/**
+ * Returns the type id for llvm StringError.
+ */
+LLVMErrorTypeId LLVMGetStringErrorTypeId(void);
+
/**
* Create a StringError.
*/
LLVMErrorRef LLVMCreateStringError(const char *ErrMsg);
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/ErrorHandling.h b/contrib/libs/llvm12/include/llvm-c/ErrorHandling.h
index 23570f9f539..ed0f4577a0d 100644
--- a/contrib/libs/llvm12/include/llvm-c/ErrorHandling.h
+++ b/contrib/libs/llvm12/include/llvm-c/ErrorHandling.h
@@ -1,58 +1,58 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/ErrorHandling.h - Error Handling 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 LLVM's error handling mechanism. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_ERROR_HANDLING_H
-#define LLVM_C_ERROR_HANDLING_H
-
-#include "llvm-c/ExternC.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-typedef void (*LLVMFatalErrorHandler)(const char *Reason);
-
-/**
- * Install a fatal error handler. By default, if LLVM detects a fatal error, it
- * will call exit(1). This may not be appropriate in many contexts. For example,
- * doing exit(1) will bypass many crash reporting/tracing system tools. This
- * function allows you to install a callback that will be invoked prior to the
- * call to exit(1).
- */
-void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
-
-/**
- * Reset the fatal error handler. This resets LLVM's fatal error handling
- * behavior to the default.
- */
-void LLVMResetFatalErrorHandler(void);
-
-/**
- * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
- * signals and prints which component of LLVM you were in at the time if the
- * crash.
- */
-void LLVMEnablePrettyStackTrace(void);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/ErrorHandling.h - Error Handling 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 LLVM's error handling mechanism. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_ERROR_HANDLING_H
+#define LLVM_C_ERROR_HANDLING_H
+
+#include "llvm-c/ExternC.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+typedef void (*LLVMFatalErrorHandler)(const char *Reason);
+
+/**
+ * Install a fatal error handler. By default, if LLVM detects a fatal error, it
+ * will call exit(1). This may not be appropriate in many contexts. For example,
+ * doing exit(1) will bypass many crash reporting/tracing system tools. This
+ * function allows you to install a callback that will be invoked prior to the
+ * call to exit(1).
+ */
+void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
+
+/**
+ * Reset the fatal error handler. This resets LLVM's fatal error handling
+ * behavior to the default.
+ */
+void LLVMResetFatalErrorHandler(void);
+
+/**
+ * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
+ * signals and prints which component of LLVM you were in at the time if the
+ * crash.
+ */
+void LLVMEnablePrettyStackTrace(void);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/ExecutionEngine.h b/contrib/libs/llvm12/include/llvm-c/ExecutionEngine.h
index f359d1d83da..d3410994fb1 100644
--- a/contrib/libs/llvm12/include/llvm-c/ExecutionEngine.h
+++ b/contrib/libs/llvm12/include/llvm-c/ExecutionEngine.h
@@ -1,213 +1,213 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- 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 header declares the C interface to libLLVMExecutionEngine.o, which *|
-|* implements various analyses of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_EXECUTIONENGINE_H
-#define LLVM_C_EXECUTIONENGINE_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Target.h"
-#include "llvm-c/TargetMachine.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCExecutionEngine Execution Engine
- * @ingroup LLVMC
- *
- * @{
- */
-
-void LLVMLinkInMCJIT(void);
-void LLVMLinkInInterpreter(void);
-
-typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
-typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
-typedef struct LLVMOpaqueMCJITMemoryManager *LLVMMCJITMemoryManagerRef;
-
-struct LLVMMCJITCompilerOptions {
- unsigned OptLevel;
- LLVMCodeModel CodeModel;
- LLVMBool NoFramePointerElim;
- LLVMBool EnableFastISel;
- LLVMMCJITMemoryManagerRef MCJMM;
-};
-
-/*===-- Operations on generic values --------------------------------------===*/
-
-LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
- unsigned long long N,
- LLVMBool IsSigned);
-
-LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
-
-LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
-
-unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
-
-unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
- LLVMBool IsSigned);
-
-void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
-
-double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
-
-void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
-
-/*===-- Operations on execution engines -----------------------------------===*/
-
-LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
- LLVMModuleRef M,
- char **OutError);
-
-LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
- LLVMModuleRef M,
- char **OutError);
-
-LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
- LLVMModuleRef M,
- unsigned OptLevel,
- char **OutError);
-
-void LLVMInitializeMCJITCompilerOptions(
- struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions);
-
-/**
- * Create an MCJIT execution engine for a module, with the given options. It is
- * the responsibility of the caller to ensure that all fields in Options up to
- * the given SizeOfOptions are initialized. It is correct to pass a smaller
- * value of SizeOfOptions that omits some fields. The canonical way of using
- * this is:
- *
- * LLVMMCJITCompilerOptions options;
- * LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
- * ... fill in those options you care about
- * LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
- * &error);
- *
- * Note that this is also correct, though possibly suboptimal:
- *
- * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
- */
-LLVMBool LLVMCreateMCJITCompilerForModule(
- LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M,
- struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions,
- char **OutError);
-
-void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
-
-void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
-
-void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
-
-int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
- unsigned ArgC, const char * const *ArgV,
- const char * const *EnvP);
-
-LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
- unsigned NumArgs,
- LLVMGenericValueRef *Args);
-
-void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
-
-void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
-
-LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
- LLVMModuleRef *OutMod, char **OutError);
-
-LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
- LLVMValueRef *OutFn);
-
-void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE,
- LLVMValueRef Fn);
-
-LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
-LLVMTargetMachineRef
-LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef EE);
-
-void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
- void* Addr);
-
-void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
-
-uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name);
-
-uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name);
-
-/// Returns true on error, false on success. If true is returned then the error
-/// message is copied to OutStr and cleared in the ExecutionEngine instance.
-LLVMBool LLVMExecutionEngineGetErrMsg(LLVMExecutionEngineRef EE,
- char **OutError);
-
-/*===-- Operations on memory managers -------------------------------------===*/
-
-typedef uint8_t *(*LLVMMemoryManagerAllocateCodeSectionCallback)(
- void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
- const char *SectionName);
-typedef uint8_t *(*LLVMMemoryManagerAllocateDataSectionCallback)(
- void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
- const char *SectionName, LLVMBool IsReadOnly);
-typedef LLVMBool (*LLVMMemoryManagerFinalizeMemoryCallback)(
- void *Opaque, char **ErrMsg);
-typedef void (*LLVMMemoryManagerDestroyCallback)(void *Opaque);
-
-/**
- * Create a simple custom MCJIT memory manager. This memory manager can
- * intercept allocations in a module-oblivious way. This will return NULL
- * if any of the passed functions are NULL.
- *
- * @param Opaque An opaque client object to pass back to the callbacks.
- * @param AllocateCodeSection Allocate a block of memory for executable code.
- * @param AllocateDataSection Allocate a block of memory for data.
- * @param FinalizeMemory Set page permissions and flush cache. Return 0 on
- * success, 1 on error.
- */
-LLVMMCJITMemoryManagerRef LLVMCreateSimpleMCJITMemoryManager(
- void *Opaque,
- LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection,
- LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection,
- LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory,
- LLVMMemoryManagerDestroyCallback Destroy);
-
-void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM);
-
-/*===-- JIT Event Listener functions -------------------------------------===*/
-
-LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void);
-LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void);
-LLVMJITEventListenerRef LLVMCreateOProfileJITEventListener(void);
-LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/ExecutionEngine.h - ExecutionEngine Lib C Iface --*- 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 header declares the C interface to libLLVMExecutionEngine.o, which *|
+|* implements various analyses of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_EXECUTIONENGINE_H
+#define LLVM_C_EXECUTIONENGINE_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Target.h"
+#include "llvm-c/TargetMachine.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCExecutionEngine Execution Engine
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+void LLVMLinkInMCJIT(void);
+void LLVMLinkInInterpreter(void);
+
+typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;
+typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef;
+typedef struct LLVMOpaqueMCJITMemoryManager *LLVMMCJITMemoryManagerRef;
+
+struct LLVMMCJITCompilerOptions {
+ unsigned OptLevel;
+ LLVMCodeModel CodeModel;
+ LLVMBool NoFramePointerElim;
+ LLVMBool EnableFastISel;
+ LLVMMCJITMemoryManagerRef MCJMM;
+};
+
+/*===-- Operations on generic values --------------------------------------===*/
+
+LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty,
+ unsigned long long N,
+ LLVMBool IsSigned);
+
+LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P);
+
+LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N);
+
+unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef);
+
+unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal,
+ LLVMBool IsSigned);
+
+void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal);
+
+double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal);
+
+void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal);
+
+/*===-- Operations on execution engines -----------------------------------===*/
+
+LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE,
+ LLVMModuleRef M,
+ char **OutError);
+
+LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp,
+ LLVMModuleRef M,
+ char **OutError);
+
+LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
+ LLVMModuleRef M,
+ unsigned OptLevel,
+ char **OutError);
+
+void LLVMInitializeMCJITCompilerOptions(
+ struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions);
+
+/**
+ * Create an MCJIT execution engine for a module, with the given options. It is
+ * the responsibility of the caller to ensure that all fields in Options up to
+ * the given SizeOfOptions are initialized. It is correct to pass a smaller
+ * value of SizeOfOptions that omits some fields. The canonical way of using
+ * this is:
+ *
+ * LLVMMCJITCompilerOptions options;
+ * LLVMInitializeMCJITCompilerOptions(&options, sizeof(options));
+ * ... fill in those options you care about
+ * LLVMCreateMCJITCompilerForModule(&jit, mod, &options, sizeof(options),
+ * &error);
+ *
+ * Note that this is also correct, though possibly suboptimal:
+ *
+ * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error);
+ */
+LLVMBool LLVMCreateMCJITCompilerForModule(
+ LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M,
+ struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions,
+ char **OutError);
+
+void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE);
+
+void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE);
+
+void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE);
+
+int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F,
+ unsigned ArgC, const char * const *ArgV,
+ const char * const *EnvP);
+
+LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, LLVMValueRef F,
+ unsigned NumArgs,
+ LLVMGenericValueRef *Args);
+
+void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F);
+
+void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M);
+
+LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M,
+ LLVMModuleRef *OutMod, char **OutError);
+
+LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
+ LLVMValueRef *OutFn);
+
+void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE,
+ LLVMValueRef Fn);
+
+LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
+LLVMTargetMachineRef
+LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef EE);
+
+void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
+ void* Addr);
+
+void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
+
+uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name);
+
+uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name);
+
+/// Returns true on error, false on success. If true is returned then the error
+/// message is copied to OutStr and cleared in the ExecutionEngine instance.
+LLVMBool LLVMExecutionEngineGetErrMsg(LLVMExecutionEngineRef EE,
+ char **OutError);
+
+/*===-- Operations on memory managers -------------------------------------===*/
+
+typedef uint8_t *(*LLVMMemoryManagerAllocateCodeSectionCallback)(
+ void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
+ const char *SectionName);
+typedef uint8_t *(*LLVMMemoryManagerAllocateDataSectionCallback)(
+ void *Opaque, uintptr_t Size, unsigned Alignment, unsigned SectionID,
+ const char *SectionName, LLVMBool IsReadOnly);
+typedef LLVMBool (*LLVMMemoryManagerFinalizeMemoryCallback)(
+ void *Opaque, char **ErrMsg);
+typedef void (*LLVMMemoryManagerDestroyCallback)(void *Opaque);
+
+/**
+ * Create a simple custom MCJIT memory manager. This memory manager can
+ * intercept allocations in a module-oblivious way. This will return NULL
+ * if any of the passed functions are NULL.
+ *
+ * @param Opaque An opaque client object to pass back to the callbacks.
+ * @param AllocateCodeSection Allocate a block of memory for executable code.
+ * @param AllocateDataSection Allocate a block of memory for data.
+ * @param FinalizeMemory Set page permissions and flush cache. Return 0 on
+ * success, 1 on error.
+ */
+LLVMMCJITMemoryManagerRef LLVMCreateSimpleMCJITMemoryManager(
+ void *Opaque,
+ LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection,
+ LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection,
+ LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory,
+ LLVMMemoryManagerDestroyCallback Destroy);
+
+void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM);
+
+/*===-- JIT Event Listener functions -------------------------------------===*/
+
+LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void);
+LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void);
+LLVMJITEventListenerRef LLVMCreateOProfileJITEventListener(void);
+LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/ExternC.h b/contrib/libs/llvm12/include/llvm-c/ExternC.h
index f0110b890ef..0eb211bb979 100644
--- a/contrib/libs/llvm12/include/llvm-c/ExternC.h
+++ b/contrib/libs/llvm12/include/llvm-c/ExternC.h
@@ -1,50 +1,50 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===- llvm-c/ExternC.h - Wrapper for 'extern "C"' ----------------*- 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 an 'extern "C"' wrapper *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_EXTERN_C_H
-#define LLVM_C_EXTERN_C_H
-
-#ifdef __clang__
-#define LLVM_C_STRICT_PROTOTYPES_BEGIN \
- _Pragma("clang diagnostic push") \
- _Pragma("clang diagnostic error \"-Wstrict-prototypes\"")
-#define LLVM_C_STRICT_PROTOTYPES_END _Pragma("clang diagnostic pop")
-#else
-#define LLVM_C_STRICT_PROTOTYPES_BEGIN
-#define LLVM_C_STRICT_PROTOTYPES_END
-#endif
-
-#ifdef __cplusplus
-#define LLVM_C_EXTERN_C_BEGIN \
- extern "C" { \
- LLVM_C_STRICT_PROTOTYPES_BEGIN
-#define LLVM_C_EXTERN_C_END \
- LLVM_C_STRICT_PROTOTYPES_END \
- }
-#else
-#define LLVM_C_EXTERN_C_BEGIN LLVM_C_STRICT_PROTOTYPES_BEGIN
-#define LLVM_C_EXTERN_C_END LLVM_C_STRICT_PROTOTYPES_END
-#endif
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===- llvm-c/ExternC.h - Wrapper for 'extern "C"' ----------------*- 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 an 'extern "C"' wrapper *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_EXTERN_C_H
+#define LLVM_C_EXTERN_C_H
+
+#ifdef __clang__
+#define LLVM_C_STRICT_PROTOTYPES_BEGIN \
+ _Pragma("clang diagnostic push") \
+ _Pragma("clang diagnostic error \"-Wstrict-prototypes\"")
+#define LLVM_C_STRICT_PROTOTYPES_END _Pragma("clang diagnostic pop")
+#else
+#define LLVM_C_STRICT_PROTOTYPES_BEGIN
+#define LLVM_C_STRICT_PROTOTYPES_END
+#endif
+
+#ifdef __cplusplus
+#define LLVM_C_EXTERN_C_BEGIN \
+ extern "C" { \
+ LLVM_C_STRICT_PROTOTYPES_BEGIN
+#define LLVM_C_EXTERN_C_END \
+ LLVM_C_STRICT_PROTOTYPES_END \
+ }
+#else
+#define LLVM_C_EXTERN_C_BEGIN LLVM_C_STRICT_PROTOTYPES_BEGIN
+#define LLVM_C_EXTERN_C_END LLVM_C_STRICT_PROTOTYPES_END
+#endif
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/IRReader.h b/contrib/libs/llvm12/include/llvm-c/IRReader.h
index d593290f771..bd2eb7d0fa6 100644
--- a/contrib/libs/llvm12/include/llvm-c/IRReader.h
+++ b/contrib/libs/llvm12/include/llvm-c/IRReader.h
@@ -1,48 +1,48 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/IRReader.h - IR Reader 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 the IR Reader. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_IRREADER_H
-#define LLVM_C_IRREADER_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * Read LLVM IR from a memory buffer and convert it into an in-memory Module
- * object. Returns 0 on success.
- * Optionally returns a human-readable description of any errors that
- * occurred during parsing IR. OutMessage must be disposed with
- * LLVMDisposeMessage.
- *
- * @see llvm::ParseIR()
- */
-LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
- LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
- char **OutMessage);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/IRReader.h - IR Reader 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 the IR Reader. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_IRREADER_H
+#define LLVM_C_IRREADER_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * Read LLVM IR from a memory buffer and convert it into an in-memory Module
+ * object. Returns 0 on success.
+ * Optionally returns a human-readable description of any errors that
+ * occurred during parsing IR. OutMessage must be disposed with
+ * LLVMDisposeMessage.
+ *
+ * @see llvm::ParseIR()
+ */
+LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef,
+ LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM,
+ char **OutMessage);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Initialization.h b/contrib/libs/llvm12/include/llvm-c/Initialization.h
index d46424230c9..9a628c7ca0b 100644
--- a/contrib/libs/llvm12/include/llvm-c/Initialization.h
+++ b/contrib/libs/llvm12/include/llvm-c/Initialization.h
@@ -1,64 +1,64 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Initialization.h - Initialization 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 header declares the C interface to LLVM initialization routines, *|
-|* which must be called before you can use the functionality provided by *|
-|* the corresponding LLVM library. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_INITIALIZATION_H
-#define LLVM_C_INITIALIZATION_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCInitialization Initialization Routines
- * @ingroup LLVMC
- *
- * This module contains routines used to initialize the LLVM system.
- *
- * @{
- */
-
-void LLVMInitializeCore(LLVMPassRegistryRef R);
-void LLVMInitializeTransformUtils(LLVMPassRegistryRef R);
-void LLVMInitializeScalarOpts(LLVMPassRegistryRef R);
-void LLVMInitializeObjCARCOpts(LLVMPassRegistryRef R);
-void LLVMInitializeVectorization(LLVMPassRegistryRef R);
-void LLVMInitializeInstCombine(LLVMPassRegistryRef R);
-void LLVMInitializeAggressiveInstCombiner(LLVMPassRegistryRef R);
-void LLVMInitializeIPO(LLVMPassRegistryRef R);
-void LLVMInitializeInstrumentation(LLVMPassRegistryRef R);
-void LLVMInitializeAnalysis(LLVMPassRegistryRef R);
-void LLVMInitializeIPA(LLVMPassRegistryRef R);
-void LLVMInitializeCodeGen(LLVMPassRegistryRef R);
-void LLVMInitializeTarget(LLVMPassRegistryRef R);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Initialization.h - Initialization 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 header declares the C interface to LLVM initialization routines, *|
+|* which must be called before you can use the functionality provided by *|
+|* the corresponding LLVM library. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_INITIALIZATION_H
+#define LLVM_C_INITIALIZATION_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCInitialization Initialization Routines
+ * @ingroup LLVMC
+ *
+ * This module contains routines used to initialize the LLVM system.
+ *
+ * @{
+ */
+
+void LLVMInitializeCore(LLVMPassRegistryRef R);
+void LLVMInitializeTransformUtils(LLVMPassRegistryRef R);
+void LLVMInitializeScalarOpts(LLVMPassRegistryRef R);
+void LLVMInitializeObjCARCOpts(LLVMPassRegistryRef R);
+void LLVMInitializeVectorization(LLVMPassRegistryRef R);
+void LLVMInitializeInstCombine(LLVMPassRegistryRef R);
+void LLVMInitializeAggressiveInstCombiner(LLVMPassRegistryRef R);
+void LLVMInitializeIPO(LLVMPassRegistryRef R);
+void LLVMInitializeInstrumentation(LLVMPassRegistryRef R);
+void LLVMInitializeAnalysis(LLVMPassRegistryRef R);
+void LLVMInitializeIPA(LLVMPassRegistryRef R);
+void LLVMInitializeCodeGen(LLVMPassRegistryRef R);
+void LLVMInitializeTarget(LLVMPassRegistryRef R);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Linker.h b/contrib/libs/llvm12/include/llvm-c/Linker.h
index 311dde72a20..800c68a87f2 100644
--- a/contrib/libs/llvm12/include/llvm-c/Linker.h
+++ b/contrib/libs/llvm12/include/llvm-c/Linker.h
@@ -1,49 +1,49 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Linker.h - Module Linker 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 the module/file/archive linker. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_LINKER_H
-#define LLVM_C_LINKER_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/* This enum is provided for backwards-compatibility only. It has no effect. */
-typedef enum {
- LLVMLinkerDestroySource = 0, /* This is the default behavior. */
- LLVMLinkerPreserveSource_Removed = 1 /* This option has been deprecated and
- should not be used. */
-} LLVMLinkerMode;
-
-/* Links the source module into the destination module. The source module is
- * destroyed.
- * The return value is true if an error occurred, false otherwise.
- * Use the diagnostic handler to get any diagnostic message.
-*/
-LLVMBool LLVMLinkModules2(LLVMModuleRef Dest, LLVMModuleRef Src);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Linker.h - Module Linker 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 the module/file/archive linker. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_LINKER_H
+#define LLVM_C_LINKER_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/* This enum is provided for backwards-compatibility only. It has no effect. */
+typedef enum {
+ LLVMLinkerDestroySource = 0, /* This is the default behavior. */
+ LLVMLinkerPreserveSource_Removed = 1 /* This option has been deprecated and
+ should not be used. */
+} LLVMLinkerMode;
+
+/* Links the source module into the destination module. The source module is
+ * destroyed.
+ * The return value is true if an error occurred, false otherwise.
+ * Use the diagnostic handler to get any diagnostic message.
+*/
+LLVMBool LLVMLinkModules2(LLVMModuleRef Dest, LLVMModuleRef Src);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Object.h b/contrib/libs/llvm12/include/llvm-c/Object.h
index ae420dca4a6..71b4635c3ca 100644
--- a/contrib/libs/llvm12/include/llvm-c/Object.h
+++ b/contrib/libs/llvm12/include/llvm-c/Object.h
@@ -1,241 +1,241 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Object.h - Object Lib C Iface --------------------*- 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 header declares the C interface to libLLVMObject.a, which */
-/* implements object file reading and writing. */
-/* */
-/* Many exotic languages can interoperate with C code but have a harder time */
-/* with C++ due to name mangling. So in addition to C, this interface enables */
-/* tools written in such languages. */
-/* */
-/*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_OBJECT_H
-#define LLVM_C_OBJECT_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-#include "llvm/Config/llvm-config.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCObject Object file reading and writing
- * @ingroup LLVMC
- *
- * @{
- */
-
-// Opaque type wrappers
-typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
-typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef;
-typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef;
-
-typedef enum {
- LLVMBinaryTypeArchive, /**< Archive file. */
- LLVMBinaryTypeMachOUniversalBinary, /**< Mach-O Universal Binary file. */
- LLVMBinaryTypeCOFFImportFile, /**< COFF Import file. */
- LLVMBinaryTypeIR, /**< LLVM IR. */
- LLVMBinaryTypeWinRes, /**< Windows resource (.res) file. */
- LLVMBinaryTypeCOFF, /**< COFF Object file. */
- LLVMBinaryTypeELF32L, /**< ELF 32-bit, little endian. */
- LLVMBinaryTypeELF32B, /**< ELF 32-bit, big endian. */
- LLVMBinaryTypeELF64L, /**< ELF 64-bit, little endian. */
- LLVMBinaryTypeELF64B, /**< ELF 64-bit, big endian. */
- LLVMBinaryTypeMachO32L, /**< MachO 32-bit, little endian. */
- LLVMBinaryTypeMachO32B, /**< MachO 32-bit, big endian. */
- LLVMBinaryTypeMachO64L, /**< MachO 64-bit, little endian. */
- LLVMBinaryTypeMachO64B, /**< MachO 64-bit, big endian. */
- LLVMBinaryTypeWasm, /**< Web Assembly. */
-} LLVMBinaryType;
-
-/**
- * Create a binary file from the given memory buffer.
- *
- * The exact type of the binary file will be inferred automatically, and the
- * appropriate implementation selected. The context may be NULL except if
- * the resulting file is an LLVM IR file.
- *
- * The memory buffer is not consumed by this function. It is the responsibilty
- * of the caller to free it with \c LLVMDisposeMemoryBuffer.
- *
- * If NULL is returned, the \p ErrorMessage parameter is populated with the
- * error's description. It is then the caller's responsibility to free this
- * message by calling \c LLVMDisposeMessage.
- *
- * @see llvm::object::createBinary
- */
-LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf,
- LLVMContextRef Context,
- char **ErrorMessage);
-
-/**
- * Dispose of a binary file.
- *
- * The binary file does not own its backing buffer. It is the responsibilty
- * of the caller to free it with \c LLVMDisposeMemoryBuffer.
- */
-void LLVMDisposeBinary(LLVMBinaryRef BR);
-
-/**
- * Retrieves a copy of the memory buffer associated with this object file.
- *
- * The returned buffer is merely a shallow copy and does not own the actual
- * backing buffer of the binary. Nevertheless, it is the responsibility of the
- * caller to free it with \c LLVMDisposeMemoryBuffer.
- *
- * @see llvm::object::getMemoryBufferRef
- */
-LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR);
-
-/**
- * Retrieve the specific type of a binary.
- *
- * @see llvm::object::Binary::getType
- */
-LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR);
-
-/*
- * For a Mach-O universal binary file, retrieves the object file corresponding
- * to the given architecture if it is present as a slice.
- *
- * If NULL is returned, the \p ErrorMessage parameter is populated with the
- * error's description. It is then the caller's responsibility to free this
- * message by calling \c LLVMDisposeMessage.
- *
- * It is the responsiblity of the caller to free the returned object file by
- * calling \c LLVMDisposeBinary.
- */
-LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR,
- const char *Arch,
- size_t ArchLen,
- char **ErrorMessage);
-
-/**
- * Retrieve a copy of the section iterator for this object file.
- *
- * If there are no sections, the result is NULL.
- *
- * The returned iterator is merely a shallow copy. Nevertheless, it is
- * the responsibility of the caller to free it with
- * \c LLVMDisposeSectionIterator.
- *
- * @see llvm::object::sections()
- */
-LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR);
-
-/**
- * Returns whether the given section iterator is at the end.
- *
- * @see llvm::object::section_end
- */
-LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR,
- LLVMSectionIteratorRef SI);
-
-/**
- * Retrieve a copy of the symbol iterator for this object file.
- *
- * If there are no symbols, the result is NULL.
- *
- * The returned iterator is merely a shallow copy. Nevertheless, it is
- * the responsibility of the caller to free it with
- * \c LLVMDisposeSymbolIterator.
- *
- * @see llvm::object::symbols()
- */
-LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR);
-
-/**
- * Returns whether the given symbol iterator is at the end.
- *
- * @see llvm::object::symbol_end
- */
-LLVMBool LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR,
- LLVMSymbolIteratorRef SI);
-
-void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
-
-void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
-void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect,
- LLVMSymbolIteratorRef Sym);
-
-// ObjectFile Symbol iterators
-void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
-void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
-
-// SectionRef accessors
-const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
-uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);
-const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI);
-uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI);
-LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI,
- LLVMSymbolIteratorRef Sym);
-
-// Section Relocation iterators
-LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section);
-void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI);
-LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section,
- LLVMRelocationIteratorRef RI);
-void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI);
-
-
-// SymbolRef accessors
-const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI);
-uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
-uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
-
-// RelocationRef accessors
-uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI);
-LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI);
-uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI);
-// NOTE: Caller takes ownership of returned string of the two
-// following functions.
-const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
-const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
-
-/** Deprecated: Use LLVMBinaryRef instead. */
-typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
-
-/** Deprecated: Use LLVMCreateBinary instead. */
-LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
-
-/** Deprecated: Use LLVMDisposeBinary instead. */
-void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
-
-/** Deprecated: Use LLVMObjectFileCopySectionIterator instead. */
-LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
-
-/** Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead. */
-LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
- LLVMSectionIteratorRef SI);
-
-/** Deprecated: Use LLVMObjectFileCopySymbolIterator instead. */
-LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
-
-/** Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead. */
-LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
- LLVMSymbolIteratorRef SI);
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Object.h - Object Lib C Iface --------------------*- 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 header declares the C interface to libLLVMObject.a, which */
+/* implements object file reading and writing. */
+/* */
+/* Many exotic languages can interoperate with C code but have a harder time */
+/* with C++ due to name mangling. So in addition to C, this interface enables */
+/* tools written in such languages. */
+/* */
+/*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_OBJECT_H
+#define LLVM_C_OBJECT_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+#include "llvm/Config/llvm-config.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCObject Object file reading and writing
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+// Opaque type wrappers
+typedef struct LLVMOpaqueSectionIterator *LLVMSectionIteratorRef;
+typedef struct LLVMOpaqueSymbolIterator *LLVMSymbolIteratorRef;
+typedef struct LLVMOpaqueRelocationIterator *LLVMRelocationIteratorRef;
+
+typedef enum {
+ LLVMBinaryTypeArchive, /**< Archive file. */
+ LLVMBinaryTypeMachOUniversalBinary, /**< Mach-O Universal Binary file. */
+ LLVMBinaryTypeCOFFImportFile, /**< COFF Import file. */
+ LLVMBinaryTypeIR, /**< LLVM IR. */
+ LLVMBinaryTypeWinRes, /**< Windows resource (.res) file. */
+ LLVMBinaryTypeCOFF, /**< COFF Object file. */
+ LLVMBinaryTypeELF32L, /**< ELF 32-bit, little endian. */
+ LLVMBinaryTypeELF32B, /**< ELF 32-bit, big endian. */
+ LLVMBinaryTypeELF64L, /**< ELF 64-bit, little endian. */
+ LLVMBinaryTypeELF64B, /**< ELF 64-bit, big endian. */
+ LLVMBinaryTypeMachO32L, /**< MachO 32-bit, little endian. */
+ LLVMBinaryTypeMachO32B, /**< MachO 32-bit, big endian. */
+ LLVMBinaryTypeMachO64L, /**< MachO 64-bit, little endian. */
+ LLVMBinaryTypeMachO64B, /**< MachO 64-bit, big endian. */
+ LLVMBinaryTypeWasm, /**< Web Assembly. */
+} LLVMBinaryType;
+
+/**
+ * Create a binary file from the given memory buffer.
+ *
+ * The exact type of the binary file will be inferred automatically, and the
+ * appropriate implementation selected. The context may be NULL except if
+ * the resulting file is an LLVM IR file.
+ *
+ * The memory buffer is not consumed by this function. It is the responsibilty
+ * of the caller to free it with \c LLVMDisposeMemoryBuffer.
+ *
+ * If NULL is returned, the \p ErrorMessage parameter is populated with the
+ * error's description. It is then the caller's responsibility to free this
+ * message by calling \c LLVMDisposeMessage.
+ *
+ * @see llvm::object::createBinary
+ */
+LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf,
+ LLVMContextRef Context,
+ char **ErrorMessage);
+
+/**
+ * Dispose of a binary file.
+ *
+ * The binary file does not own its backing buffer. It is the responsibilty
+ * of the caller to free it with \c LLVMDisposeMemoryBuffer.
+ */
+void LLVMDisposeBinary(LLVMBinaryRef BR);
+
+/**
+ * Retrieves a copy of the memory buffer associated with this object file.
+ *
+ * The returned buffer is merely a shallow copy and does not own the actual
+ * backing buffer of the binary. Nevertheless, it is the responsibility of the
+ * caller to free it with \c LLVMDisposeMemoryBuffer.
+ *
+ * @see llvm::object::getMemoryBufferRef
+ */
+LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR);
+
+/**
+ * Retrieve the specific type of a binary.
+ *
+ * @see llvm::object::Binary::getType
+ */
+LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR);
+
+/*
+ * For a Mach-O universal binary file, retrieves the object file corresponding
+ * to the given architecture if it is present as a slice.
+ *
+ * If NULL is returned, the \p ErrorMessage parameter is populated with the
+ * error's description. It is then the caller's responsibility to free this
+ * message by calling \c LLVMDisposeMessage.
+ *
+ * It is the responsiblity of the caller to free the returned object file by
+ * calling \c LLVMDisposeBinary.
+ */
+LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR,
+ const char *Arch,
+ size_t ArchLen,
+ char **ErrorMessage);
+
+/**
+ * Retrieve a copy of the section iterator for this object file.
+ *
+ * If there are no sections, the result is NULL.
+ *
+ * The returned iterator is merely a shallow copy. Nevertheless, it is
+ * the responsibility of the caller to free it with
+ * \c LLVMDisposeSectionIterator.
+ *
+ * @see llvm::object::sections()
+ */
+LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR);
+
+/**
+ * Returns whether the given section iterator is at the end.
+ *
+ * @see llvm::object::section_end
+ */
+LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR,
+ LLVMSectionIteratorRef SI);
+
+/**
+ * Retrieve a copy of the symbol iterator for this object file.
+ *
+ * If there are no symbols, the result is NULL.
+ *
+ * The returned iterator is merely a shallow copy. Nevertheless, it is
+ * the responsibility of the caller to free it with
+ * \c LLVMDisposeSymbolIterator.
+ *
+ * @see llvm::object::symbols()
+ */
+LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR);
+
+/**
+ * Returns whether the given symbol iterator is at the end.
+ *
+ * @see llvm::object::symbol_end
+ */
+LLVMBool LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR,
+ LLVMSymbolIteratorRef SI);
+
+void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI);
+
+void LLVMMoveToNextSection(LLVMSectionIteratorRef SI);
+void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect,
+ LLVMSymbolIteratorRef Sym);
+
+// ObjectFile Symbol iterators
+void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI);
+void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI);
+
+// SectionRef accessors
+const char *LLVMGetSectionName(LLVMSectionIteratorRef SI);
+uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI);
+const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI);
+uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI);
+LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI,
+ LLVMSymbolIteratorRef Sym);
+
+// Section Relocation iterators
+LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section);
+void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI);
+LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section,
+ LLVMRelocationIteratorRef RI);
+void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI);
+
+
+// SymbolRef accessors
+const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI);
+uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI);
+uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI);
+
+// RelocationRef accessors
+uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI);
+LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI);
+uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI);
+// NOTE: Caller takes ownership of returned string of the two
+// following functions.
+const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI);
+const char *LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI);
+
+/** Deprecated: Use LLVMBinaryRef instead. */
+typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef;
+
+/** Deprecated: Use LLVMCreateBinary instead. */
+LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf);
+
+/** Deprecated: Use LLVMDisposeBinary instead. */
+void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileCopySectionIterator instead. */
+LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead. */
+LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+ LLVMSectionIteratorRef SI);
+
+/** Deprecated: Use LLVMObjectFileCopySymbolIterator instead. */
+LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile);
+
+/** Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead. */
+LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile,
+ LLVMSymbolIteratorRef SI);
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Orc.h b/contrib/libs/llvm12/include/llvm-c/Orc.h
index b05fde68381..5414e42548f 100644
--- a/contrib/libs/llvm12/include/llvm-c/Orc.h
+++ b/contrib/libs/llvm12/include/llvm-c/Orc.h
@@ -1,51 +1,51 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===---------------- llvm-c/Orc.h - OrcV2 C bindings -----------*- 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 header declares the C interface to libLLVMOrcJIT.a, which implements *|
-|* JIT compilation of LLVM IR. Minimal documentation of C API specific issues *|
-|* (especially memory ownership rules) is provided. Core Orc concepts are *|
-|* documented in llvm/docs/ORCv2.rst and APIs are documented in the C++ *|
-|* headers *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-|* Note: This interface is experimental. It is *NOT* stable, and may be *|
-|* changed without warning. Only C API usage documentation is *|
-|* provided. See the C++ documentation for all higher level ORC API *|
-|* details. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_ORC_H
-#define LLVM_C_ORC_H
-
-#include "llvm-c/Error.h"
-#include "llvm-c/TargetMachine.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * Represents an address in the target process.
- */
-typedef uint64_t LLVMOrcJITTargetAddress;
-
-/**
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===---------------- llvm-c/Orc.h - OrcV2 C bindings -----------*- 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 header declares the C interface to libLLVMOrcJIT.a, which implements *|
+|* JIT compilation of LLVM IR. Minimal documentation of C API specific issues *|
+|* (especially memory ownership rules) is provided. Core Orc concepts are *|
+|* documented in llvm/docs/ORCv2.rst and APIs are documented in the C++ *|
+|* headers *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+|* Note: This interface is experimental. It is *NOT* stable, and may be *|
+|* changed without warning. Only C API usage documentation is *|
+|* provided. See the C++ documentation for all higher level ORC API *|
+|* details. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_ORC_H
+#define LLVM_C_ORC_H
+
+#include "llvm-c/Error.h"
+#include "llvm-c/TargetMachine.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * Represents an address in the target process.
+ */
+typedef uint64_t LLVMOrcJITTargetAddress;
+
+/**
* Represents generic linkage flags for a symbol definition.
*/
typedef enum {
@@ -75,11 +75,11 @@ typedef struct {
} LLVMJITEvaluatedSymbol;
/**
- * A reference to an orc::ExecutionSession instance.
- */
-typedef struct LLVMOrcOpaqueExecutionSession *LLVMOrcExecutionSessionRef;
-
-/**
+ * A reference to an orc::ExecutionSession instance.
+ */
+typedef struct LLVMOrcOpaqueExecutionSession *LLVMOrcExecutionSessionRef;
+
+/**
* Error reporter function.
*/
typedef void (*LLVMOrcErrorReporterFunction)(void *Ctx, LLVMErrorRef Err);
@@ -90,12 +90,12 @@ typedef void (*LLVMOrcErrorReporterFunction)(void *Ctx, LLVMErrorRef Err);
typedef struct LLVMOrcOpaqueSymbolStringPool *LLVMOrcSymbolStringPoolRef;
/**
- * A reference to an orc::SymbolStringPool table entry.
- */
+ * A reference to an orc::SymbolStringPool table entry.
+ */
typedef struct LLVMOrcOpaqueSymbolStringPoolEntry
- *LLVMOrcSymbolStringPoolEntryRef;
-
-/**
+ *LLVMOrcSymbolStringPoolEntryRef;
+
+/**
* Represents a pair of a symbol name and an evaluated symbol.
*/
typedef struct {
@@ -167,16 +167,16 @@ typedef LLVMOrcCLookupSetElement *LLVMOrcCLookupSet;
typedef struct LLVMOrcOpaqueMaterializationUnit *LLVMOrcMaterializationUnitRef;
/**
- * A reference to an orc::JITDylib instance.
- */
-typedef struct LLVMOrcOpaqueJITDylib *LLVMOrcJITDylibRef;
-
-/**
+ * A reference to an orc::JITDylib instance.
+ */
+typedef struct LLVMOrcOpaqueJITDylib *LLVMOrcJITDylibRef;
+
+/**
* A reference to an orc::ResourceTracker instance.
- */
+ */
typedef struct LLVMOrcOpaqueResourceTracker *LLVMOrcResourceTrackerRef;
-
-/**
+
+/**
* A reference to an orc::DefinitionGenerator.
*/
typedef struct LLVMOrcOpaqueDefinitionGenerator
@@ -236,33 +236,33 @@ typedef LLVMErrorRef (*LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction)(
LLVMOrcCLookupSet LookupSet, size_t LookupSetSize);
/**
- * Predicate function for SymbolStringPoolEntries.
- */
+ * Predicate function for SymbolStringPoolEntries.
+ */
typedef int (*LLVMOrcSymbolPredicate)(void *Ctx,
LLVMOrcSymbolStringPoolEntryRef Sym);
-
-/**
- * A reference to an orc::ThreadSafeContext instance.
- */
-typedef struct LLVMOrcOpaqueThreadSafeContext *LLVMOrcThreadSafeContextRef;
-
-/**
- * A reference to an orc::ThreadSafeModule instance.
- */
-typedef struct LLVMOrcOpaqueThreadSafeModule *LLVMOrcThreadSafeModuleRef;
-
-/**
- * A reference to an orc::JITTargetMachineBuilder instance.
- */
-typedef struct LLVMOrcOpaqueJITTargetMachineBuilder
- *LLVMOrcJITTargetMachineBuilderRef;
-
-/**
+
+/**
+ * A reference to an orc::ThreadSafeContext instance.
+ */
+typedef struct LLVMOrcOpaqueThreadSafeContext *LLVMOrcThreadSafeContextRef;
+
+/**
+ * A reference to an orc::ThreadSafeModule instance.
+ */
+typedef struct LLVMOrcOpaqueThreadSafeModule *LLVMOrcThreadSafeModuleRef;
+
+/**
+ * A reference to an orc::JITTargetMachineBuilder instance.
+ */
+typedef struct LLVMOrcOpaqueJITTargetMachineBuilder
+ *LLVMOrcJITTargetMachineBuilderRef;
+
+/**
* A reference to an orc::ObjectLayer instance.
- */
+ */
typedef struct LLVMOrcOpaqueObjectLayer *LLVMOrcObjectLayerRef;
-
-/**
+
+/**
* Attach a custom error reporter function to the ExecutionSession.
*
* The error reporter will be called to deliver failure notices that can not be
@@ -270,12 +270,12 @@ typedef struct LLVMOrcOpaqueObjectLayer *LLVMOrcObjectLayerRef;
* the JIT linker is typically reported via the error reporter (callers
* requesting definitions from the JIT will typically be delivered a
* FailureToMaterialize error instead).
- */
+ */
void LLVMOrcExecutionSessionSetErrorReporter(
LLVMOrcExecutionSessionRef ES, LLVMOrcErrorReporterFunction ReportError,
void *Ctx);
-
-/**
+
+/**
* Return a reference to the SymbolStringPool for an ExecutionSession.
*
* Ownership of the pool remains with the ExecutionSession: The caller is
@@ -297,33 +297,33 @@ LLVMOrcExecutionSessionGetSymbolStringPool(LLVMOrcExecutionSessionRef ES);
void LLVMOrcSymbolStringPoolClearDeadEntries(LLVMOrcSymbolStringPoolRef SSP);
/**
- * Intern a string in the ExecutionSession's SymbolStringPool and return a
- * reference to it. This increments the ref-count of the pool entry, and the
- * returned value should be released once the client is done with it by
- * calling LLVMOrReleaseSymbolStringPoolEntry.
- *
- * Since strings are uniqued within the SymbolStringPool
- * LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string
- * equality.
- *
- * Note that this function does not perform linker-mangling on the string.
- */
-LLVMOrcSymbolStringPoolEntryRef
-LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name);
-
-/**
+ * Intern a string in the ExecutionSession's SymbolStringPool and return a
+ * reference to it. This increments the ref-count of the pool entry, and the
+ * returned value should be released once the client is done with it by
+ * calling LLVMOrReleaseSymbolStringPoolEntry.
+ *
+ * Since strings are uniqued within the SymbolStringPool
+ * LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string
+ * equality.
+ *
+ * Note that this function does not perform linker-mangling on the string.
+ */
+LLVMOrcSymbolStringPoolEntryRef
+LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name);
+
+/**
* Increments the ref-count for a SymbolStringPool entry.
*/
void LLVMOrcRetainSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
/**
- * Reduces the ref-count for of a SymbolStringPool entry.
- */
-void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
-
+ * Reduces the ref-count for of a SymbolStringPool entry.
+ */
+void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
+
const char *LLVMOrcSymbolStringPoolEntryStr(LLVMOrcSymbolStringPoolEntryRef S);
-/**
+/**
* Reduces the ref-count of a ResourceTracker.
*/
void LLVMOrcReleaseResourceTracker(LLVMOrcResourceTrackerRef RT);
@@ -342,13 +342,13 @@ void LLVMOrcResourceTrackerTransferTo(LLVMOrcResourceTrackerRef SrcRT,
LLVMErrorRef LLVMOrcResourceTrackerRemove(LLVMOrcResourceTrackerRef RT);
/**
- * Dispose of a JITDylib::DefinitionGenerator. This should only be called if
- * ownership has not been passed to a JITDylib (e.g. because some error
- * prevented the client from calling LLVMOrcJITDylibAddGenerator).
- */
+ * Dispose of a JITDylib::DefinitionGenerator. This should only be called if
+ * ownership has not been passed to a JITDylib (e.g. because some error
+ * prevented the client from calling LLVMOrcJITDylibAddGenerator).
+ */
void LLVMOrcDisposeDefinitionGenerator(LLVMOrcDefinitionGeneratorRef DG);
-
-/**
+
+/**
* Dispose of a MaterializationUnit.
*/
void LLVMOrcDisposeMaterializationUnit(LLVMOrcMaterializationUnitRef MU);
@@ -362,7 +362,7 @@ LLVMOrcAbsoluteSymbols(LLVMOrcCSymbolMapPairs Syms, size_t NumPairs);
/**
* Create a "bare" JITDylib.
- *
+ *
* The client is responsible for ensuring that the JITDylib's name is unique,
* e.g. by calling LLVMOrcExecutionSessionGetJTIDylibByName first.
*
@@ -433,118 +433,118 @@ LLVMErrorRef LLVMOrcJITDylibClear(LLVMOrcJITDylibRef JD);
/**
* Add a DefinitionGenerator to the given JITDylib.
*
- * The JITDylib will take ownership of the given generator: The client is no
- * longer responsible for managing its memory.
- */
-void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD,
+ * The JITDylib will take ownership of the given generator: The client is no
+ * longer responsible for managing its memory.
+ */
+void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD,
LLVMOrcDefinitionGeneratorRef DG);
-
-/**
+
+/**
* Create a custom generator.
*/
LLVMOrcDefinitionGeneratorRef LLVMOrcCreateCustomCAPIDefinitionGenerator(
LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction F, void *Ctx);
/**
- * Get a DynamicLibrarySearchGenerator that will reflect process symbols into
- * the JITDylib. On success the resulting generator is owned by the client.
- * Ownership is typically transferred by adding the instance to a JITDylib
- * using LLVMOrcJITDylibAddGenerator,
- *
- * The GlobalPrefix argument specifies the character that appears on the front
- * of linker-mangled symbols for the target platform (e.g. '_' on MachO).
- * If non-null, this character will be stripped from the start of all symbol
- * strings before passing the remaining substring to dlsym.
- *
- * The optional Filter and Ctx arguments can be used to supply a symbol name
- * filter: Only symbols for which the filter returns true will be visible to
- * JIT'd code. If the Filter argument is null then all process symbols will
- * be visible to JIT'd code. Note that the symbol name passed to the Filter
- * function is the full mangled symbol: The client is responsible for stripping
- * the global prefix if present.
- */
-LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess(
+ * Get a DynamicLibrarySearchGenerator that will reflect process symbols into
+ * the JITDylib. On success the resulting generator is owned by the client.
+ * Ownership is typically transferred by adding the instance to a JITDylib
+ * using LLVMOrcJITDylibAddGenerator,
+ *
+ * The GlobalPrefix argument specifies the character that appears on the front
+ * of linker-mangled symbols for the target platform (e.g. '_' on MachO).
+ * If non-null, this character will be stripped from the start of all symbol
+ * strings before passing the remaining substring to dlsym.
+ *
+ * The optional Filter and Ctx arguments can be used to supply a symbol name
+ * filter: Only symbols for which the filter returns true will be visible to
+ * JIT'd code. If the Filter argument is null then all process symbols will
+ * be visible to JIT'd code. Note that the symbol name passed to the Filter
+ * function is the full mangled symbol: The client is responsible for stripping
+ * the global prefix if present.
+ */
+LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess(
LLVMOrcDefinitionGeneratorRef *Result, char GlobalPrefx,
- LLVMOrcSymbolPredicate Filter, void *FilterCtx);
-
-/**
- * Create a ThreadSafeContext containing a new LLVMContext.
- *
- * Ownership of the underlying ThreadSafeContext data is shared: Clients
- * can and should dispose of their ThreadSafeContext as soon as they no longer
+ LLVMOrcSymbolPredicate Filter, void *FilterCtx);
+
+/**
+ * Create a ThreadSafeContext containing a new LLVMContext.
+ *
+ * Ownership of the underlying ThreadSafeContext data is shared: Clients
+ * can and should dispose of their ThreadSafeContext as soon as they no longer
* need to refer to it directly. Other references (e.g. from ThreadSafeModules)
- * will keep the data alive as long as it is needed.
- */
-LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void);
-
-/**
- * Get a reference to the wrapped LLVMContext.
- */
-LLVMContextRef
-LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx);
-
-/**
- * Dispose of a ThreadSafeContext.
- */
-void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx);
-
-/**
- * Create a ThreadSafeModule wrapper around the given LLVM module. This takes
- * ownership of the M argument which should not be disposed of or referenced
- * after this function returns.
- *
- * Ownership of the ThreadSafeModule is unique: If it is transferred to the JIT
+ * will keep the data alive as long as it is needed.
+ */
+LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void);
+
+/**
+ * Get a reference to the wrapped LLVMContext.
+ */
+LLVMContextRef
+LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx);
+
+/**
+ * Dispose of a ThreadSafeContext.
+ */
+void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx);
+
+/**
+ * Create a ThreadSafeModule wrapper around the given LLVM module. This takes
+ * ownership of the M argument which should not be disposed of or referenced
+ * after this function returns.
+ *
+ * Ownership of the ThreadSafeModule is unique: If it is transferred to the JIT
* (e.g. by LLVMOrcLLJITAddLLVMIRModule) then the client is no longer
- * responsible for it. If it is not transferred to the JIT then the client
- * should call LLVMOrcDisposeThreadSafeModule to dispose of it.
- */
-LLVMOrcThreadSafeModuleRef
-LLVMOrcCreateNewThreadSafeModule(LLVMModuleRef M,
- LLVMOrcThreadSafeContextRef TSCtx);
-
-/**
- * Dispose of a ThreadSafeModule. This should only be called if ownership has
- * not been passed to LLJIT (e.g. because some error prevented the client from
- * adding this to the JIT).
- */
-void LLVMOrcDisposeThreadSafeModule(LLVMOrcThreadSafeModuleRef TSM);
-
-/**
- * Create a JITTargetMachineBuilder by detecting the host.
- *
- * On success the client owns the resulting JITTargetMachineBuilder. It must be
- * passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder) or disposed
- * of by calling LLVMOrcDisposeJITTargetMachineBuilder.
- */
-LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost(
- LLVMOrcJITTargetMachineBuilderRef *Result);
-
-/**
- * Create a JITTargetMachineBuilder from the given TargetMachine template.
- *
- * This operation takes ownership of the given TargetMachine and destroys it
- * before returing. The resulting JITTargetMachineBuilder is owned by the client
- * and must be passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder)
- * or disposed of by calling LLVMOrcDisposeJITTargetMachineBuilder.
- */
-LLVMOrcJITTargetMachineBuilderRef
-LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(LLVMTargetMachineRef TM);
-
-/**
- * Dispose of a JITTargetMachineBuilder.
- */
-void LLVMOrcDisposeJITTargetMachineBuilder(
- LLVMOrcJITTargetMachineBuilderRef JTMB);
-
-/**
+ * responsible for it. If it is not transferred to the JIT then the client
+ * should call LLVMOrcDisposeThreadSafeModule to dispose of it.
+ */
+LLVMOrcThreadSafeModuleRef
+LLVMOrcCreateNewThreadSafeModule(LLVMModuleRef M,
+ LLVMOrcThreadSafeContextRef TSCtx);
+
+/**
+ * Dispose of a ThreadSafeModule. This should only be called if ownership has
+ * not been passed to LLJIT (e.g. because some error prevented the client from
+ * adding this to the JIT).
+ */
+void LLVMOrcDisposeThreadSafeModule(LLVMOrcThreadSafeModuleRef TSM);
+
+/**
+ * Create a JITTargetMachineBuilder by detecting the host.
+ *
+ * On success the client owns the resulting JITTargetMachineBuilder. It must be
+ * passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder) or disposed
+ * of by calling LLVMOrcDisposeJITTargetMachineBuilder.
+ */
+LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost(
+ LLVMOrcJITTargetMachineBuilderRef *Result);
+
+/**
+ * Create a JITTargetMachineBuilder from the given TargetMachine template.
+ *
+ * This operation takes ownership of the given TargetMachine and destroys it
+ * before returing. The resulting JITTargetMachineBuilder is owned by the client
+ * and must be passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder)
+ * or disposed of by calling LLVMOrcDisposeJITTargetMachineBuilder.
+ */
+LLVMOrcJITTargetMachineBuilderRef
+LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(LLVMTargetMachineRef TM);
+
+/**
+ * Dispose of a JITTargetMachineBuilder.
+ */
+void LLVMOrcDisposeJITTargetMachineBuilder(
+ LLVMOrcJITTargetMachineBuilderRef JTMB);
+
+/**
* Dispose of an ObjectLayer.
- */
+ */
void LLVMOrcDisposeObjectLayer(LLVMOrcObjectLayerRef ObjLayer);
-
-LLVM_C_EXTERN_C_END
-
-#endif /* LLVM_C_ORC_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+
+LLVM_C_EXTERN_C_END
+
+#endif /* LLVM_C_ORC_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Remarks.h b/contrib/libs/llvm12/include/llvm-c/Remarks.h
index a4bcba852d8..bc99e9f48e2 100644
--- a/contrib/libs/llvm12/include/llvm-c/Remarks.h
+++ b/contrib/libs/llvm12/include/llvm-c/Remarks.h
@@ -1,355 +1,355 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Remarks.h - Remarks Public 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 header provides a public interface to a remark diagnostics library. *|
-|* LLVM provides an implementation of this interface. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_REMARKS_H
-#define LLVM_C_REMARKS_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-#ifdef __cplusplus
-#include <cstddef>
-#else
-#include <stddef.h>
-#endif /* !defined(__cplusplus) */
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCREMARKS Remarks
- * @ingroup LLVMC
- *
- * @{
- */
-
-// 0 -> 1: Bitstream remarks support.
-#define REMARKS_API_VERSION 1
-
-/**
- * The type of the emitted remark.
- */
-enum LLVMRemarkType {
- LLVMRemarkTypeUnknown,
- LLVMRemarkTypePassed,
- LLVMRemarkTypeMissed,
- LLVMRemarkTypeAnalysis,
- LLVMRemarkTypeAnalysisFPCommute,
- LLVMRemarkTypeAnalysisAliasing,
- LLVMRemarkTypeFailure
-};
-
-/**
- * String containing a buffer and a length. The buffer is not guaranteed to be
- * zero-terminated.
- *
- * \since REMARKS_API_VERSION=0
- */
-typedef struct LLVMRemarkOpaqueString *LLVMRemarkStringRef;
-
-/**
- * Returns the buffer holding the string.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern const char *LLVMRemarkStringGetData(LLVMRemarkStringRef String);
-
-/**
- * Returns the size of the string.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String);
-
-/**
- * DebugLoc containing File, Line and Column.
- *
- * \since REMARKS_API_VERSION=0
- */
-typedef struct LLVMRemarkOpaqueDebugLoc *LLVMRemarkDebugLocRef;
-
-/**
- * Return the path to the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef
-LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL);
-
-/**
- * Return the line in the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMRemarkDebugLocGetSourceLine(LLVMRemarkDebugLocRef DL);
-
-/**
- * Return the column in the source file for a debug location.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMRemarkDebugLocGetSourceColumn(LLVMRemarkDebugLocRef DL);
-
-/**
- * Element of the "Args" list. The key might give more information about what
- * the semantics of the value are, e.g. "Callee" will tell you that the value
- * is a symbol that names a function.
- *
- * \since REMARKS_API_VERSION=0
- */
-typedef struct LLVMRemarkOpaqueArg *LLVMRemarkArgRef;
-
-/**
- * Returns the key of an argument. The key defines what the value is, and the
- * same key can appear multiple times in the list of arguments.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef LLVMRemarkArgGetKey(LLVMRemarkArgRef Arg);
-
-/**
- * Returns the value of an argument. This is a string that can contain newlines.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg);
-
-/**
- * Returns the debug location that is attached to the value of this argument.
- *
- * If there is no debug location, the return value will be `NULL`.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkDebugLocRef LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg);
-
-/**
- * A remark emitted by the compiler.
- *
- * \since REMARKS_API_VERSION=0
- */
-typedef struct LLVMRemarkOpaqueEntry *LLVMRemarkEntryRef;
-
-/**
- * Free the resources used by the remark entry.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark);
-
-/**
- * The type of the remark. For example, it can allow users to only keep the
- * missed optimizations from the compiler.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern enum LLVMRemarkType LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark);
-
-/**
- * Get the name of the pass that emitted this remark.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef
-LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark);
-
-/**
- * Get an identifier of the remark.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef
-LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark);
-
-/**
- * Get the name of the function being processed when the remark was emitted.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkStringRef
-LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark);
-
-/**
- * Returns the debug location that is attached to this remark.
- *
- * If there is no debug location, the return value will be `NULL`.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkDebugLocRef
-LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark);
-
-/**
- * Return the hotness of the remark.
- *
- * A hotness of `0` means this value is not set.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark);
-
-/**
- * The number of arguments the remark holds.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark);
-
-/**
- * Get a new iterator to iterate over a remark's argument.
- *
- * If there are no arguments in \p Remark, the return value will be `NULL`.
- *
- * The lifetime of the returned value is bound to the lifetime of \p Remark.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark);
-
-/**
- * Get the next argument in \p Remark from the position of \p It.
- *
- * Returns `NULL` if there are no more arguments available.
- *
- * The lifetime of the returned value is bound to the lifetime of \p Remark.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkArgRef LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It,
- LLVMRemarkEntryRef Remark);
-
-typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef;
-
-/**
- * Creates a remark parser that can be used to parse the buffer located in \p
- * Buf of size \p Size bytes.
- *
- * \p Buf cannot be `NULL`.
- *
- * This function should be paired with LLVMRemarkParserDispose() to avoid
- * leaking resources.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf,
- uint64_t Size);
-
-/**
- * Creates a remark parser that can be used to parse the buffer located in \p
- * Buf of size \p Size bytes.
- *
- * \p Buf cannot be `NULL`.
- *
- * This function should be paired with LLVMRemarkParserDispose() to avoid
- * leaking resources.
- *
- * \since REMARKS_API_VERSION=1
- */
-extern LLVMRemarkParserRef LLVMRemarkParserCreateBitstream(const void *Buf,
- uint64_t Size);
-
-/**
- * Returns the next remark in the file.
- *
- * The value pointed to by the return value needs to be disposed using a call to
- * LLVMRemarkEntryDispose().
- *
- * All the entries in the returned value that are of LLVMRemarkStringRef type
- * will become invalidated once a call to LLVMRemarkParserDispose is made.
- *
- * If the parser reaches the end of the buffer, the return value will be `NULL`.
- *
- * In the case of an error, the return value will be `NULL`, and:
- *
- * 1) LLVMRemarkParserHasError() will return `1`.
- *
- * 2) LLVMRemarkParserGetErrorMessage() will return a descriptive error
- * message.
- *
- * An error may occur if:
- *
- * 1) An argument is invalid.
- *
- * 2) There is a parsing error. This can occur on things like malformed YAML.
- *
- * 3) There is a Remark semantic error. This can occur on well-formed files with
- * missing or extra fields.
- *
- * Here is a quick example of the usage:
- *
- * ```
- * LLVMRemarkParserRef Parser = LLVMRemarkParserCreateYAML(Buf, Size);
- * LLVMRemarkEntryRef Remark = NULL;
- * while ((Remark = LLVMRemarkParserGetNext(Parser))) {
- * // use Remark
- * LLVMRemarkEntryDispose(Remark); // Release memory.
- * }
- * bool HasError = LLVMRemarkParserHasError(Parser);
- * LLVMRemarkParserDispose(Parser);
- * ```
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMRemarkEntryRef LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser);
-
-/**
- * Returns `1` if the parser encountered an error while parsing the buffer.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser);
-
-/**
- * Returns a null-terminated string containing an error message.
- *
- * In case of no error, the result is `NULL`.
- *
- * The memory of the string is bound to the lifetime of \p Parser. If
- * LLVMRemarkParserDispose() is called, the memory of the string will be
- * released.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern const char *LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser);
-
-/**
- * Releases all the resources used by \p Parser.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser);
-
-/**
- * Returns the version of the remarks library.
- *
- * \since REMARKS_API_VERSION=0
- */
-extern uint32_t LLVMRemarkVersion(void);
-
-/**
- * @} // endgoup LLVMCREMARKS
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif /* LLVM_C_REMARKS_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Remarks.h - Remarks Public 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 header provides a public interface to a remark diagnostics library. *|
+|* LLVM provides an implementation of this interface. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_REMARKS_H
+#define LLVM_C_REMARKS_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif /* !defined(__cplusplus) */
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCREMARKS Remarks
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+// 0 -> 1: Bitstream remarks support.
+#define REMARKS_API_VERSION 1
+
+/**
+ * The type of the emitted remark.
+ */
+enum LLVMRemarkType {
+ LLVMRemarkTypeUnknown,
+ LLVMRemarkTypePassed,
+ LLVMRemarkTypeMissed,
+ LLVMRemarkTypeAnalysis,
+ LLVMRemarkTypeAnalysisFPCommute,
+ LLVMRemarkTypeAnalysisAliasing,
+ LLVMRemarkTypeFailure
+};
+
+/**
+ * String containing a buffer and a length. The buffer is not guaranteed to be
+ * zero-terminated.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueString *LLVMRemarkStringRef;
+
+/**
+ * Returns the buffer holding the string.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern const char *LLVMRemarkStringGetData(LLVMRemarkStringRef String);
+
+/**
+ * Returns the size of the string.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String);
+
+/**
+ * DebugLoc containing File, Line and Column.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueDebugLoc *LLVMRemarkDebugLocRef;
+
+/**
+ * Return the path to the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Return the line in the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkDebugLocGetSourceLine(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Return the column in the source file for a debug location.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkDebugLocGetSourceColumn(LLVMRemarkDebugLocRef DL);
+
+/**
+ * Element of the "Args" list. The key might give more information about what
+ * the semantics of the value are, e.g. "Callee" will tell you that the value
+ * is a symbol that names a function.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueArg *LLVMRemarkArgRef;
+
+/**
+ * Returns the key of an argument. The key defines what the value is, and the
+ * same key can appear multiple times in the list of arguments.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef LLVMRemarkArgGetKey(LLVMRemarkArgRef Arg);
+
+/**
+ * Returns the value of an argument. This is a string that can contain newlines.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg);
+
+/**
+ * Returns the debug location that is attached to the value of this argument.
+ *
+ * If there is no debug location, the return value will be `NULL`.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkDebugLocRef LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg);
+
+/**
+ * A remark emitted by the compiler.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+typedef struct LLVMRemarkOpaqueEntry *LLVMRemarkEntryRef;
+
+/**
+ * Free the resources used by the remark entry.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark);
+
+/**
+ * The type of the remark. For example, it can allow users to only keep the
+ * missed optimizations from the compiler.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern enum LLVMRemarkType LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the name of the pass that emitted this remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get an identifier of the remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the name of the function being processed when the remark was emitted.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkStringRef
+LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark);
+
+/**
+ * Returns the debug location that is attached to this remark.
+ *
+ * If there is no debug location, the return value will be `NULL`.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkDebugLocRef
+LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark);
+
+/**
+ * Return the hotness of the remark.
+ *
+ * A hotness of `0` means this value is not set.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark);
+
+/**
+ * The number of arguments the remark holds.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get a new iterator to iterate over a remark's argument.
+ *
+ * If there are no arguments in \p Remark, the return value will be `NULL`.
+ *
+ * The lifetime of the returned value is bound to the lifetime of \p Remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark);
+
+/**
+ * Get the next argument in \p Remark from the position of \p It.
+ *
+ * Returns `NULL` if there are no more arguments available.
+ *
+ * The lifetime of the returned value is bound to the lifetime of \p Remark.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkArgRef LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It,
+ LLVMRemarkEntryRef Remark);
+
+typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef;
+
+/**
+ * Creates a remark parser that can be used to parse the buffer located in \p
+ * Buf of size \p Size bytes.
+ *
+ * \p Buf cannot be `NULL`.
+ *
+ * This function should be paired with LLVMRemarkParserDispose() to avoid
+ * leaking resources.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf,
+ uint64_t Size);
+
+/**
+ * Creates a remark parser that can be used to parse the buffer located in \p
+ * Buf of size \p Size bytes.
+ *
+ * \p Buf cannot be `NULL`.
+ *
+ * This function should be paired with LLVMRemarkParserDispose() to avoid
+ * leaking resources.
+ *
+ * \since REMARKS_API_VERSION=1
+ */
+extern LLVMRemarkParserRef LLVMRemarkParserCreateBitstream(const void *Buf,
+ uint64_t Size);
+
+/**
+ * Returns the next remark in the file.
+ *
+ * The value pointed to by the return value needs to be disposed using a call to
+ * LLVMRemarkEntryDispose().
+ *
+ * All the entries in the returned value that are of LLVMRemarkStringRef type
+ * will become invalidated once a call to LLVMRemarkParserDispose is made.
+ *
+ * If the parser reaches the end of the buffer, the return value will be `NULL`.
+ *
+ * In the case of an error, the return value will be `NULL`, and:
+ *
+ * 1) LLVMRemarkParserHasError() will return `1`.
+ *
+ * 2) LLVMRemarkParserGetErrorMessage() will return a descriptive error
+ * message.
+ *
+ * An error may occur if:
+ *
+ * 1) An argument is invalid.
+ *
+ * 2) There is a parsing error. This can occur on things like malformed YAML.
+ *
+ * 3) There is a Remark semantic error. This can occur on well-formed files with
+ * missing or extra fields.
+ *
+ * Here is a quick example of the usage:
+ *
+ * ```
+ * LLVMRemarkParserRef Parser = LLVMRemarkParserCreateYAML(Buf, Size);
+ * LLVMRemarkEntryRef Remark = NULL;
+ * while ((Remark = LLVMRemarkParserGetNext(Parser))) {
+ * // use Remark
+ * LLVMRemarkEntryDispose(Remark); // Release memory.
+ * }
+ * bool HasError = LLVMRemarkParserHasError(Parser);
+ * LLVMRemarkParserDispose(Parser);
+ * ```
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMRemarkEntryRef LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns `1` if the parser encountered an error while parsing the buffer.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns a null-terminated string containing an error message.
+ *
+ * In case of no error, the result is `NULL`.
+ *
+ * The memory of the string is bound to the lifetime of \p Parser. If
+ * LLVMRemarkParserDispose() is called, the memory of the string will be
+ * released.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern const char *LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser);
+
+/**
+ * Releases all the resources used by \p Parser.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser);
+
+/**
+ * Returns the version of the remarks library.
+ *
+ * \since REMARKS_API_VERSION=0
+ */
+extern uint32_t LLVMRemarkVersion(void);
+
+/**
+ * @} // endgoup LLVMCREMARKS
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif /* LLVM_C_REMARKS_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Support.h b/contrib/libs/llvm12/include/llvm-c/Support.h
index e740cb4bcb9..0d04d93682e 100644
--- a/contrib/libs/llvm12/include/llvm-c/Support.h
+++ b/contrib/libs/llvm12/include/llvm-c/Support.h
@@ -1,73 +1,73 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Support.h - Support 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 the LLVM support library. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_SUPPORT_H
-#define LLVM_C_SUPPORT_H
-
-#include "llvm-c/DataTypes.h"
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * This function permanently loads the dynamic library at the given path.
- * It is safe to call this function multiple times for the same library.
- *
- * @see sys::DynamicLibrary::LoadLibraryPermanently()
- */
-LLVMBool LLVMLoadLibraryPermanently(const char* Filename);
-
-/**
- * This function parses the given arguments using the LLVM command line parser.
- * Note that the only stable thing about this function is its signature; you
- * cannot rely on any particular set of command line arguments being interpreted
- * the same way across LLVM versions.
- *
- * @see llvm::cl::ParseCommandLineOptions()
- */
-void LLVMParseCommandLineOptions(int argc, const char *const *argv,
- const char *Overview);
-
-/**
- * This function will search through all previously loaded dynamic
- * libraries for the symbol \p symbolName. If it is found, the address of
- * that symbol is returned. If not, null is returned.
- *
- * @see sys::DynamicLibrary::SearchForAddressOfSymbol()
- */
-void *LLVMSearchForAddressOfSymbol(const char *symbolName);
-
-/**
- * This functions permanently adds the symbol \p symbolName with the
- * value \p symbolValue. These symbols are searched before any
- * libraries.
- *
- * @see sys::DynamicLibrary::AddSymbol()
- */
-void LLVMAddSymbol(const char *symbolName, void *symbolValue);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Support.h - Support 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 the LLVM support library. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_SUPPORT_H
+#define LLVM_C_SUPPORT_H
+
+#include "llvm-c/DataTypes.h"
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * This function permanently loads the dynamic library at the given path.
+ * It is safe to call this function multiple times for the same library.
+ *
+ * @see sys::DynamicLibrary::LoadLibraryPermanently()
+ */
+LLVMBool LLVMLoadLibraryPermanently(const char* Filename);
+
+/**
+ * This function parses the given arguments using the LLVM command line parser.
+ * Note that the only stable thing about this function is its signature; you
+ * cannot rely on any particular set of command line arguments being interpreted
+ * the same way across LLVM versions.
+ *
+ * @see llvm::cl::ParseCommandLineOptions()
+ */
+void LLVMParseCommandLineOptions(int argc, const char *const *argv,
+ const char *Overview);
+
+/**
+ * This function will search through all previously loaded dynamic
+ * libraries for the symbol \p symbolName. If it is found, the address of
+ * that symbol is returned. If not, null is returned.
+ *
+ * @see sys::DynamicLibrary::SearchForAddressOfSymbol()
+ */
+void *LLVMSearchForAddressOfSymbol(const char *symbolName);
+
+/**
+ * This functions permanently adds the symbol \p symbolName with the
+ * value \p symbolValue. These symbols are searched before any
+ * libraries.
+ *
+ * @see sys::DynamicLibrary::AddSymbol()
+ */
+void LLVMAddSymbol(const char *symbolName, void *symbolValue);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Target.h b/contrib/libs/llvm12/include/llvm-c/Target.h
index 43494a948c0..73b43eebc6f 100644
--- a/contrib/libs/llvm12/include/llvm-c/Target.h
+++ b/contrib/libs/llvm12/include/llvm-c/Target.h
@@ -1,303 +1,303 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- 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 header declares the C interface to libLLVMTarget.a, which */
-/* implements target information. */
-/* */
-/* Many exotic languages can interoperate with C code but have a harder time */
-/* with C++ due to name mangling. So in addition to C, this interface enables */
-/* tools written in such languages. */
-/* */
-/*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TARGET_H
-#define LLVM_C_TARGET_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-#include "llvm/Config/llvm-config.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTarget Target information
- * @ingroup LLVMC
- *
- * @{
- */
-
-enum LLVMByteOrdering { LLVMBigEndian, LLVMLittleEndian };
-
-typedef struct LLVMOpaqueTargetData *LLVMTargetDataRef;
-typedef struct LLVMOpaqueTargetLibraryInfotData *LLVMTargetLibraryInfoRef;
-
-/* Declare all of the target-initialization functions that are available. */
-#define LLVM_TARGET(TargetName) \
- void LLVMInitialize##TargetName##TargetInfo(void);
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-
-#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target(void);
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-
-#define LLVM_TARGET(TargetName) \
- void LLVMInitialize##TargetName##TargetMC(void);
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-
-/* Declare all of the available assembly printer initialization functions. */
-#define LLVM_ASM_PRINTER(TargetName) \
- void LLVMInitialize##TargetName##AsmPrinter(void);
-#include "llvm/Config/AsmPrinters.def"
-#undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
-
-/* Declare all of the available assembly parser initialization functions. */
-#define LLVM_ASM_PARSER(TargetName) \
- void LLVMInitialize##TargetName##AsmParser(void);
-#include "llvm/Config/AsmParsers.def"
-#undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
-
-/* Declare all of the available disassembler initialization functions. */
-#define LLVM_DISASSEMBLER(TargetName) \
- void LLVMInitialize##TargetName##Disassembler(void);
-#include "llvm/Config/Disassemblers.def"
-#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
-
-/** LLVMInitializeAllTargetInfos - The main program should call this function if
- it wants access to all available targets that LLVM is configured to
- support. */
-static inline void LLVMInitializeAllTargetInfos(void) {
-#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeAllTargets - The main program should call this function if it
- wants to link in all available targets that LLVM is configured to
- support. */
-static inline void LLVMInitializeAllTargets(void) {
-#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeAllTargetMCs - The main program should call this function if
- it wants access to all available target MC that LLVM is configured to
- support. */
-static inline void LLVMInitializeAllTargetMCs(void) {
-#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
-#include "llvm/Config/Targets.def"
-#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeAllAsmPrinters - The main program should call this function if
- it wants all asm printers that LLVM is configured to support, to make them
- available via the TargetRegistry. */
-static inline void LLVMInitializeAllAsmPrinters(void) {
-#define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
-#include "llvm/Config/AsmPrinters.def"
-#undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeAllAsmParsers - The main program should call this function if
- it wants all asm parsers that LLVM is configured to support, to make them
- available via the TargetRegistry. */
-static inline void LLVMInitializeAllAsmParsers(void) {
-#define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
-#include "llvm/Config/AsmParsers.def"
-#undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeAllDisassemblers - The main program should call this function
- if it wants all disassemblers that LLVM is configured to support, to make
- them available via the TargetRegistry. */
-static inline void LLVMInitializeAllDisassemblers(void) {
-#define LLVM_DISASSEMBLER(TargetName) \
- LLVMInitialize##TargetName##Disassembler();
-#include "llvm/Config/Disassemblers.def"
-#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
-}
-
-/** LLVMInitializeNativeTarget - The main program should call this function to
- initialize the native target corresponding to the host. This is useful
- for JIT applications to ensure that the target gets linked in correctly. */
-static inline LLVMBool LLVMInitializeNativeTarget(void) {
- /* If we have a native target, initialize it to ensure it is linked in. */
-#ifdef LLVM_NATIVE_TARGET
- LLVM_NATIVE_TARGETINFO();
- LLVM_NATIVE_TARGET();
- LLVM_NATIVE_TARGETMC();
- return 0;
-#else
- return 1;
-#endif
-}
-
-/** LLVMInitializeNativeTargetAsmParser - The main program should call this
- function to initialize the parser for the native target corresponding to the
- host. */
-static inline LLVMBool LLVMInitializeNativeAsmParser(void) {
-#ifdef LLVM_NATIVE_ASMPARSER
- LLVM_NATIVE_ASMPARSER();
- return 0;
-#else
- return 1;
-#endif
-}
-
-/** LLVMInitializeNativeTargetAsmPrinter - The main program should call this
- function to initialize the printer for the native target corresponding to
- the host. */
-static inline LLVMBool LLVMInitializeNativeAsmPrinter(void) {
-#ifdef LLVM_NATIVE_ASMPRINTER
- LLVM_NATIVE_ASMPRINTER();
- return 0;
-#else
- return 1;
-#endif
-}
-
-/** LLVMInitializeNativeTargetDisassembler - The main program should call this
- function to initialize the disassembler for the native target corresponding
- to the host. */
-static inline LLVMBool LLVMInitializeNativeDisassembler(void) {
-#ifdef LLVM_NATIVE_DISASSEMBLER
- LLVM_NATIVE_DISASSEMBLER();
- return 0;
-#else
- return 1;
-#endif
-}
-
-/*===-- Target Data -------------------------------------------------------===*/
-
-/**
- * Obtain the data layout for a module.
- *
- * @see Module::getDataLayout()
- */
-LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M);
-
-/**
- * Set the data layout for a module.
- *
- * @see Module::setDataLayout()
- */
-void LLVMSetModuleDataLayout(LLVMModuleRef M, LLVMTargetDataRef DL);
-
-/** Creates target data from a target layout string.
- See the constructor llvm::DataLayout::DataLayout. */
-LLVMTargetDataRef LLVMCreateTargetData(const char *StringRep);
-
-/** Deallocates a TargetData.
- See the destructor llvm::DataLayout::~DataLayout. */
-void LLVMDisposeTargetData(LLVMTargetDataRef TD);
-
-/** Adds target library information to a pass manager. This does not take
- ownership of the target library info.
- See the method llvm::PassManagerBase::add. */
-void LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI,
- LLVMPassManagerRef PM);
-
-/** Converts target data to a target layout string. The string must be disposed
- with LLVMDisposeMessage.
- See the constructor llvm::DataLayout::DataLayout. */
-char *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD);
-
-/** Returns the byte order of a target, either LLVMBigEndian or
- LLVMLittleEndian.
- See the method llvm::DataLayout::isLittleEndian. */
-enum LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD);
-
-/** Returns the pointer size in bytes for a target.
- See the method llvm::DataLayout::getPointerSize. */
-unsigned LLVMPointerSize(LLVMTargetDataRef TD);
-
-/** Returns the pointer size in bytes for a target for a specified
- address space.
- See the method llvm::DataLayout::getPointerSize. */
-unsigned LLVMPointerSizeForAS(LLVMTargetDataRef TD, unsigned AS);
-
-/** Returns the integer type that is the same size as a pointer on a target.
- See the method llvm::DataLayout::getIntPtrType. */
-LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD);
-
-/** Returns the integer type that is the same size as a pointer on a target.
- This version allows the address space to be specified.
- See the method llvm::DataLayout::getIntPtrType. */
-LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS);
-
-/** Returns the integer type that is the same size as a pointer on a target.
- See the method llvm::DataLayout::getIntPtrType. */
-LLVMTypeRef LLVMIntPtrTypeInContext(LLVMContextRef C, LLVMTargetDataRef TD);
-
-/** Returns the integer type that is the same size as a pointer on a target.
- This version allows the address space to be specified.
- See the method llvm::DataLayout::getIntPtrType. */
-LLVMTypeRef LLVMIntPtrTypeForASInContext(LLVMContextRef C, LLVMTargetDataRef TD,
- unsigned AS);
-
-/** Computes the size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeSizeInBits. */
-unsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the storage size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeStoreSize. */
-unsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the ABI size of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeAllocSize. */
-unsigned long long LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the ABI alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
-unsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the call frame alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
-unsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the preferred alignment of a type in bytes for a target.
- See the method llvm::DataLayout::getTypeABISize. */
-unsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
-
-/** Computes the preferred alignment of a global variable in bytes for a target.
- See the method llvm::DataLayout::getPreferredAlignment. */
-unsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD,
- LLVMValueRef GlobalVar);
-
-/** Computes the structure element that contains the byte offset for a target.
- See the method llvm::StructLayout::getElementContainingOffset. */
-unsigned LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy,
- unsigned long long Offset);
-
-/** Computes the byte offset of the indexed struct element for a target.
- See the method llvm::StructLayout::getElementContainingOffset. */
-unsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD,
- LLVMTypeRef StructTy, unsigned Element);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Target.h - Target Lib C Iface --------------------*- 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 header declares the C interface to libLLVMTarget.a, which */
+/* implements target information. */
+/* */
+/* Many exotic languages can interoperate with C code but have a harder time */
+/* with C++ due to name mangling. So in addition to C, this interface enables */
+/* tools written in such languages. */
+/* */
+/*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TARGET_H
+#define LLVM_C_TARGET_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+#include "llvm/Config/llvm-config.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTarget Target information
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+enum LLVMByteOrdering { LLVMBigEndian, LLVMLittleEndian };
+
+typedef struct LLVMOpaqueTargetData *LLVMTargetDataRef;
+typedef struct LLVMOpaqueTargetLibraryInfotData *LLVMTargetLibraryInfoRef;
+
+/* Declare all of the target-initialization functions that are available. */
+#define LLVM_TARGET(TargetName) \
+ void LLVMInitialize##TargetName##TargetInfo(void);
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+
+#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target(void);
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+
+#define LLVM_TARGET(TargetName) \
+ void LLVMInitialize##TargetName##TargetMC(void);
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+
+/* Declare all of the available assembly printer initialization functions. */
+#define LLVM_ASM_PRINTER(TargetName) \
+ void LLVMInitialize##TargetName##AsmPrinter(void);
+#include "llvm/Config/AsmPrinters.def"
+#undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
+
+/* Declare all of the available assembly parser initialization functions. */
+#define LLVM_ASM_PARSER(TargetName) \
+ void LLVMInitialize##TargetName##AsmParser(void);
+#include "llvm/Config/AsmParsers.def"
+#undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
+
+/* Declare all of the available disassembler initialization functions. */
+#define LLVM_DISASSEMBLER(TargetName) \
+ void LLVMInitialize##TargetName##Disassembler(void);
+#include "llvm/Config/Disassemblers.def"
+#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
+
+/** LLVMInitializeAllTargetInfos - The main program should call this function if
+ it wants access to all available targets that LLVM is configured to
+ support. */
+static inline void LLVMInitializeAllTargetInfos(void) {
+#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo();
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeAllTargets - The main program should call this function if it
+ wants to link in all available targets that LLVM is configured to
+ support. */
+static inline void LLVMInitializeAllTargets(void) {
+#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target();
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeAllTargetMCs - The main program should call this function if
+ it wants access to all available target MC that LLVM is configured to
+ support. */
+static inline void LLVMInitializeAllTargetMCs(void) {
+#define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC();
+#include "llvm/Config/Targets.def"
+#undef LLVM_TARGET /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeAllAsmPrinters - The main program should call this function if
+ it wants all asm printers that LLVM is configured to support, to make them
+ available via the TargetRegistry. */
+static inline void LLVMInitializeAllAsmPrinters(void) {
+#define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter();
+#include "llvm/Config/AsmPrinters.def"
+#undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeAllAsmParsers - The main program should call this function if
+ it wants all asm parsers that LLVM is configured to support, to make them
+ available via the TargetRegistry. */
+static inline void LLVMInitializeAllAsmParsers(void) {
+#define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser();
+#include "llvm/Config/AsmParsers.def"
+#undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeAllDisassemblers - The main program should call this function
+ if it wants all disassemblers that LLVM is configured to support, to make
+ them available via the TargetRegistry. */
+static inline void LLVMInitializeAllDisassemblers(void) {
+#define LLVM_DISASSEMBLER(TargetName) \
+ LLVMInitialize##TargetName##Disassembler();
+#include "llvm/Config/Disassemblers.def"
+#undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */
+}
+
+/** LLVMInitializeNativeTarget - The main program should call this function to
+ initialize the native target corresponding to the host. This is useful
+ for JIT applications to ensure that the target gets linked in correctly. */
+static inline LLVMBool LLVMInitializeNativeTarget(void) {
+ /* If we have a native target, initialize it to ensure it is linked in. */
+#ifdef LLVM_NATIVE_TARGET
+ LLVM_NATIVE_TARGETINFO();
+ LLVM_NATIVE_TARGET();
+ LLVM_NATIVE_TARGETMC();
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+/** LLVMInitializeNativeTargetAsmParser - The main program should call this
+ function to initialize the parser for the native target corresponding to the
+ host. */
+static inline LLVMBool LLVMInitializeNativeAsmParser(void) {
+#ifdef LLVM_NATIVE_ASMPARSER
+ LLVM_NATIVE_ASMPARSER();
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+/** LLVMInitializeNativeTargetAsmPrinter - The main program should call this
+ function to initialize the printer for the native target corresponding to
+ the host. */
+static inline LLVMBool LLVMInitializeNativeAsmPrinter(void) {
+#ifdef LLVM_NATIVE_ASMPRINTER
+ LLVM_NATIVE_ASMPRINTER();
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+/** LLVMInitializeNativeTargetDisassembler - The main program should call this
+ function to initialize the disassembler for the native target corresponding
+ to the host. */
+static inline LLVMBool LLVMInitializeNativeDisassembler(void) {
+#ifdef LLVM_NATIVE_DISASSEMBLER
+ LLVM_NATIVE_DISASSEMBLER();
+ return 0;
+#else
+ return 1;
+#endif
+}
+
+/*===-- Target Data -------------------------------------------------------===*/
+
+/**
+ * Obtain the data layout for a module.
+ *
+ * @see Module::getDataLayout()
+ */
+LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M);
+
+/**
+ * Set the data layout for a module.
+ *
+ * @see Module::setDataLayout()
+ */
+void LLVMSetModuleDataLayout(LLVMModuleRef M, LLVMTargetDataRef DL);
+
+/** Creates target data from a target layout string.
+ See the constructor llvm::DataLayout::DataLayout. */
+LLVMTargetDataRef LLVMCreateTargetData(const char *StringRep);
+
+/** Deallocates a TargetData.
+ See the destructor llvm::DataLayout::~DataLayout. */
+void LLVMDisposeTargetData(LLVMTargetDataRef TD);
+
+/** Adds target library information to a pass manager. This does not take
+ ownership of the target library info.
+ See the method llvm::PassManagerBase::add. */
+void LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI,
+ LLVMPassManagerRef PM);
+
+/** Converts target data to a target layout string. The string must be disposed
+ with LLVMDisposeMessage.
+ See the constructor llvm::DataLayout::DataLayout. */
+char *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD);
+
+/** Returns the byte order of a target, either LLVMBigEndian or
+ LLVMLittleEndian.
+ See the method llvm::DataLayout::isLittleEndian. */
+enum LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD);
+
+/** Returns the pointer size in bytes for a target.
+ See the method llvm::DataLayout::getPointerSize. */
+unsigned LLVMPointerSize(LLVMTargetDataRef TD);
+
+/** Returns the pointer size in bytes for a target for a specified
+ address space.
+ See the method llvm::DataLayout::getPointerSize. */
+unsigned LLVMPointerSizeForAS(LLVMTargetDataRef TD, unsigned AS);
+
+/** Returns the integer type that is the same size as a pointer on a target.
+ See the method llvm::DataLayout::getIntPtrType. */
+LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD);
+
+/** Returns the integer type that is the same size as a pointer on a target.
+ This version allows the address space to be specified.
+ See the method llvm::DataLayout::getIntPtrType. */
+LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS);
+
+/** Returns the integer type that is the same size as a pointer on a target.
+ See the method llvm::DataLayout::getIntPtrType. */
+LLVMTypeRef LLVMIntPtrTypeInContext(LLVMContextRef C, LLVMTargetDataRef TD);
+
+/** Returns the integer type that is the same size as a pointer on a target.
+ This version allows the address space to be specified.
+ See the method llvm::DataLayout::getIntPtrType. */
+LLVMTypeRef LLVMIntPtrTypeForASInContext(LLVMContextRef C, LLVMTargetDataRef TD,
+ unsigned AS);
+
+/** Computes the size of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeSizeInBits. */
+unsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the storage size of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeStoreSize. */
+unsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the ABI size of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeAllocSize. */
+unsigned long long LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the ABI alignment of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeABISize. */
+unsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the call frame alignment of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeABISize. */
+unsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the preferred alignment of a type in bytes for a target.
+ See the method llvm::DataLayout::getTypeABISize. */
+unsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty);
+
+/** Computes the preferred alignment of a global variable in bytes for a target.
+ See the method llvm::DataLayout::getPreferredAlignment. */
+unsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD,
+ LLVMValueRef GlobalVar);
+
+/** Computes the structure element that contains the byte offset for a target.
+ See the method llvm::StructLayout::getElementContainingOffset. */
+unsigned LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy,
+ unsigned long long Offset);
+
+/** Computes the byte offset of the indexed struct element for a target.
+ See the method llvm::StructLayout::getElementContainingOffset. */
+unsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD,
+ LLVMTypeRef StructTy, unsigned Element);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/TargetMachine.h b/contrib/libs/llvm12/include/llvm-c/TargetMachine.h
index 59ea87f8de9..4dfd651c5fd 100644
--- a/contrib/libs/llvm12/include/llvm-c/TargetMachine.h
+++ b/contrib/libs/llvm12/include/llvm-c/TargetMachine.h
@@ -1,172 +1,172 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/TargetMachine.h - Target Machine Library 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 header declares the C interface to the Target and TargetMachine *|
-|* classes, which can be used to generate assembly or object files. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TARGETMACHINE_H
-#define LLVM_C_TARGETMACHINE_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Target.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-typedef struct LLVMOpaqueTargetMachine *LLVMTargetMachineRef;
-typedef struct LLVMTarget *LLVMTargetRef;
-
-typedef enum {
- LLVMCodeGenLevelNone,
- LLVMCodeGenLevelLess,
- LLVMCodeGenLevelDefault,
- LLVMCodeGenLevelAggressive
-} LLVMCodeGenOptLevel;
-
-typedef enum {
- LLVMRelocDefault,
- LLVMRelocStatic,
- LLVMRelocPIC,
- LLVMRelocDynamicNoPic,
- LLVMRelocROPI,
- LLVMRelocRWPI,
- LLVMRelocROPI_RWPI
-} LLVMRelocMode;
-
-typedef enum {
- LLVMCodeModelDefault,
- LLVMCodeModelJITDefault,
- LLVMCodeModelTiny,
- LLVMCodeModelSmall,
- LLVMCodeModelKernel,
- LLVMCodeModelMedium,
- LLVMCodeModelLarge
-} LLVMCodeModel;
-
-typedef enum {
- LLVMAssemblyFile,
- LLVMObjectFile
-} LLVMCodeGenFileType;
-
-/** Returns the first llvm::Target in the registered targets list. */
-LLVMTargetRef LLVMGetFirstTarget(void);
-/** Returns the next llvm::Target given a previous one (or null if there's none) */
-LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T);
-
-/*===-- Target ------------------------------------------------------------===*/
-/** Finds the target corresponding to the given name and stores it in \p T.
- Returns 0 on success. */
-LLVMTargetRef LLVMGetTargetFromName(const char *Name);
-
-/** Finds the target corresponding to the given triple and stores it in \p T.
- Returns 0 on success. Optionally returns any error in ErrorMessage.
- Use LLVMDisposeMessage to dispose the message. */
-LLVMBool LLVMGetTargetFromTriple(const char* Triple, LLVMTargetRef *T,
- char **ErrorMessage);
-
-/** Returns the name of a target. See llvm::Target::getName */
-const char *LLVMGetTargetName(LLVMTargetRef T);
-
-/** Returns the description of a target. See llvm::Target::getDescription */
-const char *LLVMGetTargetDescription(LLVMTargetRef T);
-
-/** Returns if the target has a JIT */
-LLVMBool LLVMTargetHasJIT(LLVMTargetRef T);
-
-/** Returns if the target has a TargetMachine associated */
-LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T);
-
-/** Returns if the target as an ASM backend (required for emitting output) */
-LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T);
-
-/*===-- Target Machine ----------------------------------------------------===*/
-/** Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine */
-LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
- const char *Triple, const char *CPU, const char *Features,
- LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel);
-
-/** Dispose the LLVMTargetMachineRef instance generated by
- LLVMCreateTargetMachine. */
-void LLVMDisposeTargetMachine(LLVMTargetMachineRef T);
-
-/** Returns the Target used in a TargetMachine */
-LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T);
-
-/** Returns the triple used creating this target machine. See
- llvm::TargetMachine::getTriple. The result needs to be disposed with
- LLVMDisposeMessage. */
-char *LLVMGetTargetMachineTriple(LLVMTargetMachineRef T);
-
-/** Returns the cpu used creating this target machine. See
- llvm::TargetMachine::getCPU. The result needs to be disposed with
- LLVMDisposeMessage. */
-char *LLVMGetTargetMachineCPU(LLVMTargetMachineRef T);
-
-/** Returns the feature string used creating this target machine. See
- llvm::TargetMachine::getFeatureString. The result needs to be disposed with
- LLVMDisposeMessage. */
-char *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T);
-
-/** Create a DataLayout based on the targetMachine. */
-LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T);
-
-/** Set the target machine's ASM verbosity. */
-void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
- LLVMBool VerboseAsm);
-
-/** Emits an asm or object file for the given module to the filename. This
- wraps several c++ only classes (among them a file stream). Returns any
- error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */
-LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
- char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage);
-
-/** Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf. */
-LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M,
- LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef *OutMemBuf);
-
-/*===-- Triple ------------------------------------------------------------===*/
-/** Get a triple for the host machine as a string. The result needs to be
- disposed with LLVMDisposeMessage. */
-char* LLVMGetDefaultTargetTriple(void);
-
-/** Normalize a target triple. The result needs to be disposed with
- LLVMDisposeMessage. */
-char* LLVMNormalizeTargetTriple(const char* triple);
-
-/** Get the host CPU as a string. The result needs to be disposed with
- LLVMDisposeMessage. */
-char* LLVMGetHostCPUName(void);
-
-/** Get the host CPU's features as a string. The result needs to be disposed
- with LLVMDisposeMessage. */
-char* LLVMGetHostCPUFeatures(void);
-
-/** Adds the target-specific analysis passes to the pass manager. */
-void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/TargetMachine.h - Target Machine Library 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 header declares the C interface to the Target and TargetMachine *|
+|* classes, which can be used to generate assembly or object files. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TARGETMACHINE_H
+#define LLVM_C_TARGETMACHINE_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Target.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+typedef struct LLVMOpaqueTargetMachine *LLVMTargetMachineRef;
+typedef struct LLVMTarget *LLVMTargetRef;
+
+typedef enum {
+ LLVMCodeGenLevelNone,
+ LLVMCodeGenLevelLess,
+ LLVMCodeGenLevelDefault,
+ LLVMCodeGenLevelAggressive
+} LLVMCodeGenOptLevel;
+
+typedef enum {
+ LLVMRelocDefault,
+ LLVMRelocStatic,
+ LLVMRelocPIC,
+ LLVMRelocDynamicNoPic,
+ LLVMRelocROPI,
+ LLVMRelocRWPI,
+ LLVMRelocROPI_RWPI
+} LLVMRelocMode;
+
+typedef enum {
+ LLVMCodeModelDefault,
+ LLVMCodeModelJITDefault,
+ LLVMCodeModelTiny,
+ LLVMCodeModelSmall,
+ LLVMCodeModelKernel,
+ LLVMCodeModelMedium,
+ LLVMCodeModelLarge
+} LLVMCodeModel;
+
+typedef enum {
+ LLVMAssemblyFile,
+ LLVMObjectFile
+} LLVMCodeGenFileType;
+
+/** Returns the first llvm::Target in the registered targets list. */
+LLVMTargetRef LLVMGetFirstTarget(void);
+/** Returns the next llvm::Target given a previous one (or null if there's none) */
+LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T);
+
+/*===-- Target ------------------------------------------------------------===*/
+/** Finds the target corresponding to the given name and stores it in \p T.
+ Returns 0 on success. */
+LLVMTargetRef LLVMGetTargetFromName(const char *Name);
+
+/** Finds the target corresponding to the given triple and stores it in \p T.
+ Returns 0 on success. Optionally returns any error in ErrorMessage.
+ Use LLVMDisposeMessage to dispose the message. */
+LLVMBool LLVMGetTargetFromTriple(const char* Triple, LLVMTargetRef *T,
+ char **ErrorMessage);
+
+/** Returns the name of a target. See llvm::Target::getName */
+const char *LLVMGetTargetName(LLVMTargetRef T);
+
+/** Returns the description of a target. See llvm::Target::getDescription */
+const char *LLVMGetTargetDescription(LLVMTargetRef T);
+
+/** Returns if the target has a JIT */
+LLVMBool LLVMTargetHasJIT(LLVMTargetRef T);
+
+/** Returns if the target has a TargetMachine associated */
+LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T);
+
+/** Returns if the target as an ASM backend (required for emitting output) */
+LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T);
+
+/*===-- Target Machine ----------------------------------------------------===*/
+/** Creates a new llvm::TargetMachine. See llvm::Target::createTargetMachine */
+LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
+ const char *Triple, const char *CPU, const char *Features,
+ LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel);
+
+/** Dispose the LLVMTargetMachineRef instance generated by
+ LLVMCreateTargetMachine. */
+void LLVMDisposeTargetMachine(LLVMTargetMachineRef T);
+
+/** Returns the Target used in a TargetMachine */
+LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T);
+
+/** Returns the triple used creating this target machine. See
+ llvm::TargetMachine::getTriple. The result needs to be disposed with
+ LLVMDisposeMessage. */
+char *LLVMGetTargetMachineTriple(LLVMTargetMachineRef T);
+
+/** Returns the cpu used creating this target machine. See
+ llvm::TargetMachine::getCPU. The result needs to be disposed with
+ LLVMDisposeMessage. */
+char *LLVMGetTargetMachineCPU(LLVMTargetMachineRef T);
+
+/** Returns the feature string used creating this target machine. See
+ llvm::TargetMachine::getFeatureString. The result needs to be disposed with
+ LLVMDisposeMessage. */
+char *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T);
+
+/** Create a DataLayout based on the targetMachine. */
+LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T);
+
+/** Set the target machine's ASM verbosity. */
+void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
+ LLVMBool VerboseAsm);
+
+/** Emits an asm or object file for the given module to the filename. This
+ wraps several c++ only classes (among them a file stream). Returns any
+ error in ErrorMessage. Use LLVMDisposeMessage to dispose the message. */
+LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, LLVMModuleRef M,
+ char *Filename, LLVMCodeGenFileType codegen, char **ErrorMessage);
+
+/** Compile the LLVM IR stored in \p M and store the result in \p OutMemBuf. */
+LLVMBool LLVMTargetMachineEmitToMemoryBuffer(LLVMTargetMachineRef T, LLVMModuleRef M,
+ LLVMCodeGenFileType codegen, char** ErrorMessage, LLVMMemoryBufferRef *OutMemBuf);
+
+/*===-- Triple ------------------------------------------------------------===*/
+/** Get a triple for the host machine as a string. The result needs to be
+ disposed with LLVMDisposeMessage. */
+char* LLVMGetDefaultTargetTriple(void);
+
+/** Normalize a target triple. The result needs to be disposed with
+ LLVMDisposeMessage. */
+char* LLVMNormalizeTargetTriple(const char* triple);
+
+/** Get the host CPU as a string. The result needs to be disposed with
+ LLVMDisposeMessage. */
+char* LLVMGetHostCPUName(void);
+
+/** Get the host CPU's features as a string. The result needs to be disposed
+ with LLVMDisposeMessage. */
+char* LLVMGetHostCPUFeatures(void);
+
+/** Adds the target-specific analysis passes to the pass manager. */
+void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/AggressiveInstCombine.h b/contrib/libs/llvm12/include/llvm-c/Transforms/AggressiveInstCombine.h
index 225c29aa4e2..d9c91d1ac08 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/AggressiveInstCombine.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/AggressiveInstCombine.h
@@ -1,51 +1,51 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- AggressiveInstCombine.h ---------------------------------*- 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 header declares the C interface to libLLVMAggressiveInstCombine.a, *|
-|* which combines instructions to form fewer, simple IR instructions. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_AGGRESSIVEINSTCOMBINE_H
-#define LLVM_C_TRANSFORMS_AGGRESSIVEINSTCOMBINE_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsAggressiveInstCombine Aggressive Instruction Combining transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createAggressiveInstCombinerPass function. */
-void LLVMAddAggressiveInstCombinerPass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- AggressiveInstCombine.h ---------------------------------*- 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 header declares the C interface to libLLVMAggressiveInstCombine.a, *|
+|* which combines instructions to form fewer, simple IR instructions. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_AGGRESSIVEINSTCOMBINE_H
+#define LLVM_C_TRANSFORMS_AGGRESSIVEINSTCOMBINE_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsAggressiveInstCombine Aggressive Instruction Combining transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createAggressiveInstCombinerPass function. */
+void LLVMAddAggressiveInstCombinerPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/Coroutines.h b/contrib/libs/llvm12/include/llvm-c/Transforms/Coroutines.h
index efa2dcb5054..69b927d3158 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/Coroutines.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/Coroutines.h
@@ -1,67 +1,67 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- Coroutines.h - Coroutines Library 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 header declares the C interface to libLLVMCoroutines.a, which *|
-|* implements various scalar transformations of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_COROUTINES_H
-#define LLVM_C_TRANSFORMS_COROUTINES_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-#include "llvm-c/Transforms/PassManagerBuilder.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsCoroutines Coroutine transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createCoroEarlyLegacyPass function. */
-void LLVMAddCoroEarlyPass(LLVMPassManagerRef PM);
-
-/** See llvm::createCoroSplitLegacyPass function. */
-void LLVMAddCoroSplitPass(LLVMPassManagerRef PM);
-
-/** See llvm::createCoroElideLegacyPass function. */
-void LLVMAddCoroElidePass(LLVMPassManagerRef PM);
-
-/** See llvm::createCoroCleanupLegacyPass function. */
-void LLVMAddCoroCleanupPass(LLVMPassManagerRef PM);
-
-/** See llvm::addCoroutinePassesToExtensionPoints. */
-void LLVMPassManagerBuilderAddCoroutinePassesToExtensionPoints(LLVMPassManagerBuilderRef PMB);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- Coroutines.h - Coroutines Library 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 header declares the C interface to libLLVMCoroutines.a, which *|
+|* implements various scalar transformations of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_COROUTINES_H
+#define LLVM_C_TRANSFORMS_COROUTINES_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+#include "llvm-c/Transforms/PassManagerBuilder.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsCoroutines Coroutine transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createCoroEarlyLegacyPass function. */
+void LLVMAddCoroEarlyPass(LLVMPassManagerRef PM);
+
+/** See llvm::createCoroSplitLegacyPass function. */
+void LLVMAddCoroSplitPass(LLVMPassManagerRef PM);
+
+/** See llvm::createCoroElideLegacyPass function. */
+void LLVMAddCoroElidePass(LLVMPassManagerRef PM);
+
+/** See llvm::createCoroCleanupLegacyPass function. */
+void LLVMAddCoroCleanupPass(LLVMPassManagerRef PM);
+
+/** See llvm::addCoroutinePassesToExtensionPoints. */
+void LLVMPassManagerBuilderAddCoroutinePassesToExtensionPoints(LLVMPassManagerBuilderRef PMB);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/IPO.h b/contrib/libs/llvm12/include/llvm-c/Transforms/IPO.h
index 163336d3e6c..48229465b81 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/IPO.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/IPO.h
@@ -1,107 +1,107 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- IPO.h - Interprocedural Transformations 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 header declares the C interface to libLLVMIPO.a, which implements *|
-|* various interprocedural transformations of the LLVM IR. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_IPO_H
-#define LLVM_C_TRANSFORMS_IPO_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsIPO Interprocedural transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createArgumentPromotionPass function. */
-void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
-
-/** See llvm::createConstantMergePass function. */
-void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
-
-/** See llvm::createMergeFunctionsPass function. */
-void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createCalledValuePropagationPass function. */
-void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
-
-/** See llvm::createDeadArgEliminationPass function. */
-void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM);
-
-/** See llvm::createFunctionAttrsPass function. */
-void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createFunctionInliningPass function. */
-void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM);
-
-/** See llvm::createAlwaysInlinerPass function. */
-void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM);
-
-/** See llvm::createGlobalDCEPass function. */
-void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM);
-
-/** See llvm::createGlobalOptimizerPass function. */
-void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM);
-
-/** See llvm::createPruneEHPass function. */
-void LLVMAddPruneEHPass(LLVMPassManagerRef PM);
-
-/** See llvm::createIPSCCPPass function. */
-void LLVMAddIPSCCPPass(LLVMPassManagerRef PM);
-
-/** See llvm::createInternalizePass function. */
-void LLVMAddInternalizePass(LLVMPassManagerRef, unsigned AllButMain);
-
-/**
- * Create and add the internalize pass to the given pass manager with the
- * provided preservation callback.
- *
- * The context parameter is forwarded to the callback on each invocation.
- * As such, it is the responsibility of the caller to extend its lifetime
- * until execution of this pass has finished.
- *
- * @see llvm::createInternalizePass function.
- */
-void LLVMAddInternalizePassWithMustPreservePredicate(
- LLVMPassManagerRef PM,
- void *Context,
- LLVMBool (*MustPreserve)(LLVMValueRef, void *));
-
-/** See llvm::createStripDeadPrototypesPass function. */
-void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM);
-
-/** See llvm::createStripSymbolsPass function. */
-void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- IPO.h - Interprocedural Transformations 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 header declares the C interface to libLLVMIPO.a, which implements *|
+|* various interprocedural transformations of the LLVM IR. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_IPO_H
+#define LLVM_C_TRANSFORMS_IPO_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsIPO Interprocedural transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createArgumentPromotionPass function. */
+void LLVMAddArgumentPromotionPass(LLVMPassManagerRef PM);
+
+/** See llvm::createConstantMergePass function. */
+void LLVMAddConstantMergePass(LLVMPassManagerRef PM);
+
+/** See llvm::createMergeFunctionsPass function. */
+void LLVMAddMergeFunctionsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createCalledValuePropagationPass function. */
+void LLVMAddCalledValuePropagationPass(LLVMPassManagerRef PM);
+
+/** See llvm::createDeadArgEliminationPass function. */
+void LLVMAddDeadArgEliminationPass(LLVMPassManagerRef PM);
+
+/** See llvm::createFunctionAttrsPass function. */
+void LLVMAddFunctionAttrsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createFunctionInliningPass function. */
+void LLVMAddFunctionInliningPass(LLVMPassManagerRef PM);
+
+/** See llvm::createAlwaysInlinerPass function. */
+void LLVMAddAlwaysInlinerPass(LLVMPassManagerRef PM);
+
+/** See llvm::createGlobalDCEPass function. */
+void LLVMAddGlobalDCEPass(LLVMPassManagerRef PM);
+
+/** See llvm::createGlobalOptimizerPass function. */
+void LLVMAddGlobalOptimizerPass(LLVMPassManagerRef PM);
+
+/** See llvm::createPruneEHPass function. */
+void LLVMAddPruneEHPass(LLVMPassManagerRef PM);
+
+/** See llvm::createIPSCCPPass function. */
+void LLVMAddIPSCCPPass(LLVMPassManagerRef PM);
+
+/** See llvm::createInternalizePass function. */
+void LLVMAddInternalizePass(LLVMPassManagerRef, unsigned AllButMain);
+
+/**
+ * Create and add the internalize pass to the given pass manager with the
+ * provided preservation callback.
+ *
+ * The context parameter is forwarded to the callback on each invocation.
+ * As such, it is the responsibility of the caller to extend its lifetime
+ * until execution of this pass has finished.
+ *
+ * @see llvm::createInternalizePass function.
+ */
+void LLVMAddInternalizePassWithMustPreservePredicate(
+ LLVMPassManagerRef PM,
+ void *Context,
+ LLVMBool (*MustPreserve)(LLVMValueRef, void *));
+
+/** See llvm::createStripDeadPrototypesPass function. */
+void LLVMAddStripDeadPrototypesPass(LLVMPassManagerRef PM);
+
+/** See llvm::createStripSymbolsPass function. */
+void LLVMAddStripSymbolsPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/InstCombine.h b/contrib/libs/llvm12/include/llvm-c/Transforms/InstCombine.h
index 0bafb4d975a..4cabb5bba15 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/InstCombine.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/InstCombine.h
@@ -1,51 +1,51 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- Scalar.h - Scalar Transformation Library 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 header declares the C interface to libLLVMInstCombine.a, which *|
-|* combines instructions to form fewer, simple IR instructions. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_INSTCOMBINE_H
-#define LLVM_C_TRANSFORMS_INSTCOMBINE_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsInstCombine Instruction Combining transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createInstructionCombiningPass function. */
-void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- Scalar.h - Scalar Transformation Library 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 header declares the C interface to libLLVMInstCombine.a, which *|
+|* combines instructions to form fewer, simple IR instructions. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_INSTCOMBINE_H
+#define LLVM_C_TRANSFORMS_INSTCOMBINE_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsInstCombine Instruction Combining transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createInstructionCombiningPass function. */
+void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/PassManagerBuilder.h b/contrib/libs/llvm12/include/llvm-c/Transforms/PassManagerBuilder.h
index c7b29aa9680..d39942a0c98 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/PassManagerBuilder.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/PassManagerBuilder.h
@@ -1,98 +1,98 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Transform/PassManagerBuilder.h - PMB 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 header declares the C interface to the PassManagerBuilder class. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
-#define LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-typedef struct LLVMOpaquePassManagerBuilder *LLVMPassManagerBuilderRef;
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsPassManagerBuilder Pass manager builder
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::PassManagerBuilder. */
-LLVMPassManagerBuilderRef LLVMPassManagerBuilderCreate(void);
-void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB);
-
-/** See llvm::PassManagerBuilder::OptLevel. */
-void
-LLVMPassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB,
- unsigned OptLevel);
-
-/** See llvm::PassManagerBuilder::SizeLevel. */
-void
-LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB,
- unsigned SizeLevel);
-
-/** See llvm::PassManagerBuilder::DisableUnitAtATime. */
-void
-LLVMPassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef PMB,
- LLVMBool Value);
-
-/** See llvm::PassManagerBuilder::DisableUnrollLoops. */
-void
-LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB,
- LLVMBool Value);
-
-/** See llvm::PassManagerBuilder::DisableSimplifyLibCalls */
-void
-LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef PMB,
- LLVMBool Value);
-
-/** See llvm::PassManagerBuilder::Inliner. */
-void
-LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB,
- unsigned Threshold);
-
-/** See llvm::PassManagerBuilder::populateFunctionPassManager. */
-void
-LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef PMB,
- LLVMPassManagerRef PM);
-
-/** See llvm::PassManagerBuilder::populateModulePassManager. */
-void
-LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef PMB,
- LLVMPassManagerRef PM);
-
-/** See llvm::PassManagerBuilder::populateLTOPassManager. */
-void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB,
- LLVMPassManagerRef PM,
- LLVMBool Internalize,
- LLVMBool RunInliner);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Transform/PassManagerBuilder.h - PMB 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 header declares the C interface to the PassManagerBuilder class. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
+#define LLVM_C_TRANSFORMS_PASSMANAGERBUILDER_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+typedef struct LLVMOpaquePassManagerBuilder *LLVMPassManagerBuilderRef;
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsPassManagerBuilder Pass manager builder
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::PassManagerBuilder. */
+LLVMPassManagerBuilderRef LLVMPassManagerBuilderCreate(void);
+void LLVMPassManagerBuilderDispose(LLVMPassManagerBuilderRef PMB);
+
+/** See llvm::PassManagerBuilder::OptLevel. */
+void
+LLVMPassManagerBuilderSetOptLevel(LLVMPassManagerBuilderRef PMB,
+ unsigned OptLevel);
+
+/** See llvm::PassManagerBuilder::SizeLevel. */
+void
+LLVMPassManagerBuilderSetSizeLevel(LLVMPassManagerBuilderRef PMB,
+ unsigned SizeLevel);
+
+/** See llvm::PassManagerBuilder::DisableUnitAtATime. */
+void
+LLVMPassManagerBuilderSetDisableUnitAtATime(LLVMPassManagerBuilderRef PMB,
+ LLVMBool Value);
+
+/** See llvm::PassManagerBuilder::DisableUnrollLoops. */
+void
+LLVMPassManagerBuilderSetDisableUnrollLoops(LLVMPassManagerBuilderRef PMB,
+ LLVMBool Value);
+
+/** See llvm::PassManagerBuilder::DisableSimplifyLibCalls */
+void
+LLVMPassManagerBuilderSetDisableSimplifyLibCalls(LLVMPassManagerBuilderRef PMB,
+ LLVMBool Value);
+
+/** See llvm::PassManagerBuilder::Inliner. */
+void
+LLVMPassManagerBuilderUseInlinerWithThreshold(LLVMPassManagerBuilderRef PMB,
+ unsigned Threshold);
+
+/** See llvm::PassManagerBuilder::populateFunctionPassManager. */
+void
+LLVMPassManagerBuilderPopulateFunctionPassManager(LLVMPassManagerBuilderRef PMB,
+ LLVMPassManagerRef PM);
+
+/** See llvm::PassManagerBuilder::populateModulePassManager. */
+void
+LLVMPassManagerBuilderPopulateModulePassManager(LLVMPassManagerBuilderRef PMB,
+ LLVMPassManagerRef PM);
+
+/** See llvm::PassManagerBuilder::populateLTOPassManager. */
+void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB,
+ LLVMPassManagerRef PM,
+ LLVMBool Internalize,
+ LLVMBool RunInliner);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/Scalar.h b/contrib/libs/llvm12/include/llvm-c/Transforms/Scalar.h
index 15a0885c2fd..7c1544eb7d2 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/Scalar.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/Scalar.h
@@ -1,181 +1,181 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- Scalar.h - Scalar Transformation Library 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 header declares the C interface to libLLVMScalarOpts.a, which *|
-|* implements various scalar transformations of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_SCALAR_H
-#define LLVM_C_TRANSFORMS_SCALAR_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsScalar Scalar transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createAggressiveDCEPass function. */
-void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
-
-/** See llvm::createDeadCodeEliminationPass function. */
-void LLVMAddDCEPass(LLVMPassManagerRef PM);
-
-/** See llvm::createBitTrackingDCEPass function. */
-void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
-
-/** See llvm::createAlignmentFromAssumptionsPass function. */
-void LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createCFGSimplificationPass function. */
-void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM);
-
-/** See llvm::createDeadStoreEliminationPass function. */
-void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM);
-
-/** See llvm::createScalarizerPass function. */
-void LLVMAddScalarizerPass(LLVMPassManagerRef PM);
-
-/** See llvm::createMergedLoadStoreMotionPass function. */
-void LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM);
-
-/** See llvm::createGVNPass function. */
-void LLVMAddGVNPass(LLVMPassManagerRef PM);
-
-/** See llvm::createGVNPass function. */
-void LLVMAddNewGVNPass(LLVMPassManagerRef PM);
-
-/** See llvm::createIndVarSimplifyPass function. */
-void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM);
-
-/** See llvm::createInstructionCombiningPass function. */
-void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
-
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- Scalar.h - Scalar Transformation Library 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 header declares the C interface to libLLVMScalarOpts.a, which *|
+|* implements various scalar transformations of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_SCALAR_H
+#define LLVM_C_TRANSFORMS_SCALAR_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsScalar Scalar transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createAggressiveDCEPass function. */
+void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
+
+/** See llvm::createDeadCodeEliminationPass function. */
+void LLVMAddDCEPass(LLVMPassManagerRef PM);
+
+/** See llvm::createBitTrackingDCEPass function. */
+void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
+
+/** See llvm::createAlignmentFromAssumptionsPass function. */
+void LLVMAddAlignmentFromAssumptionsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createCFGSimplificationPass function. */
+void LLVMAddCFGSimplificationPass(LLVMPassManagerRef PM);
+
+/** See llvm::createDeadStoreEliminationPass function. */
+void LLVMAddDeadStoreEliminationPass(LLVMPassManagerRef PM);
+
+/** See llvm::createScalarizerPass function. */
+void LLVMAddScalarizerPass(LLVMPassManagerRef PM);
+
+/** See llvm::createMergedLoadStoreMotionPass function. */
+void LLVMAddMergedLoadStoreMotionPass(LLVMPassManagerRef PM);
+
+/** See llvm::createGVNPass function. */
+void LLVMAddGVNPass(LLVMPassManagerRef PM);
+
+/** See llvm::createGVNPass function. */
+void LLVMAddNewGVNPass(LLVMPassManagerRef PM);
+
+/** See llvm::createIndVarSimplifyPass function. */
+void LLVMAddIndVarSimplifyPass(LLVMPassManagerRef PM);
+
+/** See llvm::createInstructionCombiningPass function. */
+void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
+
/** See llvm::createInstSimplifyLegacyPass function. */
void LLVMAddInstructionSimplifyPass(LLVMPassManagerRef PM);
-/** See llvm::createJumpThreadingPass function. */
-void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLICMPass function. */
-void LLVMAddLICMPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopDeletionPass function. */
-void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopIdiomPass function */
-void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopRotatePass function. */
-void LLVMAddLoopRotatePass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopRerollPass function. */
-void LLVMAddLoopRerollPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopUnrollPass function. */
-void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopUnrollAndJamPass function. */
-void LLVMAddLoopUnrollAndJamPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLoopUnswitchPass function. */
-void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLowerAtomicPass function. */
-void LLVMAddLowerAtomicPass(LLVMPassManagerRef PM);
-
-/** See llvm::createMemCpyOptPass function. */
-void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM);
-
-/** See llvm::createPartiallyInlineLibCallsPass function. */
-void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createReassociatePass function. */
-void LLVMAddReassociatePass(LLVMPassManagerRef PM);
-
-/** See llvm::createSCCPPass function. */
-void LLVMAddSCCPPass(LLVMPassManagerRef PM);
-
-/** See llvm::createSROAPass function. */
-void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM);
-
-/** See llvm::createSROAPass function. */
-void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM);
-
-/** See llvm::createSROAPass function. */
-void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
- int Threshold);
-
-/** See llvm::createSimplifyLibCallsPass function. */
-void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createTailCallEliminationPass function. */
-void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM);
-
-/** See llvm::demotePromoteMemoryToRegisterPass function. */
-void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM);
-
-/** See llvm::createVerifierPass function. */
-void LLVMAddVerifierPass(LLVMPassManagerRef PM);
-
-/** See llvm::createCorrelatedValuePropagationPass function */
-void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM);
-
-/** See llvm::createEarlyCSEPass function */
-void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM);
-
-/** See llvm::createEarlyCSEPass function */
-void LLVMAddEarlyCSEMemSSAPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLowerExpectIntrinsicPass function */
-void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM);
-
-/** See llvm::createLowerConstantIntrinsicsPass function */
-void LLVMAddLowerConstantIntrinsicsPass(LLVMPassManagerRef PM);
-
-/** See llvm::createTypeBasedAliasAnalysisPass function */
-void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM);
-
-/** See llvm::createScopedNoAliasAAPass function */
-void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM);
-
-/** See llvm::createBasicAliasAnalysisPass function */
-void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
-
-/** See llvm::createUnifyFunctionExitNodesPass function */
-void LLVMAddUnifyFunctionExitNodesPass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+/** See llvm::createJumpThreadingPass function. */
+void LLVMAddJumpThreadingPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLICMPass function. */
+void LLVMAddLICMPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopDeletionPass function. */
+void LLVMAddLoopDeletionPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopIdiomPass function */
+void LLVMAddLoopIdiomPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopRotatePass function. */
+void LLVMAddLoopRotatePass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopRerollPass function. */
+void LLVMAddLoopRerollPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopUnrollPass function. */
+void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopUnrollAndJamPass function. */
+void LLVMAddLoopUnrollAndJamPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLoopUnswitchPass function. */
+void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLowerAtomicPass function. */
+void LLVMAddLowerAtomicPass(LLVMPassManagerRef PM);
+
+/** See llvm::createMemCpyOptPass function. */
+void LLVMAddMemCpyOptPass(LLVMPassManagerRef PM);
+
+/** See llvm::createPartiallyInlineLibCallsPass function. */
+void LLVMAddPartiallyInlineLibCallsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createReassociatePass function. */
+void LLVMAddReassociatePass(LLVMPassManagerRef PM);
+
+/** See llvm::createSCCPPass function. */
+void LLVMAddSCCPPass(LLVMPassManagerRef PM);
+
+/** See llvm::createSROAPass function. */
+void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM);
+
+/** See llvm::createSROAPass function. */
+void LLVMAddScalarReplAggregatesPassSSA(LLVMPassManagerRef PM);
+
+/** See llvm::createSROAPass function. */
+void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM,
+ int Threshold);
+
+/** See llvm::createSimplifyLibCallsPass function. */
+void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createTailCallEliminationPass function. */
+void LLVMAddTailCallEliminationPass(LLVMPassManagerRef PM);
+
+/** See llvm::demotePromoteMemoryToRegisterPass function. */
+void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM);
+
+/** See llvm::createVerifierPass function. */
+void LLVMAddVerifierPass(LLVMPassManagerRef PM);
+
+/** See llvm::createCorrelatedValuePropagationPass function */
+void LLVMAddCorrelatedValuePropagationPass(LLVMPassManagerRef PM);
+
+/** See llvm::createEarlyCSEPass function */
+void LLVMAddEarlyCSEPass(LLVMPassManagerRef PM);
+
+/** See llvm::createEarlyCSEPass function */
+void LLVMAddEarlyCSEMemSSAPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLowerExpectIntrinsicPass function */
+void LLVMAddLowerExpectIntrinsicPass(LLVMPassManagerRef PM);
+
+/** See llvm::createLowerConstantIntrinsicsPass function */
+void LLVMAddLowerConstantIntrinsicsPass(LLVMPassManagerRef PM);
+
+/** See llvm::createTypeBasedAliasAnalysisPass function */
+void LLVMAddTypeBasedAliasAnalysisPass(LLVMPassManagerRef PM);
+
+/** See llvm::createScopedNoAliasAAPass function */
+void LLVMAddScopedNoAliasAAPass(LLVMPassManagerRef PM);
+
+/** See llvm::createBasicAliasAnalysisPass function */
+void LLVMAddBasicAliasAnalysisPass(LLVMPassManagerRef PM);
+
+/** See llvm::createUnifyFunctionExitNodesPass function */
+void LLVMAddUnifyFunctionExitNodesPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/Utils.h b/contrib/libs/llvm12/include/llvm-c/Transforms/Utils.h
index 6945b3f36a7..223444d90a3 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/Utils.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/Utils.h
@@ -1,61 +1,61 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- Utils.h - Transformation Utils Library 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 header declares the C interface to libLLVMTransformUtils.a, which *|
-|* implements various transformation utilities of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_UTILS_H
-#define LLVM_C_TRANSFORMS_UTILS_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsUtils Transformation Utilities
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createLowerSwitchPass function. */
-void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM);
-
-/** See llvm::createPromoteMemoryToRegisterPass function. */
-void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM);
-
-/** See llvm::createAddDiscriminatorsPass function. */
-void LLVMAddAddDiscriminatorsPass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- Utils.h - Transformation Utils Library 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 header declares the C interface to libLLVMTransformUtils.a, which *|
+|* implements various transformation utilities of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_UTILS_H
+#define LLVM_C_TRANSFORMS_UTILS_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsUtils Transformation Utilities
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createLowerSwitchPass function. */
+void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM);
+
+/** See llvm::createPromoteMemoryToRegisterPass function. */
+void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM);
+
+/** See llvm::createAddDiscriminatorsPass function. */
+void LLVMAddAddDiscriminatorsPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Transforms/Vectorize.h b/contrib/libs/llvm12/include/llvm-c/Transforms/Vectorize.h
index 72ebb00a801..5300ab53e40 100644
--- a/contrib/libs/llvm12/include/llvm-c/Transforms/Vectorize.h
+++ b/contrib/libs/llvm12/include/llvm-c/Transforms/Vectorize.h
@@ -1,58 +1,58 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===---------------------------Vectorize.h --------------------- -*- C -*-===*\
-|*===----------- Vectorization Transformation Library C Interface ---------===*|
-|* *|
-|* 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 header declares the C interface to libLLVMVectorize.a, which *|
-|* implements various vectorization transformations of the LLVM IR. *|
-|* *|
-|* Many exotic languages can interoperate with C code but have a harder time *|
-|* with C++ due to name mangling. So in addition to C, this interface enables *|
-|* tools written in such languages. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TRANSFORMS_VECTORIZE_H
-#define LLVM_C_TRANSFORMS_VECTORIZE_H
-
-#include "llvm-c/ExternC.h"
-#include "llvm-c/Types.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCTransformsVectorize Vectorization transformations
- * @ingroup LLVMCTransforms
- *
- * @{
- */
-
-/** See llvm::createLoopVectorizePass function. */
-void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM);
-
-/** See llvm::createSLPVectorizerPass function. */
-void LLVMAddSLPVectorizePass(LLVMPassManagerRef PM);
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===---------------------------Vectorize.h --------------------- -*- C -*-===*\
+|*===----------- Vectorization Transformation Library C Interface ---------===*|
+|* *|
+|* 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 header declares the C interface to libLLVMVectorize.a, which *|
+|* implements various vectorization transformations of the LLVM IR. *|
+|* *|
+|* Many exotic languages can interoperate with C code but have a harder time *|
+|* with C++ due to name mangling. So in addition to C, this interface enables *|
+|* tools written in such languages. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_VECTORIZE_H
+#define LLVM_C_TRANSFORMS_VECTORIZE_H
+
+#include "llvm-c/ExternC.h"
+#include "llvm-c/Types.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCTransformsVectorize Vectorization transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createLoopVectorizePass function. */
+void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM);
+
+/** See llvm::createSLPVectorizerPass function. */
+void LLVMAddSLPVectorizePass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/Types.h b/contrib/libs/llvm12/include/llvm-c/Types.h
index 5d11e8d5cfe..f1ec327873b 100644
--- a/contrib/libs/llvm12/include/llvm-c/Types.h
+++ b/contrib/libs/llvm12/include/llvm-c/Types.h
@@ -1,187 +1,187 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/Support.h - C Interface Types declarations ---------*- 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 types used by the C interface to LLVM. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_TYPES_H
-#define LLVM_C_TYPES_H
-
-#include "llvm-c/DataTypes.h"
-#include "llvm-c/ExternC.h"
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * @defgroup LLVMCSupportTypes Types and Enumerations
- *
- * @{
- */
-
-typedef int LLVMBool;
-
-/* Opaque types. */
-
-/**
- * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
- * parameters must be passed as base types. Despite the declared types, most
- * of the functions provided operate only on branches of the type hierarchy.
- * The declared parameter names are descriptive and specify which type is
- * required. Additionally, each type hierarchy is documented along with the
- * functions that operate upon it. For more detail, refer to LLVM's C++ code.
- * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
- * form unwrap<RequiredType>(Param).
- */
-
-/**
- * Used to pass regions of memory through LLVM interfaces.
- *
- * @see llvm::MemoryBuffer
- */
-typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
-
-/**
- * The top-level container for all LLVM global data. See the LLVMContext class.
- */
-typedef struct LLVMOpaqueContext *LLVMContextRef;
-
-/**
- * The top-level container for all other LLVM Intermediate Representation (IR)
- * objects.
- *
- * @see llvm::Module
- */
-typedef struct LLVMOpaqueModule *LLVMModuleRef;
-
-/**
- * Each value in the LLVM IR has a type, an LLVMTypeRef.
- *
- * @see llvm::Type
- */
-typedef struct LLVMOpaqueType *LLVMTypeRef;
-
-/**
- * Represents an individual value in LLVM IR.
- *
- * This models llvm::Value.
- */
-typedef struct LLVMOpaqueValue *LLVMValueRef;
-
-/**
- * Represents a basic block of instructions in LLVM IR.
- *
- * This models llvm::BasicBlock.
- */
-typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
-
-/**
- * Represents an LLVM Metadata.
- *
- * This models llvm::Metadata.
- */
-typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
-
-/**
- * Represents an LLVM Named Metadata Node.
- *
- * This models llvm::NamedMDNode.
- */
-typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef;
-
-/**
- * Represents an entry in a Global Object's metadata attachments.
- *
- * This models std::pair<unsigned, MDNode *>
- */
-typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry;
-
-/**
- * Represents an LLVM basic block builder.
- *
- * This models llvm::IRBuilder.
- */
-typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
-
-/**
- * Represents an LLVM debug info builder.
- *
- * This models llvm::DIBuilder.
- */
-typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
-
-/**
- * Interface used to provide a module to JIT or interpreter.
- * This is now just a synonym for llvm::Module, but we have to keep using the
- * different type to keep binary compatibility.
- */
-typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
-
-/** @see llvm::PassManagerBase */
-typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
-
-/** @see llvm::PassRegistry */
-typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
-
-/**
- * Used to get the users and usees of a Value.
- *
- * @see llvm::Use */
-typedef struct LLVMOpaqueUse *LLVMUseRef;
-
-/**
- * Used to represent an attributes.
- *
- * @see llvm::Attribute
- */
-typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef;
-
-/**
- * @see llvm::DiagnosticInfo
- */
-typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
-
-/**
- * @see llvm::Comdat
- */
-typedef struct LLVMComdat *LLVMComdatRef;
-
-/**
- * @see llvm::Module::ModuleFlagEntry
- */
-typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
-
-/**
- * @see llvm::JITEventListener
- */
-typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
-
-/**
- * @see llvm::object::Binary
- */
-typedef struct LLVMOpaqueBinary *LLVMBinaryRef;
-
-/**
- * @}
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/Support.h - C Interface Types declarations ---------*- 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 types used by the C interface to LLVM. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TYPES_H
+#define LLVM_C_TYPES_H
+
+#include "llvm-c/DataTypes.h"
+#include "llvm-c/ExternC.h"
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * @defgroup LLVMCSupportTypes Types and Enumerations
+ *
+ * @{
+ */
+
+typedef int LLVMBool;
+
+/* Opaque types. */
+
+/**
+ * LLVM uses a polymorphic type hierarchy which C cannot represent, therefore
+ * parameters must be passed as base types. Despite the declared types, most
+ * of the functions provided operate only on branches of the type hierarchy.
+ * The declared parameter names are descriptive and specify which type is
+ * required. Additionally, each type hierarchy is documented along with the
+ * functions that operate upon it. For more detail, refer to LLVM's C++ code.
+ * If in doubt, refer to Core.cpp, which performs parameter downcasts in the
+ * form unwrap<RequiredType>(Param).
+ */
+
+/**
+ * Used to pass regions of memory through LLVM interfaces.
+ *
+ * @see llvm::MemoryBuffer
+ */
+typedef struct LLVMOpaqueMemoryBuffer *LLVMMemoryBufferRef;
+
+/**
+ * The top-level container for all LLVM global data. See the LLVMContext class.
+ */
+typedef struct LLVMOpaqueContext *LLVMContextRef;
+
+/**
+ * The top-level container for all other LLVM Intermediate Representation (IR)
+ * objects.
+ *
+ * @see llvm::Module
+ */
+typedef struct LLVMOpaqueModule *LLVMModuleRef;
+
+/**
+ * Each value in the LLVM IR has a type, an LLVMTypeRef.
+ *
+ * @see llvm::Type
+ */
+typedef struct LLVMOpaqueType *LLVMTypeRef;
+
+/**
+ * Represents an individual value in LLVM IR.
+ *
+ * This models llvm::Value.
+ */
+typedef struct LLVMOpaqueValue *LLVMValueRef;
+
+/**
+ * Represents a basic block of instructions in LLVM IR.
+ *
+ * This models llvm::BasicBlock.
+ */
+typedef struct LLVMOpaqueBasicBlock *LLVMBasicBlockRef;
+
+/**
+ * Represents an LLVM Metadata.
+ *
+ * This models llvm::Metadata.
+ */
+typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
+
+/**
+ * Represents an LLVM Named Metadata Node.
+ *
+ * This models llvm::NamedMDNode.
+ */
+typedef struct LLVMOpaqueNamedMDNode *LLVMNamedMDNodeRef;
+
+/**
+ * Represents an entry in a Global Object's metadata attachments.
+ *
+ * This models std::pair<unsigned, MDNode *>
+ */
+typedef struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry;
+
+/**
+ * Represents an LLVM basic block builder.
+ *
+ * This models llvm::IRBuilder.
+ */
+typedef struct LLVMOpaqueBuilder *LLVMBuilderRef;
+
+/**
+ * Represents an LLVM debug info builder.
+ *
+ * This models llvm::DIBuilder.
+ */
+typedef struct LLVMOpaqueDIBuilder *LLVMDIBuilderRef;
+
+/**
+ * Interface used to provide a module to JIT or interpreter.
+ * This is now just a synonym for llvm::Module, but we have to keep using the
+ * different type to keep binary compatibility.
+ */
+typedef struct LLVMOpaqueModuleProvider *LLVMModuleProviderRef;
+
+/** @see llvm::PassManagerBase */
+typedef struct LLVMOpaquePassManager *LLVMPassManagerRef;
+
+/** @see llvm::PassRegistry */
+typedef struct LLVMOpaquePassRegistry *LLVMPassRegistryRef;
+
+/**
+ * Used to get the users and usees of a Value.
+ *
+ * @see llvm::Use */
+typedef struct LLVMOpaqueUse *LLVMUseRef;
+
+/**
+ * Used to represent an attributes.
+ *
+ * @see llvm::Attribute
+ */
+typedef struct LLVMOpaqueAttributeRef *LLVMAttributeRef;
+
+/**
+ * @see llvm::DiagnosticInfo
+ */
+typedef struct LLVMOpaqueDiagnosticInfo *LLVMDiagnosticInfoRef;
+
+/**
+ * @see llvm::Comdat
+ */
+typedef struct LLVMComdat *LLVMComdatRef;
+
+/**
+ * @see llvm::Module::ModuleFlagEntry
+ */
+typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
+
+/**
+ * @see llvm::JITEventListener
+ */
+typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
+
+/**
+ * @see llvm::object::Binary
+ */
+typedef struct LLVMOpaqueBinary *LLVMBinaryRef;
+
+/**
+ * @}
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/lto.h b/contrib/libs/llvm12/include/llvm-c/lto.h
index bbdc06a98e5..7379122343d 100644
--- a/contrib/libs/llvm12/include/llvm-c/lto.h
+++ b/contrib/libs/llvm12/include/llvm-c/lto.h
@@ -1,944 +1,944 @@
-#pragma once
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-parameter"
-#endif
-
-/*===-- llvm-c/lto.h - LTO Public 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 header provides public interface to an abstract link time optimization*|
-|* library. LLVM provides an implementation of this interface for use with *|
-|* llvm bitcode files. *|
-|* *|
-\*===----------------------------------------------------------------------===*/
-
-#ifndef LLVM_C_LTO_H
-#define LLVM_C_LTO_H
-
-#include "llvm-c/ExternC.h"
-
-#ifdef __cplusplus
-#include <cstddef>
-#else
-#include <stddef.h>
-#endif
-#include <sys/types.h>
-
-#ifndef __cplusplus
-#if !defined(_MSC_VER)
-#include <stdbool.h>
-typedef bool lto_bool_t;
-#else
-/* MSVC in particular does not have anything like _Bool or bool in C, but we can
- at least make sure the type is the same size. The implementation side will
- use C++ bool. */
-typedef unsigned char lto_bool_t;
-#endif
-#else
-typedef bool lto_bool_t;
-#endif
-
-/**
- * @defgroup LLVMCLTO LTO
- * @ingroup LLVMC
- *
- * @{
- */
-
-#define LTO_API_VERSION 27
-
-/**
- * \since prior to LTO_API_VERSION=3
- */
-typedef enum {
- LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */
- LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
- LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
- LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
- LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
- LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
- LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
- LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
- LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
- LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
- LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
- LTO_SYMBOL_SCOPE_MASK = 0x00003800,
- LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
- LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
- LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
- LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
- LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800,
- LTO_SYMBOL_COMDAT = 0x00004000,
- LTO_SYMBOL_ALIAS = 0x00008000
-} lto_symbol_attributes;
-
-/**
- * \since prior to LTO_API_VERSION=3
- */
-typedef enum {
- LTO_DEBUG_MODEL_NONE = 0,
- LTO_DEBUG_MODEL_DWARF = 1
-} lto_debug_model;
-
-/**
- * \since prior to LTO_API_VERSION=3
- */
-typedef enum {
- LTO_CODEGEN_PIC_MODEL_STATIC = 0,
- LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1,
- LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2,
- LTO_CODEGEN_PIC_MODEL_DEFAULT = 3
-} lto_codegen_model;
-
-/** opaque reference to a loaded object module */
-typedef struct LLVMOpaqueLTOModule *lto_module_t;
-
-/** opaque reference to a code generator */
-typedef struct LLVMOpaqueLTOCodeGenerator *lto_code_gen_t;
-
-/** opaque reference to a thin code generator */
-typedef struct LLVMOpaqueThinLTOCodeGenerator *thinlto_code_gen_t;
-
-LLVM_C_EXTERN_C_BEGIN
-
-/**
- * Returns a printable string.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern const char*
-lto_get_version(void);
-
-/**
- * Returns the last error string or NULL if last operation was successful.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern const char*
-lto_get_error_message(void);
-
-/**
- * Checks if a file is a loadable object file.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_module_is_object_file(const char* path);
-
-/**
- * Checks if a file is a loadable object compiled for requested target.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_module_is_object_file_for_target(const char* path,
- const char* target_triple_prefix);
-
-/**
- * Return true if \p Buffer contains a bitcode file with ObjC code (category
- * or class) in it.
- *
- * \since LTO_API_VERSION=20
- */
-extern lto_bool_t
-lto_module_has_objc_category(const void *mem, size_t length);
-
-/**
- * Checks if a buffer is a loadable object file.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t lto_module_is_object_file_in_memory(const void *mem,
- size_t length);
-
-/**
- * Checks if a buffer is a loadable object compiled for requested target.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_module_is_object_file_in_memory_for_target(const void* mem, size_t length,
- const char* target_triple_prefix);
-
-/**
- * Loads an object file from disk.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_module_t
-lto_module_create(const char* path);
-
-/**
- * Loads an object file from memory.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_module_t
-lto_module_create_from_memory(const void* mem, size_t length);
-
-/**
- * Loads an object file from memory with an extra path argument.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=9
- */
-extern lto_module_t
-lto_module_create_from_memory_with_path(const void* mem, size_t length,
- const char *path);
-
-/**
- * Loads an object file in its own context.
- *
- * Loads an object file in its own LLVMContext. This function call is
- * thread-safe. However, modules created this way should not be merged into an
- * lto_code_gen_t using \a lto_codegen_add_module().
- *
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=11
- */
-extern lto_module_t
-lto_module_create_in_local_context(const void *mem, size_t length,
- const char *path);
-
-/**
- * Loads an object file in the codegen context.
- *
- * Loads an object file into the same context as \c cg. The module is safe to
- * add using \a lto_codegen_add_module().
- *
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=11
- */
-extern lto_module_t
-lto_module_create_in_codegen_context(const void *mem, size_t length,
- const char *path, lto_code_gen_t cg);
-
-/**
- * Loads an object file from disk. The seek point of fd is not preserved.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=5
- */
-extern lto_module_t
-lto_module_create_from_fd(int fd, const char *path, size_t file_size);
-
-/**
- * Loads an object file from disk. The seek point of fd is not preserved.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=5
- */
-extern lto_module_t
-lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size,
- size_t map_size, off_t offset);
-
-/**
- * Frees all memory internally allocated by the module.
- * Upon return the lto_module_t is no longer valid.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern void
-lto_module_dispose(lto_module_t mod);
-
-/**
- * Returns triple string which the object module was compiled under.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern const char*
-lto_module_get_target_triple(lto_module_t mod);
-
-/**
- * Sets triple string with which the object will be codegened.
- *
- * \since LTO_API_VERSION=4
- */
-extern void
-lto_module_set_target_triple(lto_module_t mod, const char *triple);
-
-/**
- * Returns the number of symbols in the object module.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern unsigned int
-lto_module_get_num_symbols(lto_module_t mod);
-
-/**
- * Returns the name of the ith symbol in the object module.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern const char*
-lto_module_get_symbol_name(lto_module_t mod, unsigned int index);
-
-/**
- * Returns the attributes of the ith symbol in the object module.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_symbol_attributes
-lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index);
-
-/**
- * Returns the module's linker options.
- *
- * The linker options may consist of multiple flags. It is the linker's
- * responsibility to split the flags using a platform-specific mechanism.
- *
- * \since LTO_API_VERSION=16
- */
-extern const char*
-lto_module_get_linkeropts(lto_module_t mod);
-
-/**
- * If targeting mach-o on darwin, this function gets the CPU type and subtype
- * that will end up being encoded in the mach-o header. These are the values
- * that can be found in mach/machine.h.
- *
- * \p out_cputype and \p out_cpusubtype must be non-NULL.
- *
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=27
- */
-extern lto_bool_t lto_module_get_macho_cputype(lto_module_t mod,
- unsigned int *out_cputype,
- unsigned int *out_cpusubtype);
-
-/**
- * Diagnostic severity.
- *
- * \since LTO_API_VERSION=7
- */
-typedef enum {
- LTO_DS_ERROR = 0,
- LTO_DS_WARNING = 1,
- LTO_DS_REMARK = 3, // Added in LTO_API_VERSION=10.
- LTO_DS_NOTE = 2
-} lto_codegen_diagnostic_severity_t;
-
-/**
- * Diagnostic handler type.
- * \p severity defines the severity.
- * \p diag is the actual diagnostic.
- * The diagnostic is not prefixed by any of severity keyword, e.g., 'error: '.
- * \p ctxt is used to pass the context set with the diagnostic handler.
- *
- * \since LTO_API_VERSION=7
- */
-typedef void (*lto_diagnostic_handler_t)(
- lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt);
-
-/**
- * Set a diagnostic handler and the related context (void *).
- * This is more general than lto_get_error_message, as the diagnostic handler
- * can be called at anytime within lto.
- *
- * \since LTO_API_VERSION=7
- */
-extern void lto_codegen_set_diagnostic_handler(lto_code_gen_t,
- lto_diagnostic_handler_t,
- void *);
-
-/**
- * Instantiates a code generator.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- * All modules added using \a lto_codegen_add_module() must have been created
- * in the same context as the codegen.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_code_gen_t
-lto_codegen_create(void);
-
-/**
- * Instantiate a code generator in its own context.
- *
- * Instantiates a code generator in its own context. Modules added via \a
- * lto_codegen_add_module() must have all been created in the same context,
- * using \a lto_module_create_in_codegen_context().
- *
- * \since LTO_API_VERSION=11
- */
-extern lto_code_gen_t
-lto_codegen_create_in_local_context(void);
-
-/**
- * Frees all code generator and all memory it internally allocated.
- * Upon return the lto_code_gen_t is no longer valid.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern void
-lto_codegen_dispose(lto_code_gen_t);
-
-/**
- * Add an object module to the set of modules for which code will be generated.
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \c cg and \c mod must both be in the same context. See \a
- * lto_codegen_create_in_local_context() and \a
- * lto_module_create_in_codegen_context().
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
-
-/**
- * Sets the object module for code generation. This will transfer the ownership
- * of the module to the code generator.
- *
- * \c cg and \c mod must both be in the same context.
- *
- * \since LTO_API_VERSION=13
- */
-extern void
-lto_codegen_set_module(lto_code_gen_t cg, lto_module_t mod);
-
-/**
- * Sets if debug info should be generated.
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);
-
-/**
- * Sets which PIC code model to generated.
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern lto_bool_t
-lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);
-
-/**
- * Sets the cpu to generate code for.
- *
- * \since LTO_API_VERSION=4
- */
-extern void
-lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu);
-
-/**
- * Sets the location of the assembler tool to run. If not set, libLTO
- * will use gcc to invoke the assembler.
- *
- * \since LTO_API_VERSION=3
- */
-extern void
-lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
-
-/**
- * Sets extra arguments that libLTO should pass to the assembler.
- *
- * \since LTO_API_VERSION=4
- */
-extern void
-lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
- int nargs);
-
-/**
- * Adds to a list of all global symbols that must exist in the final generated
- * code. If a function is not listed there, it might be inlined into every usage
- * and optimized away.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern void
-lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char* symbol);
-
-/**
- * Writes a new object file at the specified path that contains the
- * merged contents of all modules added so far.
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=5
- */
-extern lto_bool_t
-lto_codegen_write_merged_modules(lto_code_gen_t cg, const char* path);
-
-/**
- * Generates code for all added modules into one native object file.
- * This calls lto_codegen_optimize then lto_codegen_compile_optimized.
- *
- * On success returns a pointer to a generated mach-o/ELF buffer and
- * length set to the buffer size. The buffer is owned by the
- * lto_code_gen_t and will be freed when lto_codegen_dispose()
- * is called, or lto_codegen_compile() is called again.
- * On failure, returns NULL (check lto_get_error_message() for details).
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern const void*
-lto_codegen_compile(lto_code_gen_t cg, size_t* length);
-
-/**
- * Generates code for all added modules into one native object file.
- * This calls lto_codegen_optimize then lto_codegen_compile_optimized (instead
- * of returning a generated mach-o/ELF buffer, it writes to a file).
- *
- * The name of the file is written to name. Returns true on error.
- *
- * \since LTO_API_VERSION=5
- */
-extern lto_bool_t
-lto_codegen_compile_to_file(lto_code_gen_t cg, const char** name);
-
-/**
- * Runs optimization for the merged module. Returns true on error.
- *
- * \since LTO_API_VERSION=12
- */
-extern lto_bool_t
-lto_codegen_optimize(lto_code_gen_t cg);
-
-/**
- * Generates code for the optimized merged module into one native object file.
- * It will not run any IR optimizations on the merged module.
- *
- * On success returns a pointer to a generated mach-o/ELF buffer and length set
- * to the buffer size. The buffer is owned by the lto_code_gen_t and will be
- * freed when lto_codegen_dispose() is called, or
- * lto_codegen_compile_optimized() is called again. On failure, returns NULL
- * (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=12
- */
-extern const void*
-lto_codegen_compile_optimized(lto_code_gen_t cg, size_t* length);
-
-/**
- * Returns the runtime API version.
- *
- * \since LTO_API_VERSION=12
- */
-extern unsigned int
-lto_api_version(void);
-
-/**
- * Sets options to help debug codegen bugs.
- *
- * This function takes one or more options separated by spaces.
- * Warning: passing file paths through this function may confuse the argument
- * parser if the paths contain spaces.
- *
- * \since prior to LTO_API_VERSION=3
- */
-extern void
-lto_codegen_debug_options(lto_code_gen_t cg, const char *);
-
-/**
- * Same as the previous function, but takes every option separately through an
- * array.
- *
- * \since prior to LTO_API_VERSION=26
- */
-extern void lto_codegen_debug_options_array(lto_code_gen_t cg,
- const char *const *, int number);
-
-/**
- * Initializes LLVM disassemblers.
- * FIXME: This doesn't really belong here.
- *
- * \since LTO_API_VERSION=5
- */
-extern void
-lto_initialize_disassembler(void);
-
-/**
- * Sets if we should run internalize pass during optimization and code
- * generation.
- *
- * \since LTO_API_VERSION=14
- */
-extern void
-lto_codegen_set_should_internalize(lto_code_gen_t cg,
- lto_bool_t ShouldInternalize);
-
-/**
- * Set whether to embed uselists in bitcode.
- *
- * Sets whether \a lto_codegen_write_merged_modules() should embed uselists in
- * output bitcode. This should be turned on for all -save-temps output.
- *
- * \since LTO_API_VERSION=15
- */
-extern void
-lto_codegen_set_should_embed_uselists(lto_code_gen_t cg,
- lto_bool_t ShouldEmbedUselists);
-
-/** Opaque reference to an LTO input file */
-typedef struct LLVMOpaqueLTOInput *lto_input_t;
-
-/**
- * Creates an LTO input file from a buffer. The path
- * argument is used for diagnotics as this function
- * otherwise does not know which file the given buffer
- * is associated with.
- *
- * \since LTO_API_VERSION=24
- */
-extern lto_input_t lto_input_create(const void *buffer,
- size_t buffer_size,
- const char *path);
-
-/**
- * Frees all memory internally allocated by the LTO input file.
- * Upon return the lto_module_t is no longer valid.
- *
- * \since LTO_API_VERSION=24
- */
-extern void lto_input_dispose(lto_input_t input);
-
-/**
- * Returns the number of dependent library specifiers
- * for the given LTO input file.
- *
- * \since LTO_API_VERSION=24
- */
-extern unsigned lto_input_get_num_dependent_libraries(lto_input_t input);
-
-/**
- * Returns the ith dependent library specifier
- * for the given LTO input file. The returned
- * string is not null-terminated.
- *
- * \since LTO_API_VERSION=24
- */
-extern const char * lto_input_get_dependent_library(lto_input_t input,
- size_t index,
- size_t *size);
-
-/**
- * Returns the list of libcall symbols that can be generated by LTO
- * that might not be visible from the symbol table of bitcode files.
- *
- * \since prior to LTO_API_VERSION=25
- */
-extern const char *const *lto_runtime_lib_symbols_list(size_t *size);
-
-/**
- * @} // endgoup LLVMCLTO
- * @defgroup LLVMCTLTO ThinLTO
- * @ingroup LLVMC
- *
- * @{
- */
-
-/**
- * Type to wrap a single object returned by ThinLTO.
- *
- * \since LTO_API_VERSION=18
- */
-typedef struct {
- const char *Buffer;
- size_t Size;
-} LTOObjectBuffer;
-
-/**
- * Instantiates a ThinLTO code generator.
- * Returns NULL on error (check lto_get_error_message() for details).
- *
- *
- * The ThinLTOCodeGenerator is not intended to be reuse for multiple
- * compilation: the model is that the client adds modules to the generator and
- * ask to perform the ThinLTO optimizations / codegen, and finally destroys the
- * codegenerator.
- *
- * \since LTO_API_VERSION=18
- */
-extern thinlto_code_gen_t thinlto_create_codegen(void);
-
-/**
- * Frees the generator and all memory it internally allocated.
- * Upon return the thinlto_code_gen_t is no longer valid.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_dispose(thinlto_code_gen_t cg);
-
-/**
- * Add a module to a ThinLTO code generator. Identifier has to be unique among
- * all the modules in a code generator. The data buffer stays owned by the
- * client, and is expected to be available for the entire lifetime of the
- * thinlto_code_gen_t it is added to.
- *
- * On failure, returns NULL (check lto_get_error_message() for details).
- *
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_add_module(thinlto_code_gen_t cg,
- const char *identifier, const char *data,
- int length);
-
-/**
- * Optimize and codegen all the modules added to the codegenerator using
- * ThinLTO. Resulting objects are accessible using thinlto_module_get_object().
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_process(thinlto_code_gen_t cg);
-
-/**
- * Returns the number of object files produced by the ThinLTO CodeGenerator.
- *
- * It usually matches the number of input files, but this is not a guarantee of
- * the API and may change in future implementation, so the client should not
- * assume it.
- *
- * \since LTO_API_VERSION=18
- */
-extern unsigned int thinlto_module_get_num_objects(thinlto_code_gen_t cg);
-
-/**
- * Returns a reference to the ith object file produced by the ThinLTO
- * CodeGenerator.
- *
- * Client should use \p thinlto_module_get_num_objects() to get the number of
- * available objects.
- *
- * \since LTO_API_VERSION=18
- */
-extern LTOObjectBuffer thinlto_module_get_object(thinlto_code_gen_t cg,
- unsigned int index);
-
-/**
- * Returns the number of object files produced by the ThinLTO CodeGenerator.
- *
- * It usually matches the number of input files, but this is not a guarantee of
- * the API and may change in future implementation, so the client should not
- * assume it.
- *
- * \since LTO_API_VERSION=21
- */
-unsigned int thinlto_module_get_num_object_files(thinlto_code_gen_t cg);
-
-/**
- * Returns the path to the ith object file produced by the ThinLTO
- * CodeGenerator.
- *
- * Client should use \p thinlto_module_get_num_object_files() to get the number
- * of available objects.
- *
- * \since LTO_API_VERSION=21
- */
-const char *thinlto_module_get_object_file(thinlto_code_gen_t cg,
- unsigned int index);
-
-/**
- * Sets which PIC code model to generate.
- * Returns true on error (check lto_get_error_message() for details).
- *
- * \since LTO_API_VERSION=18
- */
-extern lto_bool_t thinlto_codegen_set_pic_model(thinlto_code_gen_t cg,
- lto_codegen_model);
-
-/**
- * Sets the path to a directory to use as a storage for temporary bitcode files.
- * The intention is to make the bitcode files available for debugging at various
- * stage of the pipeline.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_savetemps_dir(thinlto_code_gen_t cg,
- const char *save_temps_dir);
-
-/**
- * Set the path to a directory where to save generated object files. This
- * path can be used by a linker to request on-disk files instead of in-memory
- * buffers. When set, results are available through
- * thinlto_module_get_object_file() instead of thinlto_module_get_object().
- *
- * \since LTO_API_VERSION=21
- */
-void thinlto_set_generated_objects_dir(thinlto_code_gen_t cg,
- const char *save_temps_dir);
-
-/**
- * Sets the cpu to generate code for.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_cpu(thinlto_code_gen_t cg, const char *cpu);
-
-/**
- * Disable CodeGen, only run the stages till codegen and stop. The output will
- * be bitcode.
- *
- * \since LTO_API_VERSION=19
- */
-extern void thinlto_codegen_disable_codegen(thinlto_code_gen_t cg,
- lto_bool_t disable);
-
-/**
- * Perform CodeGen only: disable all other stages.
- *
- * \since LTO_API_VERSION=19
- */
-extern void thinlto_codegen_set_codegen_only(thinlto_code_gen_t cg,
- lto_bool_t codegen_only);
-
-/**
- * Parse -mllvm style debug options.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_debug_options(const char *const *options, int number);
-
-/**
- * Test if a module has support for ThinLTO linking.
- *
- * \since LTO_API_VERSION=18
- */
-extern lto_bool_t lto_module_is_thinlto(lto_module_t mod);
-
-/**
- * Adds a symbol to the list of global symbols that must exist in the final
- * generated code. If a function is not listed there, it might be inlined into
- * every usage and optimized away. For every single module, the functions
- * referenced from code outside of the ThinLTO modules need to be added here.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_add_must_preserve_symbol(thinlto_code_gen_t cg,
- const char *name,
- int length);
-
-/**
- * Adds a symbol to the list of global symbols that are cross-referenced between
- * ThinLTO files. If the ThinLTO CodeGenerator can ensure that every
- * references from a ThinLTO module to this symbol is optimized away, then
- * the symbol can be discarded.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_add_cross_referenced_symbol(thinlto_code_gen_t cg,
- const char *name,
- int length);
-
-/**
- * @} // endgoup LLVMCTLTO
- * @defgroup LLVMCTLTO_CACHING ThinLTO Cache Control
- * @ingroup LLVMCTLTO
- *
- * These entry points control the ThinLTO cache. The cache is intended to
- * support incremental builds, and thus needs to be persistent across builds.
- * The client enables the cache by supplying a path to an existing directory.
- * The code generator will use this to store objects files that may be reused
- * during a subsequent build.
- * To avoid filling the disk space, a few knobs are provided:
- * - The pruning interval limits the frequency at which the garbage collector
- * will try to scan the cache directory to prune expired entries.
- * Setting to a negative number disables the pruning.
- * - The pruning expiration time indicates to the garbage collector how old an
- * entry needs to be to be removed.
- * - Finally, the garbage collector can be instructed to prune the cache until
- * the occupied space goes below a threshold.
- * @{
- */
-
-/**
- * Sets the path to a directory to use as a cache storage for incremental build.
- * Setting this activates caching.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_cache_dir(thinlto_code_gen_t cg,
- const char *cache_dir);
-
-/**
- * Sets the cache pruning interval (in seconds). A negative value disables the
- * pruning. An unspecified default value will be applied, and a value of 0 will
- * force prunning to occur.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_cache_pruning_interval(thinlto_code_gen_t cg,
- int interval);
-
-/**
- * Sets the maximum cache size that can be persistent across build, in terms of
- * percentage of the available space on the disk. Set to 100 to indicate
- * no limit, 50 to indicate that the cache size will not be left over half the
- * available space. A value over 100 will be reduced to 100, a value of 0 will
- * be ignored. An unspecified default value will be applied.
- *
- * The formula looks like:
- * AvailableSpace = FreeSpace + ExistingCacheSize
- * NewCacheSize = AvailableSpace * P/100
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_final_cache_size_relative_to_available_space(
- thinlto_code_gen_t cg, unsigned percentage);
-
-/**
- * Sets the expiration (in seconds) for an entry in the cache. An unspecified
- * default value will be applied. A value of 0 will be ignored.
- *
- * \since LTO_API_VERSION=18
- */
-extern void thinlto_codegen_set_cache_entry_expiration(thinlto_code_gen_t cg,
- unsigned expiration);
-
-/**
- * Sets the maximum size of the cache directory (in bytes). A value over the
- * amount of available space on the disk will be reduced to the amount of
- * available space. An unspecified default value will be applied. A value of 0
- * will be ignored.
- *
- * \since LTO_API_VERSION=22
- */
-extern void thinlto_codegen_set_cache_size_bytes(thinlto_code_gen_t cg,
- unsigned max_size_bytes);
-
-/**
- * Same as thinlto_codegen_set_cache_size_bytes, except the maximum size is in
- * megabytes (2^20 bytes).
- *
- * \since LTO_API_VERSION=23
- */
-extern void
-thinlto_codegen_set_cache_size_megabytes(thinlto_code_gen_t cg,
- unsigned max_size_megabytes);
-
-/**
- * Sets the maximum number of files in the cache directory. An unspecified
- * default value will be applied. A value of 0 will be ignored.
- *
- * \since LTO_API_VERSION=22
- */
-extern void thinlto_codegen_set_cache_size_files(thinlto_code_gen_t cg,
- unsigned max_size_files);
-
-/**
- * @} // endgroup LLVMCTLTO_CACHING
- */
-
-LLVM_C_EXTERN_C_END
-
-#endif /* LLVM_C_LTO_H */
-
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+/*===-- llvm-c/lto.h - LTO Public 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 header provides public interface to an abstract link time optimization*|
+|* library. LLVM provides an implementation of this interface for use with *|
+|* llvm bitcode files. *|
+|* *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_LTO_H
+#define LLVM_C_LTO_H
+
+#include "llvm-c/ExternC.h"
+
+#ifdef __cplusplus
+#include <cstddef>
+#else
+#include <stddef.h>
+#endif
+#include <sys/types.h>
+
+#ifndef __cplusplus
+#if !defined(_MSC_VER)
+#include <stdbool.h>
+typedef bool lto_bool_t;
+#else
+/* MSVC in particular does not have anything like _Bool or bool in C, but we can
+ at least make sure the type is the same size. The implementation side will
+ use C++ bool. */
+typedef unsigned char lto_bool_t;
+#endif
+#else
+typedef bool lto_bool_t;
+#endif
+
+/**
+ * @defgroup LLVMCLTO LTO
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+#define LTO_API_VERSION 27
+
+/**
+ * \since prior to LTO_API_VERSION=3
+ */
+typedef enum {
+ LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, /* log2 of alignment */
+ LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0,
+ LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0,
+ LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
+ LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080,
+ LTO_SYMBOL_DEFINITION_MASK = 0x00000700,
+ LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100,
+ LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
+ LTO_SYMBOL_DEFINITION_WEAK = 0x00000300,
+ LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400,
+ LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500,
+ LTO_SYMBOL_SCOPE_MASK = 0x00003800,
+ LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800,
+ LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000,
+ LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
+ LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
+ LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800,
+ LTO_SYMBOL_COMDAT = 0x00004000,
+ LTO_SYMBOL_ALIAS = 0x00008000
+} lto_symbol_attributes;
+
+/**
+ * \since prior to LTO_API_VERSION=3
+ */
+typedef enum {
+ LTO_DEBUG_MODEL_NONE = 0,
+ LTO_DEBUG_MODEL_DWARF = 1
+} lto_debug_model;
+
+/**
+ * \since prior to LTO_API_VERSION=3
+ */
+typedef enum {
+ LTO_CODEGEN_PIC_MODEL_STATIC = 0,
+ LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1,
+ LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2,
+ LTO_CODEGEN_PIC_MODEL_DEFAULT = 3
+} lto_codegen_model;
+
+/** opaque reference to a loaded object module */
+typedef struct LLVMOpaqueLTOModule *lto_module_t;
+
+/** opaque reference to a code generator */
+typedef struct LLVMOpaqueLTOCodeGenerator *lto_code_gen_t;
+
+/** opaque reference to a thin code generator */
+typedef struct LLVMOpaqueThinLTOCodeGenerator *thinlto_code_gen_t;
+
+LLVM_C_EXTERN_C_BEGIN
+
+/**
+ * Returns a printable string.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern const char*
+lto_get_version(void);
+
+/**
+ * Returns the last error string or NULL if last operation was successful.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern const char*
+lto_get_error_message(void);
+
+/**
+ * Checks if a file is a loadable object file.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_module_is_object_file(const char* path);
+
+/**
+ * Checks if a file is a loadable object compiled for requested target.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_module_is_object_file_for_target(const char* path,
+ const char* target_triple_prefix);
+
+/**
+ * Return true if \p Buffer contains a bitcode file with ObjC code (category
+ * or class) in it.
+ *
+ * \since LTO_API_VERSION=20
+ */
+extern lto_bool_t
+lto_module_has_objc_category(const void *mem, size_t length);
+
+/**
+ * Checks if a buffer is a loadable object file.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t lto_module_is_object_file_in_memory(const void *mem,
+ size_t length);
+
+/**
+ * Checks if a buffer is a loadable object compiled for requested target.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_module_is_object_file_in_memory_for_target(const void* mem, size_t length,
+ const char* target_triple_prefix);
+
+/**
+ * Loads an object file from disk.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_module_t
+lto_module_create(const char* path);
+
+/**
+ * Loads an object file from memory.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_module_t
+lto_module_create_from_memory(const void* mem, size_t length);
+
+/**
+ * Loads an object file from memory with an extra path argument.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=9
+ */
+extern lto_module_t
+lto_module_create_from_memory_with_path(const void* mem, size_t length,
+ const char *path);
+
+/**
+ * Loads an object file in its own context.
+ *
+ * Loads an object file in its own LLVMContext. This function call is
+ * thread-safe. However, modules created this way should not be merged into an
+ * lto_code_gen_t using \a lto_codegen_add_module().
+ *
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=11
+ */
+extern lto_module_t
+lto_module_create_in_local_context(const void *mem, size_t length,
+ const char *path);
+
+/**
+ * Loads an object file in the codegen context.
+ *
+ * Loads an object file into the same context as \c cg. The module is safe to
+ * add using \a lto_codegen_add_module().
+ *
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=11
+ */
+extern lto_module_t
+lto_module_create_in_codegen_context(const void *mem, size_t length,
+ const char *path, lto_code_gen_t cg);
+
+/**
+ * Loads an object file from disk. The seek point of fd is not preserved.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=5
+ */
+extern lto_module_t
+lto_module_create_from_fd(int fd, const char *path, size_t file_size);
+
+/**
+ * Loads an object file from disk. The seek point of fd is not preserved.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=5
+ */
+extern lto_module_t
+lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size,
+ size_t map_size, off_t offset);
+
+/**
+ * Frees all memory internally allocated by the module.
+ * Upon return the lto_module_t is no longer valid.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern void
+lto_module_dispose(lto_module_t mod);
+
+/**
+ * Returns triple string which the object module was compiled under.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern const char*
+lto_module_get_target_triple(lto_module_t mod);
+
+/**
+ * Sets triple string with which the object will be codegened.
+ *
+ * \since LTO_API_VERSION=4
+ */
+extern void
+lto_module_set_target_triple(lto_module_t mod, const char *triple);
+
+/**
+ * Returns the number of symbols in the object module.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern unsigned int
+lto_module_get_num_symbols(lto_module_t mod);
+
+/**
+ * Returns the name of the ith symbol in the object module.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern const char*
+lto_module_get_symbol_name(lto_module_t mod, unsigned int index);
+
+/**
+ * Returns the attributes of the ith symbol in the object module.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_symbol_attributes
+lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index);
+
+/**
+ * Returns the module's linker options.
+ *
+ * The linker options may consist of multiple flags. It is the linker's
+ * responsibility to split the flags using a platform-specific mechanism.
+ *
+ * \since LTO_API_VERSION=16
+ */
+extern const char*
+lto_module_get_linkeropts(lto_module_t mod);
+
+/**
+ * If targeting mach-o on darwin, this function gets the CPU type and subtype
+ * that will end up being encoded in the mach-o header. These are the values
+ * that can be found in mach/machine.h.
+ *
+ * \p out_cputype and \p out_cpusubtype must be non-NULL.
+ *
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=27
+ */
+extern lto_bool_t lto_module_get_macho_cputype(lto_module_t mod,
+ unsigned int *out_cputype,
+ unsigned int *out_cpusubtype);
+
+/**
+ * Diagnostic severity.
+ *
+ * \since LTO_API_VERSION=7
+ */
+typedef enum {
+ LTO_DS_ERROR = 0,
+ LTO_DS_WARNING = 1,
+ LTO_DS_REMARK = 3, // Added in LTO_API_VERSION=10.
+ LTO_DS_NOTE = 2
+} lto_codegen_diagnostic_severity_t;
+
+/**
+ * Diagnostic handler type.
+ * \p severity defines the severity.
+ * \p diag is the actual diagnostic.
+ * The diagnostic is not prefixed by any of severity keyword, e.g., 'error: '.
+ * \p ctxt is used to pass the context set with the diagnostic handler.
+ *
+ * \since LTO_API_VERSION=7
+ */
+typedef void (*lto_diagnostic_handler_t)(
+ lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt);
+
+/**
+ * Set a diagnostic handler and the related context (void *).
+ * This is more general than lto_get_error_message, as the diagnostic handler
+ * can be called at anytime within lto.
+ *
+ * \since LTO_API_VERSION=7
+ */
+extern void lto_codegen_set_diagnostic_handler(lto_code_gen_t,
+ lto_diagnostic_handler_t,
+ void *);
+
+/**
+ * Instantiates a code generator.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ * All modules added using \a lto_codegen_add_module() must have been created
+ * in the same context as the codegen.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_code_gen_t
+lto_codegen_create(void);
+
+/**
+ * Instantiate a code generator in its own context.
+ *
+ * Instantiates a code generator in its own context. Modules added via \a
+ * lto_codegen_add_module() must have all been created in the same context,
+ * using \a lto_module_create_in_codegen_context().
+ *
+ * \since LTO_API_VERSION=11
+ */
+extern lto_code_gen_t
+lto_codegen_create_in_local_context(void);
+
+/**
+ * Frees all code generator and all memory it internally allocated.
+ * Upon return the lto_code_gen_t is no longer valid.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern void
+lto_codegen_dispose(lto_code_gen_t);
+
+/**
+ * Add an object module to the set of modules for which code will be generated.
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \c cg and \c mod must both be in the same context. See \a
+ * lto_codegen_create_in_local_context() and \a
+ * lto_module_create_in_codegen_context().
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod);
+
+/**
+ * Sets the object module for code generation. This will transfer the ownership
+ * of the module to the code generator.
+ *
+ * \c cg and \c mod must both be in the same context.
+ *
+ * \since LTO_API_VERSION=13
+ */
+extern void
+lto_codegen_set_module(lto_code_gen_t cg, lto_module_t mod);
+
+/**
+ * Sets if debug info should be generated.
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model);
+
+/**
+ * Sets which PIC code model to generated.
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern lto_bool_t
+lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model);
+
+/**
+ * Sets the cpu to generate code for.
+ *
+ * \since LTO_API_VERSION=4
+ */
+extern void
+lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu);
+
+/**
+ * Sets the location of the assembler tool to run. If not set, libLTO
+ * will use gcc to invoke the assembler.
+ *
+ * \since LTO_API_VERSION=3
+ */
+extern void
+lto_codegen_set_assembler_path(lto_code_gen_t cg, const char* path);
+
+/**
+ * Sets extra arguments that libLTO should pass to the assembler.
+ *
+ * \since LTO_API_VERSION=4
+ */
+extern void
+lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args,
+ int nargs);
+
+/**
+ * Adds to a list of all global symbols that must exist in the final generated
+ * code. If a function is not listed there, it might be inlined into every usage
+ * and optimized away.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern void
+lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char* symbol);
+
+/**
+ * Writes a new object file at the specified path that contains the
+ * merged contents of all modules added so far.
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=5
+ */
+extern lto_bool_t
+lto_codegen_write_merged_modules(lto_code_gen_t cg, const char* path);
+
+/**
+ * Generates code for all added modules into one native object file.
+ * This calls lto_codegen_optimize then lto_codegen_compile_optimized.
+ *
+ * On success returns a pointer to a generated mach-o/ELF buffer and
+ * length set to the buffer size. The buffer is owned by the
+ * lto_code_gen_t and will be freed when lto_codegen_dispose()
+ * is called, or lto_codegen_compile() is called again.
+ * On failure, returns NULL (check lto_get_error_message() for details).
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern const void*
+lto_codegen_compile(lto_code_gen_t cg, size_t* length);
+
+/**
+ * Generates code for all added modules into one native object file.
+ * This calls lto_codegen_optimize then lto_codegen_compile_optimized (instead
+ * of returning a generated mach-o/ELF buffer, it writes to a file).
+ *
+ * The name of the file is written to name. Returns true on error.
+ *
+ * \since LTO_API_VERSION=5
+ */
+extern lto_bool_t
+lto_codegen_compile_to_file(lto_code_gen_t cg, const char** name);
+
+/**
+ * Runs optimization for the merged module. Returns true on error.
+ *
+ * \since LTO_API_VERSION=12
+ */
+extern lto_bool_t
+lto_codegen_optimize(lto_code_gen_t cg);
+
+/**
+ * Generates code for the optimized merged module into one native object file.
+ * It will not run any IR optimizations on the merged module.
+ *
+ * On success returns a pointer to a generated mach-o/ELF buffer and length set
+ * to the buffer size. The buffer is owned by the lto_code_gen_t and will be
+ * freed when lto_codegen_dispose() is called, or
+ * lto_codegen_compile_optimized() is called again. On failure, returns NULL
+ * (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=12
+ */
+extern const void*
+lto_codegen_compile_optimized(lto_code_gen_t cg, size_t* length);
+
+/**
+ * Returns the runtime API version.
+ *
+ * \since LTO_API_VERSION=12
+ */
+extern unsigned int
+lto_api_version(void);
+
+/**
+ * Sets options to help debug codegen bugs.
+ *
+ * This function takes one or more options separated by spaces.
+ * Warning: passing file paths through this function may confuse the argument
+ * parser if the paths contain spaces.
+ *
+ * \since prior to LTO_API_VERSION=3
+ */
+extern void
+lto_codegen_debug_options(lto_code_gen_t cg, const char *);
+
+/**
+ * Same as the previous function, but takes every option separately through an
+ * array.
+ *
+ * \since prior to LTO_API_VERSION=26
+ */
+extern void lto_codegen_debug_options_array(lto_code_gen_t cg,
+ const char *const *, int number);
+
+/**
+ * Initializes LLVM disassemblers.
+ * FIXME: This doesn't really belong here.
+ *
+ * \since LTO_API_VERSION=5
+ */
+extern void
+lto_initialize_disassembler(void);
+
+/**
+ * Sets if we should run internalize pass during optimization and code
+ * generation.
+ *
+ * \since LTO_API_VERSION=14
+ */
+extern void
+lto_codegen_set_should_internalize(lto_code_gen_t cg,
+ lto_bool_t ShouldInternalize);
+
+/**
+ * Set whether to embed uselists in bitcode.
+ *
+ * Sets whether \a lto_codegen_write_merged_modules() should embed uselists in
+ * output bitcode. This should be turned on for all -save-temps output.
+ *
+ * \since LTO_API_VERSION=15
+ */
+extern void
+lto_codegen_set_should_embed_uselists(lto_code_gen_t cg,
+ lto_bool_t ShouldEmbedUselists);
+
+/** Opaque reference to an LTO input file */
+typedef struct LLVMOpaqueLTOInput *lto_input_t;
+
+/**
+ * Creates an LTO input file from a buffer. The path
+ * argument is used for diagnotics as this function
+ * otherwise does not know which file the given buffer
+ * is associated with.
+ *
+ * \since LTO_API_VERSION=24
+ */
+extern lto_input_t lto_input_create(const void *buffer,
+ size_t buffer_size,
+ const char *path);
+
+/**
+ * Frees all memory internally allocated by the LTO input file.
+ * Upon return the lto_module_t is no longer valid.
+ *
+ * \since LTO_API_VERSION=24
+ */
+extern void lto_input_dispose(lto_input_t input);
+
+/**
+ * Returns the number of dependent library specifiers
+ * for the given LTO input file.
+ *
+ * \since LTO_API_VERSION=24
+ */
+extern unsigned lto_input_get_num_dependent_libraries(lto_input_t input);
+
+/**
+ * Returns the ith dependent library specifier
+ * for the given LTO input file. The returned
+ * string is not null-terminated.
+ *
+ * \since LTO_API_VERSION=24
+ */
+extern const char * lto_input_get_dependent_library(lto_input_t input,
+ size_t index,
+ size_t *size);
+
+/**
+ * Returns the list of libcall symbols that can be generated by LTO
+ * that might not be visible from the symbol table of bitcode files.
+ *
+ * \since prior to LTO_API_VERSION=25
+ */
+extern const char *const *lto_runtime_lib_symbols_list(size_t *size);
+
+/**
+ * @} // endgoup LLVMCLTO
+ * @defgroup LLVMCTLTO ThinLTO
+ * @ingroup LLVMC
+ *
+ * @{
+ */
+
+/**
+ * Type to wrap a single object returned by ThinLTO.
+ *
+ * \since LTO_API_VERSION=18
+ */
+typedef struct {
+ const char *Buffer;
+ size_t Size;
+} LTOObjectBuffer;
+
+/**
+ * Instantiates a ThinLTO code generator.
+ * Returns NULL on error (check lto_get_error_message() for details).
+ *
+ *
+ * The ThinLTOCodeGenerator is not intended to be reuse for multiple
+ * compilation: the model is that the client adds modules to the generator and
+ * ask to perform the ThinLTO optimizations / codegen, and finally destroys the
+ * codegenerator.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern thinlto_code_gen_t thinlto_create_codegen(void);
+
+/**
+ * Frees the generator and all memory it internally allocated.
+ * Upon return the thinlto_code_gen_t is no longer valid.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_dispose(thinlto_code_gen_t cg);
+
+/**
+ * Add a module to a ThinLTO code generator. Identifier has to be unique among
+ * all the modules in a code generator. The data buffer stays owned by the
+ * client, and is expected to be available for the entire lifetime of the
+ * thinlto_code_gen_t it is added to.
+ *
+ * On failure, returns NULL (check lto_get_error_message() for details).
+ *
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_add_module(thinlto_code_gen_t cg,
+ const char *identifier, const char *data,
+ int length);
+
+/**
+ * Optimize and codegen all the modules added to the codegenerator using
+ * ThinLTO. Resulting objects are accessible using thinlto_module_get_object().
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_process(thinlto_code_gen_t cg);
+
+/**
+ * Returns the number of object files produced by the ThinLTO CodeGenerator.
+ *
+ * It usually matches the number of input files, but this is not a guarantee of
+ * the API and may change in future implementation, so the client should not
+ * assume it.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern unsigned int thinlto_module_get_num_objects(thinlto_code_gen_t cg);
+
+/**
+ * Returns a reference to the ith object file produced by the ThinLTO
+ * CodeGenerator.
+ *
+ * Client should use \p thinlto_module_get_num_objects() to get the number of
+ * available objects.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern LTOObjectBuffer thinlto_module_get_object(thinlto_code_gen_t cg,
+ unsigned int index);
+
+/**
+ * Returns the number of object files produced by the ThinLTO CodeGenerator.
+ *
+ * It usually matches the number of input files, but this is not a guarantee of
+ * the API and may change in future implementation, so the client should not
+ * assume it.
+ *
+ * \since LTO_API_VERSION=21
+ */
+unsigned int thinlto_module_get_num_object_files(thinlto_code_gen_t cg);
+
+/**
+ * Returns the path to the ith object file produced by the ThinLTO
+ * CodeGenerator.
+ *
+ * Client should use \p thinlto_module_get_num_object_files() to get the number
+ * of available objects.
+ *
+ * \since LTO_API_VERSION=21
+ */
+const char *thinlto_module_get_object_file(thinlto_code_gen_t cg,
+ unsigned int index);
+
+/**
+ * Sets which PIC code model to generate.
+ * Returns true on error (check lto_get_error_message() for details).
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern lto_bool_t thinlto_codegen_set_pic_model(thinlto_code_gen_t cg,
+ lto_codegen_model);
+
+/**
+ * Sets the path to a directory to use as a storage for temporary bitcode files.
+ * The intention is to make the bitcode files available for debugging at various
+ * stage of the pipeline.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_savetemps_dir(thinlto_code_gen_t cg,
+ const char *save_temps_dir);
+
+/**
+ * Set the path to a directory where to save generated object files. This
+ * path can be used by a linker to request on-disk files instead of in-memory
+ * buffers. When set, results are available through
+ * thinlto_module_get_object_file() instead of thinlto_module_get_object().
+ *
+ * \since LTO_API_VERSION=21
+ */
+void thinlto_set_generated_objects_dir(thinlto_code_gen_t cg,
+ const char *save_temps_dir);
+
+/**
+ * Sets the cpu to generate code for.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_cpu(thinlto_code_gen_t cg, const char *cpu);
+
+/**
+ * Disable CodeGen, only run the stages till codegen and stop. The output will
+ * be bitcode.
+ *
+ * \since LTO_API_VERSION=19
+ */
+extern void thinlto_codegen_disable_codegen(thinlto_code_gen_t cg,
+ lto_bool_t disable);
+
+/**
+ * Perform CodeGen only: disable all other stages.
+ *
+ * \since LTO_API_VERSION=19
+ */
+extern void thinlto_codegen_set_codegen_only(thinlto_code_gen_t cg,
+ lto_bool_t codegen_only);
+
+/**
+ * Parse -mllvm style debug options.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_debug_options(const char *const *options, int number);
+
+/**
+ * Test if a module has support for ThinLTO linking.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern lto_bool_t lto_module_is_thinlto(lto_module_t mod);
+
+/**
+ * Adds a symbol to the list of global symbols that must exist in the final
+ * generated code. If a function is not listed there, it might be inlined into
+ * every usage and optimized away. For every single module, the functions
+ * referenced from code outside of the ThinLTO modules need to be added here.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_add_must_preserve_symbol(thinlto_code_gen_t cg,
+ const char *name,
+ int length);
+
+/**
+ * Adds a symbol to the list of global symbols that are cross-referenced between
+ * ThinLTO files. If the ThinLTO CodeGenerator can ensure that every
+ * references from a ThinLTO module to this symbol is optimized away, then
+ * the symbol can be discarded.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_add_cross_referenced_symbol(thinlto_code_gen_t cg,
+ const char *name,
+ int length);
+
+/**
+ * @} // endgoup LLVMCTLTO
+ * @defgroup LLVMCTLTO_CACHING ThinLTO Cache Control
+ * @ingroup LLVMCTLTO
+ *
+ * These entry points control the ThinLTO cache. The cache is intended to
+ * support incremental builds, and thus needs to be persistent across builds.
+ * The client enables the cache by supplying a path to an existing directory.
+ * The code generator will use this to store objects files that may be reused
+ * during a subsequent build.
+ * To avoid filling the disk space, a few knobs are provided:
+ * - The pruning interval limits the frequency at which the garbage collector
+ * will try to scan the cache directory to prune expired entries.
+ * Setting to a negative number disables the pruning.
+ * - The pruning expiration time indicates to the garbage collector how old an
+ * entry needs to be to be removed.
+ * - Finally, the garbage collector can be instructed to prune the cache until
+ * the occupied space goes below a threshold.
+ * @{
+ */
+
+/**
+ * Sets the path to a directory to use as a cache storage for incremental build.
+ * Setting this activates caching.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_cache_dir(thinlto_code_gen_t cg,
+ const char *cache_dir);
+
+/**
+ * Sets the cache pruning interval (in seconds). A negative value disables the
+ * pruning. An unspecified default value will be applied, and a value of 0 will
+ * force prunning to occur.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_cache_pruning_interval(thinlto_code_gen_t cg,
+ int interval);
+
+/**
+ * Sets the maximum cache size that can be persistent across build, in terms of
+ * percentage of the available space on the disk. Set to 100 to indicate
+ * no limit, 50 to indicate that the cache size will not be left over half the
+ * available space. A value over 100 will be reduced to 100, a value of 0 will
+ * be ignored. An unspecified default value will be applied.
+ *
+ * The formula looks like:
+ * AvailableSpace = FreeSpace + ExistingCacheSize
+ * NewCacheSize = AvailableSpace * P/100
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_final_cache_size_relative_to_available_space(
+ thinlto_code_gen_t cg, unsigned percentage);
+
+/**
+ * Sets the expiration (in seconds) for an entry in the cache. An unspecified
+ * default value will be applied. A value of 0 will be ignored.
+ *
+ * \since LTO_API_VERSION=18
+ */
+extern void thinlto_codegen_set_cache_entry_expiration(thinlto_code_gen_t cg,
+ unsigned expiration);
+
+/**
+ * Sets the maximum size of the cache directory (in bytes). A value over the
+ * amount of available space on the disk will be reduced to the amount of
+ * available space. An unspecified default value will be applied. A value of 0
+ * will be ignored.
+ *
+ * \since LTO_API_VERSION=22
+ */
+extern void thinlto_codegen_set_cache_size_bytes(thinlto_code_gen_t cg,
+ unsigned max_size_bytes);
+
+/**
+ * Same as thinlto_codegen_set_cache_size_bytes, except the maximum size is in
+ * megabytes (2^20 bytes).
+ *
+ * \since LTO_API_VERSION=23
+ */
+extern void
+thinlto_codegen_set_cache_size_megabytes(thinlto_code_gen_t cg,
+ unsigned max_size_megabytes);
+
+/**
+ * Sets the maximum number of files in the cache directory. An unspecified
+ * default value will be applied. A value of 0 will be ignored.
+ *
+ * \since LTO_API_VERSION=22
+ */
+extern void thinlto_codegen_set_cache_size_files(thinlto_code_gen_t cg,
+ unsigned max_size_files);
+
+/**
+ * @} // endgroup LLVMCTLTO_CACHING
+ */
+
+LLVM_C_EXTERN_C_END
+
+#endif /* LLVM_C_LTO_H */
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
diff --git a/contrib/libs/llvm12/include/llvm-c/module.modulemap b/contrib/libs/llvm12/include/llvm-c/module.modulemap
index a456119595c..2be8334da71 100644
--- a/contrib/libs/llvm12/include/llvm-c/module.modulemap
+++ b/contrib/libs/llvm12/include/llvm-c/module.modulemap
@@ -1,4 +1,4 @@
-module LLVM_C {
- umbrella "."
- module * { export * }
-}
+module LLVM_C {
+ umbrella "."
+ module * { export * }
+}