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