279 uint src_name = _phc._lrg_map.find(m); |
279 uint src_name = _phc._lrg_map.find(m); |
280 if (src_name != phi_name) { |
280 if (src_name != phi_name) { |
281 Block *pred = _phc._cfg.get_block_for_node(b->pred(j)); |
281 Block *pred = _phc._cfg.get_block_for_node(b->pred(j)); |
282 Node *copy; |
282 Node *copy; |
283 assert(!m->is_Con() || m->is_Mach(), "all Con must be Mach"); |
283 assert(!m->is_Con() || m->is_Mach(), "all Con must be Mach"); |
284 // Rematerialize constants instead of copying them |
284 // Rematerialize constants instead of copying them. |
285 if( m->is_Mach() && m->as_Mach()->is_Con() && |
285 // We do this only for immediate constants, we avoid constant table loads |
286 m->as_Mach()->rematerialize() ) { |
286 // because that will unsafely extend the live range of the constant table base. |
|
287 if (m->is_Mach() && m->as_Mach()->is_Con() && !m->as_Mach()->is_MachConstant() && |
|
288 m->as_Mach()->rematerialize()) { |
287 copy = m->clone(); |
289 copy = m->clone(); |
288 // Insert the copy in the predecessor basic block |
290 // Insert the copy in the predecessor basic block |
289 pred->add_inst(copy); |
291 pred->add_inst(copy); |
290 // Copy any flags as well |
292 // Copy any flags as well |
291 _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); |
293 _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); |
315 if (_phc._lrg_map.find(m) != name) { |
317 if (_phc._lrg_map.find(m) != name) { |
316 Node *copy; |
318 Node *copy; |
317 assert(!m->is_Con() || m->is_Mach(), "all Con must be Mach"); |
319 assert(!m->is_Con() || m->is_Mach(), "all Con must be Mach"); |
318 // At this point it is unsafe to extend live ranges (6550579). |
320 // At this point it is unsafe to extend live ranges (6550579). |
319 // Rematerialize only constants as we do for Phi above. |
321 // Rematerialize only constants as we do for Phi above. |
320 if(m->is_Mach() && m->as_Mach()->is_Con() && |
322 if (m->is_Mach() && m->as_Mach()->is_Con() && !m->as_Mach()->is_MachConstant() && |
321 m->as_Mach()->rematerialize()) { |
323 m->as_Mach()->rematerialize()) { |
322 copy = m->clone(); |
324 copy = m->clone(); |
323 // Insert the copy in the basic block, just before us |
325 // Insert the copy in the basic block, just before us |
324 b->insert_node(copy, l++); |
326 b->insert_node(copy, l++); |
325 l += _phc.clone_projs(b, l, m, copy, _phc._lrg_map); |
327 l += _phc.clone_projs(b, l, m, copy, _phc._lrg_map); |
326 } else { |
328 } else { |