Mercurial > hg > graal-compiler
diff src/share/vm/opto/escape.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | f96100ac3d12 |
children | b130b98db9cf |
line wrap: on
line diff
--- a/src/share/vm/opto/escape.cpp Fri Apr 11 09:56:35 2008 -0400 +++ b/src/share/vm/opto/escape.cpp Sun Apr 13 17:43:42 2008 -0400 @@ -1749,15 +1749,28 @@ add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); break; } + case Op_ConN: + { + // assume all narrow oop constants globally escape except for null + PointsToNode::EscapeState es; + if (phase->type(n) == TypeNarrowOop::NULL_PTR) + es = PointsToNode::NoEscape; + else + es = PointsToNode::GlobalEscape; + + add_node(n, PointsToNode::JavaObject, es, true); + break; + } case Op_LoadKlass: { add_node(n, PointsToNode::JavaObject, PointsToNode::GlobalEscape, true); break; } case Op_LoadP: + case Op_LoadN: { const Type *t = phase->type(n); - if (t->isa_ptr() == NULL) { + if (!t->isa_narrowoop() && t->isa_ptr() == NULL) { _processed.set(n->_idx); return; } @@ -1847,8 +1860,12 @@ break; } case Op_StoreP: + case Op_StoreN: { const Type *adr_type = phase->type(n->in(MemNode::Address)); + if (adr_type->isa_narrowoop()) { + adr_type = adr_type->is_narrowoop()->make_oopptr(); + } if (adr_type->isa_oopptr()) { add_node(n, PointsToNode::UnknownType, PointsToNode::UnknownEscape, false); } else { @@ -1870,8 +1887,12 @@ } case Op_StorePConditional: case Op_CompareAndSwapP: + case Op_CompareAndSwapN: { const Type *adr_type = phase->type(n->in(MemNode::Address)); + if (adr_type->isa_narrowoop()) { + adr_type = adr_type->is_narrowoop()->make_oopptr(); + } if (adr_type->isa_oopptr()) { add_node(n, PointsToNode::UnknownType, PointsToNode::UnknownEscape, false); } else { @@ -1927,6 +1948,8 @@ } case Op_CastPP: case Op_CheckCastPP: + case Op_EncodeP: + case Op_DecodeN: { int ti = n->in(1)->_idx; if (_nodes->adr_at(ti)->node_type() == PointsToNode::JavaObject) {