[PATCH] D103958: [WIP] Support MustControl conditional control attribute

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 9 17:55:36 PDT 2021


efriedma added a comment.

You could break `__builtin_load_with_control_dependency(x)` into something like `__builtin_control_dependency(READ_ONCE(x))`.  I don't think any transforms will touch that in practice, even if it isn't theoretically sound.  The rest of my suggestion still applies to that form, I think.  They key point is that the compiler just needs to ensure some branch consumes the loaded value; it doesn't matter which branch it is.

The theoretical problem with separating the load from the branch is that it imposes an implicit contract: the branch has to use the value of the load as input, not an equivalent value produced some other way.  This is the general problem with C++11 consume ordering, which nobody has tried to tackle.

re: the memory clobber, LLVM understands acquire/release semantics for atomics; for example, you can write `__atomic_signal_fence(3)` in clang to get a "release" barrier.  (I think that's what the email you linked is asking for?)  Adding asm clobbers that are equivalent to the existing fences is probably feasible.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103958/new/

https://reviews.llvm.org/D103958



More information about the llvm-commits mailing list