641 gvn.transform(region);
642 gvn.transform(phi);
643
644 kit->set_control(region);
645 kit->set_memory(in_mem, alias_idx);
646 kit->insert_mem_bar(Op_MemBarCPUOrder);
647
648 return phi;
649 }
650
651 Node* ZBarrierSetC2::load_barrier(GraphKit* kit, Node* val, Node* adr, bool weak, bool writeback, bool oop_reload_allowed) const {
652 PhaseGVN& gvn = kit->gvn();
653 Node* barrier = new LoadBarrierNode(Compile::current(), kit->control(), kit->memory(TypeRawPtr::BOTTOM), val, adr, weak, writeback, oop_reload_allowed);
654 Node* transformed_barrier = gvn.transform(barrier);
655
656 if (transformed_barrier->is_LoadBarrier()) {
657 if (barrier == transformed_barrier) {
658 kit->set_control(gvn.transform(new ProjNode(barrier, LoadBarrierNode::Control)));
659 }
660 Node* result = gvn.transform(new ProjNode(transformed_barrier, LoadBarrierNode::Oop));
661 assert(is_gc_barrier_node(result), "sanity");
662 assert(step_over_gc_barrier(result) == val, "sanity");
663 return result;
664 } else {
665 return val;
666 }
667 }
668
669 static bool barrier_needed(C2Access& access) {
670 return ZBarrierSet::barrier_needed(access.decorators(), access.type());
671 }
672
673 Node* ZBarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const {
674 Node* p = BarrierSetC2::load_at_resolved(access, val_type);
675 if (!barrier_needed(access)) {
676 return p;
677 }
678
679 bool weak = (access.decorators() & ON_WEAK_OOP_REF) != 0;
680
681 assert(access.is_parse_access(), "entry not supported at optimization time");
682 C2ParseAccess& parse_access = static_cast<C2ParseAccess&>(access);
|
641 gvn.transform(region);
642 gvn.transform(phi);
643
644 kit->set_control(region);
645 kit->set_memory(in_mem, alias_idx);
646 kit->insert_mem_bar(Op_MemBarCPUOrder);
647
648 return phi;
649 }
650
651 Node* ZBarrierSetC2::load_barrier(GraphKit* kit, Node* val, Node* adr, bool weak, bool writeback, bool oop_reload_allowed) const {
652 PhaseGVN& gvn = kit->gvn();
653 Node* barrier = new LoadBarrierNode(Compile::current(), kit->control(), kit->memory(TypeRawPtr::BOTTOM), val, adr, weak, writeback, oop_reload_allowed);
654 Node* transformed_barrier = gvn.transform(barrier);
655
656 if (transformed_barrier->is_LoadBarrier()) {
657 if (barrier == transformed_barrier) {
658 kit->set_control(gvn.transform(new ProjNode(barrier, LoadBarrierNode::Control)));
659 }
660 Node* result = gvn.transform(new ProjNode(transformed_barrier, LoadBarrierNode::Oop));
661 return result;
662 } else {
663 return val;
664 }
665 }
666
667 static bool barrier_needed(C2Access& access) {
668 return ZBarrierSet::barrier_needed(access.decorators(), access.type());
669 }
670
671 Node* ZBarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const {
672 Node* p = BarrierSetC2::load_at_resolved(access, val_type);
673 if (!barrier_needed(access)) {
674 return p;
675 }
676
677 bool weak = (access.decorators() & ON_WEAK_OOP_REF) != 0;
678
679 assert(access.is_parse_access(), "entry not supported at optimization time");
680 C2ParseAccess& parse_access = static_cast<C2ParseAccess&>(access);
|