1.1 --- a/src/share/vm/c1/c1_ValueMap.cpp Tue Aug 21 14:50:02 2012 -0700 1.2 +++ b/src/share/vm/c1/c1_ValueMap.cpp Wed Aug 22 14:29:57 2012 +0200 1.3 @@ -190,7 +190,7 @@ 1.4 LoadField* lf = value->as_LoadField(); \ 1.5 bool must_kill = lf != NULL \ 1.6 && lf->field()->holder() == field->holder() \ 1.7 - && lf->field()->offset() == field->offset(); 1.8 + && (all_offsets || lf->field()->offset() == field->offset()); 1.9 1.10 #define MUST_KILL_EXCEPTION(must_kill, entry, value) \ 1.11 assert(entry->nesting() < nesting(), "must not find bigger nesting than current"); \ 1.12 @@ -205,7 +205,7 @@ 1.13 GENERIC_KILL_VALUE(MUST_KILL_ARRAY); 1.14 } 1.15 1.16 -void ValueMap::kill_field(ciField* field) { 1.17 +void ValueMap::kill_field(ciField* field, bool all_offsets) { 1.18 GENERIC_KILL_VALUE(MUST_KILL_FIELD); 1.19 } 1.20 1.21 @@ -280,9 +280,9 @@ 1.22 ValueMap* value_map_of(BlockBegin* block) { return _gvn->value_map_of(block); } 1.23 1.24 // implementation for abstract methods of ValueNumberingVisitor 1.25 - void kill_memory() { _too_complicated_loop = true; } 1.26 - void kill_field(ciField* field) { current_map()->kill_field(field); }; 1.27 - void kill_array(ValueType* type) { current_map()->kill_array(type); }; 1.28 + void kill_memory() { _too_complicated_loop = true; } 1.29 + void kill_field(ciField* field, bool all_offsets) { current_map()->kill_field(field, all_offsets); }; 1.30 + void kill_array(ValueType* type) { current_map()->kill_array(type); }; 1.31 1.32 public: 1.33 ShortLoopOptimizer(GlobalValueNumbering* gvn)