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(" ");
|