src/share/vm/opto/macro.cpp

Print this page
rev 5661 : 8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering.

*** 1082,1100 **** Node* PhaseMacroExpand::make_load(Node* ctl, Node* mem, Node* base, int offset, const Type* value_type, BasicType bt) { Node* adr = basic_plus_adr(base, offset); const TypePtr* adr_type = adr->bottom_type()->is_ptr(); ! Node* value = LoadNode::make(_igvn, ctl, mem, adr, adr_type, value_type, bt); transform_later(value); return value; } Node* PhaseMacroExpand::make_store(Node* ctl, Node* mem, Node* base, int offset, Node* value, BasicType bt) { Node* adr = basic_plus_adr(base, offset); ! mem = StoreNode::make(_igvn, ctl, mem, adr, NULL, value, bt); transform_later(mem); return mem; } //============================================================================= --- 1082,1100 ---- Node* PhaseMacroExpand::make_load(Node* ctl, Node* mem, Node* base, int offset, const Type* value_type, BasicType bt) { Node* adr = basic_plus_adr(base, offset); const TypePtr* adr_type = adr->bottom_type()->is_ptr(); ! Node* value = LoadNode::make(_igvn, ctl, mem, adr, adr_type, value_type, bt, LoadNode::unordered); transform_later(value); return value; } Node* PhaseMacroExpand::make_store(Node* ctl, Node* mem, Node* base, int offset, Node* value, BasicType bt) { Node* adr = basic_plus_adr(base, offset); ! mem = StoreNode::make(_igvn, ctl, mem, adr, NULL, value, bt, StoreNode::unordered); transform_later(mem); return mem; } //=============================================================================
*** 1270,1281 **** } // Load(-locked) the heap top. // See note above concerning the control input when using a TLAB Node *old_eden_top = UseTLAB ! ? new (C) LoadPNode (ctrl, contended_phi_rawmem, eden_top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM) ! : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr); transform_later(old_eden_top); // Add to heap top to get a new heap top Node *new_eden_top = new (C) AddPNode(top(), old_eden_top, size_in_bytes); transform_later(new_eden_top); --- 1270,1281 ---- } // Load(-locked) the heap top. // See note above concerning the control input when using a TLAB Node *old_eden_top = UseTLAB ! ? new (C) LoadPNode (ctrl, contended_phi_rawmem, eden_top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, LoadNode::unordered) ! : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr, LoadNode::acquire); transform_later(old_eden_top); // Add to heap top to get a new heap top Node *new_eden_top = new (C) AddPNode(top(), old_eden_top, size_in_bytes); transform_later(new_eden_top);
*** 1318,1328 **** // StorePConditional produces flags for a test PLUS a modified raw // memory state. if (UseTLAB) { Node* store_eden_top = new (C) StorePNode(needgc_false, contended_phi_rawmem, eden_top_adr, ! TypeRawPtr::BOTTOM, new_eden_top); transform_later(store_eden_top); fast_oop_ctrl = needgc_false; // No contention, so this is the fast path fast_oop_rawmem = store_eden_top; } else { Node* store_eden_top = --- 1318,1328 ---- // StorePConditional produces flags for a test PLUS a modified raw // memory state. if (UseTLAB) { Node* store_eden_top = new (C) StorePNode(needgc_false, contended_phi_rawmem, eden_top_adr, ! TypeRawPtr::BOTTOM, new_eden_top, StoreNode::unordered); transform_later(store_eden_top); fast_oop_ctrl = needgc_false; // No contention, so this is the fast path fast_oop_rawmem = store_eden_top; } else { Node* store_eden_top =
*** 1698,1710 **** Node *eden_pf_adr = new (C) AddPNode( top()/*not oop*/, thread, _igvn.MakeConX(in_bytes(JavaThread::tlab_pf_top_offset())) ); transform_later(eden_pf_adr); ! Node *old_pf_wm = new (C) LoadPNode( needgc_false, contended_phi_rawmem, eden_pf_adr, ! TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM ); transform_later(old_pf_wm); // check against new_eden_top Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm ); transform_later(need_pf_cmp); --- 1698,1711 ---- Node *eden_pf_adr = new (C) AddPNode( top()/*not oop*/, thread, _igvn.MakeConX(in_bytes(JavaThread::tlab_pf_top_offset())) ); transform_later(eden_pf_adr); ! Node *old_pf_wm = new (C) LoadPNode(needgc_false, contended_phi_rawmem, eden_pf_adr, ! TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, ! LoadNode::unordered); transform_later(old_pf_wm); // check against new_eden_top Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm ); transform_later(need_pf_cmp);
*** 1724,1736 **** Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm, _igvn.MakeConX(AllocatePrefetchDistance) ); transform_later(new_pf_wmt ); new_pf_wmt->set_req(0, need_pf_true); ! Node *store_new_wmt = new (C) StorePNode( need_pf_true, contended_phi_rawmem, eden_pf_adr, ! TypeRawPtr::BOTTOM, new_pf_wmt ); transform_later(store_new_wmt); // adding prefetches pf_phi_abio->init_req( fall_in_path, i_o ); --- 1725,1738 ---- Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm, _igvn.MakeConX(AllocatePrefetchDistance) ); transform_later(new_pf_wmt ); new_pf_wmt->set_req(0, need_pf_true); ! Node *store_new_wmt = new (C) StorePNode(need_pf_true, contended_phi_rawmem, eden_pf_adr, ! TypeRawPtr::BOTTOM, new_pf_wmt, ! StoreNode::unordered); transform_later(store_new_wmt); // adding prefetches pf_phi_abio->init_req( fall_in_path, i_o );