< prev index next >

src/hotspot/share/opto/coalesce.cpp

Print this page
rev 48658 : 8192992: Test8007294.java failed: attempted to spill a non-spillable item
Summary: Allow recompile without subsuming loads
Reviewed-by:

*** 26,35 **** --- 26,36 ---- #include "memory/allocation.inline.hpp" #include "opto/block.hpp" #include "opto/cfgnode.hpp" #include "opto/chaitin.hpp" #include "opto/coalesce.hpp" + #include "opto/c2compiler.hpp" #include "opto/connode.hpp" #include "opto/indexSet.hpp" #include "opto/machnode.hpp" #include "opto/matcher.hpp" #include "opto/regmask.hpp"
*** 292,304 **** --- 293,311 ---- // Copy any flags as well _phc.clone_projs(pred, pred->end_idx(), m, copy, _phc._lrg_map); } else { uint ireg = m->ideal_reg(); if (ireg == 0 || ireg == Op_RegFlags) { + if (C->subsume_loads() == true && !C->failing()) { + // Retry with subsume_loads == false + C->record_failure(C2Compiler::retry_no_subsuming_loads()); + } else { assert(false, "attempted to spill a non-spillable item: %d: %s, ireg = %u, spill_type: %s", m->_idx, m->Name(), ireg, MachSpillCopyNode::spill_type(MachSpillCopyNode::PhiInput)); + // Bailout without retry C->record_method_not_compilable("attempted to spill a non-spillable item"); + } return; } const RegMask *rm = C->matcher()->idealreg2spillmask[ireg]; copy = new MachSpillCopyNode(MachSpillCopyNode::PhiInput, m, *rm, *rm); // Find a good place to insert. Kinda tricky, use a subroutine
< prev index next >