MemNode::unordered/release/acquire use in relation to volatile stores and loads

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Aug 4 21:13:39 UTC 2014


I would say that you are correct (MemNode::acquire is needed for 
volatile load).
Lets hear Goetz answer.

Thanks,
Vladimir

On 8/3/14 4:51 PM, David Holmes wrote:
> In ./share/vm/opto/library_call.cpp
>
> Why is it that for volatile stores we have special checks for which
> MemNode to use:
>
>    MemNode::MemOrd mo = is_volatile ? MemNode::release :
> MemNode::unordered;
>      if (type != T_OBJECT ) {
>        (void) store_to_memory(control(), adr, val, type, adr_type, mo,
> is_volatile);
>      } else {
>
> but for loads it is always unordered eg:
>
>    Node* p = make_load(control(), adr, value_type, type, adr_type,
> MemNode::unordered, is_volatile);
>
> ?? I would have expected MemNode::acquire as in opto/parse3.cpp
>
>    // Build the load.
>    //
>    MemNode::MemOrd mo = is_vol ? MemNode::acquire : MemNode::unordered;
>    bool needs_atomic_access = is_vol || AlwaysAtomicAccesses;
>    Node* ld = make_load(NULL, adr, type, bt, adr_type, mo,
> needs_atomic_access);
>
>
>
> Thanks,
> David
>


More information about the hotspot-dev mailing list