< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page

        

*** 721,730 **** --- 721,732 ---- } else { safepoints.append_if_missing(sfpt); } } else if (use->is_ValueType() && use->isa_ValueType()->get_oop() == res) { // ok to eliminate + } else if (use->is_Store()) { + // store to mark work } else if (use->Opcode() != Op_CastP2X) { // CastP2X is used by card mark if (use->is_Phi()) { if (use->outcnt() == 1 && use->unique_out()->Opcode() == Op_Return) { NOT_PRODUCT(fail_eliminate = "Object is return value";) } else {
*** 1060,1069 **** --- 1062,1073 ---- _igvn._worklist.push(ac); } else if (use->is_ValueType()) { assert(use->isa_ValueType()->get_oop() == res, "unexpected value type use"); _igvn.rehash_node_delayed(use); use->isa_ValueType()->set_oop(_igvn.zerocon(T_VALUETYPE)); + } else if (use->is_Store()) { + _igvn.replace_node(use, use->in(MemNode::Memory)); } else { eliminate_gc_barrier(use); } j -= (oc1 - res->outcnt()); }
*** 1702,1719 **** Node* control, Node* rawmem, Node* object, Node* klass_node, Node* length, Node* size_in_bytes) { InitializeNode* init = alloc->initialization(); // Store the klass & mark bits ! Node* mark_node = NULL; ! // For now only enable fast locking for non-array types ! if ((EnableValhalla || UseBiasedLocking) && length == NULL) { ! mark_node = make_load(control, rawmem, klass_node, in_bytes(Klass::prototype_header_offset()), TypeRawPtr::BOTTOM, T_ADDRESS); ! } else { ! mark_node = makecon(TypeRawPtr::make((address)markOopDesc::prototype())); } ! rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, T_ADDRESS); rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA); int header_size = alloc->minimum_header_size(); // conservatively small // Array length --- 1706,1720 ---- Node* control, Node* rawmem, Node* object, Node* klass_node, Node* length, Node* size_in_bytes) { InitializeNode* init = alloc->initialization(); // Store the klass & mark bits ! Node* mark_node = alloc->make_ideal_mark(&_igvn, object, control, rawmem, klass_node); ! if (!mark_node->is_Con()) { ! transform_later(mark_node); } ! rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, TypeX_X->basic_type()); rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA); int header_size = alloc->minimum_header_size(); // conservatively small // Array length
< prev index next >