< prev index next >

src/share/vm/opto/macro.cpp

Print this page
rev 10511 : value type calling convention


  54 int PhaseMacroExpand::replace_input(Node *use, Node *oldref, Node *newref) {
  55   int nreplacements = 0;
  56   uint req = use->req();
  57   for (uint j = 0; j < use->len(); j++) {
  58     Node *uin = use->in(j);
  59     if (uin == oldref) {
  60       if (j < req)
  61         use->set_req(j, newref);
  62       else
  63         use->set_prec(j, newref);
  64       nreplacements++;
  65     } else if (j >= req && uin == NULL) {
  66       break;
  67     }
  68   }
  69   return nreplacements;
  70 }
  71 
  72 void PhaseMacroExpand::copy_call_debug_info(CallNode *oldcall, CallNode * newcall) {
  73   // Copy debug information and adjust JVMState information
  74   uint old_dbg_start = oldcall->tf()->domain()->cnt();
  75   uint new_dbg_start = newcall->tf()->domain()->cnt();
  76   int jvms_adj  = new_dbg_start - old_dbg_start;
  77   assert (new_dbg_start == newcall->req(), "argument count mismatch");
  78 
  79   // SafePointScalarObject node could be referenced several times in debug info.
  80   // Use Dict to record cloned nodes.
  81   Dict* sosn_map = new Dict(cmpkey,hashkey);
  82   for (uint i = old_dbg_start; i < oldcall->req(); i++) {
  83     Node* old_in = oldcall->in(i);
  84     // Clone old SafePointScalarObjectNodes, adjusting their field contents.
  85     if (old_in != NULL && old_in->is_SafePointScalarObject()) {
  86       SafePointScalarObjectNode* old_sosn = old_in->as_SafePointScalarObject();
  87       uint old_unique = C->unique();
  88       Node* new_in = old_sosn->clone(sosn_map);
  89       if (old_unique != C->unique()) { // New node?
  90         new_in->set_req(0, C->root()); // reset control edge
  91         new_in = transform_later(new_in); // Register new node.
  92       }
  93       old_in = new_in;
  94     }
  95     newcall->add_req(old_in);




  54 int PhaseMacroExpand::replace_input(Node *use, Node *oldref, Node *newref) {
  55   int nreplacements = 0;
  56   uint req = use->req();
  57   for (uint j = 0; j < use->len(); j++) {
  58     Node *uin = use->in(j);
  59     if (uin == oldref) {
  60       if (j < req)
  61         use->set_req(j, newref);
  62       else
  63         use->set_prec(j, newref);
  64       nreplacements++;
  65     } else if (j >= req && uin == NULL) {
  66       break;
  67     }
  68   }
  69   return nreplacements;
  70 }
  71 
  72 void PhaseMacroExpand::copy_call_debug_info(CallNode *oldcall, CallNode * newcall) {
  73   // Copy debug information and adjust JVMState information
  74   uint old_dbg_start = oldcall->tf()->domain_sig()->cnt();
  75   uint new_dbg_start = newcall->tf()->domain_sig()->cnt();
  76   int jvms_adj  = new_dbg_start - old_dbg_start;
  77   assert (new_dbg_start == newcall->req(), "argument count mismatch");
  78 
  79   // SafePointScalarObject node could be referenced several times in debug info.
  80   // Use Dict to record cloned nodes.
  81   Dict* sosn_map = new Dict(cmpkey,hashkey);
  82   for (uint i = old_dbg_start; i < oldcall->req(); i++) {
  83     Node* old_in = oldcall->in(i);
  84     // Clone old SafePointScalarObjectNodes, adjusting their field contents.
  85     if (old_in != NULL && old_in->is_SafePointScalarObject()) {
  86       SafePointScalarObjectNode* old_sosn = old_in->as_SafePointScalarObject();
  87       uint old_unique = C->unique();
  88       Node* new_in = old_sosn->clone(sosn_map);
  89       if (old_unique != C->unique()) { // New node?
  90         new_in->set_req(0, C->root()); // reset control edge
  91         new_in = transform_later(new_in); // Register new node.
  92       }
  93       old_in = new_in;
  94     }
  95     newcall->add_req(old_in);


< prev index next >