3732 add_predicate_impl(Deoptimization::Reason_loop_limit_check, nargs);
3733 }
3734 }
3735
3736 //----------------------------- store barriers ----------------------------
3737 #define __ ideal.
3738
3739 void GraphKit::sync_kit(IdealKit& ideal) {
3740 set_all_memory(__ merged_memory());
3741 set_i_o(__ i_o());
3742 set_control(__ ctrl());
3743 }
3744
3745 void GraphKit::final_sync(IdealKit& ideal) {
3746 // Final sync IdealKit and graphKit.
3747 sync_kit(ideal);
3748 }
3749
3750 Node* GraphKit::byte_map_base_node() {
3751 // Get base of card map
3752 CardTableModRefBS* ct = (CardTableModRefBS*)(Universe::heap()->barrier_set());
3753 assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust users of this code");
3754 if (ct->byte_map_base != NULL) {
3755 return makecon(TypeRawPtr::make((address)ct->byte_map_base));
3756 } else {
3757 return null();
3758 }
3759 }
3760
3761 // vanilla/CMS post barrier
3762 // Insert a write-barrier store. This is to let generational GC work; we have
3763 // to flag all oop-stores before the next GC point.
3764 void GraphKit::write_barrier_post(Node* oop_store,
3765 Node* obj,
3766 Node* adr,
3767 uint adr_idx,
3768 Node* val,
3769 bool use_precise) {
3770 // No store check needed if we're storing a NULL or an old object
3771 // (latter case is probably a string constant). The concurrent
3772 // mark sweep garbage collector, however, needs to have all nonNull
|
3732 add_predicate_impl(Deoptimization::Reason_loop_limit_check, nargs);
3733 }
3734 }
3735
3736 //----------------------------- store barriers ----------------------------
3737 #define __ ideal.
3738
3739 void GraphKit::sync_kit(IdealKit& ideal) {
3740 set_all_memory(__ merged_memory());
3741 set_i_o(__ i_o());
3742 set_control(__ ctrl());
3743 }
3744
3745 void GraphKit::final_sync(IdealKit& ideal) {
3746 // Final sync IdealKit and graphKit.
3747 sync_kit(ideal);
3748 }
3749
3750 Node* GraphKit::byte_map_base_node() {
3751 // Get base of card map
3752 CardTableModRefBS* ct =
3753 barrier_set_cast<CardTableModRefBS>(Universe::heap()->barrier_set());
3754 assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust users of this code");
3755 if (ct->byte_map_base != NULL) {
3756 return makecon(TypeRawPtr::make((address)ct->byte_map_base));
3757 } else {
3758 return null();
3759 }
3760 }
3761
3762 // vanilla/CMS post barrier
3763 // Insert a write-barrier store. This is to let generational GC work; we have
3764 // to flag all oop-stores before the next GC point.
3765 void GraphKit::write_barrier_post(Node* oop_store,
3766 Node* obj,
3767 Node* adr,
3768 uint adr_idx,
3769 Node* val,
3770 bool use_precise) {
3771 // No store check needed if we're storing a NULL or an old object
3772 // (latter case is probably a string constant). The concurrent
3773 // mark sweep garbage collector, however, needs to have all nonNull
|