< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page

        

@@ -78,48 +78,10 @@
     }
   }
   return nreplacements;
 }
 
-void PhaseMacroExpand::copy_call_debug_info(CallNode *oldcall, CallNode * newcall) {
-  // Copy debug information and adjust JVMState information
-  uint old_dbg_start = oldcall->tf()->domain_sig()->cnt();
-  uint new_dbg_start = newcall->tf()->domain_sig()->cnt();
-  int jvms_adj  = new_dbg_start - old_dbg_start;
-  assert (new_dbg_start == newcall->req(), "argument count mismatch");
-
-  // SafePointScalarObject node could be referenced several times in debug info.
-  // Use Dict to record cloned nodes.
-  Dict* sosn_map = new Dict(cmpkey,hashkey);
-  for (uint i = old_dbg_start; i < oldcall->req(); i++) {
-    Node* old_in = oldcall->in(i);
-    // Clone old SafePointScalarObjectNodes, adjusting their field contents.
-    if (old_in != NULL && old_in->is_SafePointScalarObject()) {
-      SafePointScalarObjectNode* old_sosn = old_in->as_SafePointScalarObject();
-      uint old_unique = C->unique();
-      Node* new_in = old_sosn->clone(sosn_map);
-      if (old_unique != C->unique()) { // New node?
-        new_in->set_req(0, C->root()); // reset control edge
-        new_in = transform_later(new_in); // Register new node.
-      }
-      old_in = new_in;
-    }
-    newcall->add_req(old_in);
-  }
-
-  // JVMS may be shared so clone it before we modify it
-  newcall->set_jvms(oldcall->jvms() != NULL ? oldcall->jvms()->clone_deep(C) : NULL);
-  for (JVMState *jvms = newcall->jvms(); jvms != NULL; jvms = jvms->caller()) {
-    jvms->set_map(newcall);
-    jvms->set_locoff(jvms->locoff()+jvms_adj);
-    jvms->set_stkoff(jvms->stkoff()+jvms_adj);
-    jvms->set_monoff(jvms->monoff()+jvms_adj);
-    jvms->set_scloff(jvms->scloff()+jvms_adj);
-    jvms->set_endoff(jvms->endoff()+jvms_adj);
-  }
-}
-
 Node* PhaseMacroExpand::opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path) {
   Node* cmp;
   if (mask != 0) {
     Node* and_node = transform_later(new AndXNode(word, MakeConX(mask)));
     cmp = transform_later(new CmpXNode(and_node, MakeConX(bits)));

@@ -168,11 +130,11 @@
   // Slow path call has no side-effects, uses few values
   copy_predefined_input_for_runtime_call(slow_path, oldcall, call );
   if (parm0 != NULL)  call->init_req(TypeFunc::Parms+0, parm0);
   if (parm1 != NULL)  call->init_req(TypeFunc::Parms+1, parm1);
   if (parm2 != NULL)  call->init_req(TypeFunc::Parms+2, parm2);
-  copy_call_debug_info(oldcall, call);
+  call->copy_call_debug_info(&_igvn, oldcall);
   call->set_cnt(PROB_UNLIKELY_MAG(4));  // Same effect as RC_UNCOMMON.
   _igvn.replace_node(oldcall, call);
   transform_later(call);
 
   return call;

@@ -1574,11 +1536,11 @@
     call->init_req(TypeFunc::Parms+1, length);
   }
 
   // Copy debug information and adjust JVMState information, then replace
   // allocate node with the call
-  copy_call_debug_info((CallNode *) alloc,  call);
+  call->copy_call_debug_info(&_igvn, alloc);
   if (!always_slow) {
     call->set_cnt(PROB_UNLIKELY_MAG(4));  // Same effect as RC_UNCOMMON.
   } else {
     // Hook i_o projection to avoid its elimination during allocation
     // replacement (when only a slow call is generated).

@@ -2453,11 +2415,11 @@
     unc->init_req(TypeFunc::Memory, mem); // may gc ptrs
     unc->init_req(TypeFunc::FramePtr,  lock->in(TypeFunc::FramePtr));
     unc->init_req(TypeFunc::ReturnAdr, lock->in(TypeFunc::ReturnAdr));
     unc->init_req(TypeFunc::Parms+0, _igvn.intcon(trap_request));
     unc->set_cnt(PROB_UNLIKELY_MAG(4));
-    copy_call_debug_info(lock, unc);
+    unc->copy_call_debug_info(&_igvn, lock);
 
     assert(unc->peek_monitor_box() == box, "wrong monitor");
     assert(unc->peek_monitor_obj() == obj, "wrong monitor");
 
     // pop monitor and push obj back on stack: we trap before the monitorenter

@@ -2723,11 +2685,11 @@
     slow_call->init_req(i, proj);
     handler_call->init_req(i+1, proj);
   }
 
   // We can safepoint at that new call
-  copy_call_debug_info(call, slow_call);
+  slow_call->copy_call_debug_info(&_igvn, call);
   transform_later(slow_call);
   transform_later(handler_call);
 
   Node* handler_ctl = transform_later(new ProjNode(handler_call, TypeFunc::Control));
   rawmem = transform_later(new ProjNode(handler_call, TypeFunc::Memory));
< prev index next >