src/share/vm/opto/replacednodes.cpp

changeset 8795
3ff8d0b5a04b
parent 8723
9f5da1a1724c
     1.1 --- a/src/share/vm/opto/replacednodes.cpp	Mon May 01 10:54:10 2017 -0700
     1.2 +++ b/src/share/vm/opto/replacednodes.cpp	Wed Feb 15 17:26:37 2017 -0800
     1.3 @@ -91,13 +91,17 @@
     1.4  }
     1.5  
     1.6  // Perfom node replacement (used when returning to caller)
     1.7 -void ReplacedNodes::apply(Node* n) {
     1.8 +void ReplacedNodes::apply(Node* n, uint idx) {
     1.9    if (is_empty()) {
    1.10      return;
    1.11    }
    1.12    for (int i = 0; i < _replaced_nodes->length(); i++) {
    1.13      ReplacedNode replaced = _replaced_nodes->at(i);
    1.14 -    n->replace_edge(replaced.initial(), replaced.improved());
    1.15 +    // Only apply if improved node was created in a callee to avoid
    1.16 +    // issues with irreducible loops in the caller
    1.17 +    if (replaced.improved()->_idx >= idx) {
    1.18 +      n->replace_edge(replaced.initial(), replaced.improved());
    1.19 +    }
    1.20    }
    1.21  }
    1.22  

mercurial