< prev index next >

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

Print this page
rev 51400 : [mq]: remove-c2-wb.patch


 550   Node* mem_in = in(Memory);
 551 
 552   if (mem_in->isa_MergeMem()) {
 553     const TypePtr* adr_type = brooks_pointer_type(bottom_type());
 554     uint alias_idx = phase->C->get_alias_index(adr_type);
 555     mem_in = mem_in->as_MergeMem()->memory_at(alias_idx);
 556     set_req(Memory, mem_in);
 557     return this;
 558   }
 559 
 560   Node* val = in(ValueIn);
 561   if (val->is_ShenandoahBarrier()) {
 562     set_req(ValueIn, val->in(ValueIn));
 563     return this;
 564   }
 565 
 566   return NULL;
 567 }
 568 
 569 bool ShenandoahWriteBarrierNode::expand(Compile* C, PhaseIterGVN& igvn, int& loop_opts_cnt) {
 570   if (UseShenandoahGC && ShenandoahWriteBarrierToIR) {
 571     if (ShenandoahBarrierSetC2::bsc2()->state()->shenandoah_barriers_count() > 0 || (!ShenandoahWriteBarrier && ShenandoahStoreValEnqueueBarrier)) {
 572       bool attempt_more_loopopts = ShenandoahLoopOptsAfterExpansion;
 573       C->clear_major_progress();
 574       PhaseIdealLoop ideal_loop(igvn, LoopOptsShenandoahExpand);
 575       if (C->failing()) return false;
 576       PhaseIdealLoop::verify(igvn);
 577       DEBUG_ONLY(ShenandoahBarrierNode::verify_raw_mem(C->root());)
 578       if (attempt_more_loopopts) {
 579         C->set_major_progress();
 580         if (!C->optimize_loops(loop_opts_cnt, igvn, LoopOptsShenandoahPostExpand)) {
 581           return false;
 582         }
 583         C->clear_major_progress();
 584       }
 585     }
 586   }
 587   return true;
 588 }
 589 
 590 bool ShenandoahWriteBarrierNode::is_heap_state_test(Node* iff, int mask) {




 550   Node* mem_in = in(Memory);
 551 
 552   if (mem_in->isa_MergeMem()) {
 553     const TypePtr* adr_type = brooks_pointer_type(bottom_type());
 554     uint alias_idx = phase->C->get_alias_index(adr_type);
 555     mem_in = mem_in->as_MergeMem()->memory_at(alias_idx);
 556     set_req(Memory, mem_in);
 557     return this;
 558   }
 559 
 560   Node* val = in(ValueIn);
 561   if (val->is_ShenandoahBarrier()) {
 562     set_req(ValueIn, val->in(ValueIn));
 563     return this;
 564   }
 565 
 566   return NULL;
 567 }
 568 
 569 bool ShenandoahWriteBarrierNode::expand(Compile* C, PhaseIterGVN& igvn, int& loop_opts_cnt) {
 570   if (UseShenandoahGC) {
 571     if (ShenandoahBarrierSetC2::bsc2()->state()->shenandoah_barriers_count() > 0 || (!ShenandoahWriteBarrier && ShenandoahStoreValEnqueueBarrier)) {
 572       bool attempt_more_loopopts = ShenandoahLoopOptsAfterExpansion;
 573       C->clear_major_progress();
 574       PhaseIdealLoop ideal_loop(igvn, LoopOptsShenandoahExpand);
 575       if (C->failing()) return false;
 576       PhaseIdealLoop::verify(igvn);
 577       DEBUG_ONLY(ShenandoahBarrierNode::verify_raw_mem(C->root());)
 578       if (attempt_more_loopopts) {
 579         C->set_major_progress();
 580         if (!C->optimize_loops(loop_opts_cnt, igvn, LoopOptsShenandoahPostExpand)) {
 581           return false;
 582         }
 583         C->clear_major_progress();
 584       }
 585     }
 586   }
 587   return true;
 588 }
 589 
 590 bool ShenandoahWriteBarrierNode::is_heap_state_test(Node* iff, int mask) {


< prev index next >