Mercurial > hg > graal-compiler
comparison src/share/vm/opto/macro.cpp @ 8694:8651f608fea4
8009460: C2compiler crash in machnode::in_regmask(unsigned int)
Summary: 7121140 may not correctly break the Allocate -> MemBarStoreStore link
Reviewed-by: kvn
author | roland |
---|---|
date | Wed, 06 Mar 2013 10:28:38 +0100 |
parents | b30b3c2a0cf2 |
children | 6f3fd5150b67 |
comparison
equal
deleted
inserted
replaced
8693:872b3feace55 | 8694:8651f608fea4 |
---|---|
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); |