< prev index next >

src/hotspot/share/opto/parse2.cpp

Print this page
*** 97,10 ***
--- 97,21 ---
    Node* array = pop();        // the array itself
  
    if (elemtype == TypeInt::BOOL) {
      bt = T_BOOLEAN;
    }
+ 
+   if (DoPartialEscapeAnalysis && bt == T_OBJECT) {
+     PartialEscapeAnalysis* pea = PEA();
+     PEAState& as = jvms()->alloc_state();
+     VirtualState* obj_vs = as.as_virtual(pea, val);    // obj is tracked and Virtual
+     VirtualState* ary_vs = as.as_virtual(pea, array);  // array is not-tracked or Escaped
+ 
+     if (ary_vs == nullptr && obj_vs != nullptr) {
+       val = as.materialize(this, val);
+     }
+   }
    const TypeAryPtr* adr_type = TypeAryPtr::get_array_body_type(bt);
  
    access_store_at(array, adr, adr_type, val, elemtype, bt, MO_UNORDERED | IN_HEAP | IS_ARRAY);
  }
  
< prev index next >