< prev index next >

src/share/vm/opto/compile.cpp

Print this page
rev 9414 : 8217230: assert(t == t_no_spec) failure in NodeHash::check_no_speculative_types()
Summary: Remove dead node from C2 IR.
Reviewed-by: roland, neliasso

*** 2082,2098 **** // Remove edges from "root" to each SafePoint at a backward branch. // They were inserted during parsing (see add_safepoint()) to make // infinite loops without calls or exceptions visible to root, i.e., // useful. ! void Compile::remove_root_to_sfpts_edges() { Node *r = root(); if (r != NULL) { for (uint i = r->req(); i < r->len(); ++i) { Node *n = r->in(i); if (n != NULL && n->is_SafePoint()) { r->rm_prec(i); --i; } } } } --- 2082,2101 ---- // Remove edges from "root" to each SafePoint at a backward branch. // They were inserted during parsing (see add_safepoint()) to make // infinite loops without calls or exceptions visible to root, i.e., // useful. ! void Compile::remove_root_to_sfpts_edges(PhaseIterGVN& igvn) { Node *r = root(); if (r != NULL) { for (uint i = r->req(); i < r->len(); ++i) { Node *n = r->in(i); if (n != NULL && n->is_SafePoint()) { r->rm_prec(i); + if (n->outcnt() == 0) { + igvn.remove_dead_node(n); + } --i; } } } }
*** 2152,2162 **** if (failing()) return; } // Now that all inlining is over, cut edge from root to loop // safepoints ! remove_root_to_sfpts_edges(); // Remove the speculative part of types and clean up the graph from // the extra CastPP nodes whose only purpose is to carry them. Do // that early so that optimizations are not disrupted by the extra // CastPP nodes. --- 2155,2165 ---- if (failing()) return; } // Now that all inlining is over, cut edge from root to loop // safepoints ! remove_root_to_sfpts_edges(igvn); // Remove the speculative part of types and clean up the graph from // the extra CastPP nodes whose only purpose is to carry them. Do // that early so that optimizations are not disrupted by the extra // CastPP nodes.
< prev index next >