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 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 {
|
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 ciType* field_type = vt->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 {
|