src/share/vm/opto/callnode.cpp

Print this page
rev 5726 : 8029025: PPC64 (part 203): opto: Move static _in_dump_cnt to Compile object.
Summary: Also introduces the compiler oracle 'option' feature for PrintAssembly.


 325     // Scalar replacement.
 326     SafePointScalarObjectNode* spobj = n->as_SafePointScalarObject();
 327     scobjs->append_if_missing(spobj);
 328     int sco_n = scobjs->find(spobj);
 329     assert(sco_n >= 0, "");
 330     st->print(" %s%d]=#ScObj" INT32_FORMAT, msg, i, sco_n);
 331     return;
 332   }
 333   if (regalloc->node_regs_max_index() > 0 &&
 334       OptoReg::is_valid(regalloc->get_reg_first(n))) { // Check for undefined
 335     char buf[50];
 336     regalloc->dump_register(n,buf);
 337     st->print(" %s%d]=%s",msg,i,buf);
 338   } else {                      // No register, but might be constant
 339     const Type *t = n->bottom_type();
 340     switch (t->base()) {
 341     case Type::Int:
 342       st->print(" %s%d]=#"INT32_FORMAT,msg,i,t->is_int()->get_con());
 343       break;
 344     case Type::AnyPtr:
 345       assert( t == TypePtr::NULL_PTR, "" );
 346       st->print(" %s%d]=#NULL",msg,i);
 347       break;
 348     case Type::AryPtr:
 349     case Type::InstPtr:
 350       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->isa_oopptr()->const_oop());
 351       break;
 352     case Type::KlassPtr:
 353       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_klassptr()->klass());
 354       break;
 355     case Type::MetadataPtr:
 356       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_metadataptr()->metadata());
 357       break;
 358     case Type::NarrowOop:
 359       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_oopptr()->const_oop());
 360       break;
 361     case Type::RawPtr:
 362       st->print(" %s%d]=#Raw" INTPTR_FORMAT,msg,i,t->is_rawptr());
 363       break;
 364     case Type::DoubleCon:
 365       st->print(" %s%d]=#%fD",msg,i,t->is_double_constant()->_d);


 870 //=============================================================================
 871 uint CallStaticJavaNode::size_of() const { return sizeof(*this); }
 872 uint CallStaticJavaNode::cmp( const Node &n ) const {
 873   CallStaticJavaNode &call = (CallStaticJavaNode&)n;
 874   return CallJavaNode::cmp(call);
 875 }
 876 
 877 //----------------------------uncommon_trap_request----------------------------
 878 // If this is an uncommon trap, return the request code, else zero.
 879 int CallStaticJavaNode::uncommon_trap_request() const {
 880   if (_name != NULL && !strcmp(_name, "uncommon_trap")) {
 881     return extract_uncommon_trap_request(this);
 882   }
 883   return 0;
 884 }
 885 int CallStaticJavaNode::extract_uncommon_trap_request(const Node* call) {
 886 #ifndef PRODUCT
 887   if (!(call->req() > TypeFunc::Parms &&
 888         call->in(TypeFunc::Parms) != NULL &&
 889         call->in(TypeFunc::Parms)->is_Con())) {
 890     assert(_in_dump_cnt != 0, "OK if dumping");
 891     tty->print("[bad uncommon trap]");
 892     return 0;
 893   }
 894 #endif
 895   return call->in(TypeFunc::Parms)->bottom_type()->is_int()->get_con();
 896 }
 897 
 898 #ifndef PRODUCT
 899 void CallStaticJavaNode::dump_spec(outputStream *st) const {
 900   st->print("# Static ");
 901   if (_name != NULL) {
 902     st->print("%s", _name);
 903     int trap_req = uncommon_trap_request();
 904     if (trap_req != 0) {
 905       char buf[100];
 906       st->print("(%s)",
 907                  Deoptimization::format_trap_request(buf, sizeof(buf),
 908                                                      trap_req));
 909     }
 910     st->print(" ");




 325     // Scalar replacement.
 326     SafePointScalarObjectNode* spobj = n->as_SafePointScalarObject();
 327     scobjs->append_if_missing(spobj);
 328     int sco_n = scobjs->find(spobj);
 329     assert(sco_n >= 0, "");
 330     st->print(" %s%d]=#ScObj" INT32_FORMAT, msg, i, sco_n);
 331     return;
 332   }
 333   if (regalloc->node_regs_max_index() > 0 &&
 334       OptoReg::is_valid(regalloc->get_reg_first(n))) { // Check for undefined
 335     char buf[50];
 336     regalloc->dump_register(n,buf);
 337     st->print(" %s%d]=%s",msg,i,buf);
 338   } else {                      // No register, but might be constant
 339     const Type *t = n->bottom_type();
 340     switch (t->base()) {
 341     case Type::Int:
 342       st->print(" %s%d]=#"INT32_FORMAT,msg,i,t->is_int()->get_con());
 343       break;
 344     case Type::AnyPtr:
 345       assert( t == TypePtr::NULL_PTR || n->in_dump(), "" );
 346       st->print(" %s%d]=#NULL",msg,i);
 347       break;
 348     case Type::AryPtr:
 349     case Type::InstPtr:
 350       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->isa_oopptr()->const_oop());
 351       break;
 352     case Type::KlassPtr:
 353       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_klassptr()->klass());
 354       break;
 355     case Type::MetadataPtr:
 356       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_metadataptr()->metadata());
 357       break;
 358     case Type::NarrowOop:
 359       st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_oopptr()->const_oop());
 360       break;
 361     case Type::RawPtr:
 362       st->print(" %s%d]=#Raw" INTPTR_FORMAT,msg,i,t->is_rawptr());
 363       break;
 364     case Type::DoubleCon:
 365       st->print(" %s%d]=#%fD",msg,i,t->is_double_constant()->_d);


 870 //=============================================================================
 871 uint CallStaticJavaNode::size_of() const { return sizeof(*this); }
 872 uint CallStaticJavaNode::cmp( const Node &n ) const {
 873   CallStaticJavaNode &call = (CallStaticJavaNode&)n;
 874   return CallJavaNode::cmp(call);
 875 }
 876 
 877 //----------------------------uncommon_trap_request----------------------------
 878 // If this is an uncommon trap, return the request code, else zero.
 879 int CallStaticJavaNode::uncommon_trap_request() const {
 880   if (_name != NULL && !strcmp(_name, "uncommon_trap")) {
 881     return extract_uncommon_trap_request(this);
 882   }
 883   return 0;
 884 }
 885 int CallStaticJavaNode::extract_uncommon_trap_request(const Node* call) {
 886 #ifndef PRODUCT
 887   if (!(call->req() > TypeFunc::Parms &&
 888         call->in(TypeFunc::Parms) != NULL &&
 889         call->in(TypeFunc::Parms)->is_Con())) {
 890     assert(in_dump() != 0, "OK if dumping");
 891     tty->print("[bad uncommon trap]");
 892     return 0;
 893   }
 894 #endif
 895   return call->in(TypeFunc::Parms)->bottom_type()->is_int()->get_con();
 896 }
 897 
 898 #ifndef PRODUCT
 899 void CallStaticJavaNode::dump_spec(outputStream *st) const {
 900   st->print("# Static ");
 901   if (_name != NULL) {
 902     st->print("%s", _name);
 903     int trap_req = uncommon_trap_request();
 904     if (trap_req != 0) {
 905       char buf[100];
 906       st->print("(%s)",
 907                  Deoptimization::format_trap_request(buf, sizeof(buf),
 908                                                      trap_req));
 909     }
 910     st->print(" ");