David Miller wrote:
The compiler simply cannot speculatively load or store to variables with global visibility.
s/with global visibility/with visibility outside the scope of the functional unit the compiler is able to see at compile time/
Which basically means the compiler is king for doing these tricks with CPU registers, areas of the stack and inlined functional units in which it can be 100% sure about it access to this data.
What are the issues with "speculative loads" ? Is there such a page as a write only page used by any system GCC targets ? For general usage the x86 concept of read-only or read-write fits well, which means that speculative load's are usually a safe optimization.
But I'd be all for a way to allow/disallow each optimization independently (this give the developer more choice in the matter). With "speculative loads" enabled by default and "speculative stores" disabled by default for any multi-threaded code.
As per my other posting have the ability to __attribute__((disallow_speculative_load,disallow_speculative_store)) or to __attribute__((allow_speculative_load,allow_speculative_store)) to pin the issue. With -fdisallow-speculative-load -fallow-speculative-load etc... for the defaults for the entire file being compiled.
Darryl