[llvm] [LLVM] Add a C API for creating instructions with custom syncscopes. (PR #104775)
Tim Besard via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 19 11:48:02 PDT 2024
================
@@ -4369,12 +4369,14 @@ int LLVMGetMaskValue(LLVMValueRef SVInst, unsigned Elt) {
int LLVMGetUndefMaskElem(void) { return PoisonMaskElem; }
LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst) {
- return getAtomicSyncScopeID(unwrap<Instruction>(AtomicInst)).value() ==
- SyncScope::SingleThread;
+ Instruction *I = unwrap<Instruction>(AtomicInst);
+ if (!I->isAtomic())
+ return 0;
+ return getAtomicSyncScopeID(I).value() == SyncScope::SingleThread;
}
unsigned LLVMGetAtomicSyncScopeID(LLVMValueRef AtomicInst) {
- return getAtomicSyncScopeID(unwrap<Instruction>(AtomicInst)).value();
+ return getAtomicSyncScopeID(unwrap<Instruction>(AtomicInst)).value_or(-1);
}
----------------
maleadt wrote:
I'm not really happy with this, but `LLVMIsAtomicSingleThread` used to work on non-atomic instructions, so I guess it needs to keep working like that. And because of how `llvm-c-test --echo` clones instructions, that implies `LLVMGetAtomicSyncScopeID` needs to support it as well. Or should I add an `LLVMInstructionIsAtomic` wrapper for `isAtomic` and make `LLVMGetAtomicSyncScopeID` only support relevant instructions?
https://github.com/llvm/llvm-project/pull/104775
More information about the llvm-commits
mailing list