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(); 355 } | 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 arg_index = vk->param_count() - 1; arg_index >= 0 ; --arg_index) { 333 int field_index = vk->field_index_for_argument(arg_index); 334 ciType* field_type = vt->get_field_type(field_index); 335 Node* value = field_type->size() == 1 ? pop() : pop_pair(); 336 vt->set_field_value(field_index, value); 337 } 338 push(_gvn.transform(vt)); 339 } 340 341 #ifndef PRODUCT 342 //------------------------------dump_map_adr_mem------------------------------- 343 // Debug dump of the mapping from address types to MergeMemNode indices. 344 void Parse::dump_map_adr_mem() const { 345 tty->print_cr("--- Mapping from address types to memory Nodes ---"); 346 MergeMemNode *mem = map() == NULL ? NULL : (map()->memory()->is_MergeMem() ? 347 map()->memory()->as_MergeMem() : NULL); 348 for (uint i = 0; i < (uint)C->num_alias_types(); i++) { 349 C->alias_type(i)->print_on(tty); 350 tty->print("\t"); 351 // Node mapping, if any 352 if (mem && i < mem->req() && mem->in(i) && mem->in(i) != mem->empty_memory()) { 353 mem->in(i)->dump(); 354 } else { 355 tty->cr(); 356 } |