1099 Node* i_o = alloc->in(TypeFunc::I_O); |
1099 Node* i_o = alloc->in(TypeFunc::I_O); |
1100 Node* size_in_bytes = alloc->in(AllocateNode::AllocSize); |
1100 Node* size_in_bytes = alloc->in(AllocateNode::AllocSize); |
1101 Node* klass_node = alloc->in(AllocateNode::KlassNode); |
1101 Node* klass_node = alloc->in(AllocateNode::KlassNode); |
1102 Node* initial_slow_test = alloc->in(AllocateNode::InitialTest); |
1102 Node* initial_slow_test = alloc->in(AllocateNode::InitialTest); |
1103 |
1103 |
1104 Node* storestore = alloc->storestore(); |
|
1105 if (storestore != NULL) { |
|
1106 // Break this link that is no longer useful and confuses register allocation |
|
1107 storestore->set_req(MemBarNode::Precedent, top()); |
|
1108 } |
|
1109 |
|
1110 assert(ctrl != NULL, "must have control"); |
1104 assert(ctrl != NULL, "must have control"); |
1111 // We need a Region and corresponding Phi's to merge the slow-path and fast-path results. |
1105 // We need a Region and corresponding Phi's to merge the slow-path and fast-path results. |
1112 // they will not be used if "always_slow" is set |
1106 // they will not be used if "always_slow" is set |
1113 enum { slow_result_path = 1, fast_result_path = 2 }; |
1107 enum { slow_result_path = 1, fast_result_path = 2 }; |
1114 Node *result_region; |
1108 Node *result_region; |
1322 if (init == NULL || (!init->is_complete_with_arraycopy() && !init->does_not_escape())) { |
1316 if (init == NULL || (!init->is_complete_with_arraycopy() && !init->does_not_escape())) { |
1323 if (init == NULL || init->req() < InitializeNode::RawStores) { |
1317 if (init == NULL || init->req() < InitializeNode::RawStores) { |
1324 // No InitializeNode or no stores captured by zeroing |
1318 // No InitializeNode or no stores captured by zeroing |
1325 // elimination. Simply add the MemBarStoreStore after object |
1319 // elimination. Simply add the MemBarStoreStore after object |
1326 // initialization. |
1320 // initialization. |
1327 MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot, fast_oop_rawmem); |
1321 MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot); |
1328 transform_later(mb); |
1322 transform_later(mb); |
1329 |
1323 |
1330 mb->init_req(TypeFunc::Memory, fast_oop_rawmem); |
1324 mb->init_req(TypeFunc::Memory, fast_oop_rawmem); |
1331 mb->init_req(TypeFunc::Control, fast_oop_ctrl); |
1325 mb->init_req(TypeFunc::Control, fast_oop_ctrl); |
1332 fast_oop_ctrl = new (C) ProjNode(mb,TypeFunc::Control); |
1326 fast_oop_ctrl = new (C) ProjNode(mb,TypeFunc::Control); |