src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/parse3.cpp	Fri Mar 18 14:58:59 2011
--- new/src/share/vm/opto/parse3.cpp	Fri Mar 18 14:58:59 2011

*** 110,142 **** --- 110,144 ---- int obj_depth = is_get ? 0 : field->type()->size(); obj = do_null_check(peek(obj_depth), T_OBJECT); // Compile-time detect of null-exception? if (stopped()) return; + #ifdef ASSERT const TypeInstPtr *tjp = TypeInstPtr::make(TypePtr::NotNull, iter().get_declared_field_holder()); assert(_gvn.type(obj)->higher_equal(tjp), "cast_up is no longer needed"); + #endif if (is_get) { --_sp; // pop receiver before getting - do_get_xxx(tjp, obj, field, is_field); } else { - do_put_xxx(tjp, obj, field, is_field); --_sp; // pop receiver after putting } } else { ! const TypeKlassPtr* tkp = TypeKlassPtr::make(field_holder); ! obj = _gvn.makecon(tkp); ! const TypeInstPtr* tip = TypeInstPtr::make(field_holder->java_mirror()); ! obj = _gvn.makecon(tip); if (is_get) { - do_get_xxx(tkp, obj, field, is_field); } else { - do_put_xxx(tkp, obj, field, is_field); } } } - void Parse::do_get_xxx(const TypePtr* obj_type, Node* obj, ciField* field, bool is_field) { // Does this field have a constant value? If so, just push the value. if (field->is_constant()) { if (field->is_static()) { // final static field if (push_constant(field->constant_value()))
*** 229,239 **** --- 231,241 ---- // Memory barrier includes bogus read of value to force load BEFORE membar insert_mem_bar(Op_MemBarAcquire, ld); } } - void Parse::do_put_xxx(const TypePtr* obj_type, Node* obj, ciField* field, bool is_field) { bool is_vol = field->is_volatile(); // If reference is volatile, prevent following memory ops from // floating down past the volatile write. Also prevents commoning // another volatile read. if (is_vol) insert_mem_bar(Op_MemBarRelease);

src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File