# HG changeset patch # User adlertz # Date 1382517852 -7200 # Node ID 4c9115774c8e7abf57502c8bd6a4a3bab9b43322 # Parent 52575a17a36c18ca13024b1c5bb8f2bf4c7d337e 8026939: assert(Reachblock != NULL) failed: Reachblock must be non-NULL Summary: We can reach this state from phi input rematerialization, so pass in the Reaches of the predecessor Reviewed-by: roland, twisti diff -r 52575a17a36c -r 4c9115774c8e src/share/vm/opto/reg_split.cpp --- a/src/share/vm/opto/reg_split.cpp Mon Oct 21 09:21:41 2013 +0400 +++ b/src/share/vm/opto/reg_split.cpp Wed Oct 23 10:44:12 2013 +0200 @@ -365,7 +365,6 @@ } if (lidx < _lrg_map.max_lrg_id() && lrgs(lidx).reg() >= LRG::SPILL_REG) { - assert(Reachblock != NULL, "Reachblock must be non-NULL"); Node *rdef = Reachblock[lrg2reach[lidx]]; if (rdef) { spill->set_req(i, rdef); @@ -476,7 +475,6 @@ uint bidx, pidx, slidx, insidx, inpidx, twoidx; uint non_phi = 1, spill_cnt = 0; - Node **Reachblock; Node *n1, *n2, *n3; Node_List *defs,*phis; bool *UPblock; @@ -559,7 +557,7 @@ b = _cfg.get_block(bidx); // Reaches & UP arrays for this block - Reachblock = Reaches[b->_pre_order]; + Node** Reachblock = Reaches[b->_pre_order]; UPblock = UP[b->_pre_order]; // Reset counter of start of non-Phi nodes in block non_phi = 1; @@ -1315,6 +1313,7 @@ pidx = pred->_pre_order; // Grab reaching def Node *def = Reaches[pidx][slidx]; + Node** Reachblock = Reaches[pidx]; assert( def, "must have reaching def" ); // If input up/down sense and reg-pressure DISagree if (def->rematerialize()) { @@ -1327,8 +1326,7 @@ _lrg_map.find(pred->get_node(insert - 1)) >= lrgs_before_phi_split) { insert--; } - // since the def cannot contain any live range input, we can pass in NULL as Reachlock parameter - def = split_Rematerialize(def, pred, insert, maxlrg, splits, slidx, lrg2reach, NULL, false); + def = split_Rematerialize(def, pred, insert, maxlrg, splits, slidx, lrg2reach, Reachblock, false); if (!def) { return 0; // Bail out }