< prev index next >

src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp

Print this page
rev 52720 : [mq]: 8214434_ZOptimizeLoadBarriers_assert


 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);


< prev index next >