src/share/vm/c1/c1_ValueMap.cpp

changeset 4909
84ab5667f290
parent 4860
46f6f063b272
child 6198
55fb97c4c58d
     1.1 --- a/src/share/vm/c1/c1_ValueMap.cpp	Tue Apr 09 09:54:17 2013 -0700
     1.2 +++ b/src/share/vm/c1/c1_ValueMap.cpp	Wed Apr 10 09:52:49 2013 +0200
     1.3 @@ -316,6 +316,7 @@
     1.4    ShortLoopOptimizer*   _short_loop_optimizer;
     1.5    Instruction*          _insertion_point;
     1.6    ValueStack *          _state;
     1.7 +  bool                  _insert_is_pred;
     1.8  
     1.9    void set_invariant(Value v) const    { _gvn->set_processed(v); }
    1.10    bool is_invariant(Value v) const     { return _gvn->is_processed(v); }
    1.11 @@ -339,6 +340,7 @@
    1.12  
    1.13    assert(insertion_block->end()->as_Base() == NULL, "cannot insert into entry block");
    1.14    _insertion_point = insertion_block->end()->prev();
    1.15 +  _insert_is_pred = loop_header->is_predecessor(insertion_block);
    1.16  
    1.17    BlockEnd *block_end = insertion_block->end();
    1.18    _state = block_end->state_before();
    1.19 @@ -379,13 +381,13 @@
    1.20      } else if (cur->as_LoadField() != NULL) {
    1.21        LoadField* lf = (LoadField*)cur;
    1.22        // deoptimizes on NullPointerException
    1.23 -      cur_invariant = !lf->needs_patching() && !lf->field()->is_volatile() && !_short_loop_optimizer->has_field_store(lf->field()->type()->basic_type()) && is_invariant(lf->obj());
    1.24 +      cur_invariant = !lf->needs_patching() && !lf->field()->is_volatile() && !_short_loop_optimizer->has_field_store(lf->field()->type()->basic_type()) && is_invariant(lf->obj()) && _insert_is_pred;
    1.25      } else if (cur->as_ArrayLength() != NULL) {
    1.26        ArrayLength *length = cur->as_ArrayLength();
    1.27        cur_invariant = is_invariant(length->array());
    1.28      } else if (cur->as_LoadIndexed() != NULL) {
    1.29        LoadIndexed *li = (LoadIndexed *)cur->as_LoadIndexed();
    1.30 -      cur_invariant = !_short_loop_optimizer->has_indexed_store(as_BasicType(cur->type())) && is_invariant(li->array()) && is_invariant(li->index());
    1.31 +      cur_invariant = !_short_loop_optimizer->has_indexed_store(as_BasicType(cur->type())) && is_invariant(li->array()) && is_invariant(li->index()) && _insert_is_pred;
    1.32      }
    1.33  
    1.34      if (cur_invariant) {

mercurial