src/share/vm/opto/chaitin.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/chaitin.cpp Tue Aug 13 15:38:05 2013
--- new/src/share/vm/opto/chaitin.cpp Tue Aug 13 15:38:05 2013
*** 292,316 ****
--- 292,318 ----
// Make the Union-Find mapping an identity function
_lrg_map.uf_extend(lrg, lrg);
}
! bool PhaseChaitin::clone_projs_shared(Block *b, uint idx, Node *con, Node *copy, uint max_lrg_id) {
! Block *bcon = _cfg._bbs[con->_idx];
! uint cindex = bcon->find_node(con);
! Node *con_next = bcon->_nodes[cindex+1];
if (con_next->in(0) != con || !con_next->is_MachProj()) {
return false; // No MachProj's follow
}
// Copy kills after the cloned constant
! Node *kills = con_next->clone();
! int PhaseChaitin::clone_projs(Block *b, uint idx, Node *orig, Node *copy, uint &max_lrg_id) {
! assert(b->find_node(copy) == (idx - 1), "incorrect insert index for copy kill projections");
! Block* borig = _cfg._bbs[orig->_idx];
! uint bindex = borig->find_node(orig) + 1;
+ Node* proj = borig->_nodes[bindex++];
+ int found_projs = 0;
+ while (proj->in(0) == orig && proj->is_MachProj()) {
+ found_projs++;
+ // Copy kill projections after the cloned node
! Node* kills = proj->clone();
kills->set_req(0, copy);
! b->_nodes.insert(idx++, kills);
_cfg._bbs.map(kills->_idx, b);
! new_lrg(kills, max_lrg_id++);
! return true;
! proj = borig->_nodes[bindex++];
+ }
+ return found_projs;
}
//------------------------------compact----------------------------------------
// Renumber the live ranges to compact them. Makes the IFG smaller.
void PhaseChaitin::compact() {
src/share/vm/opto/chaitin.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File