src/hotspot/share/opto/coalesce.cpp
changeset 51521 76a51e26d0ac
parent 47216 71c04702a3d5
child 59081 95a99e617f28
equal deleted inserted replaced
51520:ef7852ece52b 51521:76a51e26d0ac
    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