< 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,10 +26,11 @@
#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,13 +293,19 @@
// 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 >