1.1 --- a/src/share/vm/opto/memnode.cpp Fri Feb 29 19:07:15 2008 -0800 1.2 +++ b/src/share/vm/opto/memnode.cpp Fri Feb 29 19:57:41 2008 -0800 1.3 @@ -108,19 +108,13 @@ 1.4 // Avoid independent memory operations 1.5 Node* old_mem = mem; 1.6 1.7 - if (mem->is_Proj() && mem->in(0)->is_Initialize()) { 1.8 - InitializeNode* init = mem->in(0)->as_Initialize(); 1.9 - if (init->is_complete()) { // i.e., after macro expansion 1.10 - const TypePtr* tp = t_adr->is_ptr(); 1.11 - uint alias_idx = phase->C->get_alias_index(tp); 1.12 - // Free this slice from the init. It was hooked, temporarily, 1.13 - // by GraphKit::set_output_for_allocation. 1.14 - if (alias_idx > Compile::AliasIdxRaw) { 1.15 - mem = init->memory(alias_idx); 1.16 - // ...but not with the raw-pointer slice. 1.17 - } 1.18 - } 1.19 - } 1.20 + // The code which unhooks non-raw memories from complete (macro-expanded) 1.21 + // initializations was removed. After macro-expansion all stores catched 1.22 + // by Initialize node became raw stores and there is no information 1.23 + // which memory slices they modify. So it is unsafe to move any memory 1.24 + // operation above these stores. Also in most cases hooked non-raw memories 1.25 + // were already unhooked by using information from detect_ptr_independence() 1.26 + // and find_previous_store(). 1.27 1.28 if (mem->is_MergeMem()) { 1.29 MergeMemNode* mmem = mem->as_MergeMem();