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