[llvm-dev] Volatile and Inserted Loads/Stores on MMIO

Taylor Cramer via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 10 16:27:03 PDT 2018


The language reference
<https://llvm.org/docs/LangRef.html#volatile-memory-accesses> says
that LLVM optimizers
must not change the number of volatile operations or change their order of
execution relative to other volatile operations. However, it doesn't say
that optimizers can't introduce non-volatile operations. Is there any way
to write IR that would ensure the generated loads and stores exactly match
the number and ordering of the loads and stores in the source IR? I've
heard conflicting reports about this. I'm specifically interested in
manipulating MMIO, where loads and stores may have side effects.

If it is in fact possible to prevent the insertion of loads/stores, does
the presence of the "dereferenceable" attribute on pointers have any affect
here? Will marking a pointer "dereferenceable" allow loads/stores to a
volatile-only-accessed memory location that wouldn't be allowed otherwise?

Context: this discussion originated in an issue on the Rust unsafe code
guidelines issue tracker
<https://github.com/rust-rfcs/unsafe-code-guidelines/issues/33>.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181010/c57c313c/attachment-0001.html>


More information about the llvm-dev mailing list