< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page

        

*** 1172,1187 **** } return _gvn.transform( new ConvL2INode(offset)); } //-------------------------load_object_klass----------------------------------- ! Node* GraphKit::load_object_klass(Node* obj) { // Special-case a fresh allocation to avoid building nodes: Node* akls = AllocateNode::Ideal_klass(obj, &_gvn); if (akls != NULL) return akls; Node* k_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes()); ! return _gvn.transform(LoadKlassNode::make(_gvn, NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS)); } //-------------------------load_array_length----------------------------------- Node* GraphKit::load_array_length(Node* array) { // Special-case a fresh allocation to avoid building nodes: --- 1172,1187 ---- } return _gvn.transform( new ConvL2INode(offset)); } //-------------------------load_object_klass----------------------------------- ! Node* GraphKit::load_object_klass(Node* obj, bool clear_prop_bits) { // Special-case a fresh allocation to avoid building nodes: Node* akls = AllocateNode::Ideal_klass(obj, &_gvn); if (akls != NULL) return akls; Node* k_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes()); ! return _gvn.transform(LoadKlassNode::make(_gvn, NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, clear_prop_bits)); } //-------------------------load_array_length----------------------------------- Node* GraphKit::load_array_length(Node* array) { // Special-case a fresh allocation to avoid building nodes:
*** 3459,3509 **** } Node* GraphKit::is_always_locked(Node* obj) { Node* mark_addr = basic_plus_adr(obj, oopDesc::mark_offset_in_bytes()); Node* mark = make_load(NULL, mark_addr, TypeX_X, TypeX_X->basic_type(), MemNode::unordered); ! Node* value_mask = _gvn.MakeConX(markWord::always_locked_pattern); ! return _gvn.transform(new AndXNode(mark, value_mask)); } Node* GraphKit::is_value_mirror(Node* mirror) { Node* p = basic_plus_adr(mirror, java_lang_Class::inline_mirror_offset_in_bytes()); Node* inline_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR->cast_to_ptr_type(TypePtr::BotPTR), T_OBJECT, IN_HEAP); Node* cmp = _gvn.transform(new CmpPNode(mirror, inline_mirror)); return _gvn.transform(new BoolNode(cmp, BoolTest::eq)); } - // Deoptimize if 'obj' is a value type - void GraphKit::gen_value_type_guard(Node* obj, int nargs) { - assert(EnableValhalla, "should only be used if value types are enabled"); - Node* bol = NULL; - if (obj->is_ValueTypeBase()) { - bol = intcon(0); - } else { - Node* is_value = is_always_locked(obj); - Node* value_mask = _gvn.MakeConX(markWord::always_locked_pattern); - Node* cmp = _gvn.transform(new CmpXNode(is_value, value_mask)); - bol = _gvn.transform(new BoolNode(cmp, BoolTest::ne)); - } - { BuildCutout unless(this, bol, PROB_MAX); - inc_sp(nargs); - uncommon_trap(Deoptimization::Reason_class_check, - Deoptimization::Action_none); - } - } - // Check if 'ary' is a null-free value type array Node* GraphKit::gen_null_free_array_check(Node* ary) { assert(EnableValhalla, "should only be used if value types are enabled"); // Extract null free property from klass pointer Node* k_adr = basic_plus_adr(ary, oopDesc::klass_offset_in_bytes()); const TypePtr* k_adr_type = k_adr->bottom_type()->isa_ptr(); Node* klass = NULL; if (k_adr_type->is_ptr_to_narrowklass()) { ! klass = _gvn.transform(new LoadNKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT->make_narrowklass(), MemNode::unordered)); } else { ! klass = _gvn.transform(new LoadKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, MemNode::unordered)); } Node* null_free = _gvn.transform(new GetNullFreePropertyNode(klass)); Node* cmp = NULL; if (_gvn.type(klass)->isa_klassptr()) { cmp = _gvn.transform(new CmpLNode(null_free, zerocon(T_LONG))); --- 3459,3492 ---- } Node* GraphKit::is_always_locked(Node* obj) { Node* mark_addr = basic_plus_adr(obj, oopDesc::mark_offset_in_bytes()); Node* mark = make_load(NULL, mark_addr, TypeX_X, TypeX_X->basic_type(), MemNode::unordered); ! Node* mask = _gvn.MakeConX(markWord::always_locked_pattern); ! Node* andx = _gvn.transform(new AndXNode(mark, mask)); ! Node* cmp = _gvn.transform(new CmpXNode(andx, mask)); ! return _gvn.transform(new BoolNode(cmp, BoolTest::eq)); } Node* GraphKit::is_value_mirror(Node* mirror) { Node* p = basic_plus_adr(mirror, java_lang_Class::inline_mirror_offset_in_bytes()); Node* inline_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR->cast_to_ptr_type(TypePtr::BotPTR), T_OBJECT, IN_HEAP); Node* cmp = _gvn.transform(new CmpPNode(mirror, inline_mirror)); return _gvn.transform(new BoolNode(cmp, BoolTest::eq)); } // Check if 'ary' is a null-free value type array Node* GraphKit::gen_null_free_array_check(Node* ary) { assert(EnableValhalla, "should only be used if value types are enabled"); // Extract null free property from klass pointer Node* k_adr = basic_plus_adr(ary, oopDesc::klass_offset_in_bytes()); const TypePtr* k_adr_type = k_adr->bottom_type()->isa_ptr(); Node* klass = NULL; if (k_adr_type->is_ptr_to_narrowklass()) { ! klass = _gvn.transform(new LoadNKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT->make_narrowklass(), MemNode::unordered, true)); } else { ! klass = _gvn.transform(new LoadKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, MemNode::unordered, true)); } Node* null_free = _gvn.transform(new GetNullFreePropertyNode(klass)); Node* cmp = NULL; if (_gvn.type(klass)->isa_klassptr()) { cmp = _gvn.transform(new CmpLNode(null_free, zerocon(T_LONG)));
*** 3518,3530 **** // Extract flattened property from klass pointer Node* k_adr = basic_plus_adr(ary, oopDesc::klass_offset_in_bytes()); const TypePtr* k_adr_type = k_adr->bottom_type()->isa_ptr(); Node* klass = NULL; if (k_adr_type->is_ptr_to_narrowklass()) { ! klass = _gvn.transform(new LoadNKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT->make_narrowklass(), MemNode::unordered)); } else { ! klass = _gvn.transform(new LoadKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, MemNode::unordered)); } return _gvn.transform(new GetFlattenedPropertyNode(klass)); } // Deoptimize if 'ary' is a null-free value type array and 'val' is null --- 3501,3513 ---- // Extract flattened property from klass pointer Node* k_adr = basic_plus_adr(ary, oopDesc::klass_offset_in_bytes()); const TypePtr* k_adr_type = k_adr->bottom_type()->isa_ptr(); Node* klass = NULL; if (k_adr_type->is_ptr_to_narrowklass()) { ! klass = _gvn.transform(new LoadNKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT->make_narrowklass(), MemNode::unordered, true)); } else { ! klass = _gvn.transform(new LoadKlassNode(NULL, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT, MemNode::unordered, true)); } return _gvn.transform(new GetFlattenedPropertyNode(klass)); } // Deoptimize if 'ary' is a null-free value type array and 'val' is null
< prev index next >