|
@@ -16,11 +16,10 @@
|
|
|
#define LLVM_C_CORE_H
|
|
|
|
|
|
#include "ErrorHandling.h"
|
|
|
+#include "ExternC.h"
|
|
|
#include "Types.h"
|
|
|
|
|
|
-#ifdef __cplusplus
|
|
|
-extern "C" {
|
|
|
-#endif
|
|
|
+LLVM_C_EXTERN_C_BEGIN
|
|
|
|
|
|
/**
|
|
|
* @defgroup LLVMC LLVM-C: C interface to LLVM
|
|
@@ -127,6 +126,7 @@ typedef enum {
|
|
|
LLVMShuffleVector = 52,
|
|
|
LLVMExtractValue = 53,
|
|
|
LLVMInsertValue = 54,
|
|
|
+ LLVMFreeze = 68,
|
|
|
|
|
|
/* Atomic operators */
|
|
|
LLVMFence = 55,
|
|
@@ -144,23 +144,25 @@ typedef enum {
|
|
|
} LLVMOpcode;
|
|
|
|
|
|
typedef enum {
|
|
|
- LLVMVoidTypeKind, /**< type with no size */
|
|
|
- LLVMHalfTypeKind, /**< 16 bit floating point type */
|
|
|
- LLVMFloatTypeKind, /**< 32 bit floating point type */
|
|
|
- LLVMDoubleTypeKind, /**< 64 bit floating point type */
|
|
|
- LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
|
|
|
- LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
|
|
|
- LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
|
|
|
- LLVMLabelTypeKind, /**< Labels */
|
|
|
- LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
|
|
|
- LLVMFunctionTypeKind, /**< Functions */
|
|
|
- LLVMStructTypeKind, /**< Structures */
|
|
|
- LLVMArrayTypeKind, /**< Arrays */
|
|
|
- LLVMPointerTypeKind, /**< Pointers */
|
|
|
- LLVMVectorTypeKind, /**< SIMD 'packed' format, or other vector type */
|
|
|
- LLVMMetadataTypeKind, /**< Metadata */
|
|
|
- LLVMX86_MMXTypeKind, /**< X86 MMX */
|
|
|
- LLVMTokenTypeKind /**< Tokens */
|
|
|
+ LLVMVoidTypeKind, /**< type with no size */
|
|
|
+ LLVMHalfTypeKind, /**< 16 bit floating point type */
|
|
|
+ LLVMFloatTypeKind, /**< 32 bit floating point type */
|
|
|
+ LLVMDoubleTypeKind, /**< 64 bit floating point type */
|
|
|
+ LLVMX86_FP80TypeKind, /**< 80 bit floating point type (X87) */
|
|
|
+ LLVMFP128TypeKind, /**< 128 bit floating point type (112-bit mantissa)*/
|
|
|
+ LLVMPPC_FP128TypeKind, /**< 128 bit floating point type (two 64-bits) */
|
|
|
+ LLVMLabelTypeKind, /**< Labels */
|
|
|
+ LLVMIntegerTypeKind, /**< Arbitrary bit width integers */
|
|
|
+ LLVMFunctionTypeKind, /**< Functions */
|
|
|
+ LLVMStructTypeKind, /**< Structures */
|
|
|
+ LLVMArrayTypeKind, /**< Arrays */
|
|
|
+ LLVMPointerTypeKind, /**< Pointers */
|
|
|
+ LLVMVectorTypeKind, /**< Fixed width SIMD vector type */
|
|
|
+ LLVMMetadataTypeKind, /**< Metadata */
|
|
|
+ LLVMX86_MMXTypeKind, /**< X86 MMX */
|
|
|
+ LLVMTokenTypeKind, /**< Tokens */
|
|
|
+ LLVMScalableVectorTypeKind, /**< Scalable SIMD vector type */
|
|
|
+ LLVMBFloatTypeKind /**< 16 bit brain floating point type */
|
|
|
} LLVMTypeKind;
|
|
|
|
|
|
typedef enum {
|
|
@@ -370,9 +372,13 @@ typedef enum {
|
|
|
LLVMAtomicRMWBinOpUMax, /**< Sets the value if it's greater than the
|
|
|
original using an unsigned comparison and return
|
|
|
the old one */
|
|
|
- LLVMAtomicRMWBinOpUMin /**< Sets the value if it's greater than the
|
|
|
- original using an unsigned comparison and return
|
|
|
- the old one */
|
|
|
+ LLVMAtomicRMWBinOpUMin, /**< Sets the value if it's greater than the
|
|
|
+ original using an unsigned comparison and return
|
|
|
+ the old one */
|
|
|
+ LLVMAtomicRMWBinOpFAdd, /**< Add a floating point value and return the
|
|
|
+ old one */
|
|
|
+ LLVMAtomicRMWBinOpFSub /**< Subtract a floating point value and return the
|
|
|
+ old one */
|
|
|
} LLVMAtomicRMWBinOp;
|
|
|
|
|
|
typedef enum {
|
|
@@ -1158,6 +1164,11 @@ unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy);
|
|
|
*/
|
|
|
LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C);
|
|
|
|
|
|
+/**
|
|
|
+ * Obtain a 16-bit brain floating point type from a context.
|
|
|
+ */
|
|
|
+LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C);
|
|
|
+
|
|
|
/**
|
|
|
* Obtain a 32-bit floating point type from a context.
|
|
|
*/
|
|
@@ -1190,6 +1201,7 @@ LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C);
|
|
|
* These map to the functions in this group of the same name.
|
|
|
*/
|
|
|
LLVMTypeRef LLVMHalfType(void);
|
|
|
+LLVMTypeRef LLVMBFloatType(void);
|
|
|
LLVMTypeRef LLVMFloatType(void);
|
|
|
LLVMTypeRef LLVMDoubleType(void);
|
|
|
LLVMTypeRef LLVMX86FP80Type(void);
|
|
@@ -1539,6 +1551,7 @@ LLVMTypeRef LLVMX86MMXType(void);
|
|
|
macro(GlobalVariable) \
|
|
|
macro(UndefValue) \
|
|
|
macro(Instruction) \
|
|
|
+ macro(UnaryOperator) \
|
|
|
macro(BinaryOperator) \
|
|
|
macro(CallInst) \
|
|
|
macro(IntrinsicInst) \
|
|
@@ -1571,6 +1584,8 @@ LLVMTypeRef LLVMX86MMXType(void);
|
|
|
macro(ResumeInst) \
|
|
|
macro(CleanupReturnInst) \
|
|
|
macro(CatchReturnInst) \
|
|
|
+ macro(CatchSwitchInst) \
|
|
|
+ macro(CallBrInst) \
|
|
|
macro(FuncletPadInst) \
|
|
|
macro(CatchPadInst) \
|
|
|
macro(CleanupPadInst) \
|
|
@@ -1592,7 +1607,11 @@ LLVMTypeRef LLVMX86MMXType(void);
|
|
|
macro(ZExtInst) \
|
|
|
macro(ExtractValueInst) \
|
|
|
macro(LoadInst) \
|
|
|
- macro(VAArgInst)
|
|
|
+ macro(VAArgInst) \
|
|
|
+ macro(FreezeInst) \
|
|
|
+ macro(AtomicCmpXchgInst) \
|
|
|
+ macro(AtomicRMWInst) \
|
|
|
+ macro(FenceInst)
|
|
|
|
|
|
/**
|
|
|
* @defgroup LLVMCCoreValueGeneral General APIs
|
|
@@ -3240,8 +3259,8 @@ LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef C);
|
|
|
* This expects an LLVMValueRef that corresponds to a llvm::CallInst or
|
|
|
* llvm::InvokeInst.
|
|
|
*
|
|
|
- * @see llvm::CallInst::getCalledValue()
|
|
|
- * @see llvm::InvokeInst::getCalledValue()
|
|
|
+ * @see llvm::CallInst::getCalledOperand()
|
|
|
+ * @see llvm::InvokeInst::getCalledOperand()
|
|
|
*/
|
|
|
LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr);
|
|
|
|
|
@@ -3617,7 +3636,7 @@ void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest);
|
|
|
/* Get the number of clauses on the landingpad instruction */
|
|
|
unsigned LLVMGetNumClauses(LLVMValueRef LandingPad);
|
|
|
|
|
|
-/* Get the value of the clause at idnex Idx on the landingpad instruction */
|
|
|
+/* Get the value of the clause at index Idx on the landingpad instruction */
|
|
|
LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx);
|
|
|
|
|
|
/* Add a catch or filter clause to the landingpad instruction */
|
|
@@ -3807,8 +3826,12 @@ LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
|
|
|
const char *Name);
|
|
|
LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
|
|
|
void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
|
|
|
+LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst);
|
|
|
+void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool IsWeak);
|
|
|
LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
|
|
|
void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
|
|
|
+LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst);
|
|
|
+void LLVMSetAtomicRMWBinOp(LLVMValueRef AtomicRMWInst, LLVMAtomicRMWBinOp BinOp);
|
|
|
|
|
|
/* Casts */
|
|
|
LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
|
|
@@ -3893,6 +3916,8 @@ LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef, LLVMValueRef AggVal,
|
|
|
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);
|
|
@@ -3912,6 +3937,26 @@ LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
|
|
|
LLVMAtomicOrdering FailureOrdering,
|
|
|
LLVMBool SingleThread);
|
|
|
|
|
|
+/**
|
|
|
+ * Get the number of elements in the mask of a ShuffleVector instruction.
|
|
|
+ */
|
|
|
+unsigned LLVMGetNumMaskElements(LLVMValueRef ShuffleVectorInst);
|
|
|
+
|
|
|
+/**
|
|
|
+ * \returns a constant that specifies that the result of a \c ShuffleVectorInst
|
|
|
+ * is undefined.
|
|
|
+ */
|
|
|
+int LLVMGetUndefMaskElem(void);
|
|
|
+
|
|
|
+/**
|
|
|
+ * Get the mask value at position Elt in the mask of a ShuffleVector
|
|
|
+ * instruction.
|
|
|
+ *
|
|
|
+ * \Returns the result of \c LLVMGetUndefMaskElem() if the mask value is undef
|
|
|
+ * at that position.
|
|
|
+ */
|
|
|
+int LLVMGetMaskValue(LLVMValueRef ShuffleVectorInst, unsigned Elt);
|
|
|
+
|
|
|
LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst);
|
|
|
void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool SingleThread);
|
|
|
|
|
@@ -4072,8 +4117,6 @@ LLVMBool LLVMIsMultithreaded(void);
|
|
|
* @}
|
|
|
*/
|
|
|
|
|
|
-#ifdef __cplusplus
|
|
|
-}
|
|
|
-#endif
|
|
|
+LLVM_C_EXTERN_C_END
|
|
|
|
|
|
#endif /* LLVM_C_CORE_H */
|