[llvm] [llvm-c] APIs for acquiring and releasing ThreadSafeContext locks (PR #146598)
Bogdan-Alexandru Geană via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 1 13:43:44 PDT 2025
https://github.com/abgeana updated https://github.com/llvm/llvm-project/pull/146598
>From 409864f9a60ec93571221ad0c26e8480cd0d4868 Mon Sep 17 00:00:00 2001
From: Alexandru Geana <git at geana.io>
Date: Tue, 1 Jul 2025 22:28:16 +0200
Subject: [PATCH] [llvm-c] APIs for acquiring and releasing ThreadSafeContext
locks
---
llvm/docs/ReleaseNotes.md | 3 +++
llvm/include/llvm-c/Orc.h | 18 ++++++++++++++++++
.../lib/ExecutionEngine/Orc/OrcV2CBindings.cpp | 12 ++++++++++++
3 files changed, 33 insertions(+)
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 73ae2ee599640..c42470bbcc03d 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -256,6 +256,9 @@ Changes to the C API
* Added ``LLVMGetICmpSameSign`` and ``LLVMSetICmpSameSign`` for the `samesign`
flag on `icmp` instructions.
+* Added `LLVMOrcThreadSafeContextGetLock` and `LLVMOrcThreadSafeContextReleaseLock`
+ for acquiring and releasing locks associated with `ThreadSafeContext` instances.
+
Changes to the CodeGen infrastructure
-------------------------------------
diff --git a/llvm/include/llvm-c/Orc.h b/llvm/include/llvm-c/Orc.h
index 743ba1d581782..5f07a069cfd5b 100644
--- a/llvm/include/llvm-c/Orc.h
+++ b/llvm/include/llvm-c/Orc.h
@@ -385,6 +385,12 @@ typedef int (*LLVMOrcSymbolPredicate)(void *Ctx,
*/
typedef struct LLVMOrcOpaqueThreadSafeContext *LLVMOrcThreadSafeContextRef;
+/**
+ * A reference to an orc::ThreadSafeContext::Lock instance.
+ */
+typedef struct LLVMOrcOpaqueThreadSafeContextLock
+ *LLVMOrcThreadSafeContextLockRef;
+
/**
* A reference to an orc::ThreadSafeModule instance.
*/
@@ -1082,6 +1088,18 @@ LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx);
*/
void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx);
+/**
+ * Acquire the lock associated with a ThreadSafeContext.
+ */
+LLVMOrcThreadSafeContextLockRef
+LLVMOrcThreadSafeContextGetLock(LLVMOrcThreadSafeContextRef TSCtx);
+
+/**
+ * Release the lock associated with a ThreadSafeContext.
+ */
+void LLVMOrcThreadSafeContextReleaseLock(
+ LLVMOrcThreadSafeContextLockRef TSCtxLock);
+
/**
* Create a ThreadSafeModule wrapper around the given LLVM module. This takes
* ownership of the M argument which should not be disposed of or referenced
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
index 9999e1ff3bf00..b8dd411bc0b8b 100644
--- a/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp
@@ -61,6 +61,8 @@ DEFINE_SIMPLE_CONVERSION_FUNCTIONS(DefinitionGenerator,
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(InProgressLookupState, LLVMOrcLookupStateRef)
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ThreadSafeContext,
LLVMOrcThreadSafeContextRef)
+DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ThreadSafeContext::Lock,
+ LLVMOrcThreadSafeContextLockRef)
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ThreadSafeModule, LLVMOrcThreadSafeModuleRef)
DEFINE_SIMPLE_CONVERSION_FUNCTIONS(JITTargetMachineBuilder,
LLVMOrcJITTargetMachineBuilderRef)
@@ -738,6 +740,16 @@ void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx) {
delete unwrap(TSCtx);
}
+LLVMOrcThreadSafeContextLockRef
+LLVMOrcThreadSafeContextGetLock(LLVMOrcThreadSafeContextRef TSCtx) {
+ return wrap(new ThreadSafeContext::Lock(std::move(unwrap(TSCtx)->getLock())));
+}
+
+void LLVMOrcThreadSafeContextReleaseLock(
+ LLVMOrcThreadSafeContextLockRef TSCtxLock) {
+ delete unwrap(TSCtxLock);
+}
+
LLVMErrorRef
LLVMOrcThreadSafeModuleWithModuleDo(LLVMOrcThreadSafeModuleRef TSM,
LLVMOrcGenericIRModuleOperationFunction F,
More information about the llvm-commits
mailing list