diff --git a/LLVM-C.dll b/LLVM-C.dll index b2f22ba8e..84b4d3dd7 100644 Binary files a/LLVM-C.dll and b/LLVM-C.dll differ diff --git a/bin/llvm/windows/LLVM-C.lib b/bin/llvm/windows/LLVM-C.lib index 6230de057..57c0e6cd3 100644 Binary files a/bin/llvm/windows/LLVM-C.lib and b/bin/llvm/windows/LLVM-C.lib differ diff --git a/src/llvm-c/Analysis.h b/src/llvm-c/Analysis.h index 270b145a4..9801b407d 100644 --- a/src/llvm-c/Analysis.h +++ b/src/llvm-c/Analysis.h @@ -19,8 +19,9 @@ #ifndef LLVM_C_ANALYSIS_H #define LLVM_C_ANALYSIS_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -41,17 +42,19 @@ typedef enum { /* 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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_ABI void LLVMViewFunctionCFG(LLVMValueRef Fn); +LLVM_C_ABI void LLVMViewFunctionCFGOnly(LLVMValueRef Fn); /** * @} diff --git a/src/llvm-c/BitReader.h b/src/llvm-c/BitReader.h index 088107468..3ffbf791d 100644 --- a/src/llvm-c/BitReader.h +++ b/src/llvm-c/BitReader.h @@ -19,8 +19,10 @@ #ifndef LLVM_C_BITREADER_H #define LLVM_C_BITREADER_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "Deprecated.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -36,30 +38,38 @@ LLVM_C_EXTERN_C_BEGIN Optionally returns a human-readable error message via OutMessage. This is deprecated. Use LLVMParseBitcode2. */ -LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, - char **OutMessage); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule, char **OutMessage), + "Use of the global context is deprecated, use LLVMParseBitcodeInContext2 " + "instead"); /* 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); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule), + "Use of the global context is deprecated, use LLVMParseBitcodeInContext2 " + "instead"); /* This is deprecated. Use LLVMParseBitcodeInContext2. */ -LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, - LLVMMemoryBufferRef MemBuf, - LLVMModuleRef *OutModule, char **OutMessage); +LLVM_C_ABI LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutModule, + char **OutMessage); -LLVMBool LLVMParseBitcodeInContext2(LLVMContextRef ContextRef, - LLVMMemoryBufferRef MemBuf, - LLVMModuleRef *OutModule); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM, + char **OutMessage); /** Reads a module from the given memory buffer, returning via the OutMP * parameter a module provider which performs lazy deserialization. @@ -68,15 +78,22 @@ LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, * * Takes ownership of \p MemBuf if (and only if) the module was read * successfully. */ -LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, - LLVMMemoryBufferRef MemBuf, - LLVMModuleRef *OutM); +LLVM_C_ABI LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM); /* This is deprecated. Use LLVMGetBitcodeModule2. */ -LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, - char **OutMessage); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM, char **OutMessage), + "Use of the global context is deprecated, use " + "LLVMGetBitcodeModuleInContext2 instead"); -LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM), + "Use of the global context is deprecated, use " + "LLVMGetBitcodeModuleInContext2 instead"); /** * @} diff --git a/src/llvm-c/BitWriter.h b/src/llvm-c/BitWriter.h index ea84b6593..d66de6aed 100644 --- a/src/llvm-c/BitWriter.h +++ b/src/llvm-c/BitWriter.h @@ -19,8 +19,9 @@ #ifndef LLVM_C_BITWRITER_H #define LLVM_C_BITWRITER_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -34,18 +35,18 @@ LLVM_C_EXTERN_C_BEGIN /*===-- Operations on modules ---------------------------------------------===*/ /** Writes a module to the specified path. Returns 0 on success. */ -int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI int LLVMWriteBitcodeToFileHandle(LLVMModuleRef M, int Handle); /** Writes a module to a new memory buffer and returns it. */ -LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M); +LLVM_C_ABI LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M); /** * @} diff --git a/src/llvm-c/Comdat.h b/src/llvm-c/Comdat.h index 8002bc058..ab676c4b4 100644 --- a/src/llvm-c/Comdat.h +++ b/src/llvm-c/Comdat.h @@ -14,8 +14,9 @@ #ifndef LLVM_C_COMDAT_H #define LLVM_C_COMDAT_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -43,35 +44,37 @@ typedef enum { * * @see llvm::Module::getOrInsertComdat() */ -LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name); +LLVM_C_ABI LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, + const char *Name); /** * Get the Comdat assigned to the given global object. * * @see llvm::GlobalObject::getComdat() */ -LLVMComdatRef LLVMGetComdat(LLVMValueRef V); +LLVM_C_ABI LLVMComdatRef LLVMGetComdat(LLVMValueRef V); /** * Assign the Comdat to the given global object. * * @see llvm::GlobalObject::setComdat() */ -void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C); +LLVM_C_ABI void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C); /* * Get the conflict resolution selection kind for the Comdat. * * @see llvm::Comdat::getSelectionKind() */ -LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C); +LLVM_C_ABI 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_ABI void LLVMSetComdatSelectionKind(LLVMComdatRef C, + LLVMComdatSelectionKind Kind); /** * @} diff --git a/src/llvm-c/Config/AsmParsers.def b/src/llvm-c/Config/AsmParsers.def index a641f395b..e0df3534a 100644 --- a/src/llvm-c/Config/AsmParsers.def +++ b/src/llvm-c/Config/AsmParsers.def @@ -25,22 +25,11 @@ #endif LLVM_ASM_PARSER(AArch64) -LLVM_ASM_PARSER(AMDGPU) LLVM_ASM_PARSER(ARM) -LLVM_ASM_PARSER(AVR) -LLVM_ASM_PARSER(BPF) -LLVM_ASM_PARSER(Hexagon) -LLVM_ASM_PARSER(Lanai) -LLVM_ASM_PARSER(LoongArch) -LLVM_ASM_PARSER(Mips) -LLVM_ASM_PARSER(MSP430) -LLVM_ASM_PARSER(PowerPC) -LLVM_ASM_PARSER(RISCV) -LLVM_ASM_PARSER(Sparc) -LLVM_ASM_PARSER(SystemZ) -LLVM_ASM_PARSER(VE) -LLVM_ASM_PARSER(WebAssembly) LLVM_ASM_PARSER(X86) +LLVM_ASM_PARSER(BPF) +LLVM_ASM_PARSER(WebAssembly) +LLVM_ASM_PARSER(RISCV) #undef LLVM_ASM_PARSER diff --git a/src/llvm-c/Config/AsmPrinters.def b/src/llvm-c/Config/AsmPrinters.def index c463c3e89..5549d9be9 100644 --- a/src/llvm-c/Config/AsmPrinters.def +++ b/src/llvm-c/Config/AsmPrinters.def @@ -25,24 +25,12 @@ #endif LLVM_ASM_PRINTER(AArch64) -LLVM_ASM_PRINTER(AMDGPU) LLVM_ASM_PRINTER(ARM) -LLVM_ASM_PRINTER(AVR) -LLVM_ASM_PRINTER(BPF) -LLVM_ASM_PRINTER(Hexagon) -LLVM_ASM_PRINTER(Lanai) -LLVM_ASM_PRINTER(LoongArch) -LLVM_ASM_PRINTER(Mips) -LLVM_ASM_PRINTER(MSP430) -LLVM_ASM_PRINTER(NVPTX) -LLVM_ASM_PRINTER(PowerPC) -LLVM_ASM_PRINTER(RISCV) -LLVM_ASM_PRINTER(Sparc) -LLVM_ASM_PRINTER(SystemZ) -LLVM_ASM_PRINTER(VE) -LLVM_ASM_PRINTER(WebAssembly) LLVM_ASM_PRINTER(X86) -LLVM_ASM_PRINTER(XCore) +LLVM_ASM_PRINTER(BPF) +LLVM_ASM_PRINTER(WebAssembly) +LLVM_ASM_PRINTER(RISCV) +LLVM_ASM_PRINTER(NVPTX) #undef LLVM_ASM_PRINTER diff --git a/src/llvm-c/Config/Disassemblers.def b/src/llvm-c/Config/Disassemblers.def index dce865414..43b9703a2 100644 --- a/src/llvm-c/Config/Disassemblers.def +++ b/src/llvm-c/Config/Disassemblers.def @@ -25,23 +25,11 @@ #endif LLVM_DISASSEMBLER(AArch64) -LLVM_DISASSEMBLER(AMDGPU) LLVM_DISASSEMBLER(ARM) -LLVM_DISASSEMBLER(AVR) -LLVM_DISASSEMBLER(BPF) -LLVM_DISASSEMBLER(Hexagon) -LLVM_DISASSEMBLER(Lanai) -LLVM_DISASSEMBLER(LoongArch) -LLVM_DISASSEMBLER(Mips) -LLVM_DISASSEMBLER(MSP430) -LLVM_DISASSEMBLER(PowerPC) -LLVM_DISASSEMBLER(RISCV) -LLVM_DISASSEMBLER(Sparc) -LLVM_DISASSEMBLER(SystemZ) -LLVM_DISASSEMBLER(VE) -LLVM_DISASSEMBLER(WebAssembly) LLVM_DISASSEMBLER(X86) -LLVM_DISASSEMBLER(XCore) +LLVM_DISASSEMBLER(BPF) +LLVM_DISASSEMBLER(WebAssembly) +LLVM_DISASSEMBLER(RISCV) #undef LLVM_DISASSEMBLER diff --git a/src/llvm-c/Config/TargetExegesis.def b/src/llvm-c/Config/TargetExegesis.def index d4d3f99a7..140331f21 100644 --- a/src/llvm-c/Config/TargetExegesis.def +++ b/src/llvm-c/Config/TargetExegesis.def @@ -25,9 +25,8 @@ #endif LLVM_EXEGESIS(AArch64) -LLVM_EXEGESIS(Mips) -LLVM_EXEGESIS(PowerPC) LLVM_EXEGESIS(X86) +LLVM_EXEGESIS(RISCV) #undef LLVM_EXEGESIS diff --git a/src/llvm-c/Config/TargetMCAs.def b/src/llvm-c/Config/TargetMCAs.def index 1aefdbc25..e85c9982b 100644 --- a/src/llvm-c/Config/TargetMCAs.def +++ b/src/llvm-c/Config/TargetMCAs.def @@ -24,9 +24,8 @@ # error Please define the macro LLVM_TARGETMCA(TargetName) #endif -LLVM_TARGETMCA(AMDGPU) -LLVM_TARGETMCA(RISCV) LLVM_TARGETMCA(X86) +LLVM_TARGETMCA(RISCV) #undef LLVM_TARGETMCA diff --git a/src/llvm-c/Config/Targets.def b/src/llvm-c/Config/Targets.def index 250aac5c9..f5cbc2df5 100644 --- a/src/llvm-c/Config/Targets.def +++ b/src/llvm-c/Config/Targets.def @@ -24,24 +24,12 @@ #endif LLVM_TARGET(AArch64) -LLVM_TARGET(AMDGPU) LLVM_TARGET(ARM) -LLVM_TARGET(AVR) -LLVM_TARGET(BPF) -LLVM_TARGET(Hexagon) -LLVM_TARGET(Lanai) -LLVM_TARGET(LoongArch) -LLVM_TARGET(Mips) -LLVM_TARGET(MSP430) -LLVM_TARGET(NVPTX) -LLVM_TARGET(PowerPC) -LLVM_TARGET(RISCV) -LLVM_TARGET(Sparc) -LLVM_TARGET(SystemZ) -LLVM_TARGET(VE) -LLVM_TARGET(WebAssembly) LLVM_TARGET(X86) -LLVM_TARGET(XCore) +LLVM_TARGET(BPF) +LLVM_TARGET(WebAssembly) +LLVM_TARGET(RISCV) +LLVM_TARGET(NVPTX) #undef LLVM_TARGET diff --git a/src/llvm-c/Config/Targets.h b/src/llvm-c/Config/Targets.h new file mode 100644 index 000000000..82f9b9db2 --- /dev/null +++ b/src/llvm-c/Config/Targets.h @@ -0,0 +1,90 @@ +/*===------- llvm/Config/Targets.h - LLVM target checks -----------*- 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 enables clients to know whether specific targets are enabled. */ + +#ifndef LLVM_CONFIG_TARGETS_H +#define LLVM_CONFIG_TARGETS_H + +/* Define if the AArch64 target is built in */ +#define LLVM_HAS_AARCH64_TARGET 1 + +/* Define if the AMDGPU target is built in */ +#define LLVM_HAS_AMDGPU_TARGET 0 + +/* Define if the ARC target is built in */ +#define LLVM_HAS_ARC_TARGET 0 + +/* Define if the ARM target is built in */ +#define LLVM_HAS_ARM_TARGET 1 + +/* Define if the AVR target is built in */ +#define LLVM_HAS_AVR_TARGET 0 + +/* Define if the BPF target is built in */ +#define LLVM_HAS_BPF_TARGET 1 + +/* Define if the CSKY target is built in */ +#define LLVM_HAS_CSKY_TARGET 0 + +/* Define if the DirectX target is built in */ +#define LLVM_HAS_DIRECTX_TARGET 0 + +/* Define if the Hexagon target is built in */ +#define LLVM_HAS_HEXAGON_TARGET 0 + +/* Define if the Lanai target is built in */ +#define LLVM_HAS_LANAI_TARGET 0 + +/* Define if the LoongArch target is built in */ +#define LLVM_HAS_LOONGARCH_TARGET 0 + +/* Define if the M68k target is built in */ +#define LLVM_HAS_M68K_TARGET 0 + +/* Define if the Mips target is built in */ +#define LLVM_HAS_MIPS_TARGET 0 + +/* Define if the MSP430 target is built in */ +#define LLVM_HAS_MSP430_TARGET 0 + +/* Define if the NVPTX target is built in */ +#define LLVM_HAS_NVPTX_TARGET 1 + +/* Define if the PowerPC target is built in */ +#define LLVM_HAS_POWERPC_TARGET 0 + +/* Define if the RISCV target is built in */ +#define LLVM_HAS_RISCV_TARGET 1 + +/* Define if the Sparc target is built in */ +#define LLVM_HAS_SPARC_TARGET 0 + +/* Define if the SPIRV target is built in */ +#define LLVM_HAS_SPIRV_TARGET 0 + +/* Define if the SystemZ target is built in */ +#define LLVM_HAS_SYSTEMZ_TARGET 0 + +/* Define if the VE target is built in */ +#define LLVM_HAS_VE_TARGET 0 + +/* Define if the WebAssembly target is built in */ +#define LLVM_HAS_WEBASSEMBLY_TARGET 1 + +/* Define if the X86 target is built in */ +#define LLVM_HAS_X86_TARGET 1 + +/* Define if the XCore target is built in */ +#define LLVM_HAS_XCORE_TARGET 0 + +/* Define if the Xtensa target is built in */ +#define LLVM_HAS_XTENSA_TARGET 0 + +#endif diff --git a/src/llvm-c/Config/abi-breaking.h b/src/llvm-c/Config/abi-breaking.h index c501cc354..9778b0e21 100644 --- a/src/llvm-c/Config/abi-breaking.h +++ b/src/llvm-c/Config/abi-breaking.h @@ -12,12 +12,41 @@ #ifndef LLVM_ABI_BREAKING_CHECKS_H #define LLVM_ABI_BREAKING_CHECKS_H +// llvm-config.h is required for LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS +#include "llvm-config.h" + /* Define to enable checks that alter the LLVM C++ ABI */ #define LLVM_ENABLE_ABI_BREAKING_CHECKS 0 /* Define to enable reverse iteration of unordered llvm containers */ #define LLVM_ENABLE_REVERSE_ITERATION 0 +#if !defined(__has_attribute) +#define __has_attribute(attribute) 0 +#endif + +// Properly annotate EnableABIBreakingChecks or DisableABIBreakingChecks for +// export from shared library. +// TODO(https://github.com/llvm/llvm-project/issues/145406): eliminate need for +// two preprocessor definitions to gate LLVM_ABI macro definitions. +#if defined(LLVM_BUILD_STATIC) || !defined(LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS) +#define ABI_BREAKING_EXPORT_ABI +#else +#if defined(_WIN32) +#if defined(LLVM_EXPORTS) +#define ABI_BREAKING_EXPORT_ABI __declspec(dllexport) +#else +#define ABI_BREAKING_EXPORT_ABI __declspec(dllimport) +#endif +#else +#if __has_attribute(visibility) +#define ABI_BREAKING_EXPORT_ABI __attribute__((__visibility__("default"))) +#else +#define ABI_BREAKING_EXPORT_ABI +#endif +#endif +#endif + /* Allow selectively disabling link-time mismatch checking so that header-only ADT content from LLVM can be used without linking libSupport. */ #if !defined(LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING) || !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING @@ -43,12 +72,12 @@ #endif namespace llvm { #if LLVM_ENABLE_ABI_BREAKING_CHECKS -extern int EnableABIBreakingChecks; +ABI_BREAKING_EXPORT_ABI extern int EnableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyEnableABIBreakingChecks = &EnableABIBreakingChecks; #else -extern int DisableABIBreakingChecks; +ABI_BREAKING_EXPORT_ABI extern int DisableABIBreakingChecks; LLVM_HIDDEN_VISIBILITY __attribute__((weak)) int *VerifyDisableABIBreakingChecks = &DisableABIBreakingChecks; diff --git a/src/llvm-c/Config/llvm-config.h b/src/llvm-c/Config/llvm-config.h index 8b77597c9..ed22b8a69 100644 --- a/src/llvm-c/Config/llvm-config.h +++ b/src/llvm-c/Config/llvm-config.h @@ -54,81 +54,6 @@ /* LLVM name for the native target MCA init function, if available */ /* #undef LLVM_NATIVE_TARGETMCA */ -/* Define if the AArch64 target is built in */ -#define LLVM_HAS_AARCH64_TARGET 1 - -/* Define if the AMDGPU target is built in */ -#define LLVM_HAS_AMDGPU_TARGET 1 - -/* Define if the ARC target is built in */ -#define LLVM_HAS_ARC_TARGET 0 - -/* Define if the ARM target is built in */ -#define LLVM_HAS_ARM_TARGET 1 - -/* Define if the AVR target is built in */ -#define LLVM_HAS_AVR_TARGET 1 - -/* Define if the BPF target is built in */ -#define LLVM_HAS_BPF_TARGET 1 - -/* Define if the CSKY target is built in */ -#define LLVM_HAS_CSKY_TARGET 0 - -/* Define if the DirectX target is built in */ -#define LLVM_HAS_DIRECTX_TARGET 0 - -/* Define if the Hexagon target is built in */ -#define LLVM_HAS_HEXAGON_TARGET 1 - -/* Define if the Lanai target is built in */ -#define LLVM_HAS_LANAI_TARGET 1 - -/* Define if the LoongArch target is built in */ -#define LLVM_HAS_LOONGARCH_TARGET 1 - -/* Define if the M68k target is built in */ -#define LLVM_HAS_M68K_TARGET 0 - -/* Define if the Mips target is built in */ -#define LLVM_HAS_MIPS_TARGET 1 - -/* Define if the MSP430 target is built in */ -#define LLVM_HAS_MSP430_TARGET 1 - -/* Define if the NVPTX target is built in */ -#define LLVM_HAS_NVPTX_TARGET 1 - -/* Define if the PowerPC target is built in */ -#define LLVM_HAS_POWERPC_TARGET 1 - -/* Define if the RISCV target is built in */ -#define LLVM_HAS_RISCV_TARGET 1 - -/* Define if the Sparc target is built in */ -#define LLVM_HAS_SPARC_TARGET 1 - -/* Define if the SPIRV target is built in */ -#define LLVM_HAS_SPIRV_TARGET 0 - -/* Define if the SystemZ target is built in */ -#define LLVM_HAS_SYSTEMZ_TARGET 1 - -/* Define if the VE target is built in */ -#define LLVM_HAS_VE_TARGET 1 - -/* Define if the WebAssembly target is built in */ -#define LLVM_HAS_WEBASSEMBLY_TARGET 1 - -/* Define if the X86 target is built in */ -#define LLVM_HAS_X86_TARGET 1 - -/* Define if the XCore target is built in */ -#define LLVM_HAS_XCORE_TARGET 1 - -/* Define if the Xtensa target is built in */ -#define LLVM_HAS_XTENSA_TARGET 0 - /* Define if this is Unixish platform */ /* #undef LLVM_ON_UNIX */ @@ -142,16 +67,16 @@ #define LLVM_USE_PERF 0 /* Major version of the LLVM API */ -#define LLVM_VERSION_MAJOR 20 +#define LLVM_VERSION_MAJOR 22 /* Minor version of the LLVM API */ #define LLVM_VERSION_MINOR 1 /* Patch version of the LLVM API */ -#define LLVM_VERSION_PATCH 0 +#define LLVM_VERSION_PATCH 8 /* LLVM version string */ -#define LLVM_VERSION_STRING "20.1.0" +#define LLVM_VERSION_STRING "22.1.8" /* Whether LLVM records statistics for use with GetStatistics(), * PrintStatistics() or PrintStatisticsJSON() @@ -176,6 +101,9 @@ /* Define if LLVM is using tflite */ /* #undef LLVM_HAVE_TFLITE */ +/* Define if we want to check profile consistency in lit tests */ +/* #undef LLVM_ENABLE_PROFCHECK */ + /* Define to 1 if you have the header file. */ /* #undef HAVE_SYSEXITS_H */ @@ -185,6 +113,12 @@ /* Define if building LLVM with BUILD_SHARED_LIBS */ /* #undef LLVM_BUILD_SHARED_LIBS */ +/* Define if exporting LLVM public interface for shared library */ +/* #undef LLVM_ENABLE_LLVM_EXPORT_ANNOTATIONS */ + +/* Define if exporting LLVM-C public interface for shared library */ +/* #undef LLVM_ENABLE_LLVM_C_EXPORT_ANNOTATIONS */ + /* Define if building LLVM with LLVM_FORCE_USE_OLD_TOOLCHAIN_LIBS */ /* #undef LLVM_FORCE_USE_OLD_TOOLCHAIN */ @@ -192,10 +126,30 @@ * in non assert builds */ #define LLVM_UNREACHABLE_OPTIMIZE 1 +/* Define if building LLVM with LLVM_ENABLE_IO_SANDBOX */ +#define LLVM_ENABLE_IO_SANDBOX 0 + /* Define to 1 if you have the DIA SDK installed, and to 0 if you don't. */ #define LLVM_ENABLE_DIA_SDK 1 /* Define if plugins enabled */ /* #undef LLVM_ENABLE_PLUGINS */ +/* Define if logf128 is available */ +/* #undef LLVM_HAS_LOGF128 */ + +/* Define if building LLVM with LLVM_ENABLE_TELEMETRY */ +#define LLVM_ENABLE_TELEMETRY 1 + +/* Define to 1 to enable expensive checks for debug location coverage checking, + and to 0 otherwise. */ +#define LLVM_ENABLE_DEBUGLOC_TRACKING_COVERAGE 0 + +/* Define to 1 to enable expensive tracking of the origin of debug location + coverage bugs, and to 0 otherwise. */ +#define LLVM_ENABLE_DEBUGLOC_TRACKING_ORIGIN 0 + +/* Define to 1 to enable LLVM OnDisk Content Addressable Storage */ +#define LLVM_ENABLE_ONDISK_CAS 1 + #endif diff --git a/src/llvm-c/Core.h b/src/llvm-c/Core.h index dc8ecf4fb..793bec571 100644 --- a/src/llvm-c/Core.h +++ b/src/llvm-c/Core.h @@ -15,11 +15,12 @@ #ifndef LLVM_C_CORE_H #define LLVM_C_CORE_H -#include "llvm-c/Deprecated.h" -#include "llvm-c/ErrorHandling.h" -#include "llvm-c/ExternC.h" +#include "Deprecated.h" +#include "ErrorHandling.h" +#include "ExternC.h" +#include "Visibility.h" -#include "llvm-c/Types.h" +#include "Types.h" LLVM_C_EXTERN_C_BEGIN @@ -110,6 +111,7 @@ typedef enum { LLVMFPTrunc = 37, LLVMFPExt = 38, LLVMPtrToInt = 39, + LLVMPtrToAddr = 69, LLVMIntToPtr = 40, LLVMBitCast = 41, LLVMAddrSpaceCast = 60, @@ -321,11 +323,6 @@ typedef enum { LLVMRealPredicateTrue /**< Always true (always folded) */ } LLVMRealPredicate; -typedef enum { - LLVMLandingPadCatch, /**< A catch clause */ - LLVMLandingPadFilter /**< A filter clause */ -} LLVMLandingPadClauseTy; - typedef enum { LLVMNotThreadLocal = 0, LLVMGeneralDynamicTLSModel, @@ -398,6 +395,12 @@ typedef enum { LLVMAtomicRMWBinOpUSubCond, /** */ -#define LLVM_DECLARE_VALUE_CAST(name) \ - LLVMValueRef LLVMIsA##name(LLVMValueRef Val); +#define LLVM_DECLARE_VALUE_CAST(name) \ + LLVM_C_ABI LLVMValueRef LLVMIsA##name(LLVMValueRef Val); LLVM_FOR_EACH_VALUE_SUBCLASS(LLVM_DECLARE_VALUE_CAST) -LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val); -LLVMValueRef LLVMIsAValueAsMetadata(LLVMValueRef Val); -LLVMValueRef LLVMIsAMDString(LLVMValueRef Val); +LLVM_C_ABI LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val); +LLVM_C_ABI LLVMValueRef LLVMIsAValueAsMetadata(LLVMValueRef Val); +LLVM_C_ABI LLVMValueRef LLVMIsAMDString(LLVMValueRef Val); /** Deprecated: Use LLVMGetValueName2 instead. */ -const char *LLVMGetValueName(LLVMValueRef Val); +LLVM_C_ABI const char *LLVMGetValueName(LLVMValueRef Val); /** Deprecated: Use LLVMSetValueName2 instead. */ -void LLVMSetValueName(LLVMValueRef Val, const char *Name); +LLVM_C_ABI void LLVMSetValueName(LLVMValueRef Val, const char *Name); /** * @} @@ -2069,7 +2199,7 @@ void LLVMSetValueName(LLVMValueRef Val, const char *Name); * * @see llvm::Value::use_begin() */ -LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val); +LLVM_C_ABI LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val); /** * Obtain the next use of a value. @@ -2077,7 +2207,7 @@ LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val); * This effectively advances the iterator. It returns NULL if you are on * the final use and no more are available. */ -LLVMUseRef LLVMGetNextUse(LLVMUseRef U); +LLVM_C_ABI LLVMUseRef LLVMGetNextUse(LLVMUseRef U); /** * Obtain the user value for a user. @@ -2086,14 +2216,14 @@ LLVMUseRef LLVMGetNextUse(LLVMUseRef U); * * @see llvm::Use::getUser() */ -LLVMValueRef LLVMGetUser(LLVMUseRef U); +LLVM_C_ABI LLVMValueRef LLVMGetUser(LLVMUseRef U); /** * Obtain the value this use corresponds to. * * @see llvm::Use::get(). */ -LLVMValueRef LLVMGetUsedValue(LLVMUseRef U); +LLVM_C_ABI LLVMValueRef LLVMGetUsedValue(LLVMUseRef U); /** * @} @@ -2114,28 +2244,29 @@ LLVMValueRef LLVMGetUsedValue(LLVMUseRef U); * * @see llvm::User::getOperand() */ -LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI int LLVMGetNumOperands(LLVMValueRef Val); /** * @} @@ -2158,7 +2289,7 @@ int LLVMGetNumOperands(LLVMValueRef Val); * * @see llvm::Constant::getNullValue() */ -LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ +LLVM_C_ABI LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ /** * Obtain a constant value referring to the instance of a type @@ -2168,34 +2299,34 @@ LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */ * * @see llvm::Constant::getAllOnesValue() */ -LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty); /** * Obtain a constant value referring to an undefined value of a type. * * @see llvm::UndefValue::get() */ -LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty); /** * Obtain a constant value referring to a poison value of a type. * * @see llvm::PoisonValue::get() */ -LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty); /** * Determine whether a value instance is null. * * @see llvm::Constant::isNullValue() */ -LLVMBool LLVMIsNull(LLVMValueRef Val); +LLVM_C_ABI LLVMBool LLVMIsNull(LLVMValueRef Val); /** * Obtain a constant that is a constant pointer pointing to NULL for a * specified type. */ -LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty); /** * @defgroup LLVMCCoreValueConstantScalar Scalar constants @@ -2224,17 +2355,16 @@ LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty); * @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); +LLVM_C_ABI 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[]); +LLVM_C_ABI LLVMValueRef LLVMConstIntOfArbitraryPrecision( + LLVMTypeRef IntTy, unsigned NumWords, const uint64_t Words[]); /** * Obtain a constant value for an integer parsed from a string. @@ -2245,8 +2375,8 @@ LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy, * * @see llvm::ConstantInt::get() */ -LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text, - uint8_t Radix); +LLVM_C_ABI LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, + const char *Text, uint8_t Radix); /** * Obtain a constant value for an integer parsed from a string with @@ -2254,13 +2384,15 @@ LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char *Text, * * @see llvm::ConstantInt::get() */ -LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char *Text, - unsigned SLen, uint8_t Radix); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N); /** * Obtain a constant for a floating point value parsed from a string. @@ -2268,27 +2400,38 @@ LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N); * 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, + const char *Text, + unsigned SLen); + +/** + * Obtain a constant for a floating point value from array of 64 bit values. + * The length of the array N must be ceildiv(bits, 64), where bits is the + * scalar size in bits of the floating-point type. + */ + +LLVM_C_ABI LLVMValueRef LLVMConstFPFromBits(LLVMTypeRef Ty, const uint64_t N[]); /** * Obtain the zero extended value for an integer constant value. * * @see llvm::ConstantInt::getZExtValue() */ -unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal); +LLVM_C_ABI 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); +LLVM_C_ABI long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal); /** * Obtain the double value for an floating point constant value. @@ -2296,7 +2439,8 @@ long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal); * * @see llvm::ConstantFP::getDoubleValue */ -double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo); +LLVM_C_ABI double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, + LLVMBool *losesInfo); /** * @} @@ -2317,17 +2461,20 @@ double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *losesInfo); * accurate LLVMConstStringInContext2 * @see llvm::ConstantDataArray::getString() */ -LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str, - unsigned Length, LLVMBool DontNullTerminate); +LLVM_C_ABI LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, + const char *Str, + unsigned Length, + LLVMBool DontNullTerminate); /** * Create a ConstantDataSequential and initialize it with a string. * * @see llvm::ConstantDataArray::getString() */ -LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str, - size_t Length, - LLVMBool DontNullTerminate); +LLVM_C_ABI LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, + const char *Str, + size_t Length, + LLVMBool DontNullTerminate); /** * Create a ConstantDataSequential with string content in the global context. @@ -2338,31 +2485,46 @@ LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str, * @see LLVMConstStringInContext() * @see llvm::ConstantDataArray::getString() */ -LLVMValueRef LLVMConstString(const char *Str, unsigned Length, - LLVMBool DontNullTerminate); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMValueRef LLVMConstString(const char *Str, unsigned Length, + LLVMBool DontNullTerminate), + "Use of the global context is deprecated, use LLVMConstStringInContext2 " + "instead"); /** * Returns true if the specified constant is an array of i8. * * @see ConstantDataSequential::getAsString() */ -LLVMBool LLVMIsConstantString(LLVMValueRef c); +LLVM_C_ABI LLVMBool LLVMIsConstantString(LLVMValueRef c); /** * Get the given constant data sequential as a string. * * @see ConstantDataSequential::getAsString() */ -const char *LLVMGetAsString(LLVMValueRef c, size_t *Length); +LLVM_C_ABI const char *LLVMGetAsString(LLVMValueRef c, size_t *Length); + +/** + * Get the raw, underlying bytes of the given constant data sequential. + * + * This is the same as LLVMGetAsString except it works for all constant data + * sequentials, not just i8 arrays. + * + * @see ConstantDataSequential::getRawDataValues() + */ +LLVM_C_ABI const char *LLVMGetRawDataValues(LLVMValueRef c, + size_t *SizeInBytes); /** * Create an anonymous ConstantStruct with the specified values. * * @see llvm::ConstantStruct::getAnon() */ -LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, - LLVMValueRef *ConstantVals, - unsigned Count, LLVMBool Packed); +LLVM_C_ABI LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, + LLVMValueRef *ConstantVals, + unsigned Count, + LLVMBool Packed); /** * Create a ConstantStruct in the global Context. @@ -2372,8 +2534,11 @@ LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, * * @see LLVMConstStructInContext() */ -LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, - LLVMBool Packed); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, + LLVMBool Packed), + "Use of the global context is deprecated, use LLVMConstStructInContext " + "instead"); /** * Create a ConstantArray from values. @@ -2382,25 +2547,40 @@ LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, * LLVMConstArray2 * @see llvm::ConstantArray::get() */ -LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, - LLVMValueRef *ConstantVals, unsigned Length); +LLVM_C_ABI LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, + LLVMValueRef *ConstantVals, + unsigned Length); /** * Create a ConstantArray from values. * * @see llvm::ConstantArray::get() */ -LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, - uint64_t Length); +LLVM_C_ABI LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, + LLVMValueRef *ConstantVals, + uint64_t Length); + +/** + * Create a ConstantDataArray from raw values. + * + * ElementTy must be one of i8, i16, i32, i64, half, bfloat, float, or double. + * Data points to a contiguous buffer of raw values in the host endianness. The + * element count is inferred from the element type and the data size in bytes. + * + * @see llvm::ConstantDataArray::getRaw() + */ +LLVM_C_ABI LLVMValueRef LLVMConstDataArray(LLVMTypeRef ElementTy, + const char *Data, + size_t SizeInBytes); /** * Create a non-anonymous ConstantStruct from values. * * @see llvm::ConstantStruct::get() */ -LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, - LLVMValueRef *ConstantVals, - unsigned Count); +LLVM_C_ABI LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, + LLVMValueRef *ConstantVals, + unsigned Count); /** * Get element of a constant aggregate (struct, array or vector) at the @@ -2410,14 +2590,14 @@ LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, * * @see llvm::Constant::getAggregateElement() */ -LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx); +LLVM_C_ABI LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx); /** * Get an element at specified index as a constant. * * @see ConstantDataSequential::getElementAsConstant() */ -LLVM_ATTRIBUTE_C_DEPRECATED( +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx), "Use LLVMGetAggregateElement instead"); @@ -2426,15 +2606,17 @@ LLVM_ATTRIBUTE_C_DEPRECATED( * * @see llvm::ConstantVector::get() */ -LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size); +LLVM_C_ABI LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, + unsigned Size); /** * Create a ConstantPtrAuth constant with the given values. * * @see llvm::ConstantPtrAuth::get() */ -LLVMValueRef LLVMConstantPtrAuth(LLVMValueRef Ptr, LLVMValueRef Key, - LLVMValueRef Disc, LLVMValueRef AddrDisc); +LLVM_C_ABI LLVMValueRef LLVMConstantPtrAuth(LLVMValueRef Ptr, LLVMValueRef Key, + LLVMValueRef Disc, + LLVMValueRef AddrDisc); /** * @} @@ -2449,74 +2631,86 @@ LLVMValueRef LLVMConstantPtrAuth(LLVMValueRef Ptr, LLVMValueRef Key, * * @{ */ -LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal); -LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty); -LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty); -LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal); -LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal); -LLVM_ATTRIBUTE_C_DEPRECATED( +LLVM_C_ABI LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal); +LLVM_C_ABI LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty); +LLVM_C_ABI LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal); +LLVM_C_ABI LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal), "Use LLVMConstNull instead."); -LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal); -LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNSWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstNUWMul(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant); -LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, - LLVMValueRef *ConstantIndices, unsigned NumIndices); -LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, - LLVMValueRef *ConstantIndices, - unsigned NumIndices); +LLVM_C_ABI LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal); +LLVM_C_ABI LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, + LLVMValueRef RHSConstant); +LLVM_C_ABI LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, + LLVMValueRef *ConstantIndices, + unsigned NumIndices); +LLVM_C_ABI LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, + LLVMValueRef ConstantVal, + LLVMValueRef *ConstantIndices, + unsigned NumIndices); /** * Creates a constant GetElementPtr expression. Similar to LLVMConstGEP2, but * allows specifying the no-wrap flags. * * @see llvm::ConstantExpr::getGetElementPtr() */ -LLVMValueRef LLVMConstGEPWithNoWrapFlags(LLVMTypeRef Ty, - LLVMValueRef ConstantVal, - LLVMValueRef *ConstantIndices, - unsigned NumIndices, - LLVMGEPNoWrapFlags NoWrapFlags); -LLVMValueRef LLVMConstTrunc(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 LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, - LLVMTypeRef ToType); -LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, - LLVMTypeRef ToType); -LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, - LLVMValueRef IndexConstant); -LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, - LLVMValueRef ElementValueConstant, - LLVMValueRef IndexConstant); -LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, - LLVMValueRef VectorBConstant, - LLVMValueRef MaskConstant); -LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMConstGEPWithNoWrapFlags( + LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, + unsigned NumIndices, LLVMGEPNoWrapFlags NoWrapFlags); +LLVM_C_ABI LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, + LLVMTypeRef ToType); +LLVM_C_ABI LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, + LLVMValueRef IndexConstant); +LLVM_C_ABI LLVMValueRef LLVMConstInsertElement( + LLVMValueRef VectorConstant, LLVMValueRef ElementValueConstant, + LLVMValueRef IndexConstant); +LLVM_C_ABI LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, + LLVMValueRef VectorBConstant, + LLVMValueRef MaskConstant); +LLVM_C_ABI LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB); /** * Gets the function associated with a given BlockAddress constant value. */ -LLVMValueRef LLVMGetBlockAddressFunction(LLVMValueRef BlockAddr); +LLVM_C_ABI LLVMValueRef LLVMGetBlockAddressFunction(LLVMValueRef BlockAddr); /** * Gets the basic block associated with a given BlockAddress constant value. */ -LLVMBasicBlockRef LLVMGetBlockAddressBasicBlock(LLVMValueRef BlockAddr); +LLVM_C_ABI LLVMBasicBlockRef +LLVMGetBlockAddressBasicBlock(LLVMValueRef BlockAddr); /** Deprecated: Use LLVMGetInlineAsm instead. */ -LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, - const char *AsmString, const char *Constraints, - LLVMBool HasSideEffects, LLVMBool IsAlignStack); +LLVM_C_ABI LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, + const char *AsmString, + const char *Constraints, + LLVMBool HasSideEffects, + LLVMBool IsAlignStack); /** * @} @@ -2533,31 +2727,35 @@ LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, * @{ */ -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); +LLVM_C_ABI LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global); +LLVM_C_ABI LLVMBool LLVMIsDeclaration(LLVMValueRef Global); +LLVM_C_ABI LLVMLinkage LLVMGetLinkage(LLVMValueRef Global); +LLVM_C_ABI void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage); +LLVM_C_ABI const char *LLVMGetSection(LLVMValueRef Global); +LLVM_C_ABI void LLVMSetSection(LLVMValueRef Global, const char *Section); +LLVM_C_ABI LLVMVisibility LLVMGetVisibility(LLVMValueRef Global); +LLVM_C_ABI void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz); +LLVM_C_ABI LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global); +LLVM_C_ABI void LLVMSetDLLStorageClass(LLVMValueRef Global, + LLVMDLLStorageClass Class); +LLVM_C_ABI LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global); +LLVM_C_ABI 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() + * @see llvm::Function::getFunctionType() */ -LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global); +LLVM_C_ABI LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global); /** Deprecated: Use LLVMGetUnnamedAddress instead. */ -LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global); +LLVM_C_ABI LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global); /** Deprecated: Use LLVMSetUnnamedAddress instead. */ -void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr); +LLVM_C_ABI void LLVMSetUnnamedAddr(LLVMValueRef Global, + LLVMBool HasUnnamedAddr); /** * @defgroup LLVMCCoreValueWithAlignment Values with alignment @@ -2575,7 +2773,7 @@ void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr); * @see llvm::AtomicCmpXchgInst::setAlignment() * @see llvm::GlobalValue::getAlignment() */ -unsigned LLVMGetAlignment(LLVMValueRef V); +LLVM_C_ABI unsigned LLVMGetAlignment(LLVMValueRef V); /** * Set the preferred alignment of the value. @@ -2586,7 +2784,7 @@ unsigned LLVMGetAlignment(LLVMValueRef V); * @see llvm::AtomicCmpXchgInst::setAlignment() * @see llvm::GlobalValue::setAlignment() */ -void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes); +LLVM_C_ABI void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes); /** * Sets a metadata attachment, erasing the existing metadata attachment if @@ -2594,22 +2792,38 @@ void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes); * * @see llvm::GlobalObject::setMetadata() */ -void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind, - LLVMMetadataRef MD); +LLVM_C_ABI void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind, + LLVMMetadataRef MD); + +/** + * Adds a metadata attachment. + * + * @see llvm::GlobalObject::addMetadata() + */ +LLVM_C_ABI void LLVMGlobalAddMetadata(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); +LLVM_C_ABI void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind); /** * Removes all metadata attachments from this value. * * @see llvm::GlobalObject::clearMetadata() */ -void LLVMGlobalClearMetadata(LLVMValueRef Global); +LLVM_C_ABI void LLVMGlobalClearMetadata(LLVMValueRef Global); + +/** + * Add debuginfo metadata to this global. + * + * @see llvm::GlobalVariable::addDebugInfo() + */ +LLVM_C_ABI void LLVMGlobalAddDebugInfo(LLVMValueRef Global, + LLVMMetadataRef GVE); /** * Retrieves an array of metadata entries representing the metadata attached to @@ -2618,27 +2832,28 @@ void LLVMGlobalClearMetadata(LLVMValueRef Global); * * @see llvm::GlobalObject::getAllMetadata() */ -LLVMValueMetadataEntry *LLVMGlobalCopyAllMetadata(LLVMValueRef Value, - size_t *NumEntries); +LLVM_C_ABI LLVMValueMetadataEntry * +LLVMGlobalCopyAllMetadata(LLVMValueRef Value, size_t *NumEntries); /** * Destroys value metadata entries. */ -void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries); +LLVM_C_ABI void +LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries); /** * Returns the kind of a value metadata entry at a specific index. */ -unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries, - unsigned Index); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMMetadataRef LLVMValueMetadataEntriesGetMetadata( + LLVMValueMetadataEntry *Entries, unsigned Index); /** * @} @@ -2653,28 +2868,36 @@ LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries, * * @{ */ -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 LLVMGetNamedGlobalWithLength(LLVMModuleRef M, const char *Name, - size_t Length); -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); +LLVM_C_ABI LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, + LLVMTypeRef Ty, + const char *Name, + unsigned AddressSpace); +LLVM_C_ABI LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMGetNamedGlobalWithLength(LLVMModuleRef M, + const char *Name, + size_t Length); +LLVM_C_ABI LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M); +LLVM_C_ABI LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M); +LLVM_C_ABI LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar); +LLVM_C_ABI LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMDeleteGlobal(LLVMValueRef GlobalVar); +LLVM_C_ABI LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMSetInitializer(LLVMValueRef GlobalVar, + LLVMValueRef ConstantVal); +LLVM_C_ABI LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMSetThreadLocal(LLVMValueRef GlobalVar, + LLVMBool IsThreadLocal); +LLVM_C_ABI LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, + LLVMBool IsConstant); +LLVM_C_ABI LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, + LLVMThreadLocalMode Mode); +LLVM_C_ABI LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar); +LLVM_C_ABI void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, + LLVMBool IsExtInit); /** * @} @@ -2695,9 +2918,9 @@ void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit); * * @see llvm::GlobalAlias::create() */ -LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, - unsigned AddrSpace, LLVMValueRef Aliasee, - const char *Name); +LLVM_C_ABI LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, + unsigned AddrSpace, LLVMValueRef Aliasee, + const char *Name); /** * Obtain a GlobalAlias value from a Module by its name. @@ -2706,22 +2929,23 @@ LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, * * @see llvm::Module::getNamedAlias() */ -LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M, - const char *Name, size_t NameLen); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M); /** * Obtain an iterator to the last GlobalAlias in a Module. * * @see llvm::Module::alias_end() */ -LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M); +LLVM_C_ABI LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M); /** * Advance a GlobalAlias iterator to the next GlobalAlias. @@ -2729,7 +2953,7 @@ LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M); * Returns NULL if the iterator was already at the end and there are no more * global aliases. */ -LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA); +LLVM_C_ABI LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA); /** * Decrement a GlobalAlias iterator to the previous GlobalAlias. @@ -2737,17 +2961,17 @@ LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA); * Returns NULL if the iterator was already at the beginning and there are * no previous global aliases. */ -LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA); +LLVM_C_ABI LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA); /** * Retrieve the target value of an alias. */ -LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias); +LLVM_C_ABI LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias); /** * Set the target value of an alias. */ -void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee); +LLVM_C_ABI void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee); /** * @} @@ -2769,42 +2993,43 @@ void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee); * * @see llvm::Function::eraseFromParent() */ -void LLVMDeleteFunction(LLVMValueRef Fn); +LLVM_C_ABI void LLVMDeleteFunction(LLVMValueRef Fn); /** * Check whether the given function has a personality function. * * @see llvm::Function::hasPersonalityFn() */ -LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn); +LLVM_C_ABI LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn); /** * Obtain the personality function attached to the function. * * @see llvm::Function::getPersonalityFn() */ -LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn); +LLVM_C_ABI LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn); /** * Set the personality function attached to the function. * * @see llvm::Function::setPersonalityFn() */ -void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn); +LLVM_C_ABI void LLVMSetPersonalityFn(LLVMValueRef Fn, + LLVMValueRef PersonalityFn); /** * Obtain the intrinsic ID number which matches the given function name. * * @see llvm::Intrinsic::lookupIntrinsicID() */ -unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen); +LLVM_C_ABI unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen); /** * Obtain the ID number from a function instance. * * @see llvm::Function::getIntrinsicID() */ -unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); +LLVM_C_ABI unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); /** * Get or insert the declaration of an intrinsic. For overloaded intrinsics, @@ -2812,10 +3037,10 @@ unsigned LLVMGetIntrinsicID(LLVMValueRef Fn); * * @see llvm::Intrinsic::getOrInsertDeclaration() */ -LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, - unsigned ID, - LLVMTypeRef *ParamTypes, - size_t ParamCount); +LLVM_C_ABI LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, + unsigned ID, + LLVMTypeRef *ParamTypes, + size_t ParamCount); /** * Retrieves the type of an intrinsic. For overloaded intrinsics, parameter @@ -2823,19 +3048,22 @@ LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, * * @see llvm::Intrinsic::getType() */ -LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID, - LLVMTypeRef *ParamTypes, size_t ParamCount); +LLVM_C_ABI 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); +LLVM_C_ABI const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength); /** Deprecated: Use LLVMIntrinsicCopyOverloadedName2 instead. */ -char *LLVMIntrinsicCopyOverloadedName(unsigned ID, LLVMTypeRef *ParamTypes, - size_t ParamCount, size_t *NameLength); +LLVM_C_ABI char *LLVMIntrinsicCopyOverloadedName(unsigned ID, + LLVMTypeRef *ParamTypes, + size_t ParamCount, + size_t *NameLength); /** * Copies the name of an overloaded intrinsic identified by a given list of @@ -2848,16 +3076,18 @@ char *LLVMIntrinsicCopyOverloadedName(unsigned ID, LLVMTypeRef *ParamTypes, * * @see llvm::Intrinsic::getName() */ -char *LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, unsigned ID, - LLVMTypeRef *ParamTypes, - size_t ParamCount, size_t *NameLength); +LLVM_C_ABI char *LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, + 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); +LLVM_C_ABI LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID); /** * Obtain the calling function of a function. @@ -2866,7 +3096,7 @@ LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID); * * @see llvm::Function::getCallingConv() */ -unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); +LLVM_C_ABI unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); /** * Set the calling convention of a function. @@ -2876,7 +3106,7 @@ unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn); * @param Fn Function to operate on * @param CC LLVMCallConv to set calling convention to */ -void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); +LLVM_C_ABI void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); /** * Obtain the name of the garbage collector to use during code @@ -2884,80 +3114,83 @@ void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC); * * @see llvm::Function::getGC() */ -const char *LLVMGetGC(LLVMValueRef Fn); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMSetGC(LLVMValueRef Fn, const char *Name); /** * Gets the prefix data associated with a function. Only valid on functions, and * only if LLVMHasPrefixData returns true. * See https://llvm.org/docs/LangRef.html#prefix-data */ -LLVMValueRef LLVMGetPrefixData(LLVMValueRef Fn); +LLVM_C_ABI LLVMValueRef LLVMGetPrefixData(LLVMValueRef Fn); /** * Check if a given function has prefix data. Only valid on functions. * See https://llvm.org/docs/LangRef.html#prefix-data */ -LLVMBool LLVMHasPrefixData(LLVMValueRef Fn); +LLVM_C_ABI LLVMBool LLVMHasPrefixData(LLVMValueRef Fn); /** * Sets the prefix data for the function. Only valid on functions. * See https://llvm.org/docs/LangRef.html#prefix-data */ -void LLVMSetPrefixData(LLVMValueRef Fn, LLVMValueRef prefixData); +LLVM_C_ABI void LLVMSetPrefixData(LLVMValueRef Fn, LLVMValueRef prefixData); /** * Gets the prologue data associated with a function. Only valid on functions, * and only if LLVMHasPrologueData returns true. * See https://llvm.org/docs/LangRef.html#prologue-data */ -LLVMValueRef LLVMGetPrologueData(LLVMValueRef Fn); +LLVM_C_ABI LLVMValueRef LLVMGetPrologueData(LLVMValueRef Fn); /** * Check if a given function has prologue data. Only valid on functions. * See https://llvm.org/docs/LangRef.html#prologue-data */ -LLVMBool LLVMHasPrologueData(LLVMValueRef Fn); +LLVM_C_ABI LLVMBool LLVMHasPrologueData(LLVMValueRef Fn); /** * Sets the prologue data for the function. Only valid on functions. * See https://llvm.org/docs/LangRef.html#prologue-data */ -void LLVMSetPrologueData(LLVMValueRef Fn, LLVMValueRef prologueData); +LLVM_C_ABI void LLVMSetPrologueData(LLVMValueRef Fn, LLVMValueRef prologueData); /** * 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, +LLVM_C_ABI void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + LLVMAttributeRef A); +LLVM_C_ABI unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, + LLVMAttributeIndex Idx); +LLVM_C_ABI void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, + LLVMAttributeRef *Attrs); +LLVM_C_ABI LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F, + LLVMAttributeIndex Idx, + unsigned KindID); +LLVM_C_ABI LLVMAttributeRef LLVMGetStringAttributeAtIndex( + LLVMValueRef F, LLVMAttributeIndex Idx, const char *K, unsigned KLen); +LLVM_C_ABI void LLVMRemoveEnumAttributeAtIndex(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); + unsigned KindID); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, + const char *A, + const char *V); /** * @defgroup LLVMCCoreValueFunctionParameters Function Parameters @@ -2975,7 +3208,7 @@ void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A, * * @see llvm::Function::arg_size() */ -unsigned LLVMCountParams(LLVMValueRef Fn); +LLVM_C_ABI unsigned LLVMCountParams(LLVMValueRef Fn); /** * Obtain the parameters in a function. @@ -2988,7 +3221,7 @@ unsigned LLVMCountParams(LLVMValueRef Fn); * * @see llvm::Function::arg_begin() */ -void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); +LLVM_C_ABI void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); /** * Obtain the parameter at the specified index. @@ -2997,7 +3230,7 @@ void LLVMGetParams(LLVMValueRef Fn, LLVMValueRef *Params); * * @see llvm::Function::arg_begin() */ -LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); +LLVM_C_ABI LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); /** * Obtain the function to which this argument belongs. @@ -3008,21 +3241,21 @@ LLVMValueRef LLVMGetParam(LLVMValueRef Fn, unsigned Index); * The returned LLVMValueRef is the llvm::Function to which this * argument belongs. */ -LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst); +LLVM_C_ABI LLVMValueRef LLVMGetParamParent(LLVMValueRef Inst); /** * Obtain the first parameter to a function. * * @see llvm::Function::arg_begin() */ -LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn); +LLVM_C_ABI LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn); /** * Obtain the last parameter to a function. * * @see llvm::Function::arg_end() */ -LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); +LLVM_C_ABI LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); /** * Obtain the next parameter to a function. @@ -3031,14 +3264,14 @@ LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn); * actually a wrapped iterator) and obtains the next parameter from the * underlying iterator. */ -LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg); +LLVM_C_ABI LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg); /** * Obtain the previous parameter to a function. * * This is the opposite of LLVMGetNextParam(). */ -LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); +LLVM_C_ABI LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); /** * Set the alignment for a function parameter. @@ -3046,7 +3279,7 @@ LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg); * @see llvm::Argument::addAttr() * @see llvm::AttrBuilder::addAlignmentAttr() */ -void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align); +LLVM_C_ABI void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align); /** * @} @@ -3068,10 +3301,10 @@ void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned Align); * * @see llvm::GlobalIFunc::create() */ -LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M, - const char *Name, size_t NameLen, - LLVMTypeRef Ty, unsigned AddrSpace, - LLVMValueRef Resolver); +LLVM_C_ABI 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. @@ -3080,22 +3313,23 @@ LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M, * * @see llvm::Module::getNamedIFunc() */ -LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M, - const char *Name, size_t NameLen); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M); /** * Obtain an iterator to the last GlobalIFunc in a Module. * * @see llvm::Module::ifunc_end() */ -LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M); +LLVM_C_ABI LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M); /** * Advance a GlobalIFunc iterator to the next GlobalIFunc. @@ -3103,7 +3337,7 @@ LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M); * Returns NULL if the iterator was already at the end and there are no more * global aliases. */ -LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc); +LLVM_C_ABI LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc); /** * Decrement a GlobalIFunc iterator to the previous GlobalIFunc. @@ -3111,7 +3345,7 @@ LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc); * Returns NULL if the iterator was already at the beginning and there are * no previous global aliases. */ -LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc); +LLVM_C_ABI LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc); /** * Retrieves the resolver function associated with this indirect function, or @@ -3119,21 +3353,22 @@ LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc); * * @see llvm::GlobalIFunc::getResolver() */ -LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc); +LLVM_C_ABI LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc); /** * Sets the resolver function associated with this indirect function. * * @see llvm::GlobalIFunc::setResolver() */ -void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMEraseGlobalIFunc(LLVMValueRef IFunc); /** * Remove a global indirect function from its parent module. @@ -3143,7 +3378,7 @@ void LLVMEraseGlobalIFunc(LLVMValueRef IFunc); * * @see llvm::GlobalIFunc::removeFromParent() */ -void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc); +LLVM_C_ABI void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc); /** * @} @@ -3175,26 +3410,28 @@ void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc); * * @see llvm::MDString::get() */ -LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str, - size_t SLen); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, + LLVMMetadataRef *MDs, + size_t Count); /** * Obtain a Metadata as a Value. */ -LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD); +LLVM_C_ABI LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, + LLVMMetadataRef MD); /** * Obtain a Value as a Metadata. */ -LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val); +LLVM_C_ABI LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val); /** * Obtain the underlying string from a MDString value. @@ -3203,7 +3440,7 @@ LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val); * @param Length Memory address which will hold length of returned string. * @return String data in MDString. */ -const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length); +LLVM_C_ABI const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length); /** * Obtain the number of operands from an MDNode value. @@ -3211,7 +3448,7 @@ const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length); * @param V MDNode to get number of operands from. * @return Number of operands of the MDNode. */ -unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); +LLVM_C_ABI unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); /** * Obtain the given MDNode's operands. @@ -3224,26 +3461,32 @@ unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V); * @param V MDNode to get the operands from. * @param Dest Destination array for operands. */ -void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest); +LLVM_C_ABI void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest); /** * Replace an operand at a specific index in a llvm::MDNode value. * * @see llvm::MDNode::replaceOperandWith() */ -void LLVMReplaceMDNodeOperandWith(LLVMValueRef V, unsigned Index, - LLVMMetadataRef Replacement); +LLVM_C_ABI void LLVMReplaceMDNodeOperandWith(LLVMValueRef V, unsigned Index, + LLVMMetadataRef Replacement); /** Deprecated: Use LLVMMDStringInContext2 instead. */ -LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, - unsigned SLen); +LLVM_C_ABI LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, + unsigned SLen); /** Deprecated: Use LLVMMDStringInContext2 instead. */ -LLVMValueRef LLVMMDString(const char *Str, unsigned SLen); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMValueRef LLVMMDString(const char *Str, unsigned SLen), + "Use of the global context is deprecated, use LLVMMDStringInContext2 " + "instead"); /** Deprecated: Use LLVMMDNodeInContext2 instead. */ -LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, - unsigned Count); +LLVM_C_ABI LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, + LLVMValueRef *Vals, unsigned Count); /** Deprecated: Use LLVMMDNodeInContext2 instead. */ -LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count), + "Use of the global context is deprecated, use LLVMMDNodeInContext2 " + "instead"); /** * @} @@ -3271,9 +3514,10 @@ LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count); * @param Args Memory address of an array of bundle operands * @param NumArgs Length of Args */ -LLVMOperandBundleRef LLVMCreateOperandBundle(const char *Tag, size_t TagLen, - LLVMValueRef *Args, - unsigned NumArgs); +LLVM_C_ABI LLVMOperandBundleRef LLVMCreateOperandBundle(const char *Tag, + size_t TagLen, + LLVMValueRef *Args, + unsigned NumArgs); /** * Destroy an operand bundle. @@ -3281,7 +3525,7 @@ LLVMOperandBundleRef LLVMCreateOperandBundle(const char *Tag, size_t TagLen, * This must be called for every created operand bundle or memory will be * leaked. */ -void LLVMDisposeOperandBundle(LLVMOperandBundleRef Bundle); +LLVM_C_ABI void LLVMDisposeOperandBundle(LLVMOperandBundleRef Bundle); /** * Obtain the tag of an operand bundle as a string. @@ -3291,7 +3535,8 @@ void LLVMDisposeOperandBundle(LLVMOperandBundleRef Bundle); * @return The tag name of Bundle. * @see OperandBundleDef::getTag() */ -const char *LLVMGetOperandBundleTag(LLVMOperandBundleRef Bundle, size_t *Len); +LLVM_C_ABI const char *LLVMGetOperandBundleTag(LLVMOperandBundleRef Bundle, + size_t *Len); /** * Obtain the number of operands for an operand bundle. @@ -3300,7 +3545,7 @@ const char *LLVMGetOperandBundleTag(LLVMOperandBundleRef Bundle, size_t *Len); * @return The number of operands. * @see OperandBundleDef::input_size() */ -unsigned LLVMGetNumOperandBundleArgs(LLVMOperandBundleRef Bundle); +LLVM_C_ABI unsigned LLVMGetNumOperandBundleArgs(LLVMOperandBundleRef Bundle); /** * Obtain the operand for an operand bundle at the given index. @@ -3310,8 +3555,8 @@ unsigned LLVMGetNumOperandBundleArgs(LLVMOperandBundleRef Bundle); * LLVMGetNumOperandBundleArgs(). * @return The operand. */ -LLVMValueRef LLVMGetOperandBundleArgAtIndex(LLVMOperandBundleRef Bundle, - unsigned Index); +LLVM_C_ABI LLVMValueRef +LLVMGetOperandBundleArgAtIndex(LLVMOperandBundleRef Bundle, unsigned Index); /** * @} @@ -3337,29 +3582,29 @@ LLVMValueRef LLVMGetOperandBundleArgAtIndex(LLVMOperandBundleRef Bundle, /** * Convert a basic block instance to a value type. */ -LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB); /** * Determine whether an LLVMValueRef is itself a basic block. */ -LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val); +LLVM_C_ABI LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val); /** * Convert an LLVMValueRef to an LLVMBasicBlockRef instance. */ -LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); +LLVM_C_ABI LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val); /** * Obtain the string name of a basic block. */ -const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB); +LLVM_C_ABI const char *LLVMGetBasicBlockName(LLVMBasicBlockRef BB); /** * Obtain the function to which a basic block belongs. * * @see llvm::BasicBlock::getParent() */ -LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); /** * Obtain the terminator instruction for a basic block. @@ -3371,14 +3616,14 @@ LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB); * * @see llvm::BasicBlock::getTerminator() */ -LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB); /** * Obtain the number of basic blocks in a function. * * @param Fn Function value to operate on. */ -unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); +LLVM_C_ABI unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); /** * Obtain all of the basic blocks in a function. @@ -3388,7 +3633,8 @@ unsigned LLVMCountBasicBlocks(LLVMValueRef Fn); * LLVMCountBasicBlocks() in length. This array is populated with * LLVMBasicBlockRef instances. */ -void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); +LLVM_C_ABI void LLVMGetBasicBlocks(LLVMValueRef Fn, + LLVMBasicBlockRef *BasicBlocks); /** * Obtain the first basic block in a function. @@ -3398,24 +3644,24 @@ void LLVMGetBasicBlocks(LLVMValueRef Fn, LLVMBasicBlockRef *BasicBlocks); * * @see llvm::Function::begin() */ -LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn); /** * Obtain the last basic block in a function. * * @see llvm::Function::end() */ -LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn); /** * Advance a basic block iterator. */ -LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB); /** * Go backwards in a basic block iterator. */ -LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); /** * Obtain the basic block that corresponds to the entry point of a @@ -3423,7 +3669,7 @@ LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB); * * @see llvm::Function::getEntryBlock() */ -LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); /** * Insert the given basic block after the insertion point of the given builder. @@ -3432,33 +3678,34 @@ LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn); * * @see llvm::Function::BasicBlockListType::insertAfter() */ -void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder, - LLVMBasicBlockRef BB); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, + LLVMValueRef Fn, + const char *Name); /** * Append a basic block to the end of a function using the global @@ -3466,7 +3713,10 @@ LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, * * @see llvm::BasicBlock::Create() */ -LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name), + "Use of the global context is deprecated, use " + "LLVMAppendBasicBlockInContext instead"); /** * Insert a basic block in a function before another basic block. @@ -3476,17 +3726,20 @@ LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef Fn, const char *Name); * * @see llvm::BasicBlock::Create() */ -LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, - LLVMBasicBlockRef BB, - const char *Name); +LLVM_C_ABI 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); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, + const char *Name), + "Use of the global context is deprecated, use " + "LLVMInsertBasicBlockInContext instead"); /** * Remove a basic block from a function and delete it. @@ -3496,7 +3749,7 @@ LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB, * * @see llvm::BasicBlock::eraseFromParent() */ -void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); +LLVM_C_ABI void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); /** * Remove a basic block from a function. @@ -3506,21 +3759,23 @@ void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB); * * @see llvm::BasicBlock::removeFromParent() */ -void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB); +LLVM_C_ABI void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BB); /** * Move a basic block to before another one. * * @see llvm::BasicBlock::moveBefore() */ -void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); +LLVM_C_ABI void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, + LLVMBasicBlockRef MovePos); /** * Move a basic block to after another one. * * @see llvm::BasicBlock::moveAfter() */ -void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); +LLVM_C_ABI void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, + LLVMBasicBlockRef MovePos); /** * Obtain the first instruction in a basic block. @@ -3528,14 +3783,14 @@ void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos); * The returned LLVMValueRef corresponds to a llvm::Instruction * instance. */ -LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB); /** * Obtain the last instruction in a basic block. * * The returned LLVMValueRef corresponds to an LLVM:Instruction. */ -LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); /** * @} @@ -3561,17 +3816,18 @@ LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB); /** * Determine whether an instruction has any metadata attached. */ -int LLVMHasMetadata(LLVMValueRef Val); +LLVM_C_ABI int LLVMHasMetadata(LLVMValueRef Val); /** * Return metadata associated with an instruction value. */ -LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID); +LLVM_C_ABI LLVMValueRef LLVMGetMetadata(LLVMValueRef Val, unsigned KindID); /** * Set metadata associated with an instruction value. */ -void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node); +LLVM_C_ABI void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, + LLVMValueRef Node); /** * Returns the metadata associated with an instruction value, but filters out @@ -3579,7 +3835,7 @@ void LLVMSetMetadata(LLVMValueRef Val, unsigned KindID, LLVMValueRef Node); * * @see llvm::Instruction::getAllMetadataOtherThanDebugLoc() */ -LLVMValueMetadataEntry * +LLVM_C_ABI LLVMValueMetadataEntry * LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr, size_t *NumEntries); @@ -3588,7 +3844,7 @@ LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Instr, * * @see llvm::Instruction::getParent() */ -LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); /** * Obtain the instruction that occurs after the one specified. @@ -3598,7 +3854,7 @@ LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst); * If this is the last instruction in a basic block, NULL will be * returned. */ -LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); +LLVM_C_ABI LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); /** * Obtain the instruction that occurred before this one. @@ -3606,7 +3862,7 @@ LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst); * If the instruction is the first instruction in a basic block, NULL * will be returned. */ -LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); +LLVM_C_ABI LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); /** * Remove an instruction. @@ -3616,7 +3872,7 @@ LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst); * * @see llvm::Instruction::removeFromParent() */ -void LLVMInstructionRemoveFromParent(LLVMValueRef Inst); +LLVM_C_ABI void LLVMInstructionRemoveFromParent(LLVMValueRef Inst); /** * Remove and delete an instruction. @@ -3626,7 +3882,7 @@ void LLVMInstructionRemoveFromParent(LLVMValueRef Inst); * * @see llvm::Instruction::eraseFromParent() */ -void LLVMInstructionEraseFromParent(LLVMValueRef Inst); +LLVM_C_ABI void LLVMInstructionEraseFromParent(LLVMValueRef Inst); /** * Delete an instruction. @@ -3636,14 +3892,14 @@ void LLVMInstructionEraseFromParent(LLVMValueRef Inst); * * @see llvm::Value::deleteValue() */ -void LLVMDeleteInstruction(LLVMValueRef Inst); +LLVM_C_ABI void LLVMDeleteInstruction(LLVMValueRef Inst); /** * Obtain the code opcode for an individual instruction. * * @see llvm::Instruction::getOpCode() */ -LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); +LLVM_C_ABI LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); /** * Obtain the predicate of an instruction. @@ -3652,7 +3908,25 @@ LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); * * @see llvm::ICmpInst::getPredicate() */ -LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); +LLVM_C_ABI LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); + +/** + * Get whether or not an icmp instruction has the samesign flag. + * + * This is only valid for instructions that correspond to llvm::ICmpInst. + * + * @see llvm::ICmpInst::hasSameSign() + */ +LLVM_C_ABI LLVMBool LLVMGetICmpSameSign(LLVMValueRef Inst); + +/** + * Set the samesign flag on an icmp instruction. + * + * This is only valid for instructions that correspond to llvm::ICmpInst. + * + * @see llvm::ICmpInst::setSameSign() + */ +LLVM_C_ABI void LLVMSetICmpSameSign(LLVMValueRef Inst, LLVMBool SameSign); /** * Obtain the float predicate of an instruction. @@ -3661,7 +3935,7 @@ LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); * * @see llvm::FCmpInst::getPredicate() */ -LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst); +LLVM_C_ABI LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst); /** * Create a copy of 'this' instruction that is identical in all ways @@ -3671,7 +3945,7 @@ LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst); * * @see llvm::Instruction::clone() */ -LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); +LLVM_C_ABI LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); /** * Determine whether an instruction is a terminator. This routine is named to @@ -3680,7 +3954,7 @@ LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); * * @see llvm::Instruction::isTerminator() */ -LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst); +LLVM_C_ABI LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst); /** * Obtain the first debug record attached to an instruction. @@ -3692,7 +3966,7 @@ LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst); * * @see llvm::Instruction::getDbgRecordRange() */ -LLVMDbgRecordRef LLVMGetFirstDbgRecord(LLVMValueRef Inst); +LLVM_C_ABI LLVMDbgRecordRef LLVMGetFirstDbgRecord(LLVMValueRef Inst); /** * Obtain the last debug record attached to an instruction. @@ -3701,21 +3975,55 @@ LLVMDbgRecordRef LLVMGetFirstDbgRecord(LLVMValueRef Inst); * * @see llvm::Instruction::getDbgRecordRange() */ -LLVMDbgRecordRef LLVMGetLastDbgRecord(LLVMValueRef Inst); +LLVM_C_ABI LLVMDbgRecordRef LLVMGetLastDbgRecord(LLVMValueRef Inst); /** * Obtain the next DbgRecord in the sequence or NULL if there are no more. * * @see llvm::Instruction::getDbgRecordRange() */ -LLVMDbgRecordRef LLVMGetNextDbgRecord(LLVMDbgRecordRef DbgRecord); +LLVM_C_ABI LLVMDbgRecordRef LLVMGetNextDbgRecord(LLVMDbgRecordRef DbgRecord); /** * Obtain the previous DbgRecord in the sequence or NULL if there are no more. * * @see llvm::Instruction::getDbgRecordRange() */ -LLVMDbgRecordRef LLVMGetPreviousDbgRecord(LLVMDbgRecordRef DbgRecord); +LLVM_C_ABI LLVMDbgRecordRef +LLVMGetPreviousDbgRecord(LLVMDbgRecordRef DbgRecord); + +/** + * Get the debug location attached to the debug record. + * + * @see llvm::DbgRecord::getDebugLoc() + */ +LLVM_C_ABI LLVMMetadataRef LLVMDbgRecordGetDebugLoc(LLVMDbgRecordRef Rec); + +LLVM_C_ABI LLVMDbgRecordKind LLVMDbgRecordGetKind(LLVMDbgRecordRef Rec); + +/** + * Get the value of the DbgVariableRecord. + * + * @see llvm::DbgVariableRecord::getValue() + */ +LLVM_C_ABI LLVMValueRef LLVMDbgVariableRecordGetValue(LLVMDbgRecordRef Rec, + unsigned OpIdx); + +/** + * Get the debug info variable of the DbgVariableRecord. + * + * @see llvm::DbgVariableRecord::getVariable() + */ +LLVM_C_ABI LLVMMetadataRef +LLVMDbgVariableRecordGetVariable(LLVMDbgRecordRef Rec); + +/** + * Get the debug info expression of the DbgVariableRecord. + * + * @see llvm::DbgVariableRecord::getExpression() + */ +LLVM_C_ABI LLVMMetadataRef +LLVMDbgVariableRecordGetExpression(LLVMDbgRecordRef Rec); /** * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations @@ -3737,7 +4045,7 @@ LLVMDbgRecordRef LLVMGetPreviousDbgRecord(LLVMDbgRecordRef DbgRecord); * @see llvm::InvokeInst::getNumArgOperands() * @see llvm::FuncletPadInst::getNumArgOperands() */ -unsigned LLVMGetNumArgOperands(LLVMValueRef Instr); +LLVM_C_ABI unsigned LLVMGetNumArgOperands(LLVMValueRef Instr); /** * Set the calling convention for a call instruction. @@ -3748,7 +4056,7 @@ unsigned LLVMGetNumArgOperands(LLVMValueRef Instr); * @see llvm::CallInst::setCallingConv() * @see llvm::InvokeInst::setCallingConv() */ -void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); +LLVM_C_ABI void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); /** * Obtain the calling convention for a call instruction. @@ -3758,33 +4066,37 @@ void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC); * * @see LLVMSetInstructionCallConv() */ -unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr); +LLVM_C_ABI unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr); -void LLVMSetInstrParamAlignment(LLVMValueRef Instr, LLVMAttributeIndex Idx, - unsigned Align); +LLVM_C_ABI void LLVMSetInstrParamAlignment(LLVMValueRef Instr, + LLVMAttributeIndex Idx, + 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, +LLVM_C_ABI void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, + LLVMAttributeRef A); +LLVM_C_ABI unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, + LLVMAttributeIndex Idx); +LLVM_C_ABI void LLVMGetCallSiteAttributes(LLVMValueRef C, + LLVMAttributeIndex Idx, + LLVMAttributeRef *Attrs); +LLVM_C_ABI LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C, + LLVMAttributeIndex Idx, + unsigned KindID); +LLVM_C_ABI LLVMAttributeRef LLVMGetCallSiteStringAttribute( + LLVMValueRef C, LLVMAttributeIndex Idx, const char *K, unsigned KLen); +LLVM_C_ABI void LLVMRemoveCallSiteEnumAttribute(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); + unsigned KindID); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C); /** * Obtain the pointer to the function invoked by this instruction. @@ -3795,7 +4107,7 @@ LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C); * @see llvm::CallInst::getCalledOperand() * @see llvm::InvokeInst::getCalledOperand() */ -LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr); +LLVM_C_ABI LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr); /** * Obtain the number of operand bundles attached to this instruction. @@ -3804,7 +4116,7 @@ LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr); * * @see llvm::CallBase::getNumOperandBundles() */ -unsigned LLVMGetNumOperandBundles(LLVMValueRef C); +LLVM_C_ABI unsigned LLVMGetNumOperandBundles(LLVMValueRef C); /** * Obtain the operand bundle attached to this instruction at the given index. @@ -3812,8 +4124,8 @@ unsigned LLVMGetNumOperandBundles(LLVMValueRef C); * * This only works on llvm::CallInst and llvm::InvokeInst instructions. */ -LLVMOperandBundleRef LLVMGetOperandBundleAtIndex(LLVMValueRef C, - unsigned Index); +LLVM_C_ABI LLVMOperandBundleRef LLVMGetOperandBundleAtIndex(LLVMValueRef C, + unsigned Index); /** * Obtain whether a call instruction is a tail call. @@ -3822,7 +4134,7 @@ LLVMOperandBundleRef LLVMGetOperandBundleAtIndex(LLVMValueRef C, * * @see llvm::CallInst::isTailCall() */ -LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); +LLVM_C_ABI LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); /** * Set whether a call instruction is a tail call. @@ -3831,21 +4143,22 @@ LLVMBool LLVMIsTailCall(LLVMValueRef CallInst); * * @see llvm::CallInst::setTailCall() */ -void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall); +LLVM_C_ABI void LLVMSetTailCall(LLVMValueRef CallInst, LLVMBool IsTailCall); /** * Obtain a tail call kind of the call instruction. * * @see llvm::CallInst::setTailCallKind() */ -LLVMTailCallKind LLVMGetTailCallKind(LLVMValueRef CallInst); +LLVM_C_ABI LLVMTailCallKind LLVMGetTailCallKind(LLVMValueRef CallInst); /** * Set the call kind of the call instruction. * * @see llvm::CallInst::getTailCallKind() */ -void LLVMSetTailCallKind(LLVMValueRef CallInst, LLVMTailCallKind kind); +LLVM_C_ABI void LLVMSetTailCallKind(LLVMValueRef CallInst, + LLVMTailCallKind kind); /** * Return the normal destination basic block. @@ -3854,7 +4167,7 @@ void LLVMSetTailCallKind(LLVMValueRef CallInst, LLVMTailCallKind kind); * * @see llvm::InvokeInst::getNormalDest() */ -LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst); /** * Return the unwind destination basic block. @@ -3866,7 +4179,7 @@ LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef InvokeInst); * @see llvm::CleanupReturnInst::getUnwindDest() * @see llvm::CatchSwitchInst::getUnwindDest() */ -LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst); /** * Set the normal destination basic block. @@ -3875,7 +4188,7 @@ LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef InvokeInst); * * @see llvm::InvokeInst::setNormalDest() */ -void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); +LLVM_C_ABI void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); /** * Set the unwind destination basic block. @@ -3887,14 +4200,14 @@ void LLVMSetNormalDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); * @see llvm::CleanupReturnInst::setUnwindDest() * @see llvm::CatchSwitchInst::setUnwindDest() */ -void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); +LLVM_C_ABI void LLVMSetUnwindDest(LLVMValueRef InvokeInst, LLVMBasicBlockRef B); /** * Get the default destination of a CallBr instruction. * * @see llvm::CallBrInst::getDefaultDest() */ -LLVMBasicBlockRef LLVMGetCallBrDefaultDest(LLVMValueRef CallBr); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetCallBrDefaultDest(LLVMValueRef CallBr); /** * Get the number of indirect destinations of a CallBr instruction. @@ -3902,14 +4215,15 @@ LLVMBasicBlockRef LLVMGetCallBrDefaultDest(LLVMValueRef CallBr); * @see llvm::CallBrInst::getNumIndirectDests() */ -unsigned LLVMGetCallBrNumIndirectDests(LLVMValueRef CallBr); +LLVM_C_ABI unsigned LLVMGetCallBrNumIndirectDests(LLVMValueRef CallBr); /** * Get the indirect destination of a CallBr instruction at the given index. * * @see llvm::CallBrInst::getIndirectDest() */ -LLVMBasicBlockRef LLVMGetCallBrIndirectDest(LLVMValueRef CallBr, unsigned Idx); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetCallBrIndirectDest(LLVMValueRef CallBr, + unsigned Idx); /** * @} @@ -3929,21 +4243,22 @@ LLVMBasicBlockRef LLVMGetCallBrIndirectDest(LLVMValueRef CallBr, unsigned Idx); * * @see llvm::Instruction::getNumSuccessors */ -unsigned LLVMGetNumSuccessors(LLVMValueRef Term); +LLVM_C_ABI unsigned LLVMGetNumSuccessors(LLVMValueRef Term); /** * Return the specified successor. * * @see llvm::Instruction::getSuccessor */ -LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, + LLVMBasicBlockRef block); /** * Return if a branch is conditional. @@ -3952,7 +4267,7 @@ void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block); * * @see llvm::BranchInst::isConditional */ -LLVMBool LLVMIsConditional(LLVMValueRef Branch); +LLVM_C_ABI LLVMBool LLVMIsConditional(LLVMValueRef Branch); /** * Return the condition of a branch instruction. @@ -3961,7 +4276,7 @@ LLVMBool LLVMIsConditional(LLVMValueRef Branch); * * @see llvm::BranchInst::getCondition */ -LLVMValueRef LLVMGetCondition(LLVMValueRef Branch); +LLVM_C_ABI LLVMValueRef LLVMGetCondition(LLVMValueRef Branch); /** * Set the condition of a branch instruction. @@ -3970,7 +4285,7 @@ LLVMValueRef LLVMGetCondition(LLVMValueRef Branch); * * @see llvm::BranchInst::setCondition */ -void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond); +LLVM_C_ABI void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond); /** * Obtain the default destination basic block of a switch instruction. @@ -3979,7 +4294,31 @@ void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond); * * @see llvm::SwitchInst::getDefaultDest() */ -LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr); + +/** + * Obtain the case value for a successor of a switch instruction. i corresponds + * to the successor index. The first successor is the default destination, so i + * must be greater than zero. + * + * This only works on llvm::SwitchInst instructions. + * + * @see llvm::SwitchInst::CaseHandle::getCaseValue() + */ +LLVM_C_ABI LLVMValueRef LLVMGetSwitchCaseValue(LLVMValueRef SwitchInstr, + unsigned i); + +/** + * Set the case value for a successor of a switch instruction. i corresponds to + * the successor index. The first successor is the default destination, so i + * must be greater than zero. + * + * This only works on llvm::SwitchInst instructions. + * + * @see llvm::SwitchInst::CaseHandle::setValue() + */ +LLVM_C_ABI void LLVMSetSwitchCaseValue(LLVMValueRef SwitchInstr, unsigned i, + LLVMValueRef CaseValue); /** * @} @@ -3997,7 +4336,7 @@ LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef SwitchInstr); /** * Obtain the type that is being allocated by the alloca instruction. */ -LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca); +LLVM_C_ABI LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca); /** * @} @@ -4015,31 +4354,32 @@ LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca); /** * Check whether the given GEP operator is inbounds. */ -LLVMBool LLVMIsInBounds(LLVMValueRef GEP); +LLVM_C_ABI LLVMBool LLVMIsInBounds(LLVMValueRef GEP); /** * Set the given GEP instruction to be inbounds or not. */ -void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds); +LLVM_C_ABI void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds); /** * Get the source element type of the given GEP operator. */ -LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP); +LLVM_C_ABI LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP); /** * Get the no-wrap related flags for the given GEP instruction. * * @see llvm::GetElementPtrInst::getNoWrapFlags */ -LLVMGEPNoWrapFlags LLVMGEPGetNoWrapFlags(LLVMValueRef GEP); +LLVM_C_ABI LLVMGEPNoWrapFlags LLVMGEPGetNoWrapFlags(LLVMValueRef GEP); /** * Set the no-wrap related flags for the given GEP instruction. * * @see llvm::GetElementPtrInst::setNoWrapFlags */ -void LLVMGEPSetNoWrapFlags(LLVMValueRef GEP, LLVMGEPNoWrapFlags NoWrapFlags); +LLVM_C_ABI void LLVMGEPSetNoWrapFlags(LLVMValueRef GEP, + LLVMGEPNoWrapFlags NoWrapFlags); /** * @} @@ -4057,23 +4397,27 @@ void LLVMGEPSetNoWrapFlags(LLVMValueRef GEP, LLVMGEPNoWrapFlags NoWrapFlags); /** * Add an incoming value to the end of a PHI list. */ -void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, - LLVMBasicBlockRef *IncomingBlocks, unsigned Count); +LLVM_C_ABI 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); +LLVM_C_ABI unsigned LLVMCountIncoming(LLVMValueRef PhiNode); /** * Obtain an incoming value to a PHI node as an LLVMValueRef. */ -LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index); +LLVM_C_ABI LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, + unsigned Index); /** * Obtain an incoming value to a PHI node as an LLVMBasicBlockRef. */ -LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, + unsigned Index); /** * @} @@ -4093,12 +4437,12 @@ LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index); * Obtain the number of indices. * NB: This also works on GEP operators. */ -unsigned LLVMGetNumIndices(LLVMValueRef Inst); +LLVM_C_ABI unsigned LLVMGetNumIndices(LLVMValueRef Inst); /** * Obtain the indices as an array. */ -const unsigned *LLVMGetIndices(LLVMValueRef Inst); +LLVM_C_ABI const unsigned *LLVMGetIndices(LLVMValueRef Inst); /** * @} @@ -4121,37 +4465,46 @@ const unsigned *LLVMGetIndices(LLVMValueRef Inst); * @{ */ -LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); -LLVMBuilderRef LLVMCreateBuilder(void); +LLVM_C_ABI LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMBuilderRef LLVMCreateBuilder(void), + "Use of the global context is deprecated, use " + "LLVMCreateBuilderInContext instead"); /** * Set the builder position before Instr but after any attached debug records, * or if Instr is null set the position to the end of Block. */ -void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, - LLVMValueRef Instr); +LLVM_C_ABI void LLVMPositionBuilder(LLVMBuilderRef Builder, + LLVMBasicBlockRef Block, + LLVMValueRef Instr); /** * Set the builder position before Instr and any attached debug records, * or if Instr is null set the position to the end of Block. */ -void LLVMPositionBuilderBeforeDbgRecords(LLVMBuilderRef Builder, - LLVMBasicBlockRef Block, - LLVMValueRef Inst); +LLVM_C_ABI void LLVMPositionBuilderBeforeDbgRecords(LLVMBuilderRef Builder, + LLVMBasicBlockRef Block, + LLVMValueRef Inst); /** * Set the builder position before Instr but after any attached debug records. */ -void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr); +LLVM_C_ABI void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, + LLVMValueRef Instr); /** * Set the builder position before Instr and any attached debug records. */ -void LLVMPositionBuilderBeforeInstrAndDbgRecords(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); +LLVM_C_ABI void +LLVMPositionBuilderBeforeInstrAndDbgRecords(LLVMBuilderRef Builder, + LLVMValueRef Instr); +LLVM_C_ABI void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, + LLVMBasicBlockRef Block); +LLVM_C_ABI LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder); +LLVM_C_ABI void LLVMClearInsertionPosition(LLVMBuilderRef Builder); +LLVM_C_ABI void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, + LLVMValueRef Instr); +LLVM_C_ABI void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, + LLVMValueRef Instr, + const char *Name); +LLVM_C_ABI void LLVMDisposeBuilder(LLVMBuilderRef Builder); /* Metadata */ @@ -4160,7 +4513,7 @@ void LLVMDisposeBuilder(LLVMBuilderRef Builder); * * @see llvm::IRBuilder::getCurrentDebugLocation() */ -LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder); +LLVM_C_ABI LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder); /** * Set location information used by debugging information. @@ -4169,7 +4522,8 @@ LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder); * * @see llvm::IRBuilder::SetCurrentDebugLocation() */ -void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc); +LLVM_C_ABI void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, + LLVMMetadataRef Loc); /** * Attempts to set the debug location for the given instruction using the @@ -4181,21 +4535,24 @@ void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc); * * @see llvm::IRBuilder::SetInstDebugLocation() */ -void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst); +LLVM_C_ABI void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, + LLVMValueRef Inst); /** * Adds the metadata registered with the given builder to the given instruction. * * @see llvm::IRBuilder::AddMetadataToInst() */ -void LLVMAddMetadataToInst(LLVMBuilderRef Builder, LLVMValueRef Inst); +LLVM_C_ABI void LLVMAddMetadataToInst(LLVMBuilderRef Builder, + LLVMValueRef Inst); /** * Get the dafult floating-point math metadata for a given builder. * * @see llvm::IRBuilder::getDefaultFPMathTag() */ -LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder); +LLVM_C_ABI LLVMMetadataRef +LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder); /** * Set the default floating-point math metadata for the given builder. @@ -4204,101 +4561,115 @@ LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder); * * @see llvm::IRBuilder::setDefaultFPMathTag() */ -void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder, - LLVMMetadataRef FPMathTag); +LLVM_C_ABI void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder, + LLVMMetadataRef FPMathTag); /** * Obtain the context to which this builder is associated. * * @see llvm::IRBuilder::getContext() */ -LLVMContextRef LLVMGetBuilderContext(LLVMBuilderRef Builder); +LLVM_C_ABI LLVMContextRef LLVMGetBuilderContext(LLVMBuilderRef Builder); /** * Deprecated: Passing the NULL location will crash. * Use LLVMGetCurrentDebugLocation2 instead. */ -void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L); +LLVM_C_ABI void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, + LLVMValueRef L); /** * Deprecated: Returning the NULL location will crash. * Use LLVMGetCurrentDebugLocation2 instead. */ -LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder); +LLVM_C_ABI 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); -LLVMValueRef LLVMBuildCallBr(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, - LLVMBasicBlockRef DefaultDest, - LLVMBasicBlockRef *IndirectDests, - unsigned NumIndirectDests, LLVMValueRef *Args, - unsigned NumArgs, LLVMOperandBundleRef *Bundles, - unsigned NumBundles, const char *Name); -LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn, - LLVMValueRef *Args, unsigned NumArgs, - LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, - const char *Name); -LLVMValueRef LLVMBuildInvokeWithOperandBundles( +LLVM_C_ABI LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef); +LLVM_C_ABI LLVMValueRef LLVMBuildRet(LLVMBuilderRef, LLVMValueRef V); +LLVM_C_ABI LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef, + LLVMValueRef *RetVals, + unsigned N); +LLVM_C_ABI LLVMValueRef LLVMBuildBr(LLVMBuilderRef, LLVMBasicBlockRef Dest); +LLVM_C_ABI LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef, LLVMValueRef If, + LLVMBasicBlockRef Then, + LLVMBasicBlockRef Else); +LLVM_C_ABI LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef, LLVMValueRef V, + LLVMBasicBlockRef Else, + unsigned NumCases); +LLVM_C_ABI LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, + unsigned NumDests); +LLVM_C_ABI LLVMValueRef LLVMBuildCallBr( + LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, + LLVMBasicBlockRef DefaultDest, LLVMBasicBlockRef *IndirectDests, + unsigned NumIndirectDests, LLVMValueRef *Args, unsigned NumArgs, + LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef, LLVMTypeRef Ty, + LLVMValueRef Fn, LLVMValueRef *Args, + unsigned NumArgs, + LLVMBasicBlockRef Then, + LLVMBasicBlockRef Catch, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildInvokeWithOperandBundles( LLVMBuilderRef, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name); -LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn); +LLVM_C_ABI LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef PersFn, + unsigned NumClauses, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, + LLVMValueRef CatchPad, + LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, + LLVMValueRef CatchPad, + LLVMBasicBlockRef BB); +LLVM_C_ABI LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, + LLVMValueRef ParentPad, + LLVMValueRef *Args, unsigned NumArgs, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, + LLVMValueRef ParentPad, + LLVMValueRef *Args, + unsigned NumArgs, const char *Name); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, + LLVMBasicBlockRef Dest); /* Add a destination to the indirectbr instruction */ -void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest); +LLVM_C_ABI void LLVMAddDestination(LLVMValueRef IndirectBr, + LLVMBasicBlockRef Dest); /* Get the number of clauses on the landingpad instruction */ -unsigned LLVMGetNumClauses(LLVMValueRef LandingPad); +LLVM_C_ABI unsigned LLVMGetNumClauses(LLVMValueRef LandingPad); /* Get the value of the clause at index Idx on the landingpad instruction */ -LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx); +LLVM_C_ABI LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx); /* Add a catch or filter clause to the landingpad instruction */ -void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal); +LLVM_C_ABI void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal); /* Get the 'cleanup' flag in the landingpad instruction */ -LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad); +LLVM_C_ABI LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad); /* Set the 'cleanup' flag in the landingpad instruction */ -void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val); +LLVM_C_ABI void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val); /* Add a destination to the catchswitch instruction */ -void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest); +LLVM_C_ABI void LLVMAddHandler(LLVMValueRef CatchSwitch, + LLVMBasicBlockRef Dest); /* Get the number of handlers on the catchswitch instruction */ -unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch); +LLVM_C_ABI unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch); /** * Obtain the basic blocks acting as handlers for a catchswitch instruction. @@ -4311,15 +4682,17 @@ unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch); * @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); +LLVM_C_ABI void LLVMGetHandlers(LLVMValueRef CatchSwitch, + LLVMBasicBlockRef *Handlers); /* Funclets */ /* Get the number of funcletpad arguments. */ -LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i); +LLVM_C_ABI LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i); /* Set a funcletpad argument at the given index. */ -void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value); +LLVM_C_ABI void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, + LLVMValueRef value); /** * Get the parent catchswitch instruction of a catchpad instruction. @@ -4328,7 +4701,7 @@ void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value); * * @see llvm::CatchPadInst::getCatchSwitch() */ -LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad); +LLVM_C_ABI LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad); /** * Set the parent catchswitch instruction of a catchpad instruction. @@ -4337,91 +4710,95 @@ LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad); * * @see llvm::CatchPadInst::setCatchSwitch() */ -void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch); +LLVM_C_ABI 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); -LLVM_ATTRIBUTE_C_DEPRECATED(LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, - LLVMValueRef V, - const char *Name), - "Use LLVMBuildNeg + LLVMSetNUW instead."); -LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, const char *Name); -LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildAdd(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSub(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFSub(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildMul(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFMul(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildURem(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSRem(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFRem(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildShl(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildLShr(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildAShr(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildAnd(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildOr(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildXor(LLVMBuilderRef, LLVMValueRef LHS, + LLVMValueRef RHS, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNeg(LLVMBuilderRef, LLVMValueRef V, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, + const char *Name); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, + const char *Name), + "Use LLVMBuildNeg + LLVMSetNUW instead."); +LLVM_C_ABI LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef, LLVMValueRef V, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildNot(LLVMBuilderRef, LLVMValueRef V, + const char *Name); -LLVMBool LLVMGetNUW(LLVMValueRef ArithInst); -void LLVMSetNUW(LLVMValueRef ArithInst, LLVMBool HasNUW); -LLVMBool LLVMGetNSW(LLVMValueRef ArithInst); -void LLVMSetNSW(LLVMValueRef ArithInst, LLVMBool HasNSW); -LLVMBool LLVMGetExact(LLVMValueRef DivOrShrInst); -void LLVMSetExact(LLVMValueRef DivOrShrInst, LLVMBool IsExact); +LLVM_C_ABI LLVMBool LLVMGetNUW(LLVMValueRef ArithInst); +LLVM_C_ABI void LLVMSetNUW(LLVMValueRef ArithInst, LLVMBool HasNUW); +LLVM_C_ABI LLVMBool LLVMGetNSW(LLVMValueRef ArithInst); +LLVM_C_ABI void LLVMSetNSW(LLVMValueRef ArithInst, LLVMBool HasNSW); +LLVM_C_ABI LLVMBool LLVMGetExact(LLVMValueRef DivOrShrInst); +LLVM_C_ABI void LLVMSetExact(LLVMValueRef DivOrShrInst, LLVMBool IsExact); /** * Gets if the instruction has the non-negative flag set. * Only valid for zext instructions. */ -LLVMBool LLVMGetNNeg(LLVMValueRef NonNegInst); +LLVM_C_ABI LLVMBool LLVMGetNNeg(LLVMValueRef NonNegInst); /** * Sets the non-negative flag for the instruction. * Only valid for zext instructions. */ -void LLVMSetNNeg(LLVMValueRef NonNegInst, LLVMBool IsNonNeg); +LLVM_C_ABI void LLVMSetNNeg(LLVMValueRef NonNegInst, LLVMBool IsNonNeg); /** * Get the flags for which fast-math-style optimizations are allowed for this @@ -4430,7 +4807,7 @@ void LLVMSetNNeg(LLVMValueRef NonNegInst, LLVMBool IsNonNeg); * Only valid on floating point instructions. * @see LLVMCanValueUseFastMathFlags */ -LLVMFastMathFlags LLVMGetFastMathFlags(LLVMValueRef FPMathInst); +LLVM_C_ABI LLVMFastMathFlags LLVMGetFastMathFlags(LLVMValueRef FPMathInst); /** * Sets the flags for which fast-math-style optimizations are allowed for this @@ -4439,7 +4816,8 @@ LLVMFastMathFlags LLVMGetFastMathFlags(LLVMValueRef FPMathInst); * Only valid on floating point instructions. * @see LLVMCanValueUseFastMathFlags */ -void LLVMSetFastMathFlags(LLVMValueRef FPMathInst, LLVMFastMathFlags FMF); +LLVM_C_ABI void LLVMSetFastMathFlags(LLVMValueRef FPMathInst, + LLVMFastMathFlags FMF); /** * Check if a given value can potentially have fast math flags. @@ -4448,23 +4826,25 @@ void LLVMSetFastMathFlags(LLVMValueRef FPMathInst, LLVMFastMathFlags FMF); * phi, and call instructions whose type is a floating point type, or a vector * or array thereof. See https://llvm.org/docs/LangRef.html#fast-math-flags */ -LLVMBool LLVMCanValueUseFastMathFlags(LLVMValueRef Inst); +LLVM_C_ABI LLVMBool LLVMCanValueUseFastMathFlags(LLVMValueRef Inst); /** * Gets whether the instruction has the disjoint flag set. * Only valid for or instructions. */ -LLVMBool LLVMGetIsDisjoint(LLVMValueRef Inst); +LLVM_C_ABI LLVMBool LLVMGetIsDisjoint(LLVMValueRef Inst); /** * Sets the disjoint flag for the instruction. * Only valid for or instructions. */ -void LLVMSetIsDisjoint(LLVMValueRef Inst, LLVMBool IsDisjoint); +LLVM_C_ABI void LLVMSetIsDisjoint(LLVMValueRef Inst, LLVMBool IsDisjoint); /* Memory */ -LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); -LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, - LLVMValueRef Val, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef, LLVMTypeRef Ty, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, + LLVMValueRef Val, + const char *Name); /** * Creates and inserts a memset to the specified pointer and the @@ -4472,202 +4852,225 @@ LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef, LLVMTypeRef Ty, * * @see llvm::IRRBuilder::CreateMemSet() */ -LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr, - LLVMValueRef Val, LLVMValueRef Len, - unsigned Align); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); -LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty, - LLVMValueRef PointerVal, const char *Name); -LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr); -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); +LLVM_C_ABI LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef, LLVMTypeRef Ty, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef, LLVMTypeRef Ty, + LLVMValueRef Val, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFree(LLVMBuilderRef, LLVMValueRef PointerVal); +LLVM_C_ABI LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty, + LLVMValueRef PointerVal, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, + LLVMValueRef Ptr); +LLVM_C_ABI LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef Pointer, + LLVMValueRef *Indices, + unsigned NumIndices, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef Pointer, + LLVMValueRef *Indices, + unsigned NumIndices, + const char *Name); /** * Creates a GetElementPtr instruction. Similar to LLVMBuildGEP2, but allows * specifying the no-wrap flags. * * @see llvm::IRBuilder::CreateGEP() */ -LLVMValueRef LLVMBuildGEPWithNoWrapFlags(LLVMBuilderRef B, LLVMTypeRef Ty, - LLVMValueRef Pointer, - LLVMValueRef *Indices, - unsigned NumIndices, const char *Name, - LLVMGEPNoWrapFlags NoWrapFlags); -LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, - LLVMValueRef Pointer, unsigned Idx, - const char *Name); -LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, - const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildGEPWithNoWrapFlags( + LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, + LLVMValueRef *Indices, unsigned NumIndices, const char *Name, + LLVMGEPNoWrapFlags NoWrapFlags); +LLVM_C_ABI LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, + LLVMValueRef Pointer, unsigned Idx, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, + const char *Name); /** * Deprecated: Use LLVMBuildGlobalString instead, which has identical behavior. */ -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); +LLVM_C_ABI LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, + const char *Str, + const char *Name); +LLVM_C_ABI LLVMBool LLVMGetVolatile(LLVMValueRef Inst); +LLVM_C_ABI void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, + LLVMBool IsVolatile); +LLVM_C_ABI LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst); +LLVM_C_ABI void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak); +LLVM_C_ABI LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst); +LLVM_C_ABI void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, + LLVMAtomicOrdering Ordering); +LLVM_C_ABI LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildZExt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSExt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef, + LLVMValueRef Val, + LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, + LLVMValueRef Val, LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef, LLVMValueRef Val, + LLVMTypeRef DestTy, LLVMBool IsSigned, + const char *Name); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef, + LLVMValueRef Val, /*Signed cast!*/ + LLVMTypeRef DestTy, const char *Name); -LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned, - LLVMTypeRef DestTy, LLVMBool DestIsSigned); +LLVM_C_ABI LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned, + LLVMTypeRef DestTy, + LLVMBool DestIsSigned); /* 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); +LLVM_C_ABI LLVMValueRef LLVMBuildICmp(LLVMBuilderRef, LLVMIntPredicate Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef, LLVMRealPredicate Op, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); /* Miscellaneous instructions */ -LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); -LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn, - LLVMValueRef *Args, unsigned NumArgs, - const char *Name); -LLVMValueRef -LLVMBuildCallWithOperandBundles(LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn, - LLVMValueRef *Args, unsigned NumArgs, - LLVMOperandBundleRef *Bundles, - unsigned NumBundles, 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 LLVMBuildPtrDiff2(LLVMBuilderRef, LLVMTypeRef ElemTy, - LLVMValueRef LHS, LLVMValueRef RHS, - const char *Name); -LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering ordering, - LLVMBool singleThread, const char *Name); -LLVMValueRef LLVMBuildFenceSyncScope(LLVMBuilderRef B, - LLVMAtomicOrdering ordering, unsigned SSID, +LLVM_C_ABI LLVMValueRef LLVMBuildPhi(LLVMBuilderRef, LLVMTypeRef Ty, const char *Name); -LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, - LLVMValueRef PTR, LLVMValueRef Val, - LLVMAtomicOrdering ordering, - LLVMBool singleThread); -LLVMValueRef LLVMBuildAtomicRMWSyncScope(LLVMBuilderRef B, - LLVMAtomicRMWBinOp op, - LLVMValueRef PTR, LLVMValueRef Val, - LLVMAtomicOrdering ordering, - unsigned SSID); -LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, - LLVMValueRef Cmp, LLVMValueRef New, - LLVMAtomicOrdering SuccessOrdering, - LLVMAtomicOrdering FailureOrdering, - LLVMBool SingleThread); -LLVMValueRef LLVMBuildAtomicCmpXchgSyncScope(LLVMBuilderRef B, LLVMValueRef Ptr, - LLVMValueRef Cmp, LLVMValueRef New, - LLVMAtomicOrdering SuccessOrdering, - LLVMAtomicOrdering FailureOrdering, - unsigned SSID); +LLVM_C_ABI LLVMValueRef LLVMBuildCall2(LLVMBuilderRef, LLVMTypeRef, + LLVMValueRef Fn, LLVMValueRef *Args, + unsigned NumArgs, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildCallWithOperandBundles( + LLVMBuilderRef, LLVMTypeRef, LLVMValueRef Fn, LLVMValueRef *Args, + unsigned NumArgs, LLVMOperandBundleRef *Bundles, unsigned NumBundles, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildSelect(LLVMBuilderRef, LLVMValueRef If, + LLVMValueRef Then, LLVMValueRef Else, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef, LLVMValueRef List, + LLVMTypeRef Ty, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef, + LLVMValueRef VecVal, + LLVMValueRef Index, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef, + LLVMValueRef VecVal, + LLVMValueRef EltVal, + LLVMValueRef Index, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef, LLVMValueRef V1, + LLVMValueRef V2, + LLVMValueRef Mask, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, + LLVMValueRef AggVal, + unsigned Index, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef, + LLVMValueRef AggVal, + LLVMValueRef EltVal, + unsigned Index, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); + +LLVM_C_ABI LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef, LLVMValueRef Val, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildPtrDiff2(LLVMBuilderRef, LLVMTypeRef ElemTy, + LLVMValueRef LHS, LLVMValueRef RHS, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, + LLVMAtomicOrdering ordering, + LLVMBool singleThread, const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildFenceSyncScope(LLVMBuilderRef B, + LLVMAtomicOrdering ordering, + unsigned SSID, + const char *Name); +LLVM_C_ABI LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, + LLVMAtomicRMWBinOp op, + LLVMValueRef PTR, LLVMValueRef Val, + LLVMAtomicOrdering ordering, + LLVMBool singleThread); +LLVM_C_ABI LLVMValueRef LLVMBuildAtomicRMWSyncScope( + LLVMBuilderRef B, LLVMAtomicRMWBinOp op, LLVMValueRef PTR, LLVMValueRef Val, + LLVMAtomicOrdering ordering, unsigned SSID); +LLVM_C_ABI LLVMValueRef LLVMBuildAtomicCmpXchg( + LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Cmp, LLVMValueRef New, + LLVMAtomicOrdering SuccessOrdering, LLVMAtomicOrdering FailureOrdering, + LLVMBool SingleThread); +LLVM_C_ABI LLVMValueRef LLVMBuildAtomicCmpXchgSyncScope( + LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Cmp, LLVMValueRef New, + LLVMAtomicOrdering SuccessOrdering, LLVMAtomicOrdering FailureOrdering, + unsigned SSID); /** * Get the number of elements in the mask of a ShuffleVector instruction. */ -unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst); +LLVM_C_ABI unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst); /** * \returns a constant that specifies that the result of a \c ShuffleVectorInst * is undefined. */ -int LLVMGetUndefMaskElem(void); +LLVM_C_ABI int LLVMGetUndefMaskElem(void); /** * Get the mask value at position Elt in the mask of a ShuffleVector @@ -4676,33 +5079,37 @@ int LLVMGetUndefMaskElem(void); * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is * poison at that position. */ -int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt); +LLVM_C_ABI int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt); -LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst); -void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread); +LLVM_C_ABI LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst); +LLVM_C_ABI void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, + LLVMBool SingleThread); /** * Returns whether an instruction is an atomic instruction, e.g., atomicrmw, * cmpxchg, fence, or loads and stores with atomic ordering. */ -LLVMBool LLVMIsAtomic(LLVMValueRef Inst); +LLVM_C_ABI LLVMBool LLVMIsAtomic(LLVMValueRef Inst); /** * Returns the synchronization scope ID of an atomic instruction. */ -unsigned LLVMGetAtomicSyncScopeID(LLVMValueRef AtomicInst); +LLVM_C_ABI unsigned LLVMGetAtomicSyncScopeID(LLVMValueRef AtomicInst); /** * Sets the synchronization scope ID of an atomic instruction. */ -void LLVMSetAtomicSyncScopeID(LLVMValueRef AtomicInst, unsigned SSID); +LLVM_C_ABI void LLVMSetAtomicSyncScopeID(LLVMValueRef AtomicInst, + unsigned SSID); -LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst); -void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, - LLVMAtomicOrdering Ordering); -LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst); -void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, - LLVMAtomicOrdering Ordering); +LLVM_C_ABI LLVMAtomicOrdering +LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst); +LLVM_C_ABI void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, + LLVMAtomicOrdering Ordering); +LLVM_C_ABI LLVMAtomicOrdering +LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst); +LLVM_C_ABI void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, + LLVMAtomicOrdering Ordering); /** * @} @@ -4718,13 +5125,13 @@ void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, * Changes the type of M so it can be passed to FunctionPassManagers and the * JIT. They take ModuleProviders for historical reasons. */ -LLVMModuleProviderRef +LLVM_C_ABI LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M); /** * Destroys the module M. */ -void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); +LLVM_C_ABI void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); /** * @} @@ -4736,21 +5143,18 @@ void LLVMDisposeModuleProvider(LLVMModuleProviderRef M); * @{ */ -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); +LLVM_C_ABI LLVMBool LLVMCreateMemoryBufferWithContentsOfFile( + const char *Path, LLVMMemoryBufferRef *OutMemBuf, char **OutMessage); +LLVM_C_ABI LLVMBool LLVMCreateMemoryBufferWithSTDIN( + LLVMMemoryBufferRef *OutMemBuf, char **OutMessage); +LLVM_C_ABI LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange( + const char *InputData, size_t InputDataLength, const char *BufferName, + LLVMBool RequiresNullTerminator); +LLVM_C_ABI LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy( + const char *InputData, size_t InputDataLength, const char *BufferName); +LLVM_C_ABI const char *LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf); +LLVM_C_ABI size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf); +LLVM_C_ABI void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); /** * @} @@ -4766,43 +5170,46 @@ void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf); /** 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMPassManagerRef +LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M); /** Deprecated: Use LLVMCreateFunctionPassManagerForModule instead. */ -LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef MP); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMDisposePassManager(LLVMPassManagerRef PM); /** * @} @@ -4819,15 +5226,15 @@ void LLVMDisposePassManager(LLVMPassManagerRef PM); /** Deprecated: Multi-threading can only be enabled/disabled with the compile time define LLVM_ENABLE_THREADS. This function always returns LLVMIsMultithreaded(). */ -LLVMBool LLVMStartMultithreaded(void); +LLVM_C_ABI LLVMBool LLVMStartMultithreaded(void); /** Deprecated: Multi-threading can only be enabled/disabled with the compile time define LLVM_ENABLE_THREADS. */ -void LLVMStopMultithreaded(void); +LLVM_C_ABI void LLVMStopMultithreaded(void); /** Check whether LLVM is executing in thread-safe mode or not. @see llvm::llvm_is_multithreaded */ -LLVMBool LLVMIsMultithreaded(void); +LLVM_C_ABI LLVMBool LLVMIsMultithreaded(void); /** * @} diff --git a/src/llvm-c/DebugInfo.h b/src/llvm-c/DebugInfo.h index ac7ee5a7c..d3bbc2060 100644 --- a/src/llvm-c/DebugInfo.h +++ b/src/llvm-c/DebugInfo.h @@ -16,8 +16,9 @@ #ifndef LLVM_C_DEBUGINFO_H #define LLVM_C_DEBUGINFO_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -158,6 +159,8 @@ typedef enum { /** * The kind of metadata nodes. */ +// NOTE: New entries should always be appended instead of matching the order +// in Metadata.def. enum { LLVMMDStringMetadataKind, LLVMConstantAsMetadataMetadataKind, @@ -195,9 +198,16 @@ enum { LLVMDIGenericSubrangeMetadataKind, LLVMDIArgListMetadataKind, LLVMDIAssignIDMetadataKind, + LLVMDISubrangeTypeMetadataKind, + LLVMDIFixedPointTypeMetadataKind, }; typedef unsigned LLVMMetadataKind; +/** + * The kind of checksum to emit. + */ +typedef enum { CSK_MD5, CSK_SHA1, CSK_SHA256 } LLVMChecksumKind; + /** * An LLVM DWARF type encoding. */ @@ -219,12 +229,12 @@ typedef enum { /** * The current debug metadata version number. */ -unsigned LLVMDebugMetadataVersion(void); +LLVM_C_ABI unsigned LLVMDebugMetadataVersion(void); /** * The version of debug metadata that's present in the provided \c Module. */ -unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module); +LLVM_C_ABI unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module); /** * Strip debug info in the module if it exists. @@ -232,38 +242,39 @@ unsigned LLVMGetModuleDebugMetadataVersion(LLVMModuleRef Module); * metadata for debugging. We also remove debug locations for instructions. * Return true if module is modified. */ -LLVMBool LLVMStripModuleDebugInfo(LLVMModuleRef Module); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMDIBuilderRef LLVMCreateDIBuilder(LLVMModuleRef M); /** * Deallocates the \c DIBuilder and everything it owns. * @note You must call \c LLVMDIBuilderFinalize before this */ -void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder); +LLVM_C_ABI void LLVMDisposeDIBuilder(LLVMDIBuilderRef Builder); /** * Construct any deferred debug info descriptors. */ -void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder); +LLVM_C_ABI void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder); /** * Finalize a specific subprogram. * No new variables may be added to this subprogram afterwards. */ -void LLVMDIBuilderFinalizeSubprogram(LLVMDIBuilderRef Builder, - LLVMMetadataRef Subprogram); +LLVM_C_ABI void LLVMDIBuilderFinalizeSubprogram(LLVMDIBuilderRef Builder, + LLVMMetadataRef Subprogram); /** * A CompileUnit provides an anchor for all debugging @@ -297,7 +308,7 @@ void LLVMDIBuilderFinalizeSubprogram(LLVMDIBuilderRef Builder, * \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( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang, LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen, LLVMBool isOptimized, const char *Flags, size_t FlagsLen, @@ -314,10 +325,30 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, + const char *Filename, + size_t FilenameLen, + const char *Directory, + size_t DirectoryLen); + +/** + * 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. + * \param ChecksumKind The kind of checksum. eg MD5, SHA256 + * \param Checksum The checksum. + * \param ChecksumLen The length of the checksum. + * \param Souce The embedded source. + * \param SourceLen The length of the source. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateFileWithChecksum( + LLVMDIBuilderRef Builder, const char *Filename, size_t FilenameLen, + const char *Directory, size_t DirectoryLen, LLVMChecksumKind ChecksumKind, + const char *Checksum, size_t ChecksumLen, const char *Source, + size_t SourceLen); /** * Creates a new descriptor for a module with the specified parent scope. @@ -333,12 +364,11 @@ LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, const char *Filename, * \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); +LLVM_C_ABI 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. @@ -349,11 +379,9 @@ LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateNameSpace( + LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope, const char *Name, + size_t NameLen, LLVMBool ExportSymbols); /** * Create a new descriptor for the specified subprogram. @@ -373,12 +401,12 @@ LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder, * used to emit dwarf attributes. * \param IsOptimized True if optimization is ON. */ -LLVMMetadataRef LLVMDIBuilderCreateFunction( +LLVM_C_ABI 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); + LLVMBool IsLocalToUnit, LLVMBool IsDefinition, unsigned ScopeLine, + LLVMDIFlags Flags, LLVMBool IsOptimized); /** * Create a descriptor for a lexical block with the specified parent context. @@ -388,9 +416,9 @@ LLVMMetadataRef LLVMDIBuilderCreateFunction( * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef File, + unsigned Line, unsigned Column); /** * Create a descriptor for a lexical block with a new file attached. @@ -399,11 +427,9 @@ LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock( * \param File Source file. * \param Discriminator DWARF path discriminator value. */ -LLVMMetadataRef -LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder, - LLVMMetadataRef Scope, - LLVMMetadataRef File, - unsigned Discriminator); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateLexicalBlockFile( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef File, + unsigned Discriminator); /** * Create a descriptor for an imported namespace. Suitable for e.g. C++ @@ -413,12 +439,9 @@ LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder, * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromNamespace( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef NS, + LLVMMetadataRef File, unsigned Line); /** * Create a descriptor for an imported module that aliases another @@ -431,7 +454,7 @@ LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder, * \param Elements Renamed elements. * \param NumElements Number of renamed elements. */ -LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromAlias( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromAlias( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef ImportedEntity, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef *Elements, unsigned NumElements); @@ -446,7 +469,7 @@ LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromAlias( * \param Elements Renamed elements. * \param NumElements Number of renamed elements. */ -LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromModule( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromModule( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef M, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef *Elements, unsigned NumElements); @@ -466,7 +489,7 @@ LLVMMetadataRef LLVMDIBuilderCreateImportedModuleFromModule( * \param Elements Renamed elements. * \param NumElements Number of renamed elements. */ -LLVMMetadataRef LLVMDIBuilderCreateImportedDeclaration( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateImportedDeclaration( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, LLVMMetadataRef Decl, LLVMMetadataRef File, unsigned Line, const char *Name, size_t NameLen, LLVMMetadataRef *Elements, unsigned NumElements); @@ -481,10 +504,9 @@ LLVMMetadataRef LLVMDIBuilderCreateImportedDeclaration( * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateDebugLocation( + LLVMContextRef Ctx, unsigned Line, unsigned Column, LLVMMetadataRef Scope, + LLVMMetadataRef InlinedAt); /** * Get the line number of this debug location. @@ -492,7 +514,7 @@ LLVMDIBuilderCreateDebugLocation(LLVMContextRef Ctx, unsigned Line, * * @see DILocation::getLine() */ -unsigned LLVMDILocationGetLine(LLVMMetadataRef Location); +LLVM_C_ABI unsigned LLVMDILocationGetLine(LLVMMetadataRef Location); /** * Get the column number of this debug location. @@ -500,7 +522,7 @@ unsigned LLVMDILocationGetLine(LLVMMetadataRef Location); * * @see DILocation::getColumn() */ -unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location); +LLVM_C_ABI unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location); /** * Get the local scope associated with this debug location. @@ -508,7 +530,7 @@ unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location); * * @see DILocation::getScope() */ -LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location); +LLVM_C_ABI LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location); /** * Get the "inline at" location associated with this debug location. @@ -516,7 +538,7 @@ LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location); * * @see DILocation::getInlinedAt() */ -LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location); +LLVM_C_ABI LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location); /** * Get the metadata of the file associated with a given scope. @@ -524,7 +546,7 @@ LLVMMetadataRef LLVMDILocationGetInlinedAt(LLVMMetadataRef Location); * * @see DIScope::getFile() */ -LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope); +LLVM_C_ABI LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope); /** * Get the directory of a given file. @@ -533,7 +555,8 @@ LLVMMetadataRef LLVMDIScopeGetFile(LLVMMetadataRef Scope); * * @see DIFile::getDirectory() */ -const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len); +LLVM_C_ABI const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, + unsigned *Len); /** * Get the name of a given file. @@ -542,7 +565,8 @@ const char *LLVMDIFileGetDirectory(LLVMMetadataRef File, unsigned *Len); * * @see DIFile::getFilename() */ -const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len); +LLVM_C_ABI const char *LLVMDIFileGetFilename(LLVMMetadataRef File, + unsigned *Len); /** * Get the source of a given file. @@ -551,7 +575,7 @@ const char *LLVMDIFileGetFilename(LLVMMetadataRef File, unsigned *Len); * * @see DIFile::getSource() */ -const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len); +LLVM_C_ABI const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len); /** * Create a type array. @@ -559,9 +583,8 @@ const char *LLVMDIFileGetSource(LLVMMetadataRef File, unsigned *Len); * \param Data The type elements. * \param NumElements Number of type elements. */ -LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder, - LLVMMetadataRef *Data, - size_t NumElements); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray( + LLVMDIBuilderRef Builder, LLVMMetadataRef *Data, size_t NumElements); /** * Create subroutine type. @@ -573,12 +596,10 @@ LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder, * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateSubroutineType( + LLVMDIBuilderRef Builder, LLVMMetadataRef File, + LLVMMetadataRef *ParameterTypes, unsigned NumParameterTypes, + LLVMDIFlags Flags); /** * Create debugging information entry for a macro. @@ -591,12 +612,10 @@ LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder, * @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); +LLVM_C_ABI 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. @@ -607,10 +626,9 @@ LLVMMetadataRef LLVMDIBuilderCreateMacro(LLVMDIBuilderRef Builder, * @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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateTempMacroFile( + LLVMDIBuilderRef Builder, LLVMMetadataRef ParentMacroFile, unsigned Line, + LLVMMetadataRef File); /** * Create debugging information entry for an enumerator. @@ -620,10 +638,22 @@ LLVMDIBuilderCreateTempMacroFile(LLVMDIBuilderRef Builder, * @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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateEnumerator( + LLVMDIBuilderRef Builder, const char *Name, size_t NameLen, int64_t Value, + LLVMBool IsUnsigned); + +/** + * Create debugging information entry for an enumerator of arbitrary precision. + * @param Builder The DIBuilder. + * @param Name Enumerator name. + * @param NameLen Length of enumerator name. + * @param SizeInBits Number of bits of the value. + * @param Words The words that make up the value. + * @param IsUnsigned True if the value is unsigned. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateEnumeratorOfArbitraryPrecision( + LLVMDIBuilderRef Builder, const char *Name, size_t NameLen, + uint64_t SizeInBits, const uint64_t Words[], LLVMBool IsUnsigned); /** * Create debugging information entry for an enumeration. @@ -639,7 +669,7 @@ LLVMMetadataRef LLVMDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder, * \param NumElements Number of enumeration elements. * \param ClassTy Underlying type of a C++11/ObjC fixed enum. */ -LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements, @@ -662,14 +692,13 @@ LLVMMetadataRef LLVMDIBuilderCreateEnumerationType( * \param UniqueId A unique identifier for the union. * \param UniqueIdLen Length of unique identifier. */ -LLVMMetadataRef LLVMDIBuilderCreateUnionType( +LLVM_C_ABI 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. @@ -679,11 +708,81 @@ LLVMMetadataRef LLVMDIBuilderCreateUnionType( * \param Subscripts Subscripts. * \param NumSubscripts Number of subscripts. */ -LLVMMetadataRef -LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size, - uint32_t AlignInBits, LLVMMetadataRef Ty, - LLVMMetadataRef *Subscripts, - unsigned NumSubscripts); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateArrayType( + LLVMDIBuilderRef Builder, uint64_t Size, uint32_t AlignInBits, + LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts); + +/** + * Create debugging information entry for a set. + * \param Builder The DIBuilder. + * \param Scope The scope in which the set is defined. + * \param Name A name that uniquely identifies this set. + * \param NameLen The length of the C string passed to \c Name. + * \param File File where the set is located. + * \param Line Line number of the declaration. + * \param SizeInBits Set size. + * \param AlignInBits Set alignment. + * \param BaseTy The base type of the set. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateSetType( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, + size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, + uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef BaseTy); + +/** + * Create a descriptor for a subrange with dynamic bounds. + * \param Builder The DIBuilder. + * \param Scope The scope in which the subrange is defined. + * \param Name A name that uniquely identifies this subrange. + * \param NameLen The length of the C string passed to \c Name. + * \param LineNo Line number. + * \param File File where the subrange is located. + * \param SizeInBits Member size. + * \param AlignInBits Member alignment. + * \param Flags Flags. + * \param BaseTy The base type of the subrange. eg integer or enumeration + * \param LowerBound Lower bound of the subrange. + * \param UpperBound Upper bound of the subrange. + * \param Stride Stride of the subrange. + * \param Bias Bias of the subrange. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateSubrangeType( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, + size_t NameLen, unsigned LineNo, LLVMMetadataRef File, uint64_t SizeInBits, + uint32_t AlignInBits, LLVMDIFlags Flags, LLVMMetadataRef BaseTy, + LLVMMetadataRef LowerBound, LLVMMetadataRef UpperBound, + LLVMMetadataRef Stride, LLVMMetadataRef Bias); + +/** + * Create debugging information entry for a dynamic array. + * \param Builder The DIBuilder. + * \param Size Array size. + * \param AlignInBits Alignment. + * \param Ty Element type. + * \param Subscripts Subscripts. + * \param NumSubscripts Number of subscripts. + * \param DataLocation DataLocation. (DIVariable, DIExpression or NULL) + * \param Associated Associated. (DIVariable, DIExpression or NULL) + * \param Allocated Allocated. (DIVariable, DIExpression or NULL) + * \param Rank Rank. (DIVariable, DIExpression or NULL) + * \param BitStride BitStride. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateDynamicArrayType( + LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, + size_t NameLen, unsigned LineNo, LLVMMetadataRef File, uint64_t Size, + uint32_t AlignInBits, LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, + unsigned NumSubscripts, LLVMMetadataRef DataLocation, + LLVMMetadataRef Associated, LLVMMetadataRef Allocated, LLVMMetadataRef Rank, + LLVMMetadataRef BitStride); + +/** + * Replace arrays. + * + * @see DIBuilder::replaceArrays() + */ +LLVM_C_ABI void LLVMReplaceArrays(LLVMDIBuilderRef Builder, LLVMMetadataRef *T, + LLVMMetadataRef *Elements, + unsigned NumElements); /** * Create debugging information entry for a vector type. @@ -694,11 +793,9 @@ LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size, * \param Subscripts Subscripts. * \param NumSubscripts Number of subscripts. */ -LLVMMetadataRef -LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size, - uint32_t AlignInBits, LLVMMetadataRef Ty, - LLVMMetadataRef *Subscripts, - unsigned NumSubscripts); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateVectorType( + LLVMDIBuilderRef Builder, uint64_t Size, uint32_t AlignInBits, + LLVMMetadataRef Ty, LLVMMetadataRef *Subscripts, unsigned NumSubscripts); /** * Create a DWARF unspecified type. @@ -706,9 +803,8 @@ LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size, * \param Name The unspecified type's name. * \param NameLen Length of type name. */ -LLVMMetadataRef -LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name, - size_t NameLen); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateUnspecifiedType( + LLVMDIBuilderRef Builder, const char *Name, size_t NameLen); /** * Create debugging information entry for a basic @@ -720,11 +816,9 @@ LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name, * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateBasicType( + LLVMDIBuilderRef Builder, const char *Name, size_t NameLen, + uint64_t SizeInBits, LLVMDWARFTypeEncoding Encoding, LLVMDIFlags Flags); /** * Create debugging information entry for a pointer. @@ -736,10 +830,10 @@ LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name, * \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); +LLVM_C_ABI 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. @@ -759,7 +853,7 @@ LLVMMetadataRef LLVMDIBuilderCreatePointerType( * \param UniqueId A unique identifier for the struct. * \param UniqueIdLen Length of the unique identifier for the struct. */ -LLVMMetadataRef LLVMDIBuilderCreateStructType( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateStructType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags, @@ -781,11 +875,11 @@ LLVMMetadataRef LLVMDIBuilderCreateStructType( * \param Flags Flags to encode member attribute, e.g. private * \param Ty Parent type. */ -LLVMMetadataRef LLVMDIBuilderCreateMemberType( +LLVM_C_ABI 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); + 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 @@ -801,8 +895,7 @@ LLVMMetadataRef LLVMDIBuilderCreateMemberType( * \param ConstantVal Const initializer of the member. * \param AlignInBits Member alignment. */ -LLVMMetadataRef -LLVMDIBuilderCreateStaticMemberType( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateStaticMemberType( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, LLVMMetadataRef File, unsigned LineNumber, LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal, @@ -817,13 +910,10 @@ LLVMDIBuilderCreateStaticMemberType( * \param AlignInBits Alignment. * \param Flags Flags. */ -LLVMMetadataRef -LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, - LLVMMetadataRef PointeeType, - LLVMMetadataRef ClassType, - uint64_t SizeInBits, - uint32_t AlignInBits, - LLVMDIFlags Flags); +LLVM_C_ABI 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. @@ -838,13 +928,11 @@ LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder, * \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); +LLVM_C_ABI 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. @@ -860,14 +948,11 @@ LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder, * \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); +LLVM_C_ABI 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. If \c Implicit @@ -877,9 +962,8 @@ LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder, * \param Implicit Indicates whether this pointer was implicitly generated * (i.e., not spelled out in source). */ -LLVMMetadataRef LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder, - LLVMMetadataRef Type, - LLVMBool Implicit); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateObjectPointerType( + LLVMDIBuilderRef Builder, LLVMMetadataRef Type, LLVMBool Implicit); /** * Create debugging information entry for a qualified @@ -889,9 +973,8 @@ LLVMMetadataRef LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder, * e.g. LLVMDWARFTypeQualifier_volatile_type * \param Type Base Type. */ -LLVMMetadataRef -LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag, - LLVMMetadataRef Type); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateQualifiedType( + LLVMDIBuilderRef Builder, unsigned Tag, LLVMMetadataRef Type); /** * Create debugging information entry for a c++ @@ -900,15 +983,14 @@ LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag, * \param Tag Tag identifying type, * \param Type Base Type. */ -LLVMMetadataRef -LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, unsigned Tag, - LLVMMetadataRef Type); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateReferenceType( + LLVMDIBuilderRef Builder, unsigned Tag, LLVMMetadataRef Type); /** * Create C++11 nullptr type. * \param Builder The DIBuilder. */ -LLVMMetadataRef +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder); /** @@ -920,11 +1002,10 @@ LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder); * \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); +LLVM_C_ABI 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 @@ -936,11 +1017,9 @@ LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type, * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateInheritance( + LLVMDIBuilderRef Builder, LLVMMetadataRef Ty, LLVMMetadataRef BaseTy, + uint64_t BaseOffset, uint32_t VBPtrOffset, LLVMDIFlags Flags); /** * Create a permanent forward-declared type. @@ -958,9 +1037,9 @@ LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder, * \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, +LLVM_C_ABI 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); @@ -981,10 +1060,9 @@ LLVMMetadataRef LLVMDIBuilderCreateForwardDecl( * \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, +LLVM_C_ABI 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); @@ -1003,15 +1081,11 @@ LLVMDIBuilderCreateReplaceableCompositeType( * \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); +LLVM_C_ABI 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. @@ -1035,23 +1109,22 @@ LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder, * \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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateArtificialType( + LLVMDIBuilderRef Builder, LLVMMetadataRef Type); /** * Get the name of this DIType. @@ -1060,7 +1133,7 @@ LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder, * * @see DIType::getName() */ -const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length); +LLVM_C_ABI const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length); /** * Get the size of this DIType in bits. @@ -1068,7 +1141,7 @@ const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length); * * @see DIType::getSizeInBits() */ -uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType); +LLVM_C_ABI uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType); /** * Get the offset of this DIType in bits. @@ -1076,7 +1149,7 @@ uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType); * * @see DIType::getOffsetInBits() */ -uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType); +LLVM_C_ABI uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType); /** * Get the alignment of this DIType in bits. @@ -1084,7 +1157,7 @@ uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType); * * @see DIType::getAlignInBits() */ -uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType); +LLVM_C_ABI uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType); /** * Get the source line where this DIType is declared. @@ -1092,7 +1165,7 @@ uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType); * * @see DIType::getLine() */ -unsigned LLVMDITypeGetLine(LLVMMetadataRef DType); +LLVM_C_ABI unsigned LLVMDITypeGetLine(LLVMMetadataRef DType); /** * Get the flags associated with this DIType. @@ -1100,7 +1173,7 @@ unsigned LLVMDITypeGetLine(LLVMMetadataRef DType); * * @see DIType::getFlags() */ -LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType); +LLVM_C_ABI LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType); /** * Create a descriptor for a value range. @@ -1108,9 +1181,8 @@ LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType); * \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); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange( + LLVMDIBuilderRef Builder, int64_t LowerBound, int64_t Count); /** * Create an array of DI Nodes. @@ -1118,9 +1190,8 @@ LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder, * \param Data The DI Node elements. * \param NumElements Number of DI Node elements. */ -LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder, - LLVMMetadataRef *Data, - size_t NumElements); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderGetOrCreateArray( + LLVMDIBuilderRef Builder, LLVMMetadataRef *Data, size_t NumElements); /** * Create a new descriptor for the specified variable which has a complex @@ -1129,8 +1200,8 @@ LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder, * \param Addr An array of complex address operations. * \param Length Length of the address operation array. */ -LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder, - uint64_t *Addr, size_t Length); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateExpression( + LLVMDIBuilderRef Builder, uint64_t *Addr, size_t Length); /** * Create a new descriptor for the specified variable that does not have an @@ -1138,9 +1209,8 @@ LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder, * \param Builder The DIBuilder. * \param Value The constant value. */ -LLVMMetadataRef -LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder, - uint64_t Value); +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateConstantValueExpression( + LLVMDIBuilderRef Builder, uint64_t Value); /** * Create a new descriptor for the specified variable. @@ -1161,17 +1231,16 @@ LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder, * \param AlignInBits Variable alignment(or 0 if no alignment attr was * specified) */ -LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression( +LLVM_C_ABI 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); - /** * Get the dwarf::Tag of a DINode */ -uint16_t LLVMGetDINodeTag(LLVMMetadataRef MD); +LLVM_C_ABI uint16_t LLVMGetDINodeTag(LLVMMetadataRef MD); /** * Retrieves the \c DIVariable associated with this global variable expression. @@ -1179,7 +1248,8 @@ uint16_t LLVMGetDINodeTag(LLVMMetadataRef MD); * * @see llvm::DIGlobalVariableExpression::getVariable() */ -LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE); +LLVM_C_ABI LLVMMetadataRef +LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE); /** * Retrieves the \c DIExpression associated with this global variable expression. @@ -1187,8 +1257,8 @@ LLVMMetadataRef LLVMDIGlobalVariableExpressionGetVariable(LLVMMetadataRef GVE); * * @see llvm::DIGlobalVariableExpression::getExpression() */ -LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression( - LLVMMetadataRef GVE); +LLVM_C_ABI LLVMMetadataRef +LLVMDIGlobalVariableExpressionGetExpression(LLVMMetadataRef GVE); /** * Get the metadata of the file associated with a given variable. @@ -1196,7 +1266,7 @@ LLVMMetadataRef LLVMDIGlobalVariableExpressionGetExpression( * * @see DIVariable::getFile() */ -LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var); +LLVM_C_ABI LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var); /** * Get the metadata of the scope associated with a given variable. @@ -1204,7 +1274,7 @@ LLVMMetadataRef LLVMDIVariableGetFile(LLVMMetadataRef Var); * * @see DIVariable::getScope() */ -LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var); +LLVM_C_ABI LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var); /** * Get the source line where this \c DIVariable is declared. @@ -1212,7 +1282,7 @@ LLVMMetadataRef LLVMDIVariableGetScope(LLVMMetadataRef Var); * * @see DIVariable::getLine() */ -unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var); +LLVM_C_ABI unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var); /** * Create a new temporary \c MDNode. Suitable for use in constructing cyclic @@ -1222,8 +1292,9 @@ unsigned LLVMDIVariableGetLine(LLVMMetadataRef Var); * \param Data The metadata elements. * \param NumElements Number of metadata elements. */ -LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data, - size_t NumElements); +LLVM_C_ABI LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, + LLVMMetadataRef *Data, + size_t NumElements); /** * Deallocate a temporary node. @@ -1232,15 +1303,16 @@ LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data, * references will be reset. * \param TempNode The temporary metadata node. */ -void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode); +LLVM_C_ABI 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); +LLVM_C_ABI void +LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata, + LLVMMetadataRef Replacement); /** * Create a new descriptor for the specified global variable that is temporary @@ -1259,7 +1331,7 @@ void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata, * \param AlignInBits Variable alignment(or 0 if no alignment attr was * specified) */ -LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl( +LLVM_C_ABI 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, @@ -1280,7 +1352,7 @@ LLVMMetadataRef LLVMDIBuilderCreateTempGlobalVariableFwdDecl( * \param DebugLoc Debug info location. * \param Instr Instruction acting as a location for the new record. */ -LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordBefore( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordBefore( LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr); @@ -1301,7 +1373,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordBefore( * \param DebugLoc Debug info location. * \param Block Basic block acting as a location for the new record. */ -LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordAtEnd( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordAtEnd( LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block); @@ -1320,7 +1392,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertDeclareRecordAtEnd( * \param DebugLoc Debug info location. * \param Instr Instruction acting as a location for the new record. */ -LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordBefore( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordBefore( LLVMDIBuilderRef Builder, LLVMValueRef Val, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr); @@ -1341,7 +1413,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordBefore( * \param DebugLoc Debug info location. * \param Block Basic block acting as a location for the new record. */ -LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordAtEnd( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordAtEnd( LLVMDIBuilderRef Builder, LLVMValueRef Val, LLVMMetadataRef VarInfo, LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block); @@ -1358,7 +1430,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertDbgValueRecordAtEnd( * \param Flags Flags. * \param AlignInBits Variable alignment. */ -LLVMMetadataRef LLVMDIBuilderCreateAutoVariable( +LLVM_C_ABI 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); @@ -1376,7 +1448,7 @@ LLVMMetadataRef LLVMDIBuilderCreateAutoVariable( * \param AlwaysPreserve If true, this descriptor will survive optimizations. * \param Flags Flags. */ -LLVMMetadataRef LLVMDIBuilderCreateParameterVariable( +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateParameterVariable( LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name, size_t NameLen, unsigned ArgNo, LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags); @@ -1386,14 +1458,14 @@ LLVMMetadataRef LLVMDIBuilderCreateParameterVariable( * * @see llvm::Function::getSubprogram() */ -LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func); +LLVM_C_ABI LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func); /** * Set the subprogram attached to a function. * * @see llvm::Function::setSubprogram() */ -void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP); +LLVM_C_ABI void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP); /** * Get the line associated with a given subprogram. @@ -1401,14 +1473,24 @@ void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP); * * @see DISubprogram::getLine() */ -unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram); +LLVM_C_ABI unsigned LLVMDISubprogramGetLine(LLVMMetadataRef Subprogram); + +/** + * Replace the subprogram subroutine type. + * \param Subprogram The subprogram object. + * \param SubroutineType The new subroutine type. + * + * @see DISubprogram::replaceType() + */ +LLVM_C_ABI void LLVMDISubprogramReplaceType(LLVMMetadataRef Subprogram, + LLVMMetadataRef SubroutineType); /** * Get the debug location for the given instruction. * * @see llvm::Instruction::getDebugLoc() */ -LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst); +LLVM_C_ABI LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst); /** * Set the debug location for the given instruction. @@ -1417,7 +1499,8 @@ LLVMMetadataRef LLVMInstructionGetDebugLoc(LLVMValueRef Inst); * * @see llvm::Instruction::setDebugLoc() */ -void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc); +LLVM_C_ABI void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, + LLVMMetadataRef Loc); /** * Create a new descriptor for a label @@ -1432,10 +1515,10 @@ void LLVMInstructionSetDebugLoc(LLVMValueRef Inst, LLVMMetadataRef Loc); * * @see llvm::DIBuilder::createLabel() */ -LLVMMetadataRef LLVMDIBuilderCreateLabel( - LLVMDIBuilderRef Builder, - LLVMMetadataRef Context, const char *Name, size_t NameLen, - LLVMMetadataRef File, unsigned LineNo, LLVMBool AlwaysPreserve); +LLVM_C_ABI LLVMMetadataRef +LLVMDIBuilderCreateLabel(LLVMDIBuilderRef Builder, LLVMMetadataRef Context, + const char *Name, size_t NameLen, LLVMMetadataRef File, + unsigned LineNo, LLVMBool AlwaysPreserve); /** * Insert a new llvm.dbg.label intrinsic call @@ -1447,7 +1530,7 @@ LLVMMetadataRef LLVMDIBuilderCreateLabel( * * @see llvm::DIBuilder::insertLabel() */ -LLVMDbgRecordRef LLVMDIBuilderInsertLabelBefore( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertLabelBefore( LLVMDIBuilderRef Builder, LLVMMetadataRef LabelInfo, LLVMMetadataRef Location, LLVMValueRef InsertBefore); @@ -1461,7 +1544,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertLabelBefore( * * @see llvm::DIBuilder::insertLabel() */ -LLVMDbgRecordRef LLVMDIBuilderInsertLabelAtEnd( +LLVM_C_ABI LLVMDbgRecordRef LLVMDIBuilderInsertLabelAtEnd( LLVMDIBuilderRef Builder, LLVMMetadataRef LabelInfo, LLVMMetadataRef Location, LLVMBasicBlockRef InsertAtEnd); @@ -1470,7 +1553,7 @@ LLVMDbgRecordRef LLVMDIBuilderInsertLabelAtEnd( * * @see llvm::Metadata::getMetadataID() */ -LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata); +LLVM_C_ABI LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata); /** * @} diff --git a/src/llvm-c/Disassembler.h b/src/llvm-c/Disassembler.h index 4bc6b04dd..53ff55b48 100644 --- a/src/llvm-c/Disassembler.h +++ b/src/llvm-c/Disassembler.h @@ -15,8 +15,9 @@ #ifndef LLVM_C_DISASSEMBLER_H #define LLVM_C_DISASSEMBLER_H -#include "llvm-c/DisassemblerTypes.h" -#include "llvm-c/ExternC.h" +#include "DisassemblerTypes.h" +#include "ExternC.h" +#include "Visibility.h" /** * @defgroup LLVMCDisassembler Disassembler @@ -35,9 +36,9 @@ LLVM_C_EXTERN_C_BEGIN * 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); +LLVM_C_ABI LLVMDisasmContextRef LLVMCreateDisasm( + const char *TripleName, void *DisInfo, int TagType, + LLVMOpInfoCallback GetOpInfo, LLVMSymbolLookupCallback SymbolLookUp); /** * Create a disassembler for the TripleName and a specific CPU. Symbolic @@ -47,10 +48,9 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo, * 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); +LLVM_C_ABI 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 @@ -59,17 +59,16 @@ LLVMDisasmContextRef LLVMCreateDisasmCPU(const char *Triple, const char *CPU, * 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); +LLVM_C_ABI 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); +LLVM_C_ABI int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options); /* The option to produce marked up assembly. */ #define LLVMDisassembler_Option_UseMarkup 1 @@ -87,7 +86,7 @@ int LLVMSetDisasmOptions(LLVMDisasmContextRef DC, uint64_t Options); /** * Dispose of a disassembler context. */ -void LLVMDisasmDispose(LLVMDisasmContextRef DC); +LLVM_C_ABI void LLVMDisasmDispose(LLVMDisasmContextRef DC); /** * Disassemble a single instruction using the disassembler context specified in @@ -99,9 +98,9 @@ void LLVMDisasmDispose(LLVMDisasmContextRef DC); * 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_ABI size_t LLVMDisasmInstruction(LLVMDisasmContextRef DC, uint8_t *Bytes, + uint64_t BytesSize, uint64_t PC, + char *OutString, size_t OutStringSize); /** * @} diff --git a/src/llvm-c/DisassemblerTypes.h b/src/llvm-c/DisassemblerTypes.h index 6999a350e..6b7ad6104 100644 --- a/src/llvm-c/DisassemblerTypes.h +++ b/src/llvm-c/DisassemblerTypes.h @@ -10,7 +10,7 @@ #ifndef LLVM_C_DISASSEMBLERTYPES_H #define LLVM_C_DISASSEMBLERTYPES_H -#include "llvm-c/DataTypes.h" +#include "DataTypes.h" #ifdef __cplusplus #include #else diff --git a/src/llvm-c/Error.h b/src/llvm-c/Error.h index 874bbcfe8..8451aba64 100644 --- a/src/llvm-c/Error.h +++ b/src/llvm-c/Error.h @@ -14,7 +14,8 @@ #ifndef LLVM_C_ERROR_H #define LLVM_C_ERROR_H -#include "llvm-c/ExternC.h" +#include "ExternC.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -41,7 +42,7 @@ 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); +LLVM_C_ABI LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err); /** * Dispose of the given error without handling it. This operation consumes the @@ -49,7 +50,7 @@ LLVMErrorTypeId LLVMGetErrorTypeId(LLVMErrorRef Err); * 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); +LLVM_C_ABI void LLVMConsumeError(LLVMErrorRef Err); /** * Report a fatal error if Err is a failure value. @@ -57,7 +58,7 @@ void LLVMConsumeError(LLVMErrorRef Err); * This function can be used to wrap calls to fallible functions ONLY when it is * known that the Error will always be a success value. */ -void LLVMCantFail(LLVMErrorRef Err); +LLVM_C_ABI void LLVMCantFail(LLVMErrorRef Err); /** * Returns the given string's error message. This operation consumes the error, @@ -65,22 +66,22 @@ void LLVMCantFail(LLVMErrorRef Err); * The caller is responsible for disposing of the string by calling * LLVMDisposeErrorMessage. */ -char *LLVMGetErrorMessage(LLVMErrorRef Err); +LLVM_C_ABI char *LLVMGetErrorMessage(LLVMErrorRef Err); /** * Dispose of the given error message. */ -void LLVMDisposeErrorMessage(char *ErrMsg); +LLVM_C_ABI void LLVMDisposeErrorMessage(char *ErrMsg); /** * Returns the type id for llvm StringError. */ -LLVMErrorTypeId LLVMGetStringErrorTypeId(void); +LLVM_C_ABI LLVMErrorTypeId LLVMGetStringErrorTypeId(void); /** * Create a StringError. */ -LLVMErrorRef LLVMCreateStringError(const char *ErrMsg); +LLVM_C_ABI LLVMErrorRef LLVMCreateStringError(const char *ErrMsg); /** * @} diff --git a/src/llvm-c/ErrorHandling.h b/src/llvm-c/ErrorHandling.h index d9b9f2275..cf60b4956 100644 --- a/src/llvm-c/ErrorHandling.h +++ b/src/llvm-c/ErrorHandling.h @@ -14,7 +14,8 @@ #ifndef LLVM_C_ERRORHANDLING_H #define LLVM_C_ERRORHANDLING_H -#include "llvm-c/ExternC.h" +#include "ExternC.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -33,20 +34,20 @@ typedef void (*LLVMFatalErrorHandler)(const char *Reason); * function allows you to install a callback that will be invoked prior to the * call to exit(1). */ -void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler); +LLVM_C_ABI void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler); /** * Reset the fatal error handler. This resets LLVM's fatal error handling * behavior to the default. */ -void LLVMResetFatalErrorHandler(void); +LLVM_C_ABI 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_ABI void LLVMEnablePrettyStackTrace(void); /** * @} diff --git a/src/llvm-c/ExecutionEngine.h b/src/llvm-c/ExecutionEngine.h index c5fc9bdb4..f02c00dae 100644 --- a/src/llvm-c/ExecutionEngine.h +++ b/src/llvm-c/ExecutionEngine.h @@ -19,10 +19,11 @@ #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" +#include "ExternC.h" +#include "Target.h" +#include "TargetMachine.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -33,8 +34,16 @@ LLVM_C_EXTERN_C_BEGIN * @{ */ -void LLVMLinkInMCJIT(void); -void LLVMLinkInInterpreter(void); +/** + * Empty function used to force the linker to link MCJIT. + * Has no effect when called on a pre-built library (dylib interface). + */ +LLVM_C_ABI void LLVMLinkInMCJIT(void); +/** + * Empty function used to force the linker to link the LLVM interpreter. + * Has no effect when called on a pre-built library (dylib interface). + */ +LLVM_C_ABI void LLVMLinkInInterpreter(void); typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef; typedef struct LLVMOpaqueExecutionEngine *LLVMExecutionEngineRef; @@ -50,42 +59,42 @@ struct LLVMMCJITCompilerOptions { /*===-- Operations on generic values --------------------------------------===*/ -LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, - unsigned long long N, - LLVMBool IsSigned); +LLVM_C_ABI LLVMGenericValueRef LLVMCreateGenericValueOfInt(LLVMTypeRef Ty, + unsigned long long N, + LLVMBool IsSigned); -LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); +LLVM_C_ABI LLVMGenericValueRef LLVMCreateGenericValueOfPointer(void *P); -LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, double N); +LLVM_C_ABI LLVMGenericValueRef LLVMCreateGenericValueOfFloat(LLVMTypeRef Ty, + double N); -unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); +LLVM_C_ABI unsigned LLVMGenericValueIntWidth(LLVMGenericValueRef GenValRef); -unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, - LLVMBool IsSigned); +LLVM_C_ABI unsigned long long LLVMGenericValueToInt(LLVMGenericValueRef GenVal, + LLVMBool IsSigned); -void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); +LLVM_C_ABI void *LLVMGenericValueToPointer(LLVMGenericValueRef GenVal); -double LLVMGenericValueToFloat(LLVMTypeRef TyRef, LLVMGenericValueRef GenVal); +LLVM_C_ABI double LLVMGenericValueToFloat(LLVMTypeRef TyRef, + LLVMGenericValueRef GenVal); -void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); +LLVM_C_ABI void LLVMDisposeGenericValue(LLVMGenericValueRef GenVal); /*===-- Operations on execution engines -----------------------------------===*/ -LLVMBool LLVMCreateExecutionEngineForModule(LLVMExecutionEngineRef *OutEE, - LLVMModuleRef M, - char **OutError); +LLVM_C_ABI LLVMBool LLVMCreateExecutionEngineForModule( + LLVMExecutionEngineRef *OutEE, LLVMModuleRef M, char **OutError); -LLVMBool LLVMCreateInterpreterForModule(LLVMExecutionEngineRef *OutInterp, - LLVMModuleRef M, - char **OutError); +LLVM_C_ABI LLVMBool LLVMCreateInterpreterForModule( + LLVMExecutionEngineRef *OutInterp, LLVMModuleRef M, char **OutError); -LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, - LLVMModuleRef M, - unsigned OptLevel, - char **OutError); +LLVM_C_ABI LLVMBool +LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M, + unsigned OptLevel, char **OutError); -void LLVMInitializeMCJITCompilerOptions( - struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions); +LLVM_C_ABI void +LLVMInitializeMCJITCompilerOptions(struct LLVMMCJITCompilerOptions *Options, + size_t SizeOfOptions); /** * Create an MCJIT execution engine for a module, with the given options. It is @@ -104,55 +113,60 @@ void LLVMInitializeMCJITCompilerOptions( * * LLVMCreateMCJITCompilerForModule(&jit, mod, 0, 0, &error); */ -LLVMBool LLVMCreateMCJITCompilerForModule( - LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M, - struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions, - char **OutError); +LLVM_C_ABI LLVMBool LLVMCreateMCJITCompilerForModule( + LLVMExecutionEngineRef *OutJIT, LLVMModuleRef M, + struct LLVMMCJITCompilerOptions *Options, size_t SizeOfOptions, + char **OutError); -void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); +LLVM_C_ABI void LLVMDisposeExecutionEngine(LLVMExecutionEngineRef EE); -void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); +LLVM_C_ABI void LLVMRunStaticConstructors(LLVMExecutionEngineRef EE); -void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); +LLVM_C_ABI void LLVMRunStaticDestructors(LLVMExecutionEngineRef EE); -int LLVMRunFunctionAsMain(LLVMExecutionEngineRef EE, LLVMValueRef F, - unsigned ArgC, const char * const *ArgV, - const char * const *EnvP); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMGenericValueRef LLVMRunFunction(LLVMExecutionEngineRef EE, + LLVMValueRef F, unsigned NumArgs, + LLVMGenericValueRef *Args); -void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, LLVMValueRef F); +LLVM_C_ABI void LLVMFreeMachineCodeForFunction(LLVMExecutionEngineRef EE, + LLVMValueRef F); -void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); +LLVM_C_ABI void LLVMAddModule(LLVMExecutionEngineRef EE, LLVMModuleRef M); -LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, - LLVMModuleRef *OutMod, char **OutError); +LLVM_C_ABI LLVMBool LLVMRemoveModule(LLVMExecutionEngineRef EE, LLVMModuleRef M, + LLVMModuleRef *OutMod, char **OutError); -LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name, - LLVMValueRef *OutFn); +LLVM_C_ABI LLVMBool LLVMFindFunction(LLVMExecutionEngineRef EE, + const char *Name, LLVMValueRef *OutFn); -void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, - LLVMValueRef Fn); +LLVM_C_ABI void *LLVMRecompileAndRelinkFunction(LLVMExecutionEngineRef EE, + LLVMValueRef Fn); -LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); -LLVMTargetMachineRef +LLVM_C_ABI LLVMTargetDataRef +LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE); +LLVM_C_ABI LLVMTargetMachineRef LLVMGetExecutionEngineTargetMachine(LLVMExecutionEngineRef EE); -void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global, - void* Addr); +LLVM_C_ABI void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, + LLVMValueRef Global, void *Addr); -void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global); +LLVM_C_ABI void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, + LLVMValueRef Global); -uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name); +LLVM_C_ABI uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, + const char *Name); -uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBool LLVMExecutionEngineGetErrMsg(LLVMExecutionEngineRef EE, + char **OutError); /*===-- Operations on memory managers -------------------------------------===*/ @@ -177,21 +191,21 @@ typedef void (*LLVMMemoryManagerDestroyCallback)(void *Opaque); * @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); +LLVM_C_ABI LLVMMCJITMemoryManagerRef LLVMCreateSimpleMCJITMemoryManager( + void *Opaque, + LLVMMemoryManagerAllocateCodeSectionCallback AllocateCodeSection, + LLVMMemoryManagerAllocateDataSectionCallback AllocateDataSection, + LLVMMemoryManagerFinalizeMemoryCallback FinalizeMemory, + LLVMMemoryManagerDestroyCallback Destroy); -void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM); +LLVM_C_ABI void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM); /*===-- JIT Event Listener functions -------------------------------------===*/ -LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void); -LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void); -LLVMJITEventListenerRef LLVMCreateOProfileJITEventListener(void); -LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void); +LLVM_C_ABI LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void); +LLVM_C_ABI LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void); +LLVM_C_ABI LLVMJITEventListenerRef LLVMCreateOProfileJITEventListener(void); +LLVM_C_ABI LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void); /** * @} diff --git a/src/llvm-c/IRReader.h b/src/llvm-c/IRReader.h index 905b84fa5..bcd0fc08b 100644 --- a/src/llvm-c/IRReader.h +++ b/src/llvm-c/IRReader.h @@ -14,8 +14,9 @@ #ifndef LLVM_C_IRREADER_H #define LLVM_C_IRREADER_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -32,12 +33,30 @@ LLVM_C_EXTERN_C_BEGIN * Optionally returns a human-readable description of any errors that * occurred during parsing IR. OutMessage must be disposed with * LLVMDisposeMessage. + * The memory buffer is consumed by this function. + * This is deprecated. Use LLVMParseIRInContext2 instead. * * @see llvm::ParseIR() */ -LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, - LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, - char **OutMessage); +LLVM_C_ABI LLVMBool LLVMParseIRInContext(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM, + char **OutMessage); +/** + * 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. + * The memory buffer is not consumed by this function. It is the responsibility + * of the caller to free it with \c LLVMDisposeMemoryBuffer. + * + * @see llvm::ParseIR() + */ +LLVM_C_ABI LLVMBool LLVMParseIRInContext2(LLVMContextRef ContextRef, + LLVMMemoryBufferRef MemBuf, + LLVMModuleRef *OutM, + char **OutMessage); /** * @} diff --git a/src/llvm-c/LLJIT.h b/src/llvm-c/LLJIT.h index a58c3b8bb..9119f9b2e 100644 --- a/src/llvm-c/LLJIT.h +++ b/src/llvm-c/LLJIT.h @@ -24,10 +24,11 @@ #ifndef LLVM_C_LLJIT_H #define LLVM_C_LLJIT_H -#include "llvm-c/Error.h" -#include "llvm-c/Orc.h" -#include "llvm-c/TargetMachine.h" -#include "llvm-c/Types.h" +#include "Error.h" +#include "Orc.h" +#include "TargetMachine.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -71,14 +72,14 @@ typedef struct LLVMOrcOpaqueLLJIT *LLVMOrcLLJITRef; * The client owns the resulting LLJITBuilder and should dispose of it using * LLVMOrcDisposeLLJITBuilder once they are done with it. */ -LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void); +LLVM_C_ABI LLVMOrcLLJITBuilderRef LLVMOrcCreateLLJITBuilder(void); /** * Dispose of an LLVMOrcLLJITBuilderRef. This should only be called if ownership * has not been passed to LLVMOrcCreateLLJIT (e.g. because some error prevented * that function from being called). */ -void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder); +LLVM_C_ABI void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder); /** * Set the JITTargetMachineBuilder to be used when constructing the LLJIT @@ -89,13 +90,13 @@ void LLVMOrcDisposeLLJITBuilder(LLVMOrcLLJITBuilderRef Builder); * This function takes ownership of the JTMB argument: clients should not * dispose of the JITTargetMachineBuilder after calling this function. */ -void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder( +LLVM_C_ABI void LLVMOrcLLJITBuilderSetJITTargetMachineBuilder( LLVMOrcLLJITBuilderRef Builder, LLVMOrcJITTargetMachineBuilderRef JTMB); /** * Set an ObjectLinkingLayer creator function for this LLJIT instance. */ -void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator( +LLVM_C_ABI void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator( LLVMOrcLLJITBuilderRef Builder, LLVMOrcLLJITBuilderObjectLinkingLayerCreatorFunction F, void *Ctx); @@ -113,13 +114,13 @@ void LLVMOrcLLJITBuilderSetObjectLinkingLayerCreator( * LLJIT instance will free all memory managed by the JIT, including JIT'd code * and not-yet compiled modules. */ -LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, - LLVMOrcLLJITBuilderRef Builder); +LLVM_C_ABI LLVMErrorRef LLVMOrcCreateLLJIT(LLVMOrcLLJITRef *Result, + LLVMOrcLLJITBuilderRef Builder); /** * Dispose of an LLJIT instance. */ -LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J); /** * Get a reference to the ExecutionSession for this LLJIT instance. @@ -127,7 +128,8 @@ LLVMErrorRef LLVMOrcDisposeLLJIT(LLVMOrcLLJITRef J); * The ExecutionSession is owned by the LLJIT instance. The client is not * responsible for managing its memory. */ -LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMOrcExecutionSessionRef +LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J); /** * Return a reference to the Main JITDylib. @@ -135,18 +137,18 @@ LLVMOrcExecutionSessionRef LLVMOrcLLJITGetExecutionSession(LLVMOrcLLJITRef J); * The JITDylib is owned by the LLJIT instance. The client is not responsible * for managing its memory. */ -LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMOrcJITDylibRef LLVMOrcLLJITGetMainJITDylib(LLVMOrcLLJITRef J); /** * Return the target triple for this LLJIT instance. This string is owned by * the LLJIT instance and should not be freed by the client. */ -const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J); +LLVM_C_ABI const char *LLVMOrcLLJITGetTripleString(LLVMOrcLLJITRef J); /** * Returns the global prefix character according to the LLJIT's DataLayout. */ -char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J); +LLVM_C_ABI char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J); /** * Mangles the given string according to the LLJIT instance's DataLayout, then @@ -155,7 +157,7 @@ char LLVMOrcLLJITGetGlobalPrefix(LLVMOrcLLJITRef J); * decrement the ref-count on the pool entry once they are finished with this * value. */ -LLVMOrcSymbolStringPoolEntryRef +LLVM_C_ABI LLVMOrcSymbolStringPoolEntryRef LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName); /** @@ -167,8 +169,8 @@ LLVMOrcLLJITMangleAndIntern(LLVMOrcLLJITRef J, const char *UnmangledName); * Resources associated with the given object will be tracked by the given * JITDylib's default resource tracker. */ -LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, - LLVMMemoryBufferRef ObjBuffer); +LLVM_C_ABI LLVMErrorRef LLVMOrcLLJITAddObjectFile( + LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMMemoryBufferRef ObjBuffer); /** * Add a buffer representing an object file to the given ResourceTracker's @@ -179,9 +181,9 @@ LLVMErrorRef LLVMOrcLLJITAddObjectFile(LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, * Resources associated with the given object will be tracked by ResourceTracker * RT. */ -LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J, - LLVMOrcResourceTrackerRef RT, - LLVMMemoryBufferRef ObjBuffer); +LLVM_C_ABI LLVMErrorRef +LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J, LLVMOrcResourceTrackerRef RT, + LLVMMemoryBufferRef ObjBuffer); /** * Add an IR module to the given JITDylib in the given LLJIT instance. This @@ -192,9 +194,8 @@ LLVMErrorRef LLVMOrcLLJITAddObjectFileWithRT(LLVMOrcLLJITRef J, * Resources associated with the given Module will be tracked by the given * JITDylib's default resource tracker. */ -LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, - LLVMOrcJITDylibRef JD, - LLVMOrcThreadSafeModuleRef TSM); +LLVM_C_ABI LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule( + LLVMOrcLLJITRef J, LLVMOrcJITDylibRef JD, LLVMOrcThreadSafeModuleRef TSM); /** * Add an IR module to the given ResourceTracker's JITDylib in the given LLJIT @@ -205,34 +206,36 @@ LLVMErrorRef LLVMOrcLLJITAddLLVMIRModule(LLVMOrcLLJITRef J, * Resources associated with the given Module will be tracked by ResourceTracker * RT. */ -LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT(LLVMOrcLLJITRef J, - LLVMOrcResourceTrackerRef JD, - LLVMOrcThreadSafeModuleRef TSM); +LLVM_C_ABI LLVMErrorRef LLVMOrcLLJITAddLLVMIRModuleWithRT( + LLVMOrcLLJITRef J, LLVMOrcResourceTrackerRef JD, + LLVMOrcThreadSafeModuleRef TSM); /** * Look up the given symbol in the main JITDylib of the given LLJIT instance. * * This operation does not take ownership of the Name argument. */ -LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, - LLVMOrcExecutorAddress *Result, - const char *Name); +LLVM_C_ABI LLVMErrorRef LLVMOrcLLJITLookup(LLVMOrcLLJITRef J, + LLVMOrcExecutorAddress *Result, + const char *Name); /** * Returns a non-owning reference to the LLJIT instance's object linking layer. */ -LLVMOrcObjectLayerRef LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMOrcObjectLayerRef +LLVMOrcLLJITGetObjLinkingLayer(LLVMOrcLLJITRef J); /** * Returns a non-owning reference to the LLJIT instance's object linking layer. */ -LLVMOrcObjectTransformLayerRef +LLVM_C_ABI LLVMOrcObjectTransformLayerRef LLVMOrcLLJITGetObjTransformLayer(LLVMOrcLLJITRef J); /** * Returns a non-owning reference to the LLJIT instance's IR transform layer. */ -LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMOrcIRTransformLayerRef +LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J); /** * Get the LLJIT instance's default data layout string. @@ -240,7 +243,7 @@ LLVMOrcIRTransformLayerRef LLVMOrcLLJITGetIRTransformLayer(LLVMOrcLLJITRef J); * This string is owned by the LLJIT instance and does not need to be freed * by the caller. */ -const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J); +LLVM_C_ABI const char *LLVMOrcLLJITGetDataLayoutStr(LLVMOrcLLJITRef J); /** * @} diff --git a/src/llvm-c/LLJITUtils.h b/src/llvm-c/LLJITUtils.h index 940097432..ad9943544 100644 --- a/src/llvm-c/LLJITUtils.h +++ b/src/llvm-c/LLJITUtils.h @@ -26,7 +26,8 @@ #ifndef LLVM_C_LLJITUTILS_H #define LLVM_C_LLJITUTILS_H -#include "llvm-c/LLJIT.h" +#include "LLJIT.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -39,9 +40,9 @@ LLVM_C_EXTERN_C_BEGIN /** * Install the plugin that submits debug objects to the executor. Executors must - * expose the llvm_orc_registerJITLoaderGDBWrapper symbol. + * expose the llvm_orc_registerJITLoaderGDBAllocAction symbol. */ -LLVMErrorRef LLVMOrcLLJITEnableDebugSupport(LLVMOrcLLJITRef J); +LLVM_C_ABI LLVMErrorRef LLVMOrcLLJITEnableDebugSupport(LLVMOrcLLJITRef J); /** * @} diff --git a/src/llvm-c/Linker.h b/src/llvm-c/Linker.h index acff5d5e2..a8899be14 100644 --- a/src/llvm-c/Linker.h +++ b/src/llvm-c/Linker.h @@ -14,8 +14,9 @@ #ifndef LLVM_C_LINKER_H #define LLVM_C_LINKER_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -38,7 +39,7 @@ typedef enum { * 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_ABI LLVMBool LLVMLinkModules2(LLVMModuleRef Dest, LLVMModuleRef Src); LLVM_C_EXTERN_C_END diff --git a/src/llvm-c/Object.h b/src/llvm-c/Object.h index 2f39179c1..cbad22b85 100644 --- a/src/llvm-c/Object.h +++ b/src/llvm-c/Object.h @@ -19,9 +19,10 @@ #ifndef LLVM_C_OBJECT_H #define LLVM_C_OBJECT_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" -#include "llvm-c/Config/llvm-config.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" +#include "Config/llvm-config.h" LLVM_C_EXTERN_C_BEGIN @@ -54,6 +55,7 @@ typedef enum { LLVMBinaryTypeMachO64B, /**< MachO 64-bit, big endian. */ LLVMBinaryTypeWasm, /**< Web Assembly. */ LLVMBinaryTypeOffload, /**< Offloading fatbinary. */ + LLVMBinaryTypeDXcontainer, /**< DirectX Binary Container. */ } LLVMBinaryType; @@ -64,7 +66,7 @@ typedef enum { * 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 + * The memory buffer is not consumed by this function. It is the responsibility * of the caller to free it with \c LLVMDisposeMemoryBuffer. * * If NULL is returned, the \p ErrorMessage parameter is populated with the @@ -73,17 +75,17 @@ typedef enum { * * @see llvm::object::createBinary */ -LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf, - LLVMContextRef Context, - char **ErrorMessage); +LLVM_C_ABI 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 + * The binary file does not own its backing buffer. It is the responsibility * of the caller to free it with \c LLVMDisposeMemoryBuffer. */ -void LLVMDisposeBinary(LLVMBinaryRef BR); +LLVM_C_ABI void LLVMDisposeBinary(LLVMBinaryRef BR); /** * Retrieves a copy of the memory buffer associated with this object file. @@ -94,14 +96,14 @@ void LLVMDisposeBinary(LLVMBinaryRef BR); * * @see llvm::object::getMemoryBufferRef */ -LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR); +LLVM_C_ABI LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR); /** * Retrieve the specific type of a binary. * * @see llvm::object::Binary::getType */ -LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR); +LLVM_C_ABI LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR); /* * For a Mach-O universal binary file, retrieves the object file corresponding @@ -114,10 +116,8 @@ LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR); * 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); +LLVM_C_ABI LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch( + LLVMBinaryRef BR, const char *Arch, size_t ArchLen, char **ErrorMessage); /** * Retrieve a copy of the section iterator for this object file. @@ -130,15 +130,16 @@ LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR, * * @see llvm::object::sections() */ -LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBool LLVMObjectFileIsSectionIteratorAtEnd( + LLVMBinaryRef BR, LLVMSectionIteratorRef SI); /** * Retrieve a copy of the symbol iterator for this object file. @@ -151,78 +152,81 @@ LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR, * * @see llvm::object::symbols() */ -LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBool +LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR, LLVMSymbolIteratorRef SI); -void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); +LLVM_C_ABI void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI); -void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); -void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, - LLVMSymbolIteratorRef Sym); +LLVM_C_ABI void LLVMMoveToNextSection(LLVMSectionIteratorRef SI); +LLVM_C_ABI void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, + LLVMSymbolIteratorRef Sym); // ObjectFile Symbol iterators -void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI); -void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI); +LLVM_C_ABI void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI); +LLVM_C_ABI 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); +LLVM_C_ABI const char *LLVMGetSectionName(LLVMSectionIteratorRef SI); +LLVM_C_ABI uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI); +LLVM_C_ABI const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI); +LLVM_C_ABI uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI); +LLVM_C_ABI 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); - +LLVM_C_ABI LLVMRelocationIteratorRef +LLVMGetRelocations(LLVMSectionIteratorRef Section); +LLVM_C_ABI void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef RI); +LLVM_C_ABI LLVMBool LLVMIsRelocationIteratorAtEnd( + LLVMSectionIteratorRef Section, LLVMRelocationIteratorRef RI); +LLVM_C_ABI void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef RI); // SymbolRef accessors -const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI); -uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI); -uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); +LLVM_C_ABI const char *LLVMGetSymbolName(LLVMSymbolIteratorRef SI); +LLVM_C_ABI uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI); +LLVM_C_ABI uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI); // RelocationRef accessors -uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); -LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); -uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI); +LLVM_C_ABI uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI); +LLVM_C_ABI LLVMSymbolIteratorRef +LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI); +LLVM_C_ABI 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); +LLVM_C_ABI const char *LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI); +LLVM_C_ABI const char * +LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI); /** Deprecated: Use LLVMBinaryRef instead. */ typedef struct LLVMOpaqueObjectFile *LLVMObjectFileRef; /** Deprecated: Use LLVMCreateBinary instead. */ -LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); +LLVM_C_ABI LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf); /** Deprecated: Use LLVMDisposeBinary instead. */ -void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); +LLVM_C_ABI void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile); /** Deprecated: Use LLVMObjectFileCopySectionIterator instead. */ -LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); +LLVM_C_ABI LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef ObjectFile); /** Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead. */ -LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, - LLVMSectionIteratorRef SI); +LLVM_C_ABI LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef ObjectFile, + LLVMSectionIteratorRef SI); /** Deprecated: Use LLVMObjectFileCopySymbolIterator instead. */ -LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile); +LLVM_C_ABI LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef ObjectFile); /** Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead. */ -LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile, - LLVMSymbolIteratorRef SI); +LLVM_C_ABI LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef ObjectFile, + LLVMSymbolIteratorRef SI); /** * @} */ diff --git a/src/llvm-c/Orc.h b/src/llvm-c/Orc.h index 8609a8a6d..c7563066a 100644 --- a/src/llvm-c/Orc.h +++ b/src/llvm-c/Orc.h @@ -27,9 +27,10 @@ #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" +#include "Error.h" +#include "TargetMachine.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -488,7 +489,7 @@ typedef struct LLVMOrcOpaqueDumpObjects *LLVMOrcDumpObjectsRef; * requesting definitions from the JIT will typically be delivered a * FailureToMaterialize error instead). */ -void LLVMOrcExecutionSessionSetErrorReporter( +LLVM_C_ABI void LLVMOrcExecutionSessionSetErrorReporter( LLVMOrcExecutionSessionRef ES, LLVMOrcErrorReporterFunction ReportError, void *Ctx); @@ -498,7 +499,7 @@ void LLVMOrcExecutionSessionSetErrorReporter( * Ownership of the pool remains with the ExecutionSession: The caller is * not required to free the pool. */ -LLVMOrcSymbolStringPoolRef +LLVM_C_ABI LLVMOrcSymbolStringPoolRef LLVMOrcExecutionSessionGetSymbolStringPool(LLVMOrcExecutionSessionRef ES); /** @@ -511,7 +512,8 @@ LLVMOrcExecutionSessionGetSymbolStringPool(LLVMOrcExecutionSessionRef ES); * entries will have become unreferenced, e.g. after removing a module or * closing a JITDylib. */ -void LLVMOrcSymbolStringPoolClearDeadEntries(LLVMOrcSymbolStringPoolRef SSP); +LLVM_C_ABI void +LLVMOrcSymbolStringPoolClearDeadEntries(LLVMOrcSymbolStringPoolRef SSP); /** * Intern a string in the ExecutionSession's SymbolStringPool and return a @@ -525,7 +527,7 @@ void LLVMOrcSymbolStringPoolClearDeadEntries(LLVMOrcSymbolStringPoolRef SSP); * * Note that this function does not perform linker-mangling on the string. */ -LLVMOrcSymbolStringPoolEntryRef +LLVM_C_ABI LLVMOrcSymbolStringPoolEntryRef LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name); /** @@ -574,7 +576,7 @@ typedef void (*LLVMOrcExecutionSessionLookupHandleResultFunction)( * * THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE! */ -void LLVMOrcExecutionSessionLookup( +LLVM_C_ABI void LLVMOrcExecutionSessionLookup( LLVMOrcExecutionSessionRef ES, LLVMOrcLookupKind K, LLVMOrcCJITDylibSearchOrder SearchOrder, size_t SearchOrderSize, LLVMOrcCLookupSet Symbols, size_t SymbolsSize, @@ -583,49 +585,56 @@ void LLVMOrcExecutionSessionLookup( /** * Increments the ref-count for a SymbolStringPool entry. */ -void LLVMOrcRetainSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S); +LLVM_C_ABI void +LLVMOrcRetainSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S); /** * Reduces the ref-count for of a SymbolStringPool entry. */ -void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S); +LLVM_C_ABI void +LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S); /** * Return the c-string for the given symbol. This string will remain valid until * the entry is freed (once all LLVMOrcSymbolStringPoolEntryRefs have been * released). */ -const char *LLVMOrcSymbolStringPoolEntryStr(LLVMOrcSymbolStringPoolEntryRef S); +LLVM_C_ABI const char * +LLVMOrcSymbolStringPoolEntryStr(LLVMOrcSymbolStringPoolEntryRef S); /** * Reduces the ref-count of a ResourceTracker. */ -void LLVMOrcReleaseResourceTracker(LLVMOrcResourceTrackerRef RT); +LLVM_C_ABI void LLVMOrcReleaseResourceTracker(LLVMOrcResourceTrackerRef RT); /** * Transfers tracking of all resources associated with resource tracker SrcRT * to resource tracker DstRT. */ -void LLVMOrcResourceTrackerTransferTo(LLVMOrcResourceTrackerRef SrcRT, - LLVMOrcResourceTrackerRef DstRT); +LLVM_C_ABI void +LLVMOrcResourceTrackerTransferTo(LLVMOrcResourceTrackerRef SrcRT, + LLVMOrcResourceTrackerRef DstRT); /** * Remove all resources associated with the given tracker. See * ResourceTracker::remove(). */ -LLVMErrorRef LLVMOrcResourceTrackerRemove(LLVMOrcResourceTrackerRef RT); +LLVM_C_ABI 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). */ -void LLVMOrcDisposeDefinitionGenerator(LLVMOrcDefinitionGeneratorRef DG); +LLVM_C_ABI void +LLVMOrcDisposeDefinitionGenerator(LLVMOrcDefinitionGeneratorRef DG); /** * Dispose of a MaterializationUnit. */ -void LLVMOrcDisposeMaterializationUnit(LLVMOrcMaterializationUnitRef MU); +LLVM_C_ABI void +LLVMOrcDisposeMaterializationUnit(LLVMOrcMaterializationUnitRef MU); /** * Create a custom MaterializationUnit. @@ -660,7 +669,7 @@ void LLVMOrcDisposeMaterializationUnit(LLVMOrcMaterializationUnitRef MU); * either passing it to a JITDylib (via LLVMOrcJITDylibDefine) or disposing * of it by calling LLVMOrcDisposeMaterializationUnit. */ -LLVMOrcMaterializationUnitRef LLVMOrcCreateCustomMaterializationUnit( +LLVM_C_ABI LLVMOrcMaterializationUnitRef LLVMOrcCreateCustomMaterializationUnit( const char *Name, void *Ctx, LLVMOrcCSymbolFlagsMapPairs Syms, size_t NumSyms, LLVMOrcSymbolStringPoolEntryRef InitSym, LLVMOrcMaterializationUnitMaterializeFunction Materialize, @@ -688,7 +697,7 @@ LLVMOrcMaterializationUnitRef LLVMOrcCreateCustomMaterializationUnit( * If a client wishes to reuse elements of the Sym array after this call they * must explicitly retain each of the elements for themselves. */ -LLVMOrcMaterializationUnitRef +LLVM_C_ABI LLVMOrcMaterializationUnitRef LLVMOrcAbsoluteSymbols(LLVMOrcCSymbolMapPairs Syms, size_t NumPairs); /** @@ -712,7 +721,7 @@ LLVMOrcAbsoluteSymbols(LLVMOrcCSymbolMapPairs Syms, size_t NumPairs); * If a client wishes to reuse elements of the CallableAliases array after this call they * must explicitly retain each of the elements for themselves. */ -LLVMOrcMaterializationUnitRef LLVMOrcLazyReexports( +LLVM_C_ABI LLVMOrcMaterializationUnitRef LLVMOrcLazyReexports( LLVMOrcLazyCallThroughManagerRef LCTM, LLVMOrcIndirectStubsManagerRef ISM, LLVMOrcJITDylibRef SourceRef, LLVMOrcCSymbolAliasMapPairs CallableAliases, size_t NumPairs); @@ -727,19 +736,20 @@ LLVMOrcMaterializationUnitRef LLVMOrcLazyReexports( * LLVMOrcMaterializationResponsibilityNotifyEmitted) or failed (via * LLVMOrcMaterializationResponsibilityFailMaterialization). */ -void LLVMOrcDisposeMaterializationResponsibility( +LLVM_C_ABI void LLVMOrcDisposeMaterializationResponsibility( LLVMOrcMaterializationResponsibilityRef MR); /** * Returns the target JITDylib that these symbols are being materialized into. */ -LLVMOrcJITDylibRef LLVMOrcMaterializationResponsibilityGetTargetDylib( +LLVM_C_ABI LLVMOrcJITDylibRef +LLVMOrcMaterializationResponsibilityGetTargetDylib( LLVMOrcMaterializationResponsibilityRef MR); /** * Returns the ExecutionSession for this MaterializationResponsibility. */ -LLVMOrcExecutionSessionRef +LLVM_C_ABI LLVMOrcExecutionSessionRef LLVMOrcMaterializationResponsibilityGetExecutionSession( LLVMOrcMaterializationResponsibilityRef MR); @@ -753,7 +763,8 @@ LLVMOrcMaterializationResponsibilityGetExecutionSession( * MaterializationResponsibility requires the caller to retain the symbols * explicitly. */ -LLVMOrcCSymbolFlagsMapPairs LLVMOrcMaterializationResponsibilityGetSymbols( +LLVM_C_ABI LLVMOrcCSymbolFlagsMapPairs +LLVMOrcMaterializationResponsibilityGetSymbols( LLVMOrcMaterializationResponsibilityRef MR, size_t *NumPairs); /** @@ -761,7 +772,8 @@ LLVMOrcCSymbolFlagsMapPairs LLVMOrcMaterializationResponsibilityGetSymbols( * * Does not release the entries themselves. */ -void LLVMOrcDisposeCSymbolFlagsMap(LLVMOrcCSymbolFlagsMapPairs Pairs); +LLVM_C_ABI void +LLVMOrcDisposeCSymbolFlagsMap(LLVMOrcCSymbolFlagsMapPairs Pairs); /** * Returns the initialization pseudo-symbol, if any. This symbol will also @@ -771,7 +783,7 @@ void LLVMOrcDisposeCSymbolFlagsMap(LLVMOrcCSymbolFlagsMapPairs Pairs); * The returned symbol is not retained over any mutating operation of the * MaterializationResponsbility or beyond the lifetime thereof. */ -LLVMOrcSymbolStringPoolEntryRef +LLVM_C_ABI LLVMOrcSymbolStringPoolEntryRef LLVMOrcMaterializationResponsibilityGetInitializerSymbol( LLVMOrcMaterializationResponsibilityRef MR); @@ -781,7 +793,7 @@ LLVMOrcMaterializationResponsibilityGetInitializerSymbol( * information can be used to return responsibility for unrequested symbols * back to the JITDylib via the delegate method. */ -LLVMOrcSymbolStringPoolEntryRef * +LLVM_C_ABI LLVMOrcSymbolStringPoolEntryRef * LLVMOrcMaterializationResponsibilityGetRequestedSymbols( LLVMOrcMaterializationResponsibilityRef MR, size_t *NumSymbols); @@ -790,7 +802,7 @@ LLVMOrcMaterializationResponsibilityGetRequestedSymbols( * * Does not release the symbols themselves. */ -void LLVMOrcDisposeSymbols(LLVMOrcSymbolStringPoolEntryRef *Symbols); +LLVM_C_ABI void LLVMOrcDisposeSymbols(LLVMOrcSymbolStringPoolEntryRef *Symbols); /** * Notifies the target JITDylib that the given symbols have been resolved. @@ -808,7 +820,7 @@ void LLVMOrcDisposeSymbols(LLVMOrcSymbolStringPoolEntryRef *Symbols); * MaterializationResponsibility then this method is guaranteed to return * LLVMErrorSuccess. */ -LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyResolved( +LLVM_C_ABI LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyResolved( LLVMOrcMaterializationResponsibilityRef MR, LLVMOrcCSymbolMapPairs Symbols, size_t NumPairs); @@ -838,7 +850,7 @@ LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyResolved( * MaterializationResponsibility then this method is guaranteed to return * LLVMErrorSuccess. */ -LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyEmitted( +LLVM_C_ABI LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyEmitted( LLVMOrcMaterializationResponsibilityRef MR, LLVMOrcCSymbolDependenceGroup *SymbolDepGroups, size_t NumSymbolDepGroups); @@ -855,7 +867,7 @@ LLVMErrorRef LLVMOrcMaterializationResponsibilityNotifyEmitted( * additional symbols at materialization time (e.g. stubs, compile * callbacks, metadata) */ -LLVMErrorRef LLVMOrcMaterializationResponsibilityDefineMaterializing( +LLVM_C_ABI LLVMErrorRef LLVMOrcMaterializationResponsibilityDefineMaterializing( LLVMOrcMaterializationResponsibilityRef MR, LLVMOrcCSymbolFlagsMapPairs Pairs, size_t NumPairs); @@ -866,7 +878,7 @@ LLVMErrorRef LLVMOrcMaterializationResponsibilityDefineMaterializing( * from the target JITDylib, and send an error to any queries waiting on * these symbols. */ -void LLVMOrcMaterializationResponsibilityFailMaterialization( +LLVM_C_ABI void LLVMOrcMaterializationResponsibilityFailMaterialization( LLVMOrcMaterializationResponsibilityRef MR); /** @@ -876,7 +888,7 @@ void LLVMOrcMaterializationResponsibilityFailMaterialization( * by introspecting which symbols have actually been looked up and * materializing only those). */ -LLVMErrorRef LLVMOrcMaterializationResponsibilityReplace( +LLVM_C_ABI LLVMErrorRef LLVMOrcMaterializationResponsibilityReplace( LLVMOrcMaterializationResponsibilityRef MR, LLVMOrcMaterializationUnitRef MU); @@ -888,7 +900,7 @@ LLVMErrorRef LLVMOrcMaterializationResponsibilityReplace( * The caller retains responsibility of the the passed * MaterializationResponsibility. */ -LLVMErrorRef LLVMOrcMaterializationResponsibilityDelegate( +LLVM_C_ABI LLVMErrorRef LLVMOrcMaterializationResponsibilityDelegate( LLVMOrcMaterializationResponsibilityRef MR, LLVMOrcSymbolStringPoolEntryRef *Symbols, size_t NumSymbols, LLVMOrcMaterializationResponsibilityRef *Result); @@ -902,9 +914,8 @@ LLVMErrorRef LLVMOrcMaterializationResponsibilityDelegate( * This call does not install any library code or symbols into the newly * created JITDylib. The client is responsible for all configuration. */ -LLVMOrcJITDylibRef -LLVMOrcExecutionSessionCreateBareJITDylib(LLVMOrcExecutionSessionRef ES, - const char *Name); +LLVM_C_ABI LLVMOrcJITDylibRef LLVMOrcExecutionSessionCreateBareJITDylib( + LLVMOrcExecutionSessionRef ES, const char *Name); /** * Create a JITDylib. @@ -918,25 +929,23 @@ LLVMOrcExecutionSessionCreateBareJITDylib(LLVMOrcExecutionSessionRef ES, * call is equivalent to LLVMExecutionSessionRefCreateBareJITDylib and will * always return success. */ -LLVMErrorRef -LLVMOrcExecutionSessionCreateJITDylib(LLVMOrcExecutionSessionRef ES, - LLVMOrcJITDylibRef *Result, - const char *Name); +LLVM_C_ABI LLVMErrorRef LLVMOrcExecutionSessionCreateJITDylib( + LLVMOrcExecutionSessionRef ES, LLVMOrcJITDylibRef *Result, + const char *Name); /** * Returns the JITDylib with the given name, or NULL if no such JITDylib * exists. */ -LLVMOrcJITDylibRef -LLVMOrcExecutionSessionGetJITDylibByName(LLVMOrcExecutionSessionRef ES, - const char *Name); +LLVM_C_ABI LLVMOrcJITDylibRef LLVMOrcExecutionSessionGetJITDylibByName( + LLVMOrcExecutionSessionRef ES, const char *Name); /** * Return a reference to a newly created resource tracker associated with JD. * The tracker is returned with an initial ref-count of 1, and must be released * with LLVMOrcReleaseResourceTracker when no longer needed. */ -LLVMOrcResourceTrackerRef +LLVM_C_ABI LLVMOrcResourceTrackerRef LLVMOrcJITDylibCreateResourceTracker(LLVMOrcJITDylibRef JD); /** @@ -944,7 +953,7 @@ LLVMOrcJITDylibCreateResourceTracker(LLVMOrcJITDylibRef JD); * This operation will increase the retain count of the tracker: Clients should * call LLVMOrcReleaseResourceTracker when the result is no longer needed. */ -LLVMOrcResourceTrackerRef +LLVM_C_ABI LLVMOrcResourceTrackerRef LLVMOrcJITDylibGetDefaultResourceTracker(LLVMOrcJITDylibRef JD); /** @@ -954,14 +963,14 @@ LLVMOrcJITDylibGetDefaultResourceTracker(LLVMOrcJITDylibRef JD); * If the operation fails then ownership remains with the caller who should * call LLVMOrcDisposeMaterializationUnit to destroy it. */ -LLVMErrorRef LLVMOrcJITDylibDefine(LLVMOrcJITDylibRef JD, - LLVMOrcMaterializationUnitRef MU); +LLVM_C_ABI LLVMErrorRef LLVMOrcJITDylibDefine(LLVMOrcJITDylibRef JD, + LLVMOrcMaterializationUnitRef MU); /** * Calls remove on all trackers associated with this JITDylib, see * JITDylib::clear(). */ -LLVMErrorRef LLVMOrcJITDylibClear(LLVMOrcJITDylibRef JD); +LLVM_C_ABI LLVMErrorRef LLVMOrcJITDylibClear(LLVMOrcJITDylibRef JD); /** * Add a DefinitionGenerator to the given JITDylib. @@ -969,8 +978,8 @@ LLVMErrorRef LLVMOrcJITDylibClear(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); +LLVM_C_ABI void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD, + LLVMOrcDefinitionGeneratorRef DG); /** * Create a custom generator. @@ -985,7 +994,8 @@ void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD, * Dispose is the disposal function for Ctx. This argument is permitted to be * null (in which case the client is responsible for the lifetime of Ctx). */ -LLVMOrcDefinitionGeneratorRef LLVMOrcCreateCustomCAPIDefinitionGenerator( +LLVM_C_ABI LLVMOrcDefinitionGeneratorRef +LLVMOrcCreateCustomCAPIDefinitionGenerator( LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction F, void *Ctx, LLVMOrcDisposeCAPIDefinitionGeneratorFunction Dispose); @@ -993,8 +1003,8 @@ LLVMOrcDefinitionGeneratorRef LLVMOrcCreateCustomCAPIDefinitionGenerator( * Continue a lookup that was suspended in a generator (see * LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction). */ -void LLVMOrcLookupStateContinueLookup(LLVMOrcLookupStateRef S, - LLVMErrorRef Err); +LLVM_C_ABI void LLVMOrcLookupStateContinueLookup(LLVMOrcLookupStateRef S, + LLVMErrorRef Err); /** * Get a DynamicLibrarySearchGenerator that will reflect process symbols into @@ -1014,7 +1024,7 @@ void LLVMOrcLookupStateContinueLookup(LLVMOrcLookupStateRef S, * function is the full mangled symbol: The client is responsible for stripping * the global prefix if present. */ -LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess( +LLVM_C_ABI LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess( LLVMOrcDefinitionGeneratorRef *Result, char GlobalPrefx, LLVMOrcSymbolPredicate Filter, void *FilterCtx); @@ -1039,7 +1049,7 @@ LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess( * THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE! * */ -LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForPath( +LLVM_C_ABI LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForPath( LLVMOrcDefinitionGeneratorRef *Result, const char *FileName, char GlobalPrefix, LLVMOrcSymbolPredicate Filter, void *FilterCtx); @@ -1057,30 +1067,43 @@ LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForPath( * THIS API IS EXPERIMENTAL AND LIKELY TO CHANGE IN THE NEAR FUTURE! * */ -LLVMErrorRef LLVMOrcCreateStaticLibrarySearchGeneratorForPath( +LLVM_C_ABI LLVMErrorRef LLVMOrcCreateStaticLibrarySearchGeneratorForPath( LLVMOrcDefinitionGeneratorRef *Result, LLVMOrcObjectLayerRef ObjLayer, - const char *FileName, const char *TargetTriple); + const char *FileName); /** - * Create a ThreadSafeContext containing a new LLVMContext. + * Create a ThreadSafeContextRef 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. + * can and should dispose of their ThreadSafeContextRef as soon as they no + * longer need to refer to it directly. Other references (e.g. from + * ThreadSafeModules) will keep the underlying data alive as long as it is + * needed. */ -LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void); +LLVM_C_ABI LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void); /** - * Get a reference to the wrapped LLVMContext. + * Create a ThreadSafeContextRef from a given LLVMContext, which must not be + * associated with any existing ThreadSafeContext. + * + * The underlying ThreadSafeContext will take ownership of the LLVMContext + * object, so clients should not free the LLVMContext passed to this + * function. + * + * Ownership of the underlying ThreadSafeContext data is shared: Clients + * can and should dispose of their ThreadSafeContextRef as soon as they no + * longer need to refer to it directly. Other references (e.g. from + * ThreadSafeModules) will keep the underlying data alive as long as it is + * needed. */ -LLVMContextRef -LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx); +LLVM_C_ABI LLVMOrcThreadSafeContextRef +LLVMOrcCreateNewThreadSafeContextFromLLVMContext(LLVMContextRef Ctx); /** * Dispose of a ThreadSafeContext. */ -void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx); +LLVM_C_ABI void +LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx); /** * Create a ThreadSafeModule wrapper around the given LLVM module. This takes @@ -1092,24 +1115,22 @@ void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx); * 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); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMOrcDisposeThreadSafeModule(LLVMOrcThreadSafeModuleRef TSM); /** * Apply the given function to the module contained in this ThreadSafeModule. */ -LLVMErrorRef -LLVMOrcThreadSafeModuleWithModuleDo(LLVMOrcThreadSafeModuleRef TSM, - LLVMOrcGenericIRModuleOperationFunction F, - void *Ctx); +LLVM_C_ABI LLVMErrorRef LLVMOrcThreadSafeModuleWithModuleDo( + LLVMOrcThreadSafeModuleRef TSM, LLVMOrcGenericIRModuleOperationFunction F, + void *Ctx); /** * Create a JITTargetMachineBuilder by detecting the host. @@ -1119,7 +1140,7 @@ LLVMOrcThreadSafeModuleWithModuleDo(LLVMOrcThreadSafeModuleRef TSM, * LLVMOrcLLJITBuilderSetJITTargetMachineBuilder) or disposed of by calling * LLVMOrcDisposeJITTargetMachineBuilder. */ -LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost( +LLVM_C_ABI LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost( LLVMOrcJITTargetMachineBuilderRef *Result); /** @@ -1131,14 +1152,14 @@ LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost( * LLVMOrcLLJITBuilderSetJITTargetMachineBuilder) or disposed of by calling * LLVMOrcDisposeJITTargetMachineBuilder. */ -LLVMOrcJITTargetMachineBuilderRef +LLVM_C_ABI LLVMOrcJITTargetMachineBuilderRef LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(LLVMTargetMachineRef TM); /** * Dispose of a JITTargetMachineBuilder. */ -void LLVMOrcDisposeJITTargetMachineBuilder( - LLVMOrcJITTargetMachineBuilderRef JTMB); +LLVM_C_ABI void +LLVMOrcDisposeJITTargetMachineBuilder(LLVMOrcJITTargetMachineBuilderRef JTMB); /** * Returns the target triple for the given JITTargetMachineBuilder as a string. @@ -1146,14 +1167,14 @@ void LLVMOrcDisposeJITTargetMachineBuilder( * The caller owns the resulting string as must dispose of it by calling * LLVMDisposeMessage */ -char *LLVMOrcJITTargetMachineBuilderGetTargetTriple( +LLVM_C_ABI char *LLVMOrcJITTargetMachineBuilderGetTargetTriple( LLVMOrcJITTargetMachineBuilderRef JTMB); /** * Sets the target triple for the given JITTargetMachineBuilder to the given * string. */ -void LLVMOrcJITTargetMachineBuilderSetTargetTriple( +LLVM_C_ABI void LLVMOrcJITTargetMachineBuilderSetTargetTriple( LLVMOrcJITTargetMachineBuilderRef JTMB, const char *TargetTriple); /** @@ -1167,9 +1188,9 @@ void LLVMOrcJITTargetMachineBuilderSetTargetTriple( * Resources associated with the given object will be tracked by the given * JITDylib's default ResourceTracker. */ -LLVMErrorRef LLVMOrcObjectLayerAddObjectFile(LLVMOrcObjectLayerRef ObjLayer, - LLVMOrcJITDylibRef JD, - LLVMMemoryBufferRef ObjBuffer); +LLVM_C_ABI LLVMErrorRef LLVMOrcObjectLayerAddObjectFile( + LLVMOrcObjectLayerRef ObjLayer, LLVMOrcJITDylibRef JD, + LLVMMemoryBufferRef ObjBuffer); /** * Add an object to an ObjectLayer using the given ResourceTracker. @@ -1182,10 +1203,9 @@ LLVMErrorRef LLVMOrcObjectLayerAddObjectFile(LLVMOrcObjectLayerRef ObjLayer, * Resources associated with the given object will be tracked by * ResourceTracker RT. */ -LLVMErrorRef -LLVMOrcObjectLayerAddObjectFileWithRT(LLVMOrcObjectLayerRef ObjLayer, - LLVMOrcResourceTrackerRef RT, - LLVMMemoryBufferRef ObjBuffer); +LLVM_C_ABI LLVMErrorRef LLVMOrcObjectLayerAddObjectFileWithRT( + LLVMOrcObjectLayerRef ObjLayer, LLVMOrcResourceTrackerRef RT, + LLVMMemoryBufferRef ObjBuffer); /** * Emit an object buffer to an ObjectLayer. @@ -1193,31 +1213,33 @@ LLVMOrcObjectLayerAddObjectFileWithRT(LLVMOrcObjectLayerRef ObjLayer, * Ownership of the responsibility object and object buffer pass to this * function. The client is not responsible for cleanup. */ -void LLVMOrcObjectLayerEmit(LLVMOrcObjectLayerRef ObjLayer, - LLVMOrcMaterializationResponsibilityRef R, - LLVMMemoryBufferRef ObjBuffer); +LLVM_C_ABI void +LLVMOrcObjectLayerEmit(LLVMOrcObjectLayerRef ObjLayer, + LLVMOrcMaterializationResponsibilityRef R, + LLVMMemoryBufferRef ObjBuffer); /** * Dispose of an ObjectLayer. */ -void LLVMOrcDisposeObjectLayer(LLVMOrcObjectLayerRef ObjLayer); +LLVM_C_ABI void LLVMOrcDisposeObjectLayer(LLVMOrcObjectLayerRef ObjLayer); -void LLVMOrcIRTransformLayerEmit(LLVMOrcIRTransformLayerRef IRTransformLayer, - LLVMOrcMaterializationResponsibilityRef MR, - LLVMOrcThreadSafeModuleRef TSM); +LLVM_C_ABI void +LLVMOrcIRTransformLayerEmit(LLVMOrcIRTransformLayerRef IRTransformLayer, + LLVMOrcMaterializationResponsibilityRef MR, + LLVMOrcThreadSafeModuleRef TSM); /** * Set the transform function of the provided transform layer, passing through a * pointer to user provided context. */ -void LLVMOrcIRTransformLayerSetTransform( +LLVM_C_ABI void LLVMOrcIRTransformLayerSetTransform( LLVMOrcIRTransformLayerRef IRTransformLayer, LLVMOrcIRTransformLayerTransformFunction TransformFunction, void *Ctx); /** * Set the transform function on an LLVMOrcObjectTransformLayer. */ -void LLVMOrcObjectTransformLayerSetTransform( +LLVM_C_ABI void LLVMOrcObjectTransformLayerSetTransform( LLVMOrcObjectTransformLayerRef ObjTransformLayer, LLVMOrcObjectTransformLayerTransformFunction TransformFunction, void *Ctx); @@ -1227,15 +1249,16 @@ void LLVMOrcObjectTransformLayerSetTransform( * The resulting IndirectStubsManager is owned by the client * and must be disposed of by calling LLVMOrcDisposeDisposeIndirectStubsManager. */ -LLVMOrcIndirectStubsManagerRef +LLVM_C_ABI LLVMOrcIndirectStubsManagerRef LLVMOrcCreateLocalIndirectStubsManager(const char *TargetTriple); /** * Dispose of an IndirectStubsManager. */ -void LLVMOrcDisposeIndirectStubsManager(LLVMOrcIndirectStubsManagerRef ISM); +LLVM_C_ABI void +LLVMOrcDisposeIndirectStubsManager(LLVMOrcIndirectStubsManagerRef ISM); -LLVMErrorRef LLVMOrcCreateLocalLazyCallThroughManager( +LLVM_C_ABI LLVMErrorRef LLVMOrcCreateLocalLazyCallThroughManager( const char *TargetTriple, LLVMOrcExecutionSessionRef ES, LLVMOrcJITTargetAddress ErrorHandlerAddr, LLVMOrcLazyCallThroughManagerRef *LCTM); @@ -1243,8 +1266,8 @@ LLVMErrorRef LLVMOrcCreateLocalLazyCallThroughManager( /** * Dispose of an LazyCallThroughManager. */ -void LLVMOrcDisposeLazyCallThroughManager( - LLVMOrcLazyCallThroughManagerRef LCTM); +LLVM_C_ABI void +LLVMOrcDisposeLazyCallThroughManager(LLVMOrcLazyCallThroughManagerRef LCTM); /** * Create a DumpObjects instance. @@ -1260,19 +1283,19 @@ void LLVMOrcDisposeLazyCallThroughManager( * .2.o, .3.o, and so on). IdentifierOverride should not contain * an extension, as a .o suffix will be added by DumpObjects. */ -LLVMOrcDumpObjectsRef LLVMOrcCreateDumpObjects(const char *DumpDir, - const char *IdentifierOverride); +LLVM_C_ABI LLVMOrcDumpObjectsRef +LLVMOrcCreateDumpObjects(const char *DumpDir, const char *IdentifierOverride); /** * Dispose of a DumpObjects instance. */ -void LLVMOrcDisposeDumpObjects(LLVMOrcDumpObjectsRef DumpObjects); +LLVM_C_ABI void LLVMOrcDisposeDumpObjects(LLVMOrcDumpObjectsRef DumpObjects); /** * Dump the contents of the given MemoryBuffer. */ -LLVMErrorRef LLVMOrcDumpObjects_CallOperator(LLVMOrcDumpObjectsRef DumpObjects, - LLVMMemoryBufferRef *ObjBuffer); +LLVM_C_ABI LLVMErrorRef LLVMOrcDumpObjects_CallOperator( + LLVMOrcDumpObjectsRef DumpObjects, LLVMMemoryBufferRef *ObjBuffer); /** * @} diff --git a/src/llvm-c/OrcEE.h b/src/llvm-c/OrcEE.h index d451187aa..7fd4a16f5 100644 --- a/src/llvm-c/OrcEE.h +++ b/src/llvm-c/OrcEE.h @@ -24,11 +24,12 @@ #ifndef LLVM_C_ORCEE_H #define LLVM_C_ORCEE_H -#include "llvm-c/Error.h" -#include "llvm-c/ExecutionEngine.h" -#include "llvm-c/Orc.h" -#include "llvm-c/TargetMachine.h" -#include "llvm-c/Types.h" +#include "Error.h" +#include "ExecutionEngine.h" +#include "Orc.h" +#include "TargetMachine.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -42,14 +43,31 @@ typedef void (*LLVMMemoryManagerNotifyTerminatingCallback)(void *CtxCtx); * @{ */ +/** + * Create a ObjectLinkingLayer instance using the standard JITLink + * InProcessMemoryManager for memory management. + */ +LLVM_C_ABI LLVMErrorRef +LLVMOrcCreateObjectLinkingLayerWithInProcessMemoryManager( + LLVMOrcObjectLayerRef *Result, LLVMOrcExecutionSessionRef ES); + /** * Create a RTDyldObjectLinkingLayer instance using the standard * SectionMemoryManager for memory management. */ -LLVMOrcObjectLayerRef +LLVM_C_ABI LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManager( LLVMOrcExecutionSessionRef ES); +/** + * Create a RTDyldObjectLinkingLayer instance using the standard + * SectionMemoryManager for memory management. If ReserveAlloc is true then + * a contiguous range of memory will be reserved for each object file. + */ +LLVM_C_ABI LLVMOrcObjectLayerRef +LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManagerReserveAlloc( + LLVMOrcExecutionSessionRef ES, LLVMBool ReserveAlloc); + /** * Create a RTDyldObjectLinkingLayer instance using MCJIT-memory-manager-like * callbacks. @@ -74,7 +92,7 @@ LLVMOrcCreateRTDyldObjectLinkingLayerWithSectionMemoryManager( * This scheme simply reuses the CreateContextCtx pointer as the one-and-only * allocation context. */ -LLVMOrcObjectLayerRef +LLVM_C_ABI LLVMOrcObjectLayerRef LLVMOrcCreateRTDyldObjectLinkingLayerWithMCJITMemoryManagerLikeCallbacks( LLVMOrcExecutionSessionRef ES, void *CreateContextCtx, LLVMMemoryManagerCreateContextCallback CreateContext, @@ -90,7 +108,7 @@ LLVMOrcCreateRTDyldObjectLinkingLayerWithMCJITMemoryManagerLikeCallbacks( * Note: Layer must be an RTDyldObjectLinkingLayer instance or * behavior is undefined. */ -void LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener( +LLVM_C_ABI void LLVMOrcRTDyldObjectLinkingLayerRegisterJITEventListener( LLVMOrcObjectLayerRef RTDyldObjLinkingLayer, LLVMJITEventListenerRef Listener); diff --git a/src/llvm-c/Remarks.h b/src/llvm-c/Remarks.h index ffe647a65..6bc10e85c 100644 --- a/src/llvm-c/Remarks.h +++ b/src/llvm-c/Remarks.h @@ -15,8 +15,9 @@ #ifndef LLVM_C_REMARKS_H #define LLVM_C_REMARKS_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" #ifdef __cplusplus #include #else @@ -61,14 +62,15 @@ typedef struct LLVMRemarkOpaqueString *LLVMRemarkStringRef; * * \since REMARKS_API_VERSION=0 */ -extern const char *LLVMRemarkStringGetData(LLVMRemarkStringRef String); +LLVM_C_ABI extern const char * +LLVMRemarkStringGetData(LLVMRemarkStringRef String); /** * Returns the size of the string. * * \since REMARKS_API_VERSION=0 */ -extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String); +LLVM_C_ABI extern uint32_t LLVMRemarkStringGetLen(LLVMRemarkStringRef String); /** * DebugLoc containing File, Line and Column. @@ -82,7 +84,7 @@ typedef struct LLVMRemarkOpaqueDebugLoc *LLVMRemarkDebugLocRef; * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkStringRef +LLVM_C_ABI extern LLVMRemarkStringRef LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL); /** @@ -90,14 +92,16 @@ LLVMRemarkDebugLocGetSourceFilePath(LLVMRemarkDebugLocRef DL); * * \since REMARKS_API_VERSION=0 */ -extern uint32_t LLVMRemarkDebugLocGetSourceLine(LLVMRemarkDebugLocRef DL); +LLVM_C_ABI 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); +LLVM_C_ABI extern uint32_t +LLVMRemarkDebugLocGetSourceColumn(LLVMRemarkDebugLocRef DL); /** * Element of the "Args" list. The key might give more information about what @@ -114,14 +118,15 @@ typedef struct LLVMRemarkOpaqueArg *LLVMRemarkArgRef; * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkStringRef LLVMRemarkArgGetKey(LLVMRemarkArgRef Arg); +LLVM_C_ABI 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); +LLVM_C_ABI extern LLVMRemarkStringRef +LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg); /** * Returns the debug location that is attached to the value of this argument. @@ -130,7 +135,8 @@ extern LLVMRemarkStringRef LLVMRemarkArgGetValue(LLVMRemarkArgRef Arg); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkDebugLocRef LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg); +LLVM_C_ABI extern LLVMRemarkDebugLocRef +LLVMRemarkArgGetDebugLoc(LLVMRemarkArgRef Arg); /** * A remark emitted by the compiler. @@ -144,7 +150,7 @@ typedef struct LLVMRemarkOpaqueEntry *LLVMRemarkEntryRef; * * \since REMARKS_API_VERSION=0 */ -extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark); /** * The type of the remark. For example, it can allow users to only keep the @@ -152,14 +158,15 @@ extern void LLVMRemarkEntryDispose(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern enum LLVMRemarkType LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern enum LLVMRemarkType +LLVMRemarkEntryGetType(LLVMRemarkEntryRef Remark); /** * Get the name of the pass that emitted this remark. * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkStringRef +LLVM_C_ABI extern LLVMRemarkStringRef LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark); /** @@ -167,7 +174,7 @@ LLVMRemarkEntryGetPassName(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkStringRef +LLVM_C_ABI extern LLVMRemarkStringRef LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark); /** @@ -175,7 +182,7 @@ LLVMRemarkEntryGetRemarkName(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkStringRef +LLVM_C_ABI extern LLVMRemarkStringRef LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark); /** @@ -185,7 +192,7 @@ LLVMRemarkEntryGetFunctionName(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkDebugLocRef +LLVM_C_ABI extern LLVMRemarkDebugLocRef LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark); /** @@ -195,14 +202,14 @@ LLVMRemarkEntryGetDebugLoc(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern uint64_t LLVMRemarkEntryGetHotness(LLVMRemarkEntryRef Remark); /** * The number of arguments the remark holds. * * \since REMARKS_API_VERSION=0 */ -extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark); /** * Get a new iterator to iterate over a remark's argument. @@ -213,7 +220,8 @@ extern uint32_t LLVMRemarkEntryGetNumArgs(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern LLVMRemarkArgRef +LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark); /** * Get the next argument in \p Remark from the position of \p It. @@ -224,8 +232,8 @@ extern LLVMRemarkArgRef LLVMRemarkEntryGetFirstArg(LLVMRemarkEntryRef Remark); * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkArgRef LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It, - LLVMRemarkEntryRef Remark); +LLVM_C_ABI extern LLVMRemarkArgRef +LLVMRemarkEntryGetNextArg(LLVMRemarkArgRef It, LLVMRemarkEntryRef Remark); typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef; @@ -240,8 +248,8 @@ typedef struct LLVMRemarkOpaqueParser *LLVMRemarkParserRef; * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf, - uint64_t Size); +LLVM_C_ABI extern LLVMRemarkParserRef +LLVMRemarkParserCreateYAML(const void *Buf, uint64_t Size); /** * Creates a remark parser that can be used to parse the buffer located in \p @@ -254,8 +262,8 @@ extern LLVMRemarkParserRef LLVMRemarkParserCreateYAML(const void *Buf, * * \since REMARKS_API_VERSION=1 */ -extern LLVMRemarkParserRef LLVMRemarkParserCreateBitstream(const void *Buf, - uint64_t Size); +LLVM_C_ABI extern LLVMRemarkParserRef +LLVMRemarkParserCreateBitstream(const void *Buf, uint64_t Size); /** * Returns the next remark in the file. @@ -299,14 +307,15 @@ extern LLVMRemarkParserRef LLVMRemarkParserCreateBitstream(const void *Buf, * * \since REMARKS_API_VERSION=0 */ -extern LLVMRemarkEntryRef LLVMRemarkParserGetNext(LLVMRemarkParserRef Parser); +LLVM_C_ABI 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); +LLVM_C_ABI extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser); /** * Returns a null-terminated string containing an error message. @@ -319,14 +328,15 @@ extern LLVMBool LLVMRemarkParserHasError(LLVMRemarkParserRef Parser); * * \since REMARKS_API_VERSION=0 */ -extern const char *LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser); +LLVM_C_ABI extern const char * +LLVMRemarkParserGetErrorMessage(LLVMRemarkParserRef Parser); /** * Releases all the resources used by \p Parser. * * \since REMARKS_API_VERSION=0 */ -extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser); +LLVM_C_ABI extern void LLVMRemarkParserDispose(LLVMRemarkParserRef Parser); /** * Returns the version of the remarks library. diff --git a/src/llvm-c/Support.h b/src/llvm-c/Support.h index 17657861b..2d9b86aab 100644 --- a/src/llvm-c/Support.h +++ b/src/llvm-c/Support.h @@ -14,9 +14,10 @@ #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" +#include "DataTypes.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -32,7 +33,7 @@ LLVM_C_EXTERN_C_BEGIN * * @see sys::DynamicLibrary::LoadLibraryPermanently() */ -LLVMBool LLVMLoadLibraryPermanently(const char* Filename); +LLVM_C_ABI LLVMBool LLVMLoadLibraryPermanently(const char *Filename); /** * This function parses the given arguments using the LLVM command line parser. @@ -42,8 +43,8 @@ LLVMBool LLVMLoadLibraryPermanently(const char* Filename); * * @see llvm::cl::ParseCommandLineOptions() */ -void LLVMParseCommandLineOptions(int argc, const char *const *argv, - const char *Overview); +LLVM_C_ABI void LLVMParseCommandLineOptions(int argc, const char *const *argv, + const char *Overview); /** * This function will search through all previously loaded dynamic @@ -52,7 +53,7 @@ void LLVMParseCommandLineOptions(int argc, const char *const *argv, * * @see sys::DynamicLibrary::SearchForAddressOfSymbol() */ -void *LLVMSearchForAddressOfSymbol(const char *symbolName); +LLVM_C_ABI void *LLVMSearchForAddressOfSymbol(const char *symbolName); /** * This functions permanently adds the symbol \p symbolName with the @@ -61,7 +62,7 @@ void *LLVMSearchForAddressOfSymbol(const char *symbolName); * * @see sys::DynamicLibrary::AddSymbol() */ -void LLVMAddSymbol(const char *symbolName, void *symbolValue); +LLVM_C_ABI void LLVMAddSymbol(const char *symbolName, void *symbolValue); /** * @} diff --git a/src/llvm-c/Target.h b/src/llvm-c/Target.h index 54367a41b..058e0cbf8 100644 --- a/src/llvm-c/Target.h +++ b/src/llvm-c/Target.h @@ -19,9 +19,11 @@ #ifndef LLVM_C_TARGET_H #define LLVM_C_TARGET_H -#include "llvm-c/ExternC.h" -#include "llvm-c/Types.h" -#include "llvm-c/Config/llvm-config.h" +#include "Deprecated.h" +#include "ExternC.h" +#include "Types.h" +#include "Visibility.h" +#include "Config/llvm-config.h" LLVM_C_EXTERN_C_BEGIN @@ -38,36 +40,37 @@ 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-c/Config/Targets.def" +#define LLVM_TARGET(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##TargetInfo(void); +#include "Config/Targets.def" #undef LLVM_TARGET /* Explicit undef to make SWIG happier */ -#define LLVM_TARGET(TargetName) void LLVMInitialize##TargetName##Target(void); -#include "llvm-c/Config/Targets.def" +#define LLVM_TARGET(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##Target(void); +#include "Config/Targets.def" #undef LLVM_TARGET /* Explicit undef to make SWIG happier */ -#define LLVM_TARGET(TargetName) \ - void LLVMInitialize##TargetName##TargetMC(void); -#include "llvm-c/Config/Targets.def" +#define LLVM_TARGET(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##TargetMC(void); +#include "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-c/Config/AsmPrinters.def" +#define LLVM_ASM_PRINTER(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##AsmPrinter(void); +#include "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-c/Config/AsmParsers.def" +#define LLVM_ASM_PARSER(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##AsmParser(void); +#include "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-c/Config/Disassemblers.def" +#define LLVM_DISASSEMBLER(TargetName) \ + LLVM_C_ABI void LLVMInitialize##TargetName##Disassembler(void); +#include "Config/Disassemblers.def" #undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */ /** LLVMInitializeAllTargetInfos - The main program should call this function if @@ -75,7 +78,7 @@ typedef struct LLVMOpaqueTargetLibraryInfotData *LLVMTargetLibraryInfoRef; support. */ static inline void LLVMInitializeAllTargetInfos(void) { #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetInfo(); -#include "llvm-c/Config/Targets.def" +#include "Config/Targets.def" #undef LLVM_TARGET /* Explicit undef to make SWIG happier */ } @@ -84,7 +87,7 @@ static inline void LLVMInitializeAllTargetInfos(void) { support. */ static inline void LLVMInitializeAllTargets(void) { #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##Target(); -#include "llvm-c/Config/Targets.def" +#include "Config/Targets.def" #undef LLVM_TARGET /* Explicit undef to make SWIG happier */ } @@ -93,7 +96,7 @@ static inline void LLVMInitializeAllTargets(void) { support. */ static inline void LLVMInitializeAllTargetMCs(void) { #define LLVM_TARGET(TargetName) LLVMInitialize##TargetName##TargetMC(); -#include "llvm-c/Config/Targets.def" +#include "Config/Targets.def" #undef LLVM_TARGET /* Explicit undef to make SWIG happier */ } @@ -102,7 +105,7 @@ static inline void LLVMInitializeAllTargetMCs(void) { available via the TargetRegistry. */ static inline void LLVMInitializeAllAsmPrinters(void) { #define LLVM_ASM_PRINTER(TargetName) LLVMInitialize##TargetName##AsmPrinter(); -#include "llvm-c/Config/AsmPrinters.def" +#include "Config/AsmPrinters.def" #undef LLVM_ASM_PRINTER /* Explicit undef to make SWIG happier */ } @@ -111,7 +114,7 @@ static inline void LLVMInitializeAllAsmPrinters(void) { available via the TargetRegistry. */ static inline void LLVMInitializeAllAsmParsers(void) { #define LLVM_ASM_PARSER(TargetName) LLVMInitialize##TargetName##AsmParser(); -#include "llvm-c/Config/AsmParsers.def" +#include "Config/AsmParsers.def" #undef LLVM_ASM_PARSER /* Explicit undef to make SWIG happier */ } @@ -121,7 +124,7 @@ static inline void LLVMInitializeAllAsmParsers(void) { static inline void LLVMInitializeAllDisassemblers(void) { #define LLVM_DISASSEMBLER(TargetName) \ LLVMInitialize##TargetName##Disassembler(); -#include "llvm-c/Config/Disassemblers.def" +#include "Config/Disassemblers.def" #undef LLVM_DISASSEMBLER /* Explicit undef to make SWIG happier */ } @@ -183,105 +186,121 @@ static inline LLVMBool LLVMInitializeNativeDisassembler(void) { * * @see Module::getDataLayout() */ -LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M); +LLVM_C_ABI LLVMTargetDataRef LLVMGetModuleDataLayout(LLVMModuleRef M); /** * Set the data layout for a module. * * @see Module::setDataLayout() */ -void LLVMSetModuleDataLayout(LLVMModuleRef M, LLVMTargetDataRef DL); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMTargetDataRef LLVMCreateTargetData(const char *StringRep); /** Deallocates a TargetData. See the destructor llvm::DataLayout::~DataLayout. */ -void LLVMDisposeTargetData(LLVMTargetDataRef TD); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI enum LLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD); /** Returns the pointer size in bytes for a target. See the method llvm::DataLayout::getPointerSize. */ -unsigned LLVMPointerSize(LLVMTargetDataRef TD); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD), + "Use of the global context is deprecated, use " + "LLVMIntPtrTypeInContext instead"); /** 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); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS), + "Use of the global context is deprecated, use LLVMIntPtrTypeForASInContext " + "instead"); /** 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMTypeRef LLVMIntPtrTypeForASInContext(LLVMContextRef C, + LLVMTargetDataRef TD, + unsigned AS); /** Computes the size of a type in bits for a target. See the method llvm::DataLayout::getTypeSizeInBits. */ -unsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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_ABI unsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD, + LLVMTypeRef StructTy, + unsigned Element); /** * @} diff --git a/src/llvm-c/TargetMachine.h b/src/llvm-c/TargetMachine.h index cbe891380..d529165a5 100644 --- a/src/llvm-c/TargetMachine.h +++ b/src/llvm-c/TargetMachine.h @@ -19,9 +19,10 @@ #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" +#include "ExternC.h" +#include "Target.h" +#include "Types.h" +#include "Visibility.h" LLVM_C_EXTERN_C_BEGIN @@ -74,35 +75,36 @@ typedef enum { } LLVMGlobalISelAbortMode; /** Returns the first llvm::Target in the registered targets list. */ -LLVMTargetRef LLVMGetFirstTarget(void); +LLVM_C_ABI LLVMTargetRef LLVMGetFirstTarget(void); /** Returns the next llvm::Target given a previous one (or null if there's none) */ -LLVMTargetRef LLVMGetNextTarget(LLVMTargetRef T); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI LLVMBool LLVMGetTargetFromTriple(const char *Triple, + LLVMTargetRef *T, + char **ErrorMessage); /** Returns the name of a target. See llvm::Target::getName */ -const char *LLVMGetTargetName(LLVMTargetRef T); +LLVM_C_ABI const char *LLVMGetTargetName(LLVMTargetRef T); /** Returns the description of a target. See llvm::Target::getDescription */ -const char *LLVMGetTargetDescription(LLVMTargetRef T); +LLVM_C_ABI const char *LLVMGetTargetDescription(LLVMTargetRef T); /** Returns if the target has a JIT */ -LLVMBool LLVMTargetHasJIT(LLVMTargetRef T); +LLVM_C_ABI LLVMBool LLVMTargetHasJIT(LLVMTargetRef T); /** Returns if the target has a TargetMachine associated */ -LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T); +LLVM_C_ABI LLVMBool LLVMTargetHasTargetMachine(LLVMTargetRef T); /** Returns if the target as an ASM backend (required for emitting output) */ -LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T); +LLVM_C_ABI LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T); /*===-- Target Machine ----------------------------------------------------===*/ /** @@ -112,35 +114,42 @@ LLVMBool LLVMTargetHasAsmBackend(LLVMTargetRef T); * LLVMDisposeTargetMachineOptions() after the call to * LLVMCreateTargetMachineWithOptions(). */ -LLVMTargetMachineOptionsRef LLVMCreateTargetMachineOptions(void); +LLVM_C_ABI LLVMTargetMachineOptionsRef LLVMCreateTargetMachineOptions(void); /** * Dispose of an LLVMTargetMachineOptionsRef instance. */ -void LLVMDisposeTargetMachineOptions(LLVMTargetMachineOptionsRef Options); +LLVM_C_ABI void +LLVMDisposeTargetMachineOptions(LLVMTargetMachineOptionsRef Options); -void LLVMTargetMachineOptionsSetCPU(LLVMTargetMachineOptionsRef Options, - const char *CPU); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetCPU(LLVMTargetMachineOptionsRef Options, + const char *CPU); /** * Set the list of features for the target machine. * * \param Features a comma-separated list of features. */ -void LLVMTargetMachineOptionsSetFeatures(LLVMTargetMachineOptionsRef Options, - const char *Features); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetFeatures(LLVMTargetMachineOptionsRef Options, + const char *Features); -void LLVMTargetMachineOptionsSetABI(LLVMTargetMachineOptionsRef Options, - const char *ABI); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetABI(LLVMTargetMachineOptionsRef Options, + const char *ABI); -void LLVMTargetMachineOptionsSetCodeGenOptLevel( - LLVMTargetMachineOptionsRef Options, LLVMCodeGenOptLevel Level); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetCodeGenOptLevel(LLVMTargetMachineOptionsRef Options, + LLVMCodeGenOptLevel Level); -void LLVMTargetMachineOptionsSetRelocMode(LLVMTargetMachineOptionsRef Options, - LLVMRelocMode Reloc); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetRelocMode(LLVMTargetMachineOptionsRef Options, + LLVMRelocMode Reloc); -void LLVMTargetMachineOptionsSetCodeModel(LLVMTargetMachineOptionsRef Options, - LLVMCodeModel CodeModel); +LLVM_C_ABI void +LLVMTargetMachineOptionsSetCodeModel(LLVMTargetMachineOptionsRef Options, + LLVMCodeModel CodeModel); /** * Create a new llvm::TargetMachine. @@ -150,90 +159,95 @@ void LLVMTargetMachineOptionsSetCodeModel(LLVMTargetMachineOptionsRef Options, * \param Options additional configuration (see * LLVMCreateTargetMachineOptions()). */ -LLVMTargetMachineRef -LLVMCreateTargetMachineWithOptions(LLVMTargetRef T, const char *Triple, - LLVMTargetMachineOptionsRef Options); +LLVM_C_ABI LLVMTargetMachineRef LLVMCreateTargetMachineWithOptions( + LLVMTargetRef T, const char *Triple, LLVMTargetMachineOptionsRef Options); /** 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); +LLVM_C_ABI 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); +LLVM_C_ABI void LLVMDisposeTargetMachine(LLVMTargetMachineRef T); /** Returns the Target used in a TargetMachine */ -LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI 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); +LLVM_C_ABI char *LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T); /** Create a DataLayout based on the targetMachine. */ -LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T); +LLVM_C_ABI LLVMTargetDataRef LLVMCreateTargetDataLayout(LLVMTargetMachineRef T); /** Set the target machine's ASM verbosity. */ -void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T, - LLVMBool VerboseAsm); +LLVM_C_ABI void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T, + LLVMBool VerboseAsm); /** Enable fast-path instruction selection. */ -void LLVMSetTargetMachineFastISel(LLVMTargetMachineRef T, LLVMBool Enable); +LLVM_C_ABI void LLVMSetTargetMachineFastISel(LLVMTargetMachineRef T, + LLVMBool Enable); /** Enable global instruction selection. */ -void LLVMSetTargetMachineGlobalISel(LLVMTargetMachineRef T, LLVMBool Enable); +LLVM_C_ABI void LLVMSetTargetMachineGlobalISel(LLVMTargetMachineRef T, + LLVMBool Enable); /** Set abort behaviour when global instruction selection fails to lower/select * an instruction. */ -void LLVMSetTargetMachineGlobalISelAbort(LLVMTargetMachineRef T, - LLVMGlobalISelAbortMode Mode); +LLVM_C_ABI void +LLVMSetTargetMachineGlobalISelAbort(LLVMTargetMachineRef T, + LLVMGlobalISelAbortMode Mode); /** Enable the MachineOutliner pass. */ -void LLVMSetTargetMachineMachineOutliner(LLVMTargetMachineRef T, - LLVMBool Enable); +LLVM_C_ABI void LLVMSetTargetMachineMachineOutliner(LLVMTargetMachineRef T, + LLVMBool Enable); /** 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, - const char *Filename, - LLVMCodeGenFileType codegen, - char **ErrorMessage); +LLVM_C_ABI LLVMBool LLVMTargetMachineEmitToFile(LLVMTargetMachineRef T, + LLVMModuleRef M, + const 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); +LLVM_C_ABI 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); +LLVM_C_ABI char *LLVMGetDefaultTargetTriple(void); /** Normalize a target triple. The result needs to be disposed with LLVMDisposeMessage. */ -char* LLVMNormalizeTargetTriple(const char* triple); +LLVM_C_ABI char *LLVMNormalizeTargetTriple(const char *triple); /** Get the host CPU as a string. The result needs to be disposed with LLVMDisposeMessage. */ -char* LLVMGetHostCPUName(void); +LLVM_C_ABI char *LLVMGetHostCPUName(void); /** Get the host CPU's features as a string. The result needs to be disposed with LLVMDisposeMessage. */ -char* LLVMGetHostCPUFeatures(void); +LLVM_C_ABI char *LLVMGetHostCPUFeatures(void); /** Adds the target-specific analysis passes to the pass manager. */ -void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM); +LLVM_C_ABI void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, + LLVMPassManagerRef PM); /** * @} diff --git a/src/llvm-c/Transforms/PassBuilder.h b/src/llvm-c/Transforms/PassBuilder.h index d297b57ca..bca13b08d 100644 --- a/src/llvm-c/Transforms/PassBuilder.h +++ b/src/llvm-c/Transforms/PassBuilder.h @@ -14,9 +14,10 @@ #ifndef LLVM_C_TRANSFORMS_PASSBUILDER_H #define LLVM_C_TRANSFORMS_PASSBUILDER_H -#include "llvm-c/Error.h" -#include "llvm-c/TargetMachine.h" -#include "llvm-c/Types.h" +#include "../Error.h" +#include "../TargetMachine.h" +#include "../Types.h" +#include "../Visibility.h" /** * @defgroup LLVMCCoreNewPM New Pass Manager @@ -46,9 +47,9 @@ typedef struct LLVMOpaquePassBuilderOptions *LLVMPassBuilderOptionsRef; * pipelines may also be invoked using `default` and friends. See opt for * full reference of the Passes format. */ -LLVMErrorRef LLVMRunPasses(LLVMModuleRef M, const char *Passes, - LLVMTargetMachineRef TM, - LLVMPassBuilderOptionsRef Options); +LLVM_C_ABI LLVMErrorRef LLVMRunPasses(LLVMModuleRef M, const char *Passes, + LLVMTargetMachineRef TM, + LLVMPassBuilderOptionsRef Options); /** * Construct and run a set of passes over a function. @@ -56,9 +57,9 @@ LLVMErrorRef LLVMRunPasses(LLVMModuleRef M, const char *Passes, * This function behaves the same as LLVMRunPasses, but operates on a single * function instead of an entire module. */ -LLVMErrorRef LLVMRunPassesOnFunction(LLVMValueRef F, const char *Passes, - LLVMTargetMachineRef TM, - LLVMPassBuilderOptionsRef Options); +LLVM_C_ABI LLVMErrorRef LLVMRunPassesOnFunction( + LLVMValueRef F, const char *Passes, LLVMTargetMachineRef TM, + LLVMPassBuilderOptionsRef Options); /** * Create a new set of options for a PassBuilder @@ -67,63 +68,75 @@ LLVMErrorRef LLVMRunPassesOnFunction(LLVMValueRef F, const char *Passes, * responsible for it. The client should call LLVMDisposePassBuilderOptions * to free the pass builder options. */ -LLVMPassBuilderOptionsRef LLVMCreatePassBuilderOptions(void); +LLVM_C_ABI LLVMPassBuilderOptionsRef LLVMCreatePassBuilderOptions(void); /** * Toggle adding the VerifierPass for the PassBuilder, ensuring all functions * inside the module is valid. */ -void LLVMPassBuilderOptionsSetVerifyEach(LLVMPassBuilderOptionsRef Options, - LLVMBool VerifyEach); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetVerifyEach(LLVMPassBuilderOptionsRef Options, + LLVMBool VerifyEach); /** * Toggle debug logging when running the PassBuilder */ -void LLVMPassBuilderOptionsSetDebugLogging(LLVMPassBuilderOptionsRef Options, - LLVMBool DebugLogging); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetDebugLogging(LLVMPassBuilderOptionsRef Options, + LLVMBool DebugLogging); /** * Specify a custom alias analysis pipeline for the PassBuilder to be used * instead of the default one. The string argument is not copied; the caller * is responsible for ensuring it outlives the PassBuilderOptions instance. */ -void LLVMPassBuilderOptionsSetAAPipeline(LLVMPassBuilderOptionsRef Options, - const char *AAPipeline); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetAAPipeline(LLVMPassBuilderOptionsRef Options, + const char *AAPipeline); -void LLVMPassBuilderOptionsSetLoopInterleaving( - LLVMPassBuilderOptionsRef Options, LLVMBool LoopInterleaving); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetLoopInterleaving(LLVMPassBuilderOptionsRef Options, + LLVMBool LoopInterleaving); -void LLVMPassBuilderOptionsSetLoopVectorization( - LLVMPassBuilderOptionsRef Options, LLVMBool LoopVectorization); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetLoopVectorization(LLVMPassBuilderOptionsRef Options, + LLVMBool LoopVectorization); -void LLVMPassBuilderOptionsSetSLPVectorization( - LLVMPassBuilderOptionsRef Options, LLVMBool SLPVectorization); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetSLPVectorization(LLVMPassBuilderOptionsRef Options, + LLVMBool SLPVectorization); -void LLVMPassBuilderOptionsSetLoopUnrolling(LLVMPassBuilderOptionsRef Options, - LLVMBool LoopUnrolling); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetLoopUnrolling(LLVMPassBuilderOptionsRef Options, + LLVMBool LoopUnrolling); -void LLVMPassBuilderOptionsSetForgetAllSCEVInLoopUnroll( +LLVM_C_ABI void LLVMPassBuilderOptionsSetForgetAllSCEVInLoopUnroll( LLVMPassBuilderOptionsRef Options, LLVMBool ForgetAllSCEVInLoopUnroll); -void LLVMPassBuilderOptionsSetLicmMssaOptCap(LLVMPassBuilderOptionsRef Options, - unsigned LicmMssaOptCap); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetLicmMssaOptCap(LLVMPassBuilderOptionsRef Options, + unsigned LicmMssaOptCap); -void LLVMPassBuilderOptionsSetLicmMssaNoAccForPromotionCap( +LLVM_C_ABI void LLVMPassBuilderOptionsSetLicmMssaNoAccForPromotionCap( LLVMPassBuilderOptionsRef Options, unsigned LicmMssaNoAccForPromotionCap); -void LLVMPassBuilderOptionsSetCallGraphProfile( - LLVMPassBuilderOptionsRef Options, LLVMBool CallGraphProfile); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetCallGraphProfile(LLVMPassBuilderOptionsRef Options, + LLVMBool CallGraphProfile); -void LLVMPassBuilderOptionsSetMergeFunctions(LLVMPassBuilderOptionsRef Options, - LLVMBool MergeFunctions); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetMergeFunctions(LLVMPassBuilderOptionsRef Options, + LLVMBool MergeFunctions); -void LLVMPassBuilderOptionsSetInlinerThreshold( - LLVMPassBuilderOptionsRef Options, int Threshold); +LLVM_C_ABI void +LLVMPassBuilderOptionsSetInlinerThreshold(LLVMPassBuilderOptionsRef Options, + int Threshold); /** * Dispose of a heap-allocated PassBuilderOptions instance */ -void LLVMDisposePassBuilderOptions(LLVMPassBuilderOptionsRef Options); +LLVM_C_ABI void +LLVMDisposePassBuilderOptions(LLVMPassBuilderOptionsRef Options); /** * @} diff --git a/src/llvm-c/Types.h b/src/llvm-c/Types.h index 4681500ef..b239ceefa 100644 --- a/src/llvm-c/Types.h +++ b/src/llvm-c/Types.h @@ -14,8 +14,8 @@ #ifndef LLVM_C_TYPES_H #define LLVM_C_TYPES_H -#include "llvm-c/DataTypes.h" -#include "llvm-c/ExternC.h" +#include "DataTypes.h" +#include "ExternC.h" LLVM_C_EXTERN_C_BEGIN diff --git a/src/llvm-c/Visibility.h b/src/llvm-c/Visibility.h new file mode 100644 index 000000000..737783e06 --- /dev/null +++ b/src/llvm-c/Visibility.h @@ -0,0 +1,44 @@ +/*===-- llvm-c/Visibility.h - Visibility macros for llvm-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 header defines visibility macros used for the LLVM C interface. These *| +|* macros are used to annotate C functions that should be exported as part of *| +|* a shared library or DLL. *| +|* *| +\*===----------------------------------------------------------------------===*/ + +#ifndef LLVM_C_VISIBILITY_H +#define LLVM_C_VISIBILITY_H + +#include "Config/llvm-config.h" + +/// LLVM_C_ABI is the export/visibility macro used to mark symbols declared in +/// llvm-c as exported when built as a shared library. + +#if !defined(LLVM_ABI_GENERATING_ANNOTATIONS) +// TODO(https://github.com/llvm/llvm-project/issues/145406): eliminate need for +// two preprocessor definitions to gate LLVM_ABI macro definitions. +#if defined(LLVM_ENABLE_LLVM_C_EXPORT_ANNOTATIONS) && \ + !defined(LLVM_BUILD_STATIC) +#if defined(_WIN32) && !defined(__MINGW32__) +#if defined(LLVM_EXPORTS) +#define LLVM_C_ABI __declspec(dllexport) +#else +#define LLVM_C_ABI __declspec(dllimport) +#endif +#elif defined(__has_attribute) && __has_attribute(visibility) +#define LLVM_C_ABI __attribute__((visibility("default"))) +#endif +#endif +#if !defined(LLVM_C_ABI) +#define LLVM_C_ABI +#endif +#endif + +#endif diff --git a/src/llvm-c/blake3.h b/src/llvm-c/blake3.h index 679477c3a..9bfdda4a9 100644 --- a/src/llvm-c/blake3.h +++ b/src/llvm-c/blake3.h @@ -17,6 +17,7 @@ #ifndef LLVM_C_BLAKE3_H #define LLVM_C_BLAKE3_H +#include "Visibility.h" #include #include @@ -24,7 +25,7 @@ extern "C" { #endif -#define LLVM_BLAKE3_VERSION_STRING "1.3.1" +#define LLVM_BLAKE3_VERSION_STRING "1.8.2" #define LLVM_BLAKE3_KEY_LEN 32 #define LLVM_BLAKE3_OUT_LEN 32 #define LLVM_BLAKE3_BLOCK_LEN 64 @@ -54,23 +55,24 @@ typedef struct { uint8_t cv_stack[(LLVM_BLAKE3_MAX_DEPTH + 1) * LLVM_BLAKE3_OUT_LEN]; } llvm_blake3_hasher; -const char *llvm_blake3_version(void); -void llvm_blake3_hasher_init(llvm_blake3_hasher *self); -void llvm_blake3_hasher_init_keyed(llvm_blake3_hasher *self, - const uint8_t key[LLVM_BLAKE3_KEY_LEN]); -void llvm_blake3_hasher_init_derive_key(llvm_blake3_hasher *self, - const char *context); -void llvm_blake3_hasher_init_derive_key_raw(llvm_blake3_hasher *self, - const void *context, - size_t context_len); -void llvm_blake3_hasher_update(llvm_blake3_hasher *self, const void *input, - size_t input_len); -void llvm_blake3_hasher_finalize(const llvm_blake3_hasher *self, uint8_t *out, - size_t out_len); -void llvm_blake3_hasher_finalize_seek(const llvm_blake3_hasher *self, - uint64_t seek, uint8_t *out, - size_t out_len); -void llvm_blake3_hasher_reset(llvm_blake3_hasher *self); +LLVM_C_ABI const char *llvm_blake3_version(void); +LLVM_C_ABI void llvm_blake3_hasher_init(llvm_blake3_hasher *self); +LLVM_C_ABI void +llvm_blake3_hasher_init_keyed(llvm_blake3_hasher *self, + const uint8_t key[LLVM_BLAKE3_KEY_LEN]); +LLVM_C_ABI void llvm_blake3_hasher_init_derive_key(llvm_blake3_hasher *self, + const char *context); +LLVM_C_ABI void llvm_blake3_hasher_init_derive_key_raw(llvm_blake3_hasher *self, + const void *context, + size_t context_len); +LLVM_C_ABI void llvm_blake3_hasher_update(llvm_blake3_hasher *self, + const void *input, size_t input_len); +LLVM_C_ABI void llvm_blake3_hasher_finalize(const llvm_blake3_hasher *self, + uint8_t *out, size_t out_len); +LLVM_C_ABI void llvm_blake3_hasher_finalize_seek(const llvm_blake3_hasher *self, + uint64_t seek, uint8_t *out, + size_t out_len); +LLVM_C_ABI void llvm_blake3_hasher_reset(llvm_blake3_hasher *self); #ifdef __cplusplus } diff --git a/src/llvm-c/lto.h b/src/llvm-c/lto.h index 5ceb02224..79f4f1f23 100644 --- a/src/llvm-c/lto.h +++ b/src/llvm-c/lto.h @@ -16,7 +16,7 @@ #ifndef LLVM_C_LTO_H #define LLVM_C_LTO_H -#include "llvm-c/ExternC.h" +#include "ExternC.h" #ifdef __cplusplus #include @@ -46,7 +46,7 @@ typedef bool lto_bool_t; * @{ */ -#define LTO_API_VERSION 29 +#define LTO_API_VERSION 30 /** * \since prior to LTO_API_VERSION=3 @@ -286,6 +286,21 @@ lto_module_get_symbol_name(lto_module_t mod, unsigned int index); extern lto_symbol_attributes lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index); +/** + * Returns the number of asm undefined symbols in the object module. + * + * \since prior to LTO_API_VERSION=30 + */ +extern unsigned int lto_module_get_num_asm_undef_symbols(lto_module_t mod); + +/** + * Returns the name of the ith asm undefined symbol in the object module. + * + * \since prior to LTO_API_VERSION=30 + */ +extern const char *lto_module_get_asm_undef_symbol_name(lto_module_t mod, + unsigned int index); + /** * Returns the module's linker options. *