< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page
rev 50076 : Fold Partial GC into Traversal GC

*** 4096,4106 **** return false; } static void g1_write_barrier_pre_helper(const GraphKit& kit, Node* adr) { ! if (UseShenandoahGC && (ShenandoahSATBBarrier || ShenandoahConditionalSATBBarrier) && adr != NULL) { Node* c = kit.control(); Node* call = c->in(1)->in(1)->in(1)->in(0); assert(call->is_g1_wb_pre_call(), "g1_wb_pre call expected"); call->add_req(adr); } --- 4096,4106 ---- return false; } static void g1_write_barrier_pre_helper(const GraphKit& kit, Node* adr) { ! if (UseShenandoahGC && ShenandoahSATBBarrier && adr != NULL) { Node* c = kit.control(); Node* call = c->in(1)->in(1)->in(1)->in(0); assert(call->is_g1_wb_pre_call(), "g1_wb_pre call expected"); call->add_req(adr); }
*** 4334,4376 **** if (val != NULL) { shenandoah_update_matrix(adr, val); } - if (ShenandoahConditionalSATBBarrier) { - enum { _set_path = 1, _not_set_path, PATH_LIMIT }; - RegionNode* region = new RegionNode(PATH_LIMIT); - Node* prev_mem = memory(Compile::AliasIdxRaw); - Node* memphi = PhiNode::make(region, prev_mem, Type::MEMORY, TypeRawPtr::BOTTOM); - - Node* gc_state_addr_p = _gvn.transform(new CastX2PNode(MakeConX((intptr_t) ShenandoahHeap::gc_state_addr()))); - Node* gc_state_addr = _gvn.transform(new AddPNode(top(), gc_state_addr_p, MakeConX(0))); - Node* gc_state = _gvn.transform(LoadNode::make(_gvn, control(), memory(Compile::AliasIdxRaw), gc_state_addr, TypeRawPtr::BOTTOM, TypeInt::INT, T_BYTE, MemNode::unordered)); - Node* add_set = _gvn.transform(new AddINode(gc_state, intcon(ShenandoahHeap::MARKING))); - Node* cmp_set = _gvn.transform(new CmpINode(add_set, intcon(0))); - Node* cmp_set_bool = _gvn.transform(new BoolNode(cmp_set, BoolTest::eq)); - IfNode* cmp_iff = create_and_map_if(control(), cmp_set_bool, PROB_MIN, COUNT_UNKNOWN); - Node* if_not_set = _gvn.transform(new IfTrueNode(cmp_iff)); - Node* if_set = _gvn.transform(new IfFalseNode(cmp_iff)); - - // Conc-mark not in progress. Skip SATB barrier. - set_control(if_not_set); - region->init_req(_not_set_path, control()); - memphi->init_req(_not_set_path, prev_mem); - - // Conc-mark in progress. Do the SATB barrier. - set_control(if_set); - g1_write_barrier_pre(do_load, obj, adr, alias_idx, val, val_type, pre_val, bt); - region->init_req(_set_path, control()); - memphi->init_req(_set_path, memory(Compile::AliasIdxRaw)); - - // Merge control flow and memory. - set_control(_gvn.transform(region)); - record_for_igvn(region); - set_memory(_gvn.transform(memphi), Compile::AliasIdxRaw); - - } if (ShenandoahSATBBarrier) { g1_write_barrier_pre(do_load, obj, adr, alias_idx, val, val_type, pre_val, bt); } } --- 4334,4343 ----
*** 4886,4899 **** } } Node* GraphKit::shenandoah_storeval_barrier(Node* obj) { if (UseShenandoahGC) { ! if (ShenandoahStoreValWriteBarrier || ShenandoahStoreValEnqueueBarrier) { obj = shenandoah_write_barrier(obj); - } - if (ShenandoahStoreValEnqueueBarrier && !ShenandoahMWF) { shenandoah_enqueue_barrier(obj); } if (ShenandoahStoreValReadBarrier) { obj = shenandoah_read_barrier_impl(obj, true, false, false); } --- 4853,4864 ---- } } Node* GraphKit::shenandoah_storeval_barrier(Node* obj) { if (UseShenandoahGC) { ! if (ShenandoahStoreValEnqueueBarrier) { obj = shenandoah_write_barrier(obj); shenandoah_enqueue_barrier(obj); } if (ShenandoahStoreValReadBarrier) { obj = shenandoah_read_barrier_impl(obj, true, false, false); }
*** 4965,4979 **** } Node* GraphKit::shenandoah_write_barrier(Node* obj) { if (UseShenandoahGC && ShenandoahWriteBarrier) { ! obj = shenandoah_write_barrier_impl(obj); ! if (ShenandoahStoreValEnqueueBarrier && ShenandoahMWF) { ! shenandoah_enqueue_barrier(obj); ! } ! return obj; } else { return obj; } } --- 4930,4940 ---- } Node* GraphKit::shenandoah_write_barrier(Node* obj) { if (UseShenandoahGC && ShenandoahWriteBarrier) { ! return shenandoah_write_barrier_impl(obj); } else { return obj; } }
< prev index next >