diff --git a/llvm/bindings/ocaml/llvm/llvm_ocaml.c b/llvm/bindings/ocaml/llvm/llvm_ocaml.c index 472519ccfab30..53158c88be19c 100644 --- a/llvm/bindings/ocaml/llvm/llvm_ocaml.c +++ b/llvm/bindings/ocaml/llvm/llvm_ocaml.c @@ -239,7 +239,9 @@ value llvm_dispose_context(value C) { } /* unit -> llcontext */ -value llvm_global_context(value Unit) { return to_val(LLVMGetGlobalContext()); } +value llvm_global_context(value Unit) { + return to_val(getGlobalContextForCAPI()); +} /* llcontext -> string -> int */ value llvm_mdkind_id(value C, value Name) { diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index 754cd409f83eb..f069b5bead848 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -157,6 +157,41 @@ Changes to the C API * Add `LLVMGetOrInsertFunction` to get or insert a function, replacing the combination of `LLVMGetNamedFunction` and `LLVMAddFunction`. * Allow `LLVMGetVolatile` to work with any kind of Instruction. +* Functions working on the global context have been deprecated. Use the + functions that work on a specific context instead. + + * `LLVMGetGlobalContext` -> use `LLVMContextCreate` context instead + * `LLVMInt1Type` -> `LLVMInt1TypeInContext` + * `LLVMInt8Type` -> `LLVMInt8TypeInContext` + * `LLVMInt16Type` -> `LLVMInt16TypeInContext` + * `LLVMInt32Type` -> `LLVMInt32TypeInContext` + * `LLVMInt64Type` -> `LLVMInt64TypeInContext` + * `LLVMInt128Type` -> `LLVMInt128TypeInContext` + * `LLVMIntType` -> `LLVMIntTypeInContext` + * `LLVMHalfType` -> `LLVMHalfTypeInContext` + * `LLVMBFloatType` -> `LLVMBFloatTypeInContext` + * `LLVMFloatType` -> `LLVMFloatTypeInContext` + * `LLVMDoubleType` -> `LLVMDoubleTypeInContext` + * `LLVMX86FP80Type` -> `LLVMX86FP80TypeInContext` + * `LLVMFP128Type` -> `LLVMFP128TypeInContext` + * `LLVMPPCFP128Type` -> `LLVMPPCFP128TypeInContext` + * `LLVMStructType` -> `LLVMStructTypeInContext` + * `LLVMVoidType` -> `LLVMVoidTypeInContext` + * `LLVMLabelType` -> `LLVMLabelTypeInContext` + * `LLVMX86AMXType` -> `LLVMX86AMXTypeInContext` + * `LLVMConstString` -> `LLVMConstStringInContext2` + * `LLVMConstStruct` -> `LLVMConstStructInContext` + * `LLVMMDString` -> `LLVMMDStringInContext2` + * `LLVMMDNode` -> `LLVMMDNodeInContext2` + * `LLVMAppendBasicBlock` -> `LLVMAppendBasicBlockInContext` + * `LLVMInsertBasicBlock` -> `LLVMInsertBasicBlockInContext` + * `LLVMCreateBuilder` -> `LLVMCreateBuilderInContext` + * `LLVMIntPtrType` -> `LLVMIntPtrTypeInContext` + * `LLVMIntPtrTypeForAS` -> `LLVMIntPtrTypeForASInContext` + * `LLVMParseBitcode` -> `LLVMParseBitcodeInContext2` + * `LLVMParseBitcode2` -> `LLVMParseBitcodeInContext2` + * `LLVMGetBitcodeModule` -> `LLVMGetBitcodeModuleInContext2` + * `LLVMGetBitcodeModule2` -> `LLVMGetBitcodeModuleInContext2` Changes to the CodeGen infrastructure ------------------------------------- diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c index b51fc930c4318..7c2446709018a 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsAddObjectFile/OrcV2CBindingsAddObjectFile.c @@ -28,16 +28,17 @@ LLVMModuleRef createDemoModule(LLVMContextRef Ctx) { // Add a "sum" function": // - Create the function type and function instance. - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); // - Add a basic block to the function. - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); // - Add an IR builder and point it at the end of the basic block. - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); // - Get the two function arguments and use them co construct an "add" diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c index 30806dc8d29e8..ae8362a18d361 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsBasicUsage/OrcV2CBindingsBasicUsage.c @@ -30,16 +30,17 @@ LLVMOrcThreadSafeModuleRef createDemoModule(void) { // Add a "sum" function": // - Create the function type and function instance. - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); // - Add a basic block to the function. - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); // - Add an IR builder and point it at the end of the basic block. - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); // - Get the two function arguments and use them co construct an "add" diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsDumpObjects/OrcV2CBindingsDumpObjects.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsDumpObjects/OrcV2CBindingsDumpObjects.c index 42a27c7054d47..07491c697cfd1 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsDumpObjects/OrcV2CBindingsDumpObjects.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsDumpObjects/OrcV2CBindingsDumpObjects.c @@ -33,12 +33,13 @@ int handleError(LLVMErrorRef Err) { LLVMOrcThreadSafeModuleRef createDemoModule(void) { LLVMContextRef Ctx = LLVMContextCreate(); LLVMModuleRef M = LLVMModuleCreateWithNameInContext("demo", Ctx); - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); LLVMValueRef SumArg0 = LLVMGetParam(SumFunction, 0); LLVMValueRef SumArg1 = LLVMGetParam(SumFunction, 1); diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsIRTransforms/OrcV2CBindingsIRTransforms.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsIRTransforms/OrcV2CBindingsIRTransforms.c index 7e4d2387cb14e..d2d800389c7a5 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsIRTransforms/OrcV2CBindingsIRTransforms.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsIRTransforms/OrcV2CBindingsIRTransforms.c @@ -34,12 +34,13 @@ int handleError(LLVMErrorRef Err) { LLVMOrcThreadSafeModuleRef createDemoModule(void) { LLVMContextRef Ctx = LLVMContextCreate(); LLVMModuleRef M = LLVMModuleCreateWithNameInContext("demo", Ctx); - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); LLVMValueRef SumArg0 = LLVMGetParam(SumFunction, 0); LLVMValueRef SumArg1 = LLVMGetParam(SumFunction, 1); diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsMCJITLikeMemoryManager/OrcV2CBindingsMCJITLikeMemoryManager.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsMCJITLikeMemoryManager/OrcV2CBindingsMCJITLikeMemoryManager.c index 6962c6980e787..f15a1145586af 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsMCJITLikeMemoryManager/OrcV2CBindingsMCJITLikeMemoryManager.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsMCJITLikeMemoryManager/OrcV2CBindingsMCJITLikeMemoryManager.c @@ -158,16 +158,17 @@ LLVMOrcThreadSafeModuleRef createDemoModule(void) { // Add a "sum" function": // - Create the function type and function instance. - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); // - Add a basic block to the function. - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); // - Add an IR builder and point it at the end of the basic block. - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); // - Get the two function arguments and use them co construct an "add" diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsRemovableCode/OrcV2CBindingsRemovableCode.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsRemovableCode/OrcV2CBindingsRemovableCode.c index 7f8a9cd334c6b..2d3e334b6a8ce 100644 --- a/llvm/examples/OrcV2Examples/OrcV2CBindingsRemovableCode/OrcV2CBindingsRemovableCode.c +++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsRemovableCode/OrcV2CBindingsRemovableCode.c @@ -30,16 +30,17 @@ LLVMOrcThreadSafeModuleRef createDemoModule(void) { // Add a "sum" function": // - Create the function type and function instance. - LLVMTypeRef ParamTypes[] = {LLVMInt32Type(), LLVMInt32Type()}; - LLVMTypeRef SumFunctionType = - LLVMFunctionType(LLVMInt32Type(), ParamTypes, 2, 0); + LLVMTypeRef Int32Type = LLVMInt32TypeInContext(Ctx); + LLVMTypeRef ParamTypes[] = {Int32Type, Int32Type}; + LLVMTypeRef SumFunctionType = LLVMFunctionType(Int32Type, ParamTypes, 2, 0); LLVMValueRef SumFunction = LLVMAddFunction(M, "sum", SumFunctionType); // - Add a basic block to the function. - LLVMBasicBlockRef EntryBB = LLVMAppendBasicBlock(SumFunction, "entry"); + LLVMBasicBlockRef EntryBB = + LLVMAppendBasicBlockInContext(Ctx, SumFunction, "entry"); // - Add an IR builder and point it at the end of the basic block. - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Ctx); LLVMPositionBuilderAtEnd(Builder, EntryBB); // - Get the two function arguments and use them co construct an "add" diff --git a/llvm/include/llvm-c/BitReader.h b/llvm/include/llvm-c/BitReader.h index 9dcdbf436454f..c38c3ce3e01b2 100644 --- a/llvm/include/llvm-c/BitReader.h +++ b/llvm/include/llvm-c/BitReader.h @@ -19,6 +19,7 @@ #ifndef LLVM_C_BITREADER_H #define LLVM_C_BITREADER_H +#include "llvm-c/Deprecated.h" #include "llvm-c/ExternC.h" #include "llvm-c/Types.h" #include "llvm-c/Visibility.h" @@ -37,14 +38,19 @@ LLVM_C_EXTERN_C_BEGIN Optionally returns a human-readable error message via OutMessage. This is deprecated. Use LLVMParseBitcode2. */ -LLVM_C_ABI 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. */ -LLVM_C_ABI 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. */ LLVM_C_ABI LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, @@ -77,12 +83,17 @@ LLVM_C_ABI LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, LLVMModuleRef *OutM); /* This is deprecated. Use LLVMGetBitcodeModule2. */ -LLVM_C_ABI LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, - LLVMModuleRef *OutM, - char **OutMessage); - -LLVM_C_ABI LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, - LLVMModuleRef *OutM); +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"); + +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/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h index 4e380d9bd5969..aa5c78c0a7686 100644 --- a/llvm/include/llvm-c/Core.h +++ b/llvm/include/llvm-c/Core.h @@ -582,7 +582,10 @@ LLVM_C_ABI LLVMContextRef LLVMContextCreate(void); /** * Obtain the global context instance. */ -LLVM_C_ABI LLVMContextRef LLVMGetGlobalContext(void); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMContextRef LLVMGetGlobalContext(void), + "Use of the global context is deprecated, create " + "one using LLVMContextCreate instead"); /** * Set the diagnostic handler for this context. @@ -655,7 +658,10 @@ LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI); LLVM_C_ABI unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name, unsigned SLen); -LLVM_C_ABI unsigned LLVMGetMDKindID(const char *Name, unsigned SLen); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + unsigned LLVMGetMDKindID(const char *Name, unsigned SLen), + "Use of the global context is deprecated, use LLVMGetMDKindIDInContext " + "instead"); /** * Maps a synchronization scope name to a ID unique within this context. @@ -774,7 +780,10 @@ LLVM_C_ABI LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name); * Every invocation should be paired with LLVMDisposeModule() or memory * will be leaked. */ -LLVM_C_ABI LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID), + "Use of the global context is deprecated, use " + "LLVMModuleCreateWithNameInContext instead"); /** * Create a new, empty module in a specific context. @@ -1369,13 +1378,35 @@ LLVM_C_ABI LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits); * Obtain an integer type from the global context with a specified bit * width. */ -LLVM_C_ABI LLVMTypeRef LLVMInt1Type(void); -LLVM_C_ABI LLVMTypeRef LLVMInt8Type(void); -LLVM_C_ABI LLVMTypeRef LLVMInt16Type(void); -LLVM_C_ABI LLVMTypeRef LLVMInt32Type(void); -LLVM_C_ABI LLVMTypeRef LLVMInt64Type(void); -LLVM_C_ABI LLVMTypeRef LLVMInt128Type(void); -LLVM_C_ABI LLVMTypeRef LLVMIntType(unsigned NumBits); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt1Type(void), + "Use of the global context is deprecated, use " + "LLVMInt1TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt8Type(void), + "Use of the global context is deprecated, use " + "LLVMInt8TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt16Type(void), + "Use of the global context is deprecated, use " + "LLVMInt16TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt32Type(void), + "Use of the global context is deprecated, use " + "LLVMInt32TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt64Type(void), + "Use of the global context is deprecated, use " + "LLVMInt64TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMInt128Type(void), + "Use of the global context is deprecated, use " + "LLVMInt128TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMIntType(unsigned NumBits), + "Use of the global context is deprecated, use " + "LLVMIntTypeInContext instead"); + LLVM_C_ABI unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy); /** @@ -1429,13 +1460,34 @@ LLVM_C_ABI LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C); * * These map to the functions in this group of the same name. */ -LLVM_C_ABI LLVMTypeRef LLVMHalfType(void); -LLVM_C_ABI LLVMTypeRef LLVMBFloatType(void); -LLVM_C_ABI LLVMTypeRef LLVMFloatType(void); -LLVM_C_ABI LLVMTypeRef LLVMDoubleType(void); -LLVM_C_ABI LLVMTypeRef LLVMX86FP80Type(void); -LLVM_C_ABI LLVMTypeRef LLVMFP128Type(void); -LLVM_C_ABI LLVMTypeRef LLVMPPCFP128Type(void); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMHalfType(void), + "Use of the global context is deprecated, use " + "LLVMHalfTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMBFloatType(void), + "Use of the global context is deprecated, use " + "LLVMBFloatTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMFloatType(void), + "Use of the global context is deprecated, use " + "LLVMFloatTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMDoubleType(void), + "Use of the global context is deprecated, use " + "LLVMDoubleTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMX86FP80Type(void), + "Use of the global context is deprecated, use " + "LLVMX86FP80TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMFP128Type(void), + "Use of the global context is deprecated, use " + "LLVMFP128TypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMPPCFP128Type(void), + "Use of the global context is deprecated, use " + "LLVMPPCFP128TypeInContext instead"); /** * @} @@ -1517,8 +1569,11 @@ LLVM_C_ABI LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, * * @see llvm::StructType::create() */ -LLVM_C_ABI LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, - unsigned ElementCount, LLVMBool Packed); +LLVM_C_ABI LLVM_ATTRIBUTE_C_DEPRECATED( + LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, + LLVMBool Packed), + "Use of the global context is deprecated, use LLVMStructTypeInContext " + "instead"); /** * Create an empty structure in a context having a specified name. @@ -1811,9 +1866,18 @@ LLVM_C_ABI LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C); * These are similar to the above functions except they operate on the * global context. */ -LLVM_C_ABI LLVMTypeRef LLVMVoidType(void); -LLVM_C_ABI LLVMTypeRef LLVMLabelType(void); -LLVM_C_ABI LLVMTypeRef LLVMX86AMXType(void); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMVoidType(void), + "Use of the global context is deprecated, use " + "LLVMVoidTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMLabelType(void), + "Use of the global context is deprecated, use " + "LLVMLabelTypeInContext instead"); +LLVM_C_ABI +LLVM_ATTRIBUTE_C_DEPRECATED(LLVMTypeRef LLVMX86AMXType(void), + "Use of the global context is deprecated, use " + "LLVMX86AMXTypeInContext instead"); /** * Create a target extension type in LLVM context. @@ -2406,8 +2470,11 @@ LLVM_C_ABI LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, * @see LLVMConstStringInContext() * @see llvm::ConstantDataArray::getString() */ -LLVM_C_ABI 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. @@ -2452,8 +2519,11 @@ LLVM_C_ABI LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, * * @see LLVMConstStructInContext() */ -LLVM_C_ABI 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. @@ -3390,12 +3460,18 @@ LLVM_C_ABI void LLVMReplaceMDNodeOperandWith(LLVMValueRef V, unsigned Index, LLVM_C_ABI LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, unsigned SLen); /** Deprecated: Use LLVMMDStringInContext2 instead. */ -LLVM_C_ABI 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. */ LLVM_C_ABI LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, unsigned Count); /** Deprecated: Use LLVMMDNodeInContext2 instead. */ -LLVM_C_ABI 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"); /** * @} @@ -3622,8 +3698,10 @@ LLVM_C_ABI LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, * * @see llvm::BasicBlock::Create() */ -LLVM_C_ABI 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. @@ -3642,8 +3720,11 @@ LLVM_C_ABI LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, * * @see llvm::BasicBlock::Create() */ -LLVM_C_ABI 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. @@ -4313,7 +4394,10 @@ LLVM_C_ABI const unsigned *LLVMGetIndices(LLVMValueRef Inst); */ LLVM_C_ABI LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C); -LLVM_C_ABI LLVMBuilderRef LLVMCreateBuilder(void); +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. diff --git a/llvm/include/llvm-c/Target.h b/llvm/include/llvm-c/Target.h index 03a3b563a6392..12bc1ac438729 100644 --- a/llvm/include/llvm-c/Target.h +++ b/llvm/include/llvm-c/Target.h @@ -19,6 +19,7 @@ #ifndef LLVM_C_TARGET_H #define LLVM_C_TARGET_H +#include "llvm-c/Deprecated.h" #include "llvm-c/ExternC.h" #include "llvm-c/Types.h" #include "llvm-c/Visibility.h" @@ -229,12 +230,18 @@ 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. */ -LLVM_C_ABI 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. */ -LLVM_C_ABI 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. */ diff --git a/llvm/include/llvm/IR/LLVMContext.h b/llvm/include/llvm/IR/LLVMContext.h index 5972dcb637dfa..83ce5f4b7b527 100644 --- a/llvm/include/llvm/IR/LLVMContext.h +++ b/llvm/include/llvm/IR/LLVMContext.h @@ -376,6 +376,9 @@ inline LLVMContextRef *wrap(const LLVMContext **Tys) { return reinterpret_cast(const_cast(Tys)); } +/// Get the deprecated global context for use by the C API. +LLVM_ABI LLVMContextRef getGlobalContextForCAPI(); + } // end namespace llvm #endif // LLVM_IR_LLVMCONTEXT_H diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index da2cf0770ec5a..5e7d612862475 100644 --- a/llvm/lib/Bitcode/Reader/BitReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitReader.cpp @@ -22,13 +22,14 @@ using namespace llvm; Optionally returns a human-readable error message via OutMessage. */ LLVMBool LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule, char **OutMessage) { - return LLVMParseBitcodeInContext(LLVMGetGlobalContext(), MemBuf, OutModule, + return LLVMParseBitcodeInContext(getGlobalContextForCAPI(), MemBuf, OutModule, OutMessage); } LLVMBool LLVMParseBitcode2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutModule) { - return LLVMParseBitcodeInContext2(LLVMGetGlobalContext(), MemBuf, OutModule); + return LLVMParseBitcodeInContext2(getGlobalContextForCAPI(), MemBuf, + OutModule); } LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef, @@ -122,11 +123,12 @@ LLVMBool LLVMGetBitcodeModuleInContext2(LLVMContextRef ContextRef, LLVMBool LLVMGetBitcodeModule(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM, char **OutMessage) { - return LLVMGetBitcodeModuleInContext(LLVMGetGlobalContext(), MemBuf, OutM, + return LLVMGetBitcodeModuleInContext(getGlobalContextForCAPI(), MemBuf, OutM, OutMessage); } LLVMBool LLVMGetBitcodeModule2(LLVMMemoryBufferRef MemBuf, LLVMModuleRef *OutM) { - return LLVMGetBitcodeModuleInContext2(LLVMGetGlobalContext(), MemBuf, OutM); + return LLVMGetBitcodeModuleInContext2(getGlobalContextForCAPI(), MemBuf, + OutM); } diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp index 27d8294b01264..9fa1fbed6c900 100644 --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -97,11 +97,15 @@ static LLVMContext &getGlobalContext() { return GlobalContext; } +LLVMContextRef llvm::getGlobalContextForCAPI() { + return wrap(&getGlobalContext()); +} + LLVMContextRef LLVMContextCreate() { return wrap(new LLVMContext()); } -LLVMContextRef LLVMGetGlobalContext() { return wrap(&getGlobalContext()); } +LLVMContextRef LLVMGetGlobalContext() { return getGlobalContextForCAPI(); } void LLVMContextSetDiagnosticHandler(LLVMContextRef C, LLVMDiagnosticHandler Handler, @@ -146,7 +150,7 @@ unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name, } unsigned LLVMGetMDKindID(const char *Name, unsigned SLen) { - return LLVMGetMDKindIDInContext(LLVMGetGlobalContext(), Name, SLen); + return LLVMGetMDKindIDInContext(getGlobalContextForCAPI(), Name, SLen); } unsigned LLVMGetSyncScopeID(LLVMContextRef C, const char *Name, size_t SLen) { @@ -681,25 +685,25 @@ LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits) { } LLVMTypeRef LLVMInt1Type(void) { - return LLVMInt1TypeInContext(LLVMGetGlobalContext()); + return LLVMInt1TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMInt8Type(void) { - return LLVMInt8TypeInContext(LLVMGetGlobalContext()); + return LLVMInt8TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMInt16Type(void) { - return LLVMInt16TypeInContext(LLVMGetGlobalContext()); + return LLVMInt16TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMInt32Type(void) { - return LLVMInt32TypeInContext(LLVMGetGlobalContext()); + return LLVMInt32TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMInt64Type(void) { - return LLVMInt64TypeInContext(LLVMGetGlobalContext()); + return LLVMInt64TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMInt128Type(void) { - return LLVMInt128TypeInContext(LLVMGetGlobalContext()); + return LLVMInt128TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMIntType(unsigned NumBits) { - return LLVMIntTypeInContext(LLVMGetGlobalContext(), NumBits); + return LLVMIntTypeInContext(getGlobalContextForCAPI(), NumBits); } unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) { @@ -734,28 +738,28 @@ LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C) { } LLVMTypeRef LLVMHalfType(void) { - return LLVMHalfTypeInContext(LLVMGetGlobalContext()); + return LLVMHalfTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMBFloatType(void) { - return LLVMBFloatTypeInContext(LLVMGetGlobalContext()); + return LLVMBFloatTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMFloatType(void) { - return LLVMFloatTypeInContext(LLVMGetGlobalContext()); + return LLVMFloatTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMDoubleType(void) { - return LLVMDoubleTypeInContext(LLVMGetGlobalContext()); + return LLVMDoubleTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMX86FP80Type(void) { - return LLVMX86FP80TypeInContext(LLVMGetGlobalContext()); + return LLVMX86FP80TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMFP128Type(void) { - return LLVMFP128TypeInContext(LLVMGetGlobalContext()); + return LLVMFP128TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMPPCFP128Type(void) { - return LLVMPPCFP128TypeInContext(LLVMGetGlobalContext()); + return LLVMPPCFP128TypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMX86AMXType(void) { - return LLVMX86AMXTypeInContext(LLVMGetGlobalContext()); + return LLVMX86AMXTypeInContext(getGlobalContextForCAPI()); } /*--.. Operations on function types ........................................--*/ @@ -795,7 +799,7 @@ LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes, LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed) { - return LLVMStructTypeInContext(LLVMGetGlobalContext(), ElementTypes, + return LLVMStructTypeInContext(getGlobalContextForCAPI(), ElementTypes, ElementCount, Packed); } @@ -952,10 +956,10 @@ LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C) { } LLVMTypeRef LLVMVoidType(void) { - return LLVMVoidTypeInContext(LLVMGetGlobalContext()); + return LLVMVoidTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMLabelType(void) { - return LLVMLabelTypeInContext(LLVMGetGlobalContext()); + return LLVMLabelTypeInContext(getGlobalContextForCAPI()); } LLVMTypeRef LLVMTargetExtTypeInContext(LLVMContextRef C, const char *Name, @@ -1296,7 +1300,7 @@ LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, } LLVMValueRef LLVMMDString(const char *Str, unsigned SLen) { - return LLVMMDStringInContext(LLVMGetGlobalContext(), Str, SLen); + return LLVMMDStringInContext(getGlobalContextForCAPI(), Str, SLen); } LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, @@ -1327,7 +1331,7 @@ LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, } LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count) { - return LLVMMDNodeInContext(LLVMGetGlobalContext(), Vals, Count); + return LLVMMDNodeInContext(getGlobalContextForCAPI(), Vals, Count); } LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD) { @@ -1620,7 +1624,7 @@ LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str, LLVMValueRef LLVMConstString(const char *Str, unsigned Length, LLVMBool DontNullTerminate) { - return LLVMConstStringInContext(LLVMGetGlobalContext(), Str, Length, + return LLVMConstStringInContext(getGlobalContextForCAPI(), Str, Length, DontNullTerminate); } @@ -1677,8 +1681,8 @@ LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed) { - return LLVMConstStructInContext(LLVMGetGlobalContext(), ConstantVals, Count, - Packed); + return LLVMConstStructInContext(getGlobalContextForCAPI(), ConstantVals, + Count, Packed); } LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, @@ -2882,7 +2886,7 @@ LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, } LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name) { - return LLVMAppendBasicBlockInContext(LLVMGetGlobalContext(), FnRef, Name); + return LLVMAppendBasicBlockInContext(getGlobalContextForCAPI(), FnRef, Name); } LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, @@ -2894,7 +2898,7 @@ LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef, const char *Name) { - return LLVMInsertBasicBlockInContext(LLVMGetGlobalContext(), BBRef, Name); + return LLVMInsertBasicBlockInContext(getGlobalContextForCAPI(), BBRef, Name); } void LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef) { @@ -3299,7 +3303,7 @@ LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C) { } LLVMBuilderRef LLVMCreateBuilder(void) { - return LLVMCreateBuilderInContext(LLVMGetGlobalContext()); + return LLVMCreateBuilderInContext(getGlobalContextForCAPI()); } static void LLVMPositionBuilderImpl(IRBuilder<> *Builder, BasicBlock *Block, diff --git a/llvm/lib/Target/Target.cpp b/llvm/lib/Target/Target.cpp index ec673ef4cda52..38e525321c96c 100644 --- a/llvm/lib/Target/Target.cpp +++ b/llvm/lib/Target/Target.cpp @@ -23,9 +23,6 @@ using namespace llvm; -// Avoid including "llvm-c/Core.h" for compile time, fwd-declare this instead. -extern "C" LLVMContextRef LLVMGetGlobalContext(void); - inline TargetLibraryInfoImpl *unwrap(LLVMTargetLibraryInfoRef P) { return reinterpret_cast(P); } @@ -79,11 +76,12 @@ unsigned LLVMPointerSizeForAS(LLVMTargetDataRef TD, unsigned AS) { } LLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD) { - return wrap(unwrap(TD)->getIntPtrType(*unwrap(LLVMGetGlobalContext()))); + return wrap(unwrap(TD)->getIntPtrType(*unwrap(getGlobalContextForCAPI()))); } LLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS) { - return wrap(unwrap(TD)->getIntPtrType(*unwrap(LLVMGetGlobalContext()), AS)); + return wrap( + unwrap(TD)->getIntPtrType(*unwrap(getGlobalContextForCAPI()), AS)); } LLVMTypeRef LLVMIntPtrTypeInContext(LLVMContextRef C, LLVMTargetDataRef TD) { diff --git a/llvm/tools/llvm-c-test/attributes.c b/llvm/tools/llvm-c-test/attributes.c index 088684cd3ed36..8d1735fdd041a 100644 --- a/llvm/tools/llvm-c-test/attributes.c +++ b/llvm/tools/llvm-c-test/attributes.c @@ -20,7 +20,8 @@ int llvm_test_function_attributes(void) { LLVMEnablePrettyStackTrace(); - LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, true); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = llvm_load_module(C, false, true); LLVMValueRef F = LLVMGetFirstFunction(M); while (F) { @@ -42,6 +43,7 @@ int llvm_test_function_attributes(void) { } LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } @@ -49,7 +51,8 @@ int llvm_test_function_attributes(void) { int llvm_test_callsite_attributes(void) { LLVMEnablePrettyStackTrace(); - LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, true); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = llvm_load_module(C, false, true); LLVMValueRef F = LLVMGetFirstFunction(M); while (F) { @@ -81,6 +84,7 @@ int llvm_test_callsite_attributes(void) { } LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } diff --git a/llvm/tools/llvm-c-test/calc.c b/llvm/tools/llvm-c-test/calc.c index 267397a373fbd..2fc0caedac6ad 100644 --- a/llvm/tools/llvm-c-test/calc.c +++ b/llvm/tools/llvm-c-test/calc.c @@ -45,6 +45,8 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, int depth = 0; int i; + LLVMContextRef C = LLVMGetBuilderContext(builder); + for (i = 0; i < ntokens; i++) { char tok = tokens[i][0]; switch (tok) { @@ -74,7 +76,7 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, return NULL; } - LLVMTypeRef ty = LLVMInt64Type(); + LLVMTypeRef ty = LLVMInt64TypeInContext(C); off = LLVMBuildGEP2(builder, ty, param, &stack[depth - 1], 1, ""); stack[depth - 1] = LLVMBuildLoad2(builder, ty, off, ""); @@ -94,7 +96,7 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens, return NULL; } - stack[depth++] = LLVMConstInt(LLVMInt64Type(), val, 1); + stack[depth++] = LLVMConstInt(LLVMInt64TypeInContext(C), val, 1); break; } } @@ -115,15 +117,17 @@ static void handle_line(char **tokens, int ntokens) { LLVMValueRef param; LLVMValueRef res; - LLVMModuleRef M = LLVMModuleCreateWithName(name); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext(name, C); - LLVMTypeRef I64ty = LLVMInt64Type(); + LLVMTypeRef I64ty = LLVMInt64TypeInContext(C); LLVMTypeRef I64Ptrty = LLVMPointerType(I64ty, 0); LLVMTypeRef Fty = LLVMFunctionType(I64ty, &I64Ptrty, 1, 0); LLVMValueRef F = LLVMAddFunction(M, name, Fty); - LLVMBuilderRef builder = LLVMCreateBuilder(); - LLVMPositionBuilderAtEnd(builder, LLVMAppendBasicBlock(F, "entry")); + LLVMBuilderRef builder = LLVMCreateBuilderInContext(C); + LLVMPositionBuilderAtEnd(builder, + LLVMAppendBasicBlockInContext(C, F, "entry")); LLVMGetParams(F, ¶m); LLVMSetValueName(param, "in"); @@ -138,6 +142,7 @@ static void handle_line(char **tokens, int ntokens) { LLVMDisposeBuilder(builder); LLVMDisposeModule(M); + LLVMContextDispose(C); } int llvm_calc(void) { diff --git a/llvm/tools/llvm-c-test/debuginfo.c b/llvm/tools/llvm-c-test/debuginfo.c index 9db7aa0929aab..c88ceeabf3be4 100644 --- a/llvm/tools/llvm-c-test/debuginfo.c +++ b/llvm/tools/llvm-c-test/debuginfo.c @@ -33,7 +33,8 @@ declare_objc_class(LLVMDIBuilderRef DIB, LLVMMetadataRef File) { int llvm_test_dibuilder(void) { const char *Filename = "debuginfo.c"; - LLVMModuleRef M = LLVMModuleCreateWithName(Filename); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext(Filename, C); LLVMSetIsNewDbgInfoFormat(M, true); assert(LLVMIsNewDbgInfoFormat(M)); @@ -101,15 +102,16 @@ int llvm_test_dibuilder(void) { LLVMAddNamedMetadataOperand(M, "FooType", LLVMMetadataAsValue(LLVMGetModuleContext(M), StructDbgPtrTy)); - + LLVMTypeRef I64Ty = LLVMInt64TypeInContext(C); LLVMTypeRef FooParamTys[] = { - LLVMInt64Type(), - LLVMInt64Type(), - LLVMVectorType(LLVMInt64Type(), 10), + I64Ty, + I64Ty, + LLVMVectorType(I64Ty, 10), }; - LLVMTypeRef FooFuncTy = LLVMFunctionType(LLVMInt64Type(), FooParamTys, 3, 0); + LLVMTypeRef FooFuncTy = LLVMFunctionType(I64Ty, FooParamTys, 3, 0); LLVMValueRef FooFunction = LLVMAddFunction(M, "foo", FooFuncTy); - LLVMBasicBlockRef FooEntryBlock = LLVMAppendBasicBlock(FooFunction, "entry"); + LLVMBasicBlockRef FooEntryBlock = + LLVMAppendBasicBlockInContext(C, FooFunction, "entry"); LLVMMetadataRef Subscripts[] = { LLVMDIBuilderGetOrCreateSubrange(DIB, 0, 10), @@ -130,9 +132,8 @@ int llvm_test_dibuilder(void) { LLVMDIFlagFwdDecl, "", 0); - LLVMMetadataRef FooParamLocation = - LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 42, 0, - ReplaceableFunctionMetadata, NULL); + LLVMMetadataRef FooParamLocation = LLVMDIBuilderCreateDebugLocation( + C, 42, 0, ReplaceableFunctionMetadata, NULL); LLVMMetadataRef FunctionMetadata = LLVMDIBuilderCreateFunction( DIB, File, "foo", 3, "foo", 3, File, 42, NULL, true, true, 42, 0, false); LLVMMetadataReplaceAllUsesWith(ReplaceableFunctionMetadata, FunctionMetadata); @@ -145,24 +146,24 @@ int llvm_test_dibuilder(void) { LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "a", 1, 1, File, 42, Int64Ty, true, 0); - LLVMDIBuilderInsertDeclareRecordAtEnd( - DIB, LLVMConstInt(LLVMInt64Type(), 0, false), FooParamVar1, - FooParamExpression, FooParamLocation, FooEntryBlock); + LLVMDIBuilderInsertDeclareRecordAtEnd(DIB, LLVMConstInt(I64Ty, 0, false), + FooParamVar1, FooParamExpression, + FooParamLocation, FooEntryBlock); LLVMMetadataRef FooParamVar2 = LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "b", 1, 2, File, 42, Int64Ty, true, 0); - LLVMDIBuilderInsertDeclareRecordAtEnd( - DIB, LLVMConstInt(LLVMInt64Type(), 0, false), FooParamVar2, - FooParamExpression, FooParamLocation, FooEntryBlock); + LLVMDIBuilderInsertDeclareRecordAtEnd(DIB, LLVMConstInt(I64Ty, 0, false), + FooParamVar2, FooParamExpression, + FooParamLocation, FooEntryBlock); LLVMMetadataRef FooParamVar3 = LLVMDIBuilderCreateParameterVariable( DIB, FunctionMetadata, "c", 1, 3, File, 42, VectorTy, true, 0); - LLVMDIBuilderInsertDeclareRecordAtEnd( - DIB, LLVMConstInt(LLVMInt64Type(), 0, false), FooParamVar3, - FooParamExpression, FooParamLocation, FooEntryBlock); + LLVMDIBuilderInsertDeclareRecordAtEnd(DIB, LLVMConstInt(I64Ty, 0, false), + FooParamVar3, FooParamExpression, + FooParamLocation, FooEntryBlock); LLVMSetSubprogram(FooFunction, FunctionMetadata); @@ -174,14 +175,14 @@ int llvm_test_dibuilder(void) { LLVMMetadataRef FooLexicalBlock = LLVMDIBuilderCreateLexicalBlock(DIB, FunctionMetadata, File, 42, 0); - LLVMBasicBlockRef FooVarBlock = LLVMAppendBasicBlock(FooFunction, "vars"); + LLVMBasicBlockRef FooVarBlock = + LLVMAppendBasicBlockInContext(C, FooFunction, "vars"); LLVMMetadataRef FooVarsLocation = - LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 43, 0, - FunctionMetadata, NULL); + LLVMDIBuilderCreateDebugLocation(C, 43, 0, FunctionMetadata, NULL); LLVMMetadataRef FooVar1 = LLVMDIBuilderCreateAutoVariable(DIB, FooLexicalBlock, "d", 1, File, 43, Int64Ty, true, 0, 0); - LLVMValueRef FooVal1 = LLVMConstInt(LLVMInt64Type(), 0, false); + LLVMValueRef FooVal1 = LLVMConstInt(I64Ty, 0, false); LLVMMetadataRef FooVarValueExpr1 = LLVMDIBuilderCreateConstantValueExpression(DIB, 0); @@ -190,7 +191,7 @@ int llvm_test_dibuilder(void) { LLVMMetadataRef FooVar2 = LLVMDIBuilderCreateAutoVariable( DIB, FooLexicalBlock, "e", 1, File, 44, Int64Ty, true, 0, 0); - LLVMValueRef FooVal2 = LLVMConstInt(LLVMInt64Type(), 1, false); + LLVMValueRef FooVal2 = LLVMConstInt(I64Ty, 1, false); LLVMMetadataRef FooVarValueExpr2 = LLVMDIBuilderCreateConstantValueExpression(DIB, 1); @@ -238,8 +239,8 @@ int llvm_test_dibuilder(void) { M, "LargeEnumTest", LLVMMetadataAsValue(LLVMGetModuleContext(M), LargeEnumTest)); - LLVMValueRef FooVal3 = LLVMConstInt(LLVMInt64Type(), 8, false); - LLVMValueRef FooVal4 = LLVMConstInt(LLVMInt64Type(), 4, false); + LLVMValueRef FooVal3 = LLVMConstInt(I64Ty, 8, false); + LLVMValueRef FooVal4 = LLVMConstInt(I64Ty, 4, false); LLVMMetadataRef lo = LLVMValueAsMetadata(FooVal1); LLVMMetadataRef hi = LLVMValueAsMetadata(FooVal2); LLVMMetadataRef strd = LLVMValueAsMetadata(FooVal3); @@ -371,13 +372,14 @@ int llvm_test_dibuilder(void) { LLVMDisposeBuilder(Builder); LLVMDisposeDIBuilder(DIB); LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } int llvm_get_di_tag(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); - LLVMContextRef Context = LLVMGetModuleContext(M); + LLVMContextRef Context = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext("Mod", Context); const char String[] = "foo"; LLVMMetadataRef StringMD = @@ -400,12 +402,14 @@ int llvm_get_di_tag(void) { LLVMDisposeDIBuilder(Builder); LLVMDisposeModule(M); + LLVMContextDispose(Context); return 0; } int llvm_di_type_get_name(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext("Mod", C); LLVMDIBuilderRef Builder = LLVMCreateDIBuilder(M); const char Filename[] = "metadata.c"; @@ -425,13 +429,15 @@ int llvm_di_type_get_name(void) { LLVMDisposeDIBuilder(Builder); LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } int llvm_add_globaldebuginfo(void) { const char *Filename = "debuginfo.c"; - LLVMModuleRef M = LLVMModuleCreateWithName(Filename); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext(Filename, C); LLVMDIBuilderRef Builder = LLVMCreateDIBuilder(M); LLVMMetadataRef File = LLVMDIBuilderCreateFile(Builder, Filename, strlen(Filename), ".", 1); @@ -447,13 +453,12 @@ int llvm_add_globaldebuginfo(void) { Builder, File, "global", 6, "", 0, File, 1, Int64TypeDef, true, GlobalVarValueExpr, NULL, 0); - LLVMTypeRef RecType = - LLVMStructCreateNamed(LLVMGetModuleContext(M), "struct"); + LLVMTypeRef RecType = LLVMStructCreateNamed(C, "struct"); LLVMValueRef Global = LLVMAddGlobal(M, RecType, "global"); LLVMGlobalAddDebugInfo(Global, GVE); // use AddMetadata to add twice - int kindId = LLVMGetMDKindID("dbg", 3); + int kindId = LLVMGetMDKindIDInContext(C, "dbg", 3); LLVMGlobalAddMetadata(Global, kindId, GVE); size_t numEntries; LLVMValueMetadataEntry *ME = LLVMGlobalCopyAllMetadata(Global, &numEntries); @@ -463,6 +468,7 @@ int llvm_add_globaldebuginfo(void) { LLVMDisposeValueMetadataEntries(ME); LLVMDisposeDIBuilder(Builder); LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } diff --git a/llvm/tools/llvm-c-test/diagnostic.c b/llvm/tools/llvm-c-test/diagnostic.c index 0f9b48b2aa551..49b37cda7e48f 100644 --- a/llvm/tools/llvm-c-test/diagnostic.c +++ b/llvm/tools/llvm-c-test/diagnostic.c @@ -45,7 +45,7 @@ static void diagnosticHandler(LLVMDiagnosticInfoRef DI, void *C) { static int handlerCalled = 0; int llvm_test_diagnostic_handler(void) { - LLVMContextRef C = LLVMGetGlobalContext(); + LLVMContextRef C = LLVMContextCreate(); LLVMContextSetDiagnosticHandler(C, diagnosticHandler, &handlerCalled); if (LLVMContextGetDiagnosticHandler(C) != diagnosticHandler) { @@ -69,7 +69,7 @@ int llvm_test_diagnostic_handler(void) { LLVMModuleRef M; - int Ret = LLVMGetBitcodeModule2(MB, &M); + int Ret = LLVMGetBitcodeModuleInContext2(C, MB, &M); if (Ret) LLVMDisposeMemoryBuffer(MB); @@ -79,5 +79,6 @@ int llvm_test_diagnostic_handler(void) { fprintf(stderr, "Diagnostic handler was not called while loading module\n"); } + LLVMContextDispose(C); return 0; } diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp index 026d815b43da7..bd640cd8d85ec 100644 --- a/llvm/tools/llvm-c-test/echo.cpp +++ b/llvm/tools/llvm-c-test/echo.cpp @@ -986,9 +986,10 @@ struct FunCloner { for (unsigned i = 0; i < NumMaskElts; i++) { int Val = LLVMGetMaskValue(Src, i); if (Val == LLVMGetUndefMaskElem()) { - MaskElts.push_back(LLVMGetUndef(LLVMInt64Type())); + MaskElts.push_back(LLVMGetUndef(LLVMInt64TypeInContext(Ctx))); } else { - MaskElts.push_back(LLVMConstInt(LLVMInt64Type(), Val, true)); + MaskElts.push_back( + LLVMConstInt(LLVMInt64TypeInContext(Ctx), Val, true)); } } LLVMValueRef Mask = LLVMConstVector(MaskElts.data(), NumMaskElts); @@ -1115,7 +1116,8 @@ struct FunCloner { if (Name != VName) report_fatal_error("Basic block name mismatch"); - LLVMBasicBlockRef BB = LLVMAppendBasicBlock(Fun, Name); + LLVMContextRef Ctx = LLVMGetModuleContext(M); + LLVMBasicBlockRef BB = LLVMAppendBasicBlockInContext(Ctx, Fun, Name); return BBMap[Src] = BB; } diff --git a/llvm/tools/llvm-c-test/metadata.c b/llvm/tools/llvm-c-test/metadata.c index 4fe8c00c57481..6dd18d1e5e881 100644 --- a/llvm/tools/llvm-c-test/metadata.c +++ b/llvm/tools/llvm-c-test/metadata.c @@ -19,37 +19,41 @@ #include int llvm_add_named_metadata_operand(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); - LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext("Mod", C); + LLVMValueRef Int = LLVMConstInt(LLVMInt32TypeInContext(C), 0, 0); // This used to trigger an assertion - LLVMAddNamedMetadataOperand(M, "name", LLVMMDNode(&Int, 1)); + LLVMAddNamedMetadataOperand(M, "name", LLVMMDNodeInContext(C, &Int, 1)); LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } int llvm_set_metadata(void) { - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMContextRef C = LLVMContextCreate(); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(C); // This used to trigger an assertion LLVMValueRef Return = LLVMBuildRetVoid(Builder); const char Name[] = "kind"; - LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); - LLVMSetMetadata(Return, LLVMGetMDKindID(Name, strlen(Name)), - LLVMMDNode(&Int, 1)); + LLVMValueRef Int = LLVMConstInt(LLVMInt32TypeInContext(C), 0, 0); + LLVMSetMetadata(Return, LLVMGetMDKindIDInContext(C, Name, strlen(Name)), + LLVMMDNodeInContext(C, &Int, 1)); LLVMDisposeBuilder(Builder); LLVMDeleteInstruction(Return); + LLVMContextDispose(C); return 0; } int llvm_replace_md_operand(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); - LLVMContextRef Context = LLVMGetModuleContext(M); + LLVMContextRef Context = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext("Mod", Context); const char String1[] = "foo"; LLVMMetadataRef String1MD = @@ -71,17 +75,18 @@ int llvm_replace_md_operand(void) { (void)String; LLVMDisposeModule(M); + LLVMContextDispose(Context); return 0; } int llvm_is_a_value_as_metadata(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); - LLVMContextRef Context = LLVMGetModuleContext(M); + LLVMContextRef Context = LLVMContextCreate(); + LLVMModuleRef M = LLVMModuleCreateWithNameInContext("Mod", Context); { - LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); - LLVMValueRef NodeMD = LLVMMDNode(&Int, 1); + LLVMValueRef Int = LLVMConstInt(LLVMInt32TypeInContext(Context), 0, 0); + LLVMValueRef NodeMD = LLVMMDNodeInContext(Context, &Int, 1); assert(LLVMIsAValueAsMetadata(NodeMD) == NodeMD); (void)NodeMD; } @@ -96,5 +101,8 @@ int llvm_is_a_value_as_metadata(void) { (void)Value; } + LLVMDisposeModule(M); + LLVMContextDispose(Context); + return 0; } diff --git a/llvm/tools/llvm-c-test/module.c b/llvm/tools/llvm-c-test/module.c index 9698f0983d5b6..daa97bba03a19 100644 --- a/llvm/tools/llvm-c-test/module.c +++ b/llvm/tools/llvm-c-test/module.c @@ -61,19 +61,22 @@ LLVMModuleRef llvm_load_module(LLVMContextRef C, bool Lazy, bool New) { } int llvm_module_dump(bool Lazy, bool New) { - LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), Lazy, New); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = llvm_load_module(C, Lazy, New); char *irstr = LLVMPrintModuleToString(M); puts(irstr); LLVMDisposeMessage(irstr); LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } int llvm_module_list_functions(void) { - LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, false); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = llvm_load_module(C, false, false); LLVMValueRef f; f = LLVMGetFirstFunction(M); @@ -109,12 +112,14 @@ int llvm_module_list_functions(void) { } LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } int llvm_module_list_globals(void) { - LLVMModuleRef M = llvm_load_module(LLVMGetGlobalContext(), false, false); + LLVMContextRef C = LLVMContextCreate(); + LLVMModuleRef M = llvm_load_module(C, false, false); LLVMValueRef g; g = LLVMGetFirstGlobal(M); @@ -132,6 +137,7 @@ int llvm_module_list_globals(void) { } LLVMDisposeModule(M); + LLVMContextDispose(C); return 0; } diff --git a/llvm/tools/llvm-c-test/object.c b/llvm/tools/llvm-c-test/object.c index 53ffb1acaffe6..8948f237af088 100644 --- a/llvm/tools/llvm-c-test/object.c +++ b/llvm/tools/llvm-c-test/object.c @@ -19,7 +19,6 @@ int llvm_object_list_sections(void) { LLVMMemoryBufferRef MB; - LLVMBinaryRef O; LLVMSectionIteratorRef sect; char *outBufferErr = NULL; @@ -30,7 +29,8 @@ int llvm_object_list_sections(void) { } char *outBinaryErr = NULL; - O = LLVMCreateBinary(MB, LLVMGetGlobalContext(), &outBinaryErr); + LLVMContextRef C = LLVMContextCreate(); + LLVMBinaryRef O = LLVMCreateBinary(MB, C, &outBinaryErr); if (!O || outBinaryErr) { fprintf(stderr, "Error reading object: %s\n", outBinaryErr); free(outBinaryErr); @@ -50,13 +50,13 @@ int llvm_object_list_sections(void) { LLVMDisposeBinary(O); LLVMDisposeMemoryBuffer(MB); + LLVMContextDispose(C); return 0; } int llvm_object_list_symbols(void) { LLVMMemoryBufferRef MB; - LLVMBinaryRef O; LLVMSectionIteratorRef sect; LLVMSymbolIteratorRef sym; @@ -68,7 +68,8 @@ int llvm_object_list_symbols(void) { } char *outBinaryErr = NULL; - O = LLVMCreateBinary(MB, LLVMGetGlobalContext(), &outBinaryErr); + LLVMContextRef C = LLVMContextCreate(); + LLVMBinaryRef O = LLVMCreateBinary(MB, C, &outBinaryErr); if (!O || outBinaryErr) { fprintf(stderr, "Error reading object: %s\n", outBinaryErr); free(outBinaryErr); @@ -92,6 +93,7 @@ int llvm_object_list_symbols(void) { LLVMDisposeBinary(O); LLVMDisposeMemoryBuffer(MB); + LLVMContextDispose(C); return 0; } diff --git a/llvm/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp b/llvm/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp index bc43515b3b1d2..f84ef04087c15 100644 --- a/llvm/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp +++ b/llvm/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp @@ -147,6 +147,7 @@ class MCJITCAPITest : public testing::Test, public MCJITTestAPICommon { didCallAllocateCodeSection = false; didAllocateCompactUnwindSection = false; didCallYield = false; + Context = LLVMContextCreate(); Module = nullptr; Function = nullptr; Engine = nullptr; @@ -158,21 +159,24 @@ class MCJITCAPITest : public testing::Test, public MCJITTestAPICommon { LLVMDisposeExecutionEngine(Engine); else if (Module) LLVMDisposeModule(Module); + LLVMContextDispose(Context); } void buildSimpleFunction() { - Module = LLVMModuleCreateWithName("simple_module"); + Module = LLVMModuleCreateWithNameInContext("simple_module", Context); LLVMSetTarget(Module, HostTripleName.c_str()); + LLVMTypeRef Int32Ty = LLVMInt32TypeInContext(Context); Function = LLVMAddFunction(Module, "simple_function", - LLVMFunctionType(LLVMInt32Type(), nullptr,0, 0)); + LLVMFunctionType(Int32Ty, nullptr, 0, 0)); LLVMSetFunctionCallConv(Function, LLVMCCallConv); - LLVMBasicBlockRef entry = LLVMAppendBasicBlock(Function, "entry"); - LLVMBuilderRef builder = LLVMCreateBuilder(); + LLVMBasicBlockRef entry = + LLVMAppendBasicBlockInContext(Context, Function, "entry"); + LLVMBuilderRef builder = LLVMCreateBuilderInContext(Context); LLVMPositionBuilderAtEnd(builder, entry); - LLVMBuildRet(builder, LLVMConstInt(LLVMInt32Type(), 42, 0)); + LLVMBuildRet(builder, LLVMConstInt(Int32Ty, 42, 0)); LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); LLVMDisposeMessage(Error); @@ -181,29 +185,31 @@ class MCJITCAPITest : public testing::Test, public MCJITTestAPICommon { } void buildFunctionThatUsesStackmap() { - Module = LLVMModuleCreateWithName("simple_module"); + Module = LLVMModuleCreateWithNameInContext("simple_module", Context); LLVMSetTarget(Module, HostTripleName.c_str()); - LLVMTypeRef stackmapParamTypes[] = { LLVMInt64Type(), LLVMInt32Type() }; - LLVMTypeRef stackmapTy = - LLVMFunctionType(LLVMVoidType(), stackmapParamTypes, 2, 1); + LLVMTypeRef Int64Ty = LLVMInt64TypeInContext(Context); + LLVMTypeRef Int32Ty = LLVMInt32TypeInContext(Context); + LLVMTypeRef VoidTy = LLVMVoidTypeInContext(Context); + LLVMTypeRef stackmapParamTypes[] = {Int64Ty, Int32Ty}; + LLVMTypeRef stackmapTy = LLVMFunctionType(VoidTy, stackmapParamTypes, 2, 1); LLVMValueRef stackmap = LLVMAddFunction( Module, "llvm.experimental.stackmap", stackmapTy); LLVMSetLinkage(stackmap, LLVMExternalLinkage); Function = LLVMAddFunction(Module, "simple_function", - LLVMFunctionType(LLVMInt32Type(), nullptr, 0, 0)); + LLVMFunctionType(Int32Ty, nullptr, 0, 0)); - LLVMBasicBlockRef entry = LLVMAppendBasicBlock(Function, "entry"); - LLVMBuilderRef builder = LLVMCreateBuilder(); + LLVMBasicBlockRef entry = + LLVMAppendBasicBlockInContext(Context, Function, "entry"); + LLVMBuilderRef builder = LLVMCreateBuilderInContext(Context); LLVMPositionBuilderAtEnd(builder, entry); - LLVMValueRef stackmapArgs[] = { - LLVMConstInt(LLVMInt64Type(), 0, 0), LLVMConstInt(LLVMInt32Type(), 5, 0), - LLVMConstInt(LLVMInt32Type(), 42, 0) - }; + LLVMValueRef stackmapArgs[] = {LLVMConstInt(Int64Ty, 0, 0), + LLVMConstInt(Int32Ty, 5, 0), + LLVMConstInt(Int32Ty, 42, 0)}; LLVMBuildCall2(builder, stackmapTy, stackmap, stackmapArgs, 3, ""); - LLVMBuildRet(builder, LLVMConstInt(LLVMInt32Type(), 42, 0)); + LLVMBuildRet(builder, LLVMConstInt(Int32Ty, 42, 0)); LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); LLVMDisposeMessage(Error); @@ -212,51 +218,56 @@ class MCJITCAPITest : public testing::Test, public MCJITTestAPICommon { } void buildModuleWithCodeAndData() { - Module = LLVMModuleCreateWithName("simple_module"); + Module = LLVMModuleCreateWithNameInContext("simple_module", Context); LLVMSetTarget(Module, HostTripleName.c_str()); + LLVMTypeRef Int32Ty = LLVMInt32TypeInContext(Context); + LLVMTypeRef VoidTy = LLVMVoidTypeInContext(Context); + // build a global int32 variable initialized to 42. - LLVMValueRef GlobalVar = LLVMAddGlobal(Module, LLVMInt32Type(), "intVal"); - LLVMSetInitializer(GlobalVar, LLVMConstInt(LLVMInt32Type(), 42, 0)); + LLVMValueRef GlobalVar = LLVMAddGlobal(Module, Int32Ty, "intVal"); + LLVMSetInitializer(GlobalVar, LLVMConstInt(Int32Ty, 42, 0)); { - Function = LLVMAddFunction(Module, "getGlobal", - LLVMFunctionType(LLVMInt32Type(), nullptr, 0, 0)); - LLVMSetFunctionCallConv(Function, LLVMCCallConv); + Function = LLVMAddFunction(Module, "getGlobal", + LLVMFunctionType(Int32Ty, nullptr, 0, 0)); + LLVMSetFunctionCallConv(Function, LLVMCCallConv); - LLVMBasicBlockRef Entry = LLVMAppendBasicBlock(Function, "entry"); - LLVMBuilderRef Builder = LLVMCreateBuilder(); - LLVMPositionBuilderAtEnd(Builder, Entry); + LLVMBasicBlockRef Entry = + LLVMAppendBasicBlockInContext(Context, Function, "entry"); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Context); + LLVMPositionBuilderAtEnd(Builder, Entry); - LLVMValueRef IntVal = - LLVMBuildLoad2(Builder, LLVMInt32Type(), GlobalVar, "intVal"); - LLVMBuildRet(Builder, IntVal); + LLVMValueRef IntVal = + LLVMBuildLoad2(Builder, Int32Ty, GlobalVar, "intVal"); + LLVMBuildRet(Builder, IntVal); - LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); - LLVMDisposeMessage(Error); + LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); + LLVMDisposeMessage(Error); - LLVMDisposeBuilder(Builder); + LLVMDisposeBuilder(Builder); } { - LLVMTypeRef ParamTypes[] = { LLVMInt32Type() }; - Function2 = LLVMAddFunction( - Module, "setGlobal", LLVMFunctionType(LLVMVoidType(), ParamTypes, 1, 0)); - LLVMSetFunctionCallConv(Function2, LLVMCCallConv); + LLVMTypeRef ParamTypes[] = {Int32Ty}; + Function2 = LLVMAddFunction(Module, "setGlobal", + LLVMFunctionType(VoidTy, ParamTypes, 1, 0)); + LLVMSetFunctionCallConv(Function2, LLVMCCallConv); - LLVMBasicBlockRef Entry = LLVMAppendBasicBlock(Function2, "entry"); - LLVMBuilderRef Builder = LLVMCreateBuilder(); - LLVMPositionBuilderAtEnd(Builder, Entry); + LLVMBasicBlockRef Entry = + LLVMAppendBasicBlockInContext(Context, Function2, "entry"); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Context); + LLVMPositionBuilderAtEnd(Builder, Entry); - LLVMValueRef Arg = LLVMGetParam(Function2, 0); - LLVMBuildStore(Builder, Arg, GlobalVar); - LLVMBuildRetVoid(Builder); + LLVMValueRef Arg = LLVMGetParam(Function2, 0); + LLVMBuildStore(Builder, Arg, GlobalVar); + LLVMBuildRetVoid(Builder); - LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); - LLVMDisposeMessage(Error); + LLVMVerifyModule(Module, LLVMAbortProcessAction, &Error); + LLVMDisposeMessage(Error); - LLVMDisposeBuilder(Builder); + LLVMDisposeBuilder(Builder); } } @@ -309,6 +320,7 @@ class MCJITCAPITest : public testing::Test, public MCJITTestAPICommon { LLVMDisposePassBuilderOptions(Options); } + LLVMContextRef Context; LLVMModuleRef Module; LLVMValueRef Function; LLVMValueRef Function2; @@ -335,10 +347,11 @@ TEST_F(MCJITCAPITest, simple_function) { TEST_F(MCJITCAPITest, gva) { SKIP_UNSUPPORTED_PLATFORM; - Module = LLVMModuleCreateWithName("simple_module"); + Module = LLVMModuleCreateWithNameInContext("simple_module", Context); LLVMSetTarget(Module, HostTripleName.c_str()); - LLVMValueRef GlobalVar = LLVMAddGlobal(Module, LLVMInt32Type(), "simple_value"); - LLVMSetInitializer(GlobalVar, LLVMConstInt(LLVMInt32Type(), 42, 0)); + LLVMTypeRef Int32Ty = LLVMInt32TypeInContext(Context); + LLVMValueRef GlobalVar = LLVMAddGlobal(Module, Int32Ty, "simple_value"); + LLVMSetInitializer(GlobalVar, LLVMConstInt(Int32Ty, 42, 0)); buildMCJITOptions(); buildMCJITEngine(); @@ -451,8 +464,7 @@ TEST_F(MCJITCAPITest, yield) { buildSimpleFunction(); buildMCJITOptions(); buildMCJITEngine(); - LLVMContextRef C = LLVMGetGlobalContext(); - LLVMContextSetYieldCallback(C, yield, nullptr); + LLVMContextSetYieldCallback(Context, yield, nullptr); buildAndRunPasses(); auto *functionPointer = reinterpret_cast( @@ -469,14 +481,16 @@ static int localTestFunc() { TEST_F(MCJITCAPITest, addGlobalMapping) { SKIP_UNSUPPORTED_PLATFORM; - Module = LLVMModuleCreateWithName("testModule"); + Module = LLVMModuleCreateWithNameInContext("testModule", Context); LLVMSetTarget(Module, HostTripleName.c_str()); - LLVMTypeRef FunctionType = LLVMFunctionType(LLVMInt32Type(), nullptr, 0, 0); + LLVMTypeRef Int32Ty = LLVMInt32TypeInContext(Context); + LLVMTypeRef FunctionType = LLVMFunctionType(Int32Ty, nullptr, 0, 0); LLVMValueRef MappedFn = LLVMAddFunction(Module, "mapped_fn", FunctionType); Function = LLVMAddFunction(Module, "test_fn", FunctionType); - LLVMBasicBlockRef Entry = LLVMAppendBasicBlock(Function, ""); - LLVMBuilderRef Builder = LLVMCreateBuilder(); + LLVMBasicBlockRef Entry = + LLVMAppendBasicBlockInContext(Context, Function, ""); + LLVMBuilderRef Builder = LLVMCreateBuilderInContext(Context); LLVMPositionBuilderAtEnd(Builder, Entry); LLVMValueRef RetVal = LLVMBuildCall2(Builder, FunctionType, MappedFn, nullptr, 0, "");