47 }
48 return nreplacements;
49 }
50
51 void PhaseMacroExpand::copy_call_debug_info(CallNode *oldcall, CallNode * newcall) {
52 // Copy debug information and adjust JVMState information
53 uint old_dbg_start = oldcall->tf()->domain()->cnt();
54 uint new_dbg_start = newcall->tf()->domain()->cnt();
55 int jvms_adj = new_dbg_start - old_dbg_start;
56 assert (new_dbg_start == newcall->req(), "argument count mismatch");
57
58 Dict* sosn_map = new Dict(cmpkey,hashkey);
59 for (uint i = old_dbg_start; i < oldcall->req(); i++) {
60 Node* old_in = oldcall->in(i);
61 // Clone old SafePointScalarObjectNodes, adjusting their field contents.
62 if (old_in != NULL && old_in->is_SafePointScalarObject()) {
63 SafePointScalarObjectNode* old_sosn = old_in->as_SafePointScalarObject();
64 uint old_unique = C->unique();
65 Node* new_in = old_sosn->clone(jvms_adj, sosn_map);
66 if (old_unique != C->unique()) {
67 new_in = transform_later(new_in); // Register new node.
68 }
69 old_in = new_in;
70 }
71 newcall->add_req(old_in);
72 }
73
74 newcall->set_jvms(oldcall->jvms());
75 for (JVMState *jvms = newcall->jvms(); jvms != NULL; jvms = jvms->caller()) {
76 jvms->set_map(newcall);
77 jvms->set_locoff(jvms->locoff()+jvms_adj);
78 jvms->set_stkoff(jvms->stkoff()+jvms_adj);
79 jvms->set_monoff(jvms->monoff()+jvms_adj);
80 jvms->set_scloff(jvms->scloff()+jvms_adj);
81 jvms->set_endoff(jvms->endoff()+jvms_adj);
82 }
83 }
84
85 Node* PhaseMacroExpand::opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path) {
86 Node* cmp;
|
47 }
48 return nreplacements;
49 }
50
51 void PhaseMacroExpand::copy_call_debug_info(CallNode *oldcall, CallNode * newcall) {
52 // Copy debug information and adjust JVMState information
53 uint old_dbg_start = oldcall->tf()->domain()->cnt();
54 uint new_dbg_start = newcall->tf()->domain()->cnt();
55 int jvms_adj = new_dbg_start - old_dbg_start;
56 assert (new_dbg_start == newcall->req(), "argument count mismatch");
57
58 Dict* sosn_map = new Dict(cmpkey,hashkey);
59 for (uint i = old_dbg_start; i < oldcall->req(); i++) {
60 Node* old_in = oldcall->in(i);
61 // Clone old SafePointScalarObjectNodes, adjusting their field contents.
62 if (old_in != NULL && old_in->is_SafePointScalarObject()) {
63 SafePointScalarObjectNode* old_sosn = old_in->as_SafePointScalarObject();
64 uint old_unique = C->unique();
65 Node* new_in = old_sosn->clone(jvms_adj, sosn_map);
66 if (old_unique != C->unique()) {
67 new_in->set_req(0, newcall->in(0)); // reset control edge
68 new_in = transform_later(new_in); // Register new node.
69 }
70 old_in = new_in;
71 }
72 newcall->add_req(old_in);
73 }
74
75 newcall->set_jvms(oldcall->jvms());
76 for (JVMState *jvms = newcall->jvms(); jvms != NULL; jvms = jvms->caller()) {
77 jvms->set_map(newcall);
78 jvms->set_locoff(jvms->locoff()+jvms_adj);
79 jvms->set_stkoff(jvms->stkoff()+jvms_adj);
80 jvms->set_monoff(jvms->monoff()+jvms_adj);
81 jvms->set_scloff(jvms->scloff()+jvms_adj);
82 jvms->set_endoff(jvms->endoff()+jvms_adj);
83 }
84 }
85
86 Node* PhaseMacroExpand::opt_bits_test(Node* ctrl, Node* region, int edge, Node* word, int mask, int bits, bool return_fast_path) {
87 Node* cmp;
|