comparison src/share/vm/opto/macro.cpp @ 14456:abec000618bf

Merge
author kvn
date Tue, 28 Jan 2014 12:25:34 -0800
parents de6a9e811145 2113136690bc
children 4ca6dc0799b6 62c54fcc0a35
comparison
equal deleted inserted replaced
14269:2a8891e0a082 14456:abec000618bf
1082 1082
1083 1083
1084 Node* PhaseMacroExpand::make_load(Node* ctl, Node* mem, Node* base, int offset, const Type* value_type, BasicType bt) { 1084 Node* PhaseMacroExpand::make_load(Node* ctl, Node* mem, Node* base, int offset, const Type* value_type, BasicType bt) {
1085 Node* adr = basic_plus_adr(base, offset); 1085 Node* adr = basic_plus_adr(base, offset);
1086 const TypePtr* adr_type = adr->bottom_type()->is_ptr(); 1086 const TypePtr* adr_type = adr->bottom_type()->is_ptr();
1087 Node* value = LoadNode::make(_igvn, ctl, mem, adr, adr_type, value_type, bt); 1087 Node* value = LoadNode::make(_igvn, ctl, mem, adr, adr_type, value_type, bt, MemNode::unordered);
1088 transform_later(value); 1088 transform_later(value);
1089 return value; 1089 return value;
1090 } 1090 }
1091 1091
1092 1092
1093 Node* PhaseMacroExpand::make_store(Node* ctl, Node* mem, Node* base, int offset, Node* value, BasicType bt) { 1093 Node* PhaseMacroExpand::make_store(Node* ctl, Node* mem, Node* base, int offset, Node* value, BasicType bt) {
1094 Node* adr = basic_plus_adr(base, offset); 1094 Node* adr = basic_plus_adr(base, offset);
1095 mem = StoreNode::make(_igvn, ctl, mem, adr, NULL, value, bt); 1095 mem = StoreNode::make(_igvn, ctl, mem, adr, NULL, value, bt, MemNode::unordered);
1096 transform_later(mem); 1096 transform_later(mem);
1097 return mem; 1097 return mem;
1098 } 1098 }
1099 1099
1100 //============================================================================= 1100 //=============================================================================
1270 } 1270 }
1271 1271
1272 // Load(-locked) the heap top. 1272 // Load(-locked) the heap top.
1273 // See note above concerning the control input when using a TLAB 1273 // See note above concerning the control input when using a TLAB
1274 Node *old_eden_top = UseTLAB 1274 Node *old_eden_top = UseTLAB
1275 ? new (C) LoadPNode (ctrl, contended_phi_rawmem, eden_top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM) 1275 ? new (C) LoadPNode (ctrl, contended_phi_rawmem, eden_top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, MemNode::unordered)
1276 : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr); 1276 : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr, MemNode::acquire);
1277 1277
1278 transform_later(old_eden_top); 1278 transform_later(old_eden_top);
1279 // Add to heap top to get a new heap top 1279 // Add to heap top to get a new heap top
1280 Node *new_eden_top = new (C) AddPNode(top(), old_eden_top, size_in_bytes); 1280 Node *new_eden_top = new (C) AddPNode(top(), old_eden_top, size_in_bytes);
1281 transform_later(new_eden_top); 1281 transform_later(new_eden_top);
1318 // StorePConditional produces flags for a test PLUS a modified raw 1318 // StorePConditional produces flags for a test PLUS a modified raw
1319 // memory state. 1319 // memory state.
1320 if (UseTLAB) { 1320 if (UseTLAB) {
1321 Node* store_eden_top = 1321 Node* store_eden_top =
1322 new (C) StorePNode(needgc_false, contended_phi_rawmem, eden_top_adr, 1322 new (C) StorePNode(needgc_false, contended_phi_rawmem, eden_top_adr,
1323 TypeRawPtr::BOTTOM, new_eden_top); 1323 TypeRawPtr::BOTTOM, new_eden_top, MemNode::unordered);
1324 transform_later(store_eden_top); 1324 transform_later(store_eden_top);
1325 fast_oop_ctrl = needgc_false; // No contention, so this is the fast path 1325 fast_oop_ctrl = needgc_false; // No contention, so this is the fast path
1326 fast_oop_rawmem = store_eden_top; 1326 fast_oop_rawmem = store_eden_top;
1327 } else { 1327 } else {
1328 Node* store_eden_top = 1328 Node* store_eden_top =
1698 1698
1699 Node *eden_pf_adr = new (C) AddPNode( top()/*not oop*/, thread, 1699 Node *eden_pf_adr = new (C) AddPNode( top()/*not oop*/, thread,
1700 _igvn.MakeConX(in_bytes(JavaThread::tlab_pf_top_offset())) ); 1700 _igvn.MakeConX(in_bytes(JavaThread::tlab_pf_top_offset())) );
1701 transform_later(eden_pf_adr); 1701 transform_later(eden_pf_adr);
1702 1702
1703 Node *old_pf_wm = new (C) LoadPNode( needgc_false, 1703 Node *old_pf_wm = new (C) LoadPNode(needgc_false,
1704 contended_phi_rawmem, eden_pf_adr, 1704 contended_phi_rawmem, eden_pf_adr,
1705 TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM ); 1705 TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM,
1706 MemNode::unordered);
1706 transform_later(old_pf_wm); 1707 transform_later(old_pf_wm);
1707 1708
1708 // check against new_eden_top 1709 // check against new_eden_top
1709 Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm ); 1710 Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm );
1710 transform_later(need_pf_cmp); 1711 transform_later(need_pf_cmp);
1724 Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm, 1725 Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm,
1725 _igvn.MakeConX(AllocatePrefetchDistance) ); 1726 _igvn.MakeConX(AllocatePrefetchDistance) );
1726 transform_later(new_pf_wmt ); 1727 transform_later(new_pf_wmt );
1727 new_pf_wmt->set_req(0, need_pf_true); 1728 new_pf_wmt->set_req(0, need_pf_true);
1728 1729
1729 Node *store_new_wmt = new (C) StorePNode( need_pf_true, 1730 Node *store_new_wmt = new (C) StorePNode(need_pf_true,
1730 contended_phi_rawmem, eden_pf_adr, 1731 contended_phi_rawmem, eden_pf_adr,
1731 TypeRawPtr::BOTTOM, new_pf_wmt ); 1732 TypeRawPtr::BOTTOM, new_pf_wmt,
1733 MemNode::unordered);
1732 transform_later(store_new_wmt); 1734 transform_later(store_new_wmt);
1733 1735
1734 // adding prefetches 1736 // adding prefetches
1735 pf_phi_abio->init_req( fall_in_path, i_o ); 1737 pf_phi_abio->init_req( fall_in_path, i_o );
1736 1738