8144484: assert(no_dead_loop) failed: dead loop detected

Bailout early without splitting Phi through memory merges if TOP inputs present for Phi Nodes

Reviewed-by: thartmann, kvn
This commit is contained in:
Rahul Raghavan 2017-02-03 00:46:58 -08:00
parent b9e2a53841
commit a44e07e4b3

View File

@ -1889,6 +1889,12 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
bool saw_self = false;
for( uint i=1; i<req(); ++i ) {// For all paths in
Node *ii = in(i);
// TOP inputs should not be counted as safe inputs because if the
// Phi references itself through all other inputs then splitting the
// Phi through memory merges would create dead loop at later stage.
if (ii == top) {
return NULL; // Delay optimization until graph is cleaned.
}
if (ii->is_MergeMem()) {
MergeMemNode* n = ii->as_MergeMem();
merge_width = MAX2(merge_width, n->req());