< prev index next >

src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp

Print this page

        

*** 471,483 **** return TypeFunc::make(domain, range); } const TypeFunc* ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type() { ! const Type **fields = TypeTuple::fields(1); fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value ! const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1, fields); // create result type (range) fields = TypeTuple::fields(1); fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields); --- 471,485 ---- return TypeFunc::make(domain, range); } const TypeFunc* ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type() { ! const Type **fields = TypeTuple::fields(2); fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // original field value ! fields[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // original load address ! ! const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+2, fields); // create result type (range) fields = TypeTuple::fields(1); fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields);
*** 542,552 **** Node* offset = adr->is_AddP() ? adr->in(AddPNode::Offset) : top; Node* load = BarrierSetC2::load_at_resolved(access, val_type); if (access.is_oop()) { if (ShenandoahLoadRefBarrier) { ! load = new ShenandoahLoadReferenceBarrierNode(NULL, load); if (access.is_parse_access()) { load = static_cast<C2ParseAccess &>(access).kit()->gvn().transform(load); } else { load = static_cast<C2OptAccess &>(access).gvn().transform(load); } --- 544,554 ---- Node* offset = adr->is_AddP() ? adr->in(AddPNode::Offset) : top; Node* load = BarrierSetC2::load_at_resolved(access, val_type); if (access.is_oop()) { if (ShenandoahLoadRefBarrier) { ! load = new ShenandoahLoadReferenceBarrierNode(NULL, load, adr); if (access.is_parse_access()) { load = static_cast<C2ParseAccess &>(access).kit()->gvn().transform(load); } else { load = static_cast<C2OptAccess &>(access).gvn().transform(load); }
*** 627,637 **** #ifdef _LP64 if (adr->bottom_type()->is_ptr_to_narrowoop()) { load_store = kit->gvn().transform(new DecodeNNode(load_store, load_store->get_ptr_type())); } #endif ! load_store = kit->gvn().transform(new ShenandoahLoadReferenceBarrierNode(NULL, load_store)); return load_store; } return BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); } --- 629,639 ---- #ifdef _LP64 if (adr->bottom_type()->is_ptr_to_narrowoop()) { load_store = kit->gvn().transform(new DecodeNNode(load_store, load_store->get_ptr_type())); } #endif ! load_store = kit->gvn().transform(new ShenandoahLoadReferenceBarrierNode(NULL, load_store, kit->null())); return load_store; } return BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, value_type); }
*** 695,705 **** if (access.is_oop()) { val = shenandoah_storeval_barrier(kit, val); } Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, val, value_type); if (access.is_oop()) { ! result = kit->gvn().transform(new ShenandoahLoadReferenceBarrierNode(NULL, result)); shenandoah_write_barrier_pre(kit, false /* do_load */, NULL, NULL, max_juint, NULL, NULL, result /* pre_val */, T_OBJECT); } return result; --- 697,707 ---- if (access.is_oop()) { val = shenandoah_storeval_barrier(kit, val); } Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, val, value_type); if (access.is_oop()) { ! result = kit->gvn().transform(new ShenandoahLoadReferenceBarrierNode(NULL, result, kit->null())); shenandoah_write_barrier_pre(kit, false /* do_load */, NULL, NULL, max_juint, NULL, NULL, result /* pre_val */, T_OBJECT); } return result;
*** 1195,1205 **** n->has_out_with(Op_ShenandoahCompareAndSwapP, Op_ShenandoahCompareAndSwapN, Op_ShenandoahWeakCompareAndSwapP, Op_ShenandoahWeakCompareAndSwapN); } bool ShenandoahBarrierSetC2::escape_is_barrier_node(Node* n) const { ! return n->Opcode() == Op_ShenandoahLoadReferenceBarrier; } bool ShenandoahBarrierSetC2::matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const { switch (opcode) { case Op_ShenandoahCompareAndExchangeP: --- 1197,1207 ---- n->has_out_with(Op_ShenandoahCompareAndSwapP, Op_ShenandoahCompareAndSwapN, Op_ShenandoahWeakCompareAndSwapP, Op_ShenandoahWeakCompareAndSwapN); } bool ShenandoahBarrierSetC2::escape_is_barrier_node(Node* n) const { ! return false; } bool ShenandoahBarrierSetC2::matcher_find_shared_post_visit(Matcher* matcher, Node* n, uint opcode) const { switch (opcode) { case Op_ShenandoahCompareAndExchangeP:
< prev index next >