52 // Copy debug information and adjust JVMState information |
52 // Copy debug information and adjust JVMState information |
53 uint old_dbg_start = oldcall->tf()->domain()->cnt(); |
53 uint old_dbg_start = oldcall->tf()->domain()->cnt(); |
54 uint new_dbg_start = newcall->tf()->domain()->cnt(); |
54 uint new_dbg_start = newcall->tf()->domain()->cnt(); |
55 int jvms_adj = new_dbg_start - old_dbg_start; |
55 int jvms_adj = new_dbg_start - old_dbg_start; |
56 assert (new_dbg_start == newcall->req(), "argument count mismatch"); |
56 assert (new_dbg_start == newcall->req(), "argument count mismatch"); |
|
57 |
|
58 Dict* sosn_map = new Dict(cmpkey,hashkey); |
57 for (uint i = old_dbg_start; i < oldcall->req(); i++) { |
59 for (uint i = old_dbg_start; i < oldcall->req(); i++) { |
58 newcall->add_req(oldcall->in(i)); |
60 Node* old_in = oldcall->in(i); |
59 } |
61 // Clone old SafePointScalarObjectNodes, adjusting their field contents. |
|
62 if (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 |
60 newcall->set_jvms(oldcall->jvms()); |
74 newcall->set_jvms(oldcall->jvms()); |
61 for (JVMState *jvms = newcall->jvms(); jvms != NULL; jvms = jvms->caller()) { |
75 for (JVMState *jvms = newcall->jvms(); jvms != NULL; jvms = jvms->caller()) { |
62 jvms->set_map(newcall); |
76 jvms->set_map(newcall); |
63 jvms->set_locoff(jvms->locoff()+jvms_adj); |
77 jvms->set_locoff(jvms->locoff()+jvms_adj); |
64 jvms->set_stkoff(jvms->stkoff()+jvms_adj); |
78 jvms->set_stkoff(jvms->stkoff()+jvms_adj); |
65 jvms->set_monoff(jvms->monoff()+jvms_adj); |
79 jvms->set_monoff(jvms->monoff()+jvms_adj); |
|
80 jvms->set_scloff(jvms->scloff()+jvms_adj); |
66 jvms->set_endoff(jvms->endoff()+jvms_adj); |
81 jvms->set_endoff(jvms->endoff()+jvms_adj); |
67 } |
82 } |
68 } |
83 } |
69 |
84 |
70 Node* PhaseMacroExpand::opt_iff(Node* region, Node* iff) { |
85 Node* PhaseMacroExpand::opt_iff(Node* region, Node* iff) { |