--- a/hotspot/src/share/vm/c1/c1_ValueMap.cpp Tue Aug 21 14:50:02 2012 -0700
+++ b/hotspot/src/share/vm/c1/c1_ValueMap.cpp Wed Aug 22 14:29:57 2012 +0200
@@ -190,7 +190,7 @@
LoadField* lf = value->as_LoadField(); \
bool must_kill = lf != NULL \
&& lf->field()->holder() == field->holder() \
- && lf->field()->offset() == field->offset();
+ && (all_offsets || lf->field()->offset() == field->offset());
#define MUST_KILL_EXCEPTION(must_kill, entry, value) \
assert(entry->nesting() < nesting(), "must not find bigger nesting than current"); \
@@ -205,7 +205,7 @@
GENERIC_KILL_VALUE(MUST_KILL_ARRAY);
}
-void ValueMap::kill_field(ciField* field) {
+void ValueMap::kill_field(ciField* field, bool all_offsets) {
GENERIC_KILL_VALUE(MUST_KILL_FIELD);
}
@@ -280,9 +280,9 @@
ValueMap* value_map_of(BlockBegin* block) { return _gvn->value_map_of(block); }
// implementation for abstract methods of ValueNumberingVisitor
- void kill_memory() { _too_complicated_loop = true; }
- void kill_field(ciField* field) { current_map()->kill_field(field); };
- void kill_array(ValueType* type) { current_map()->kill_array(type); };
+ void kill_memory() { _too_complicated_loop = true; }
+ void kill_field(ciField* field, bool all_offsets) { current_map()->kill_field(field, all_offsets); };
+ void kill_array(ValueType* type) { current_map()->kill_array(type); };
public:
ShortLoopOptimizer(GlobalValueNumbering* gvn)