312 C->set_has_stringbuilder(true); 313 } 314 315 // Keep track of boxed values for EliminateAutoBox optimizations. 316 if (C->eliminate_boxing() && klass->is_box_klass()) { 317 C->set_has_boxed_value(true); 318 } 319 } 320 321 //------------------------------do_vnew----------------------------------------- 322 void Parse::do_vnew() { 323 kill_dead_locals(); 324 // Fixme additional checks needed? (see InterpreterRuntime::_vnew) 325 326 // Create a new ValueTypeNode 327 ciValueKlass* vk = iter().method()->holder()->as_value_klass(); 328 ValueTypeNode* vt = ValueTypeNode::make(_gvn, vk)->as_ValueType(); 329 330 // Pop values from stack (last argument is first) and 331 // connect them to the ValueTypeNode in reverse order. 332 for (int i = vk->field_count() - 1; i >= 0 ; --i) { 333 BasicType bt = vk->get_field_type_by_index(i); 334 Node* value = type2size[bt] == 1 ? pop() : pop_pair(); 335 vt->set_field_value(i, value); 336 } 337 push(_gvn.transform(vt)); 338 } 339 340 #ifndef PRODUCT 341 //------------------------------dump_map_adr_mem------------------------------- 342 // Debug dump of the mapping from address types to MergeMemNode indices. 343 void Parse::dump_map_adr_mem() const { 344 tty->print_cr("--- Mapping from address types to memory Nodes ---"); 345 MergeMemNode *mem = map() == NULL ? NULL : (map()->memory()->is_MergeMem() ? 346 map()->memory()->as_MergeMem() : NULL); 347 for (uint i = 0; i < (uint)C->num_alias_types(); i++) { 348 C->alias_type(i)->print_on(tty); 349 tty->print("\t"); 350 // Node mapping, if any 351 if (mem && i < mem->req() && mem->in(i) && mem->in(i) != mem->empty_memory()) { 352 mem->in(i)->dump(); 353 } else { 354 tty->cr(); | 312 C->set_has_stringbuilder(true); 313 } 314 315 // Keep track of boxed values for EliminateAutoBox optimizations. 316 if (C->eliminate_boxing() && klass->is_box_klass()) { 317 C->set_has_boxed_value(true); 318 } 319 } 320 321 //------------------------------do_vnew----------------------------------------- 322 void Parse::do_vnew() { 323 kill_dead_locals(); 324 // Fixme additional checks needed? (see InterpreterRuntime::_vnew) 325 326 // Create a new ValueTypeNode 327 ciValueKlass* vk = iter().method()->holder()->as_value_klass(); 328 ValueTypeNode* vt = ValueTypeNode::make(_gvn, vk)->as_ValueType(); 329 330 // Pop values from stack (last argument is first) and 331 // connect them to the ValueTypeNode in reverse order. 332 for (int i = vk->param_count() - 1; i >= 0 ; --i) { 333 ciType* field_type = vt->get_field_type(i); 334 Node* value = field_type->size() == 1 ? pop() : pop_pair(); 335 vt->set_field_value(i, value); 336 } 337 push(_gvn.transform(vt)); 338 } 339 340 #ifndef PRODUCT 341 //------------------------------dump_map_adr_mem------------------------------- 342 // Debug dump of the mapping from address types to MergeMemNode indices. 343 void Parse::dump_map_adr_mem() const { 344 tty->print_cr("--- Mapping from address types to memory Nodes ---"); 345 MergeMemNode *mem = map() == NULL ? NULL : (map()->memory()->is_MergeMem() ? 346 map()->memory()->as_MergeMem() : NULL); 347 for (uint i = 0; i < (uint)C->num_alias_types(); i++) { 348 C->alias_type(i)->print_on(tty); 349 tty->print("\t"); 350 // Node mapping, if any 351 if (mem && i < mem->req() && mem->in(i) && mem->in(i) != mem->empty_memory()) { 352 mem->in(i)->dump(); 353 } else { 354 tty->cr(); |