src/share/vm/opto/memnode.cpp

changeset 471
f34d9da7acb2
parent 464
d5fc211aea19
child 478
d821d920b465
     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();

mercurial