Mercurial > hg > truffle
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 |