163 return 0; |
163 return 0; |
164 } |
164 } |
165 |
165 |
166 |
166 |
167 #ifndef PRODUCT |
167 #ifndef PRODUCT |
168 void ReturnNode::dump_req() const { |
168 void ReturnNode::dump_req(outputStream *st) const { |
169 // Dump the required inputs, enclosed in '(' and ')' |
169 // Dump the required inputs, enclosed in '(' and ')' |
170 uint i; // Exit value of loop |
170 uint i; // Exit value of loop |
171 for( i=0; i<req(); i++ ) { // For all required inputs |
171 for (i = 0; i < req(); i++) { // For all required inputs |
172 if( i == TypeFunc::Parms ) tty->print("returns"); |
172 if (i == TypeFunc::Parms) st->print("returns"); |
173 if( in(i) ) tty->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
173 if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
174 else tty->print("_ "); |
174 else st->print("_ "); |
175 } |
175 } |
176 } |
176 } |
177 #endif |
177 #endif |
178 |
178 |
179 //============================================================================= |
179 //============================================================================= |
206 uint RethrowNode::match_edge(uint idx) const { |
206 uint RethrowNode::match_edge(uint idx) const { |
207 return 0; |
207 return 0; |
208 } |
208 } |
209 |
209 |
210 #ifndef PRODUCT |
210 #ifndef PRODUCT |
211 void RethrowNode::dump_req() const { |
211 void RethrowNode::dump_req(outputStream *st) const { |
212 // Dump the required inputs, enclosed in '(' and ')' |
212 // Dump the required inputs, enclosed in '(' and ')' |
213 uint i; // Exit value of loop |
213 uint i; // Exit value of loop |
214 for( i=0; i<req(); i++ ) { // For all required inputs |
214 for (i = 0; i < req(); i++) { // For all required inputs |
215 if( i == TypeFunc::Parms ) tty->print("exception"); |
215 if (i == TypeFunc::Parms) st->print("exception"); |
216 if( in(i) ) tty->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
216 if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
217 else tty->print("_ "); |
217 else st->print("_ "); |
218 } |
218 } |
219 } |
219 } |
220 #endif |
220 #endif |
221 |
221 |
222 //============================================================================= |
222 //============================================================================= |
328 int sco_n = scobjs->find(spobj); |
328 int sco_n = scobjs->find(spobj); |
329 assert(sco_n >= 0, ""); |
329 assert(sco_n >= 0, ""); |
330 st->print(" %s%d]=#ScObj" INT32_FORMAT, msg, i, sco_n); |
330 st->print(" %s%d]=#ScObj" INT32_FORMAT, msg, i, sco_n); |
331 return; |
331 return; |
332 } |
332 } |
333 if( OptoReg::is_valid(regalloc->get_reg_first(n))) { // Check for undefined |
333 if (regalloc->node_regs_max_index() > 0 && |
|
334 OptoReg::is_valid(regalloc->get_reg_first(n))) { // Check for undefined |
334 char buf[50]; |
335 char buf[50]; |
335 regalloc->dump_register(n,buf); |
336 regalloc->dump_register(n,buf); |
336 st->print(" %s%d]=%s",msg,i,buf); |
337 st->print(" %s%d]=%s",msg,i,buf); |
337 } else { // No register, but might be constant |
338 } else { // No register, but might be constant |
338 const Type *t = n->bottom_type(); |
339 const Type *t = n->bottom_type(); |
379 } |
380 } |
380 |
381 |
381 //------------------------------format----------------------------------------- |
382 //------------------------------format----------------------------------------- |
382 void JVMState::format(PhaseRegAlloc *regalloc, const Node *n, outputStream* st) const { |
383 void JVMState::format(PhaseRegAlloc *regalloc, const Node *n, outputStream* st) const { |
383 st->print(" #"); |
384 st->print(" #"); |
384 if( _method ) { |
385 if (_method) { |
385 _method->print_short_name(st); |
386 _method->print_short_name(st); |
386 st->print(" @ bci:%d ",_bci); |
387 st->print(" @ bci:%d ",_bci); |
387 } else { |
388 } else { |
388 st->print_cr(" runtime stub "); |
389 st->print_cr(" runtime stub "); |
389 return; |
390 return; |
391 if (n->is_MachSafePoint()) { |
392 if (n->is_MachSafePoint()) { |
392 GrowableArray<SafePointScalarObjectNode*> scobjs; |
393 GrowableArray<SafePointScalarObjectNode*> scobjs; |
393 MachSafePointNode *mcall = n->as_MachSafePoint(); |
394 MachSafePointNode *mcall = n->as_MachSafePoint(); |
394 uint i; |
395 uint i; |
395 // Print locals |
396 // Print locals |
396 for( i = 0; i < (uint)loc_size(); i++ ) |
397 for (i = 0; i < (uint)loc_size(); i++) |
397 format_helper( regalloc, st, mcall->local(this, i), "L[", i, &scobjs ); |
398 format_helper(regalloc, st, mcall->local(this, i), "L[", i, &scobjs); |
398 // Print stack |
399 // Print stack |
399 for (i = 0; i < (uint)stk_size(); i++) { |
400 for (i = 0; i < (uint)stk_size(); i++) { |
400 if ((uint)(_stkoff + i) >= mcall->len()) |
401 if ((uint)(_stkoff + i) >= mcall->len()) |
401 st->print(" oob "); |
402 st->print(" oob "); |
402 else |
403 else |
403 format_helper( regalloc, st, mcall->stack(this, i), "STK[", i, &scobjs ); |
404 format_helper(regalloc, st, mcall->stack(this, i), "STK[", i, &scobjs); |
404 } |
405 } |
405 for (i = 0; (int)i < nof_monitors(); i++) { |
406 for (i = 0; (int)i < nof_monitors(); i++) { |
406 Node *box = mcall->monitor_box(this, i); |
407 Node *box = mcall->monitor_box(this, i); |
407 Node *obj = mcall->monitor_obj(this, i); |
408 Node *obj = mcall->monitor_obj(this, i); |
408 if ( OptoReg::is_valid(regalloc->get_reg_first(box)) ) { |
409 if (regalloc->node_regs_max_index() > 0 && |
|
410 OptoReg::is_valid(regalloc->get_reg_first(box))) { |
409 box = BoxLockNode::box_node(box); |
411 box = BoxLockNode::box_node(box); |
410 format_helper( regalloc, st, box, "MON-BOX[", i, &scobjs ); |
412 format_helper(regalloc, st, box, "MON-BOX[", i, &scobjs); |
411 } else { |
413 } else { |
412 OptoReg::Name box_reg = BoxLockNode::reg(box); |
414 OptoReg::Name box_reg = BoxLockNode::reg(box); |
413 st->print(" MON-BOX%d=%s+%d", |
415 st->print(" MON-BOX%d=%s+%d", |
414 i, |
416 i, |
415 OptoReg::regname(OptoReg::c_frame_pointer), |
417 OptoReg::regname(OptoReg::c_frame_pointer), |
418 const char* obj_msg = "MON-OBJ["; |
420 const char* obj_msg = "MON-OBJ["; |
419 if (EliminateLocks) { |
421 if (EliminateLocks) { |
420 if (BoxLockNode::box_node(box)->is_eliminated()) |
422 if (BoxLockNode::box_node(box)->is_eliminated()) |
421 obj_msg = "MON-OBJ(LOCK ELIMINATED)["; |
423 obj_msg = "MON-OBJ(LOCK ELIMINATED)["; |
422 } |
424 } |
423 format_helper( regalloc, st, obj, obj_msg, i, &scobjs ); |
425 format_helper(regalloc, st, obj, obj_msg, i, &scobjs); |
424 } |
426 } |
425 |
427 |
426 for (i = 0; i < (uint)scobjs.length(); i++) { |
428 for (i = 0; i < (uint)scobjs.length(); i++) { |
427 // Scalar replaced objects. |
429 // Scalar replaced objects. |
428 st->print_cr(""); |
430 st->print_cr(""); |
461 ciField* cifield; |
463 ciField* cifield; |
462 if (iklass != NULL) { |
464 if (iklass != NULL) { |
463 st->print(" ["); |
465 st->print(" ["); |
464 cifield = iklass->nonstatic_field_at(0); |
466 cifield = iklass->nonstatic_field_at(0); |
465 cifield->print_name_on(st); |
467 cifield->print_name_on(st); |
466 format_helper( regalloc, st, fld_node, ":", 0, &scobjs ); |
468 format_helper(regalloc, st, fld_node, ":", 0, &scobjs); |
467 } else { |
469 } else { |
468 format_helper( regalloc, st, fld_node, "[", 0, &scobjs ); |
470 format_helper(regalloc, st, fld_node, "[", 0, &scobjs); |
469 } |
471 } |
470 for (uint j = 1; j < nf; j++) { |
472 for (uint j = 1; j < nf; j++) { |
471 fld_node = mcall->in(first_ind+j); |
473 fld_node = mcall->in(first_ind+j); |
472 if (iklass != NULL) { |
474 if (iklass != NULL) { |
473 st->print(", ["); |
475 st->print(", ["); |
474 cifield = iklass->nonstatic_field_at(j); |
476 cifield = iklass->nonstatic_field_at(j); |
475 cifield->print_name_on(st); |
477 cifield->print_name_on(st); |
476 format_helper( regalloc, st, fld_node, ":", j, &scobjs ); |
478 format_helper(regalloc, st, fld_node, ":", j, &scobjs); |
477 } else { |
479 } else { |
478 format_helper( regalloc, st, fld_node, ", [", j, &scobjs ); |
480 format_helper(regalloc, st, fld_node, ", [", j, &scobjs); |
479 } |
481 } |
480 } |
482 } |
481 } |
483 } |
482 st->print(" }"); |
484 st->print(" }"); |
483 } |
485 } |
484 } |
486 } |
485 st->print_cr(""); |
487 st->print_cr(""); |
486 if (caller() != NULL) caller()->format(regalloc, n, st); |
488 if (caller() != NULL) caller()->format(regalloc, n, st); |
487 } |
489 } |
488 |
490 |
489 |
491 |
490 void JVMState::dump_spec(outputStream *st) const { |
492 void JVMState::dump_spec(outputStream *st) const { |
491 if (_method != NULL) { |
493 if (_method != NULL) { |
584 |
586 |
585 //============================================================================= |
587 //============================================================================= |
586 uint CallNode::cmp( const Node &n ) const |
588 uint CallNode::cmp( const Node &n ) const |
587 { return _tf == ((CallNode&)n)._tf && _jvms == ((CallNode&)n)._jvms; } |
589 { return _tf == ((CallNode&)n)._tf && _jvms == ((CallNode&)n)._jvms; } |
588 #ifndef PRODUCT |
590 #ifndef PRODUCT |
589 void CallNode::dump_req() const { |
591 void CallNode::dump_req(outputStream *st) const { |
590 // Dump the required inputs, enclosed in '(' and ')' |
592 // Dump the required inputs, enclosed in '(' and ')' |
591 uint i; // Exit value of loop |
593 uint i; // Exit value of loop |
592 for( i=0; i<req(); i++ ) { // For all required inputs |
594 for (i = 0; i < req(); i++) { // For all required inputs |
593 if( i == TypeFunc::Parms ) tty->print("("); |
595 if (i == TypeFunc::Parms) st->print("("); |
594 if( in(i) ) tty->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
596 if (in(i)) st->print("%c%d ", Compile::current()->node_arena()->contains(in(i)) ? ' ' : 'o', in(i)->_idx); |
595 else tty->print("_ "); |
597 else st->print("_ "); |
596 } |
598 } |
597 tty->print(")"); |
599 st->print(")"); |
598 } |
600 } |
599 |
601 |
600 void CallNode::dump_spec(outputStream *st) const { |
602 void CallNode::dump_spec(outputStream *st) const { |
601 st->print(" "); |
603 st->print(" "); |
602 tf()->dump_on(st); |
604 tf()->dump_on(st); |