< 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 >