[Mesa-dev] [PATCH] gallivm: fix issue with AtomicCmpXchg wrapper on llvm 3.5-3.8
Roland Scheidegger
sroland at vmware.com
Fri Aug 2 17:13:37 UTC 2019
Am 02.08.19 um 18:54 schrieb Brian Paul:
> On 08/02/2019 10:36 AM, sroland at vmware.com wrote:
>> From: Roland Scheidegger <sroland at vmware.com>
>>
>> These versions still need wrapper but already have both success and
>> failure ordering.
>> (Compile tested on llvm 3.7, llvm 3.8.)
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111102
>> ---
>> src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 16 +++++++++++++++-
>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
>> b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
>> index 79d10293e80..723c84d57c2 100644
>> --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
>> +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
>> @@ -822,15 +822,29 @@ static llvm::AtomicOrdering
>> mapFromLLVMOrdering(LLVMAtomicOrdering Ordering) {
>> llvm_unreachable("Invalid LLVMAtomicOrdering value!");
>> }
>> +#if HAVE_LLVM < 0x305
>> LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
>> LLVMValueRef Cmp, LLVMValueRef New,
>> LLVMAtomicOrdering SuccessOrdering,
>> LLVMAtomicOrdering FailureOrdering,
>> LLVMBool SingleThread)
>> {
>> - /* LLVM 3.8 doesn't have a second ordering and uses old
>> SynchronizationScope enum */
>> + /* LLVM < 3.5 doesn't have a second ordering and uses old
>> SynchronizationScope enum */
>> return
>> llvm::wrap(llvm::unwrap(B)->CreateAtomicCmpXchg(llvm::unwrap(Ptr),
>> llvm::unwrap(Cmp),
>>
>> llvm::unwrap(New), mapFromLLVMOrdering(SuccessOrdering),
>>
>> SingleThread ? llvm::SynchronizationScope::SingleThread :
>> llvm::SynchronizationScope::CrossThread));
>> }
>> +#else
>> +LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr,
>> + LLVMValueRef Cmp, LLVMValueRef New,
>> + LLVMAtomicOrdering SuccessOrdering,
>> + LLVMAtomicOrdering FailureOrdering,
>> + LLVMBool SingleThread)
>> +{
>> + return
>> llvm::wrap(llvm::unwrap(B)->CreateAtomicCmpXchg(llvm::unwrap(Ptr),
>> llvm::unwrap(Cmp),
>> +
>> llvm::unwrap(New), mapFromLLVMOrdering(SuccessOrdering),
>> +
>> mapFromLLVMOrdering(FailureOrdering),
>> +
>> SingleThread ? llvm::SynchronizationScope::SingleThread :
>> llvm::SynchronizationScope::CrossThread));
>> +}
>> +#endif
>> #endif
>>
>
> Could the #if / #endif logic be moved into the body of
> LLVMBuildAtomicCmpXchg() so the whole function isn't duplicated?
Ah yes sure. Somehow I didn't think of that...
Will change this before submit.
Roland
>
> Other than that,
> Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list