From 1c38036fd886c4dc3230a4fe7050fcb47bb17f2f Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Wed, 25 Mar 2015 14:25:53 +0100 Subject: [PATCH] 8075922: assert(t == t_no_spec) fails in phaseX.cpp Subgraph becomes dead RegionNode::Ideal() but is not destroyed Reviewed-by: kvn, vlivanov --- hotspot/src/share/vm/opto/cfgnode.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/opto/cfgnode.cpp b/hotspot/src/share/vm/opto/cfgnode.cpp index f609cf4e8a9..fcb3fcd2c20 100644 --- a/hotspot/src/share/vm/opto/cfgnode.cpp +++ b/hotspot/src/share/vm/opto/cfgnode.cpp @@ -525,13 +525,16 @@ Node *RegionNode::Ideal(PhaseGVN *phase, bool can_reshape) { // Cut the backedge input and remove phis since no data paths left. // We don't cut outputs to other nodes here since we need to put them // on the worklist. + PhaseIterGVN *igvn = phase->is_IterGVN(); + if (in(1)->outcnt() == 1) { + igvn->_worklist.push(in(1)); + } del_req(1); cnt = 0; assert( req() == 1, "no more inputs expected" ); uint max = outcnt(); bool progress = true; Node *top = phase->C->top(); - PhaseIterGVN *igvn = phase->is_IterGVN(); DUIterator j; while(progress) { progress = false;