Mercurial > hg > truffle
comparison src/share/vm/opto/parse3.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 | 45467c53f178 |
comparison
equal
deleted
inserted
replaced
14451:b858620b0081 | 14452:c6d7e7406136 |
---|---|
225 type = TypeOopPtr::make_from_klass(field_klass->as_klass()); | 225 type = TypeOopPtr::make_from_klass(field_klass->as_klass()); |
226 } | 226 } |
227 } else { | 227 } else { |
228 type = Type::get_const_basic_type(bt); | 228 type = Type::get_const_basic_type(bt); |
229 } | 229 } |
230 if (support_IRIW_for_not_multiple_copy_atomic_cpu && field->is_volatile()) { | |
231 insert_mem_bar(Op_MemBarVolatile); // StoreLoad barrier | |
232 } | |
230 // Build the load. | 233 // Build the load. |
231 // | 234 // |
232 MemNode::MemOrd mo = is_vol ? MemNode::acquire : MemNode::unordered; | 235 MemNode::MemOrd mo = is_vol ? MemNode::acquire : MemNode::unordered; |
233 Node* ld = make_load(NULL, adr, type, bt, adr_type, mo, is_vol); | 236 Node* ld = make_load(NULL, adr, type, bt, adr_type, mo, is_vol); |
234 | 237 |
315 } | 318 } |
316 | 319 |
317 // If reference is volatile, prevent following volatiles ops from | 320 // If reference is volatile, prevent following volatiles ops from |
318 // floating up before the volatile write. | 321 // floating up before the volatile write. |
319 if (is_vol) { | 322 if (is_vol) { |
320 insert_mem_bar(Op_MemBarVolatile); // Use fat membar | 323 // If not multiple copy atomic, we do the MemBarVolatile before the load. |
324 if (!support_IRIW_for_not_multiple_copy_atomic_cpu) { | |
325 insert_mem_bar(Op_MemBarVolatile); // Use fat membar | |
326 } | |
327 // Remember we wrote a volatile field. | |
328 // For not multiple copy atomic cpu (ppc64) a barrier should be issued | |
329 // in constructors which have such stores. See do_exits() in parse1.cpp. | |
330 if (is_field) { | |
331 set_wrote_volatile(true); | |
332 } | |
321 } | 333 } |
322 | 334 |
323 // If the field is final, the rules of Java say we are in <init> or <clinit>. | 335 // If the field is final, the rules of Java say we are in <init> or <clinit>. |
324 // Note the presence of writes to final non-static fields, so that we | 336 // Note the presence of writes to final non-static fields, so that we |
325 // can insert a memory barrier later on to keep the writes from floating | 337 // can insert a memory barrier later on to keep the writes from floating |