RFR(M): 8080289: Intermediate writes in a loop not eliminated by optimizer (original) (raw)

Roland Westrelin roland.westrelin at oracle.com
Tue Jul 28 18:20:01 UTC 2015


What about

volatile int y; volatile int x; y=1 x=1 y=2 transformed to: x=1 y=2 ? I think this is not allowed, since operations over "x" get tied up in the synchronization order. Thanks. Then for supportIRIWfornotmultiplecopyatomiccpu true, I don’t see how incorrect reordering is prevented.

I took another look and I was wrong about that.

void Parse::do_put_xxx(Node* obj, ciField* field, bool is_field) { bool is_vol = field->is_volatile(); // If reference is volatile, prevent following memory ops from
// floating down past the volatile write. Also prevents commoning
// another volatile read.
if (is_vol) insert_mem_bar(Op_MemBarRelease);

The barrier prevents y=1 from being optimized out.

Roland.



More information about the hotspot-compiler-dev mailing list