< prev index next >
src/share/vm/opto/replacednodes.cpp
Print this page
rev 8216 : maybe fix + debug
rev 8221 : 8174164: SafePointNode::_replaced_nodes breaks with irreducible loops
Reviewed-by: kvn
@@ -89,18 +89,22 @@
_replaced_nodes->clear();
}
}
// Perfom node replacement (used when returning to caller)
-void ReplacedNodes::apply(Node* n) {
+void ReplacedNodes::apply(Node* n, uint idx) {
if (is_empty()) {
return;
}
for (int i = 0; i < _replaced_nodes->length(); i++) {
ReplacedNode replaced = _replaced_nodes->at(i);
+ // Only apply if improved node was created in a callee to avoid
+ // issues with irreducible loops in the caller
+ if (replaced.improved()->_idx >= idx) {
n->replace_edge(replaced.initial(), replaced.improved());
}
+ }
}
static void enqueue_use(Node* n, Node* use, Unique_Node_List& work) {
if (use->is_Phi()) {
Node* r = use->in(0);
< prev index next >