< prev index next >

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

Print this page
rev 52371 : [mq]: lvb.patch


 406 
 407   if (mem_in->isa_MergeMem()) {
 408     const TypePtr* adr_type = brooks_pointer_type(bottom_type());
 409     uint alias_idx = phase->C->get_alias_index(adr_type);
 410     mem_in = mem_in->as_MergeMem()->memory_at(alias_idx);
 411     set_req(Memory, mem_in);
 412     return this;
 413   }
 414 
 415   Node* val = in(ValueIn);
 416   if (val->is_ShenandoahBarrier()) {
 417     set_req(ValueIn, val->in(ValueIn));
 418     return this;
 419   }
 420 
 421   return NULL;
 422 }
 423 
 424 bool ShenandoahWriteBarrierNode::expand(Compile* C, PhaseIterGVN& igvn, int& loop_opts_cnt) {
 425   if (UseShenandoahGC) {
 426     if (ShenandoahBarrierSetC2::bsc2()->state()->shenandoah_barriers_count() > 0 || (!ShenandoahWriteBarrier && ShenandoahStoreValEnqueueBarrier)) {
 427       bool attempt_more_loopopts = ShenandoahLoopOptsAfterExpansion;
 428       C->clear_major_progress();
 429       PhaseIdealLoop ideal_loop(igvn, LoopOptsShenandoahExpand);
 430       if (C->failing()) return false;
 431       PhaseIdealLoop::verify(igvn);
 432       DEBUG_ONLY(ShenandoahBarrierNode::verify_raw_mem(C->root());)
 433       if (attempt_more_loopopts) {
 434         C->set_major_progress();
 435         if (!C->optimize_loops(loop_opts_cnt, igvn, LoopOptsShenandoahPostExpand)) {
 436           return false;
 437         }
 438         C->clear_major_progress();
 439       }
 440     }
 441   }
 442   return true;
 443 }
 444 
 445 bool ShenandoahWriteBarrierNode::is_heap_state_test(Node* iff, int mask) {
 446   if (!UseShenandoahGC) {
 447     return false;
 448   }
 449   assert(iff->is_If(), "bad input");
 450   if (iff->Opcode() != Op_If) {
 451     return false;
 452   }
 453   Node* bol = iff->in(1);
 454   if (!bol->is_Bool() || bol->as_Bool()->_test._test != BoolTest::ne) {
 455     return false;
 456   }
 457   Node* cmp = bol->in(1);
 458   if (cmp->Opcode() != Op_CmpI) {
 459     return false;
 460   }




 406 
 407   if (mem_in->isa_MergeMem()) {
 408     const TypePtr* adr_type = brooks_pointer_type(bottom_type());
 409     uint alias_idx = phase->C->get_alias_index(adr_type);
 410     mem_in = mem_in->as_MergeMem()->memory_at(alias_idx);
 411     set_req(Memory, mem_in);
 412     return this;
 413   }
 414 
 415   Node* val = in(ValueIn);
 416   if (val->is_ShenandoahBarrier()) {
 417     set_req(ValueIn, val->in(ValueIn));
 418     return this;
 419   }
 420 
 421   return NULL;
 422 }
 423 
 424 bool ShenandoahWriteBarrierNode::expand(Compile* C, PhaseIterGVN& igvn, int& loop_opts_cnt) {
 425   if (UseShenandoahGC) {
 426 //    if (ShenandoahBarrierSetC2::bsc2()->state()->shenandoah_barriers_count() > 0 || (!ShenandoahWriteBarrier && ShenandoahStoreValEnqueueBarrier)) {
 427       bool attempt_more_loopopts = ShenandoahLoopOptsAfterExpansion;
 428       C->clear_major_progress();
 429       PhaseIdealLoop ideal_loop(igvn, LoopOptsShenandoahExpand);
 430       if (C->failing()) return false;
 431       PhaseIdealLoop::verify(igvn);
 432       DEBUG_ONLY(ShenandoahBarrierNode::verify_raw_mem(C->root());)
 433       if (attempt_more_loopopts) {
 434         C->set_major_progress();
 435         if (!C->optimize_loops(loop_opts_cnt, igvn, LoopOptsShenandoahPostExpand)) {
 436           return false;
 437         }
 438         C->clear_major_progress();
 439       }
 440 //    }
 441   }
 442   return true;
 443 }
 444 
 445 bool ShenandoahWriteBarrierNode::is_heap_state_test(Node* iff, int mask) {
 446   if (!UseShenandoahGC) {
 447     return false;
 448   }
 449   assert(iff->is_If(), "bad input");
 450   if (iff->Opcode() != Op_If) {
 451     return false;
 452   }
 453   Node* bol = iff->in(1);
 454   if (!bol->is_Bool() || bol->as_Bool()->_test._test != BoolTest::ne) {
 455     return false;
 456   }
 457   Node* cmp = bol->in(1);
 458   if (cmp->Opcode() != Op_CmpI) {
 459     return false;
 460   }


< prev index next >