Mercurial > hg > truffle
comparison src/share/vm/opto/parse1.cpp @ 14452:c6d7e7406136
8029101: PPC64 (part 211): ordering of Independent Reads of Independent Writes
Reviewed-by: dholmes, kvn
Contributed-by: martin.doerr@sap.com
author | goetz |
---|---|
date | Thu, 16 Jan 2014 14:25:51 +0100 |
parents | 2113136690bc |
children | abec000618bf |
comparison
equal
deleted
inserted
replaced
14451:b858620b0081 | 14452:c6d7e7406136 |
---|---|
388 _caller = caller; | 388 _caller = caller; |
389 _method = parse_method; | 389 _method = parse_method; |
390 _expected_uses = expected_uses; | 390 _expected_uses = expected_uses; |
391 _depth = 1 + (caller->has_method() ? caller->depth() : 0); | 391 _depth = 1 + (caller->has_method() ? caller->depth() : 0); |
392 _wrote_final = false; | 392 _wrote_final = false; |
393 _wrote_volatile = false; | |
393 _alloc_with_final = NULL; | 394 _alloc_with_final = NULL; |
394 _entry_bci = InvocationEntryBci; | 395 _entry_bci = InvocationEntryBci; |
395 _tf = NULL; | 396 _tf = NULL; |
396 _block = NULL; | 397 _block = NULL; |
397 debug_only(_block_count = -1); | 398 debug_only(_block_count = -1); |
905 _exits.set_control(gvn().transform(region)); | 906 _exits.set_control(gvn().transform(region)); |
906 | 907 |
907 Node* iophi = _exits.i_o(); | 908 Node* iophi = _exits.i_o(); |
908 _exits.set_i_o(gvn().transform(iophi)); | 909 _exits.set_i_o(gvn().transform(iophi)); |
909 | 910 |
910 if (wrote_final()) { | 911 // On PPC64, also add MemBarRelease for constructors which write |
912 // volatile fields. As support_IRIW_for_not_multiple_copy_atomic_cpu | |
913 // is set on PPC64, no sync instruction is issued after volatile | |
914 // stores. We want to quarantee the same behaviour as on platforms | |
915 // with total store order, although this is not required by the Java | |
916 // memory model. So as with finals, we add a barrier here. | |
917 if (wrote_final() PPC64_ONLY(|| (wrote_volatile() && method()->is_initializer()))) { | |
911 // This method (which must be a constructor by the rules of Java) | 918 // This method (which must be a constructor by the rules of Java) |
912 // wrote a final. The effects of all initializations must be | 919 // wrote a final. The effects of all initializations must be |
913 // committed to memory before any code after the constructor | 920 // committed to memory before any code after the constructor |
914 // publishes the reference to the newly constructor object. | 921 // publishes the reference to the newly constructor object. |
915 // Rather than wait for the publication, we simply block the | 922 // Rather than wait for the publication, we simply block the |