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

Aleksey Shipilev aleksey.shipilev at oracle.com
Tue Jun 23 09:13:15 UTC 2015


On 06/23/2015 11:57 AM, Roland Westrelin wrote:
>>> If I read the code correctly when
>>> support_IRIW_for_not_multiple_copy_atomic_cpu is true we don’t add a
>>> membar after a volatile store so folding a store with previous ones
>>> would not be a correct optimization because it could remove volatile
>>> stores. This said the current code in StoreNode::Ideal() that folds
>>> back to back stores has the effect or reordering stores on different
>>> slices. So isn’t there a bug already?
>>
>> Let's back up a bit.
>>
>> Short story. Given the program:
>>
>> volatile int y;
>> int x;
>>
>> x = 1;
>> y = 1; // volatile store
>> x = 2;
>> y = 2; // volatile store
>>
>> This transformation is correct:
>>
>> x = 1;
>> x = 2;
>> y = 2; // volatile store
> 
> 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. Here is the simplest counter-example:

   volatile int y;
   volatile int x;
--------------------------
  y = 1;   |  r1 = x;
  x = 1;   |  r2 = y;
  y = 2;   |

  (1, 0) -- forbidden, violates SO-PO consistency (seeing x=1 implies
seeing y=1 in program order before it)

   volatile int y;
   volatile int x;
--------------------------
   ...     |  r1 = x;
  x = 1;   |  r2 = y;
  y = 2;   |

 (1, 0) -- allowed by transformed program, oops.

(These cases are what jcstress sequential consistency tests are about)


Thanks,
-Aleksey


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150623/949cdbc0/signature.asc>


More information about the hotspot-compiler-dev mailing list