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 |