comparison src/share/vm/opto/macro.cpp @ 14909:4ca6dc0799b6

Backout jdk9 merge
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 01 Apr 2014 13:57:07 +0200
parents abec000618bf
children 89152779163c
comparison
equal deleted inserted replaced
14908:8db6e76cb658 14909:4ca6dc0799b6
1 /* 1 /*
2 * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
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, MemNode::unordered); 1087 Node* value = LoadNode::make(_igvn, ctl, mem, adr, adr_type, value_type, bt);
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, MemNode::unordered); 1095 mem = StoreNode::make(_igvn, ctl, mem, adr, NULL, value, bt);
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, MemNode::unordered) 1275 ? new (C) LoadPNode (ctrl, contended_phi_rawmem, eden_top_adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM)
1276 : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr, MemNode::acquire); 1276 : new (C) LoadPLockedNode(contended_region, contended_phi_rawmem, eden_top_adr);
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, MemNode::unordered); 1323 TypeRawPtr::BOTTOM, new_eden_top);
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);
1707 transform_later(old_pf_wm); 1706 transform_later(old_pf_wm);
1708 1707
1709 // check against new_eden_top 1708 // check against new_eden_top
1710 Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm ); 1709 Node *need_pf_cmp = new (C) CmpPNode( new_eden_top, old_pf_wm );
1711 transform_later(need_pf_cmp); 1710 transform_later(need_pf_cmp);
1725 Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm, 1724 Node *new_pf_wmt = new (C) AddPNode( top(), old_pf_wm,
1726 _igvn.MakeConX(AllocatePrefetchDistance) ); 1725 _igvn.MakeConX(AllocatePrefetchDistance) );
1727 transform_later(new_pf_wmt ); 1726 transform_later(new_pf_wmt );
1728 new_pf_wmt->set_req(0, need_pf_true); 1727 new_pf_wmt->set_req(0, need_pf_true);
1729 1728
1730 Node *store_new_wmt = new (C) StorePNode(need_pf_true, 1729 Node *store_new_wmt = new (C) StorePNode( need_pf_true,
1731 contended_phi_rawmem, eden_pf_adr, 1730 contended_phi_rawmem, eden_pf_adr,
1732 TypeRawPtr::BOTTOM, new_pf_wmt, 1731 TypeRawPtr::BOTTOM, new_pf_wmt );
1733 MemNode::unordered);
1734 transform_later(store_new_wmt); 1732 transform_later(store_new_wmt);
1735 1733
1736 // adding prefetches 1734 // adding prefetches
1737 pf_phi_abio->init_req( fall_in_path, i_o ); 1735 pf_phi_abio->init_req( fall_in_path, i_o );
1738 1736