hotspot/src/share/vm/opto/macro.cpp
changeset 236 9a04268c8eea
parent 1 489c9b5090e2
child 239 fb31825d5444
equal deleted inserted replaced
219:ac2d788217ca 236:9a04268c8eea
    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) {