[llvm-dev] cmpxchg on floats

JF Bastien via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 17 14:38:18 PDT 2020



> On Aug 17, 2020, at 9:37 AM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> 
> On Fri, Aug 14, 2020 at 7:42 PM JF Bastien <jfbastien at apple.com> wrote:
>> We (C, C++, and LLVM) are generally moving towards supporting FP as a first-class thing with all atomic operations †, including cmpxchg. It’s indeed *usually* specified as a bitwise comparison, not a floating-point one, although IIRC AMD has an FP cmpxchg.
> 
> We do, but this should arguably be a different instruction because it
> behaves differently from bitwise compare.

I wholeheartedly agree to separating them :)


> Cheers,
> Nicolai
> 
> 
>> Similarly, some of the operations are allowed to have separate FP state (say, atomic add won’t necessarily affect the scalar FP execution’s exception state, might have a different rounding mode, etc).
>> 
>> I’m OK with MLIR matching the current state of LLVM, but I want to point out that the docs might be incorrect, or are expected to change in the future.
>> 
>> † See http://wg21.link/p0020 as well as r360421 D58251 D50491 D26266 D26266 r264845 D15471
>> 
>> On Aug 14, 2020, at 6:15 AM, Nicolai Hähnle via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> 
>> We've relaxed `atomicrmw xchg` to support floating point types but not
>> cmpxchg -- the cmpxchg comparison behavior is not a floating point
>> comparison, so that would be potentially misleading. I'd say adding
>> the assertion is a good idea.
>> 
>> Cheers,
>> Nicolai
>> 
>> On Thu, Aug 13, 2020 at 10:59 PM Chris Lattner via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> 
>> 
>> Does the code generator support this?  If not, we should add an assertion to the verifier.  If so, we can consider relaxing langref or making it more specific about floats.
>> 
>> 
>> I agree with this. Generally it’s a bit tricky because, some of these are tied to the atomic expand pass, where a backend says what it supports.
>> 
>> 
>> -Chris
>> 
>> On Aug 13, 2020, at 6:35 AM, Alex Zinenko via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>> 
>> Hi LLVM-dev,
>> 
>> when working on MLIR-to-LLVM-IR conversion, I noticed that it is possible to programmatically construct a cmpxchg instruction operating on floats (or actually any type since there is no assertion on pointer element type here https://github.com/llvm/llvm-project/blob/9c2e708f0dc547d386ea528450a33ef4bd2a750b/llvm/lib/IR/Instructions.cpp#L1501), but LangRef specifies that only integers and pointers are accepted (https://llvm.org/docs/LangRef.html#cmpxchg-instruction). Does somebody rely on other types being accepted in cmpxchg or should we add an assertion for the element type to match the LangRef?
>> 
>> --
>> Alex
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> 
>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> 
>> 
>> 
>> 
>> --
>> Lerne, wie die Welt wirklich ist,
>> aber vergiss niemals, wie sie sein sollte.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> 
>> 
> 
> 
> -- 
> Lerne, wie die Welt wirklich ist,
> aber vergiss niemals, wie sie sein sollte.



More information about the llvm-dev mailing list