23 */ |
23 */ |
24 |
24 |
25 #include "precompiled.hpp" |
25 #include "precompiled.hpp" |
26 #include "memory/allocation.inline.hpp" |
26 #include "memory/allocation.inline.hpp" |
27 #include "opto/block.hpp" |
27 #include "opto/block.hpp" |
|
28 #include "opto/c2compiler.hpp" |
28 #include "opto/cfgnode.hpp" |
29 #include "opto/cfgnode.hpp" |
29 #include "opto/chaitin.hpp" |
30 #include "opto/chaitin.hpp" |
30 #include "opto/coalesce.hpp" |
31 #include "opto/coalesce.hpp" |
31 #include "opto/connode.hpp" |
32 #include "opto/connode.hpp" |
32 #include "opto/indexSet.hpp" |
33 #include "opto/indexSet.hpp" |
292 // Copy any flags as well |
293 // Copy any flags as well |
293 _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); |
294 _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); |
294 } else { |
295 } else { |
295 uint ireg = m->ideal_reg(); |
296 uint ireg = m->ideal_reg(); |
296 if (ireg == 0 || ireg == Op_RegFlags) { |
297 if (ireg == 0 || ireg == Op_RegFlags) { |
297 assert(false, "attempted to spill a non-spillable item: %d: %s, ireg = %u, spill_type: %s", |
298 if (C->subsume_loads()) { |
298 m->_idx, m->Name(), ireg, MachSpillCopyNode::spill_type(MachSpillCopyNode::PhiInput)); |
299 C->record_failure(C2Compiler::retry_no_subsuming_loads()); |
299 C->record_method_not_compilable("attempted to spill a non-spillable item"); |
300 } else { |
|
301 assert(false, "attempted to spill a non-spillable item: %d: %s, ireg = %u, spill_type: %s", |
|
302 m->_idx, m->Name(), ireg, MachSpillCopyNode::spill_type(MachSpillCopyNode::PhiInput)); |
|
303 C->record_method_not_compilable("attempted to spill a non-spillable item"); |
|
304 } |
300 return; |
305 return; |
301 } |
306 } |
302 const RegMask *rm = C->matcher()->idealreg2spillmask[ireg]; |
307 const RegMask *rm = C->matcher()->idealreg2spillmask[ireg]; |
303 copy = new MachSpillCopyNode(MachSpillCopyNode::PhiInput, m, *rm, *rm); |
308 copy = new MachSpillCopyNode(MachSpillCopyNode::PhiInput, m, *rm, *rm); |
304 // Find a good place to insert. Kinda tricky, use a subroutine |
309 // Find a good place to insert. Kinda tricky, use a subroutine |