< 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 >