< prev index next >

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

Print this page

        

*** 24,34 **** #include "precompiled.hpp" #include "gc/shenandoah/c2/shenandoahSupport.hpp" #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp" #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" ! #include "gc/shenandoah/shenandoahForwarding.hpp" #include "gc/shenandoah/shenandoahHeap.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "opto/arraycopynode.hpp" --- 24,34 ---- #include "precompiled.hpp" #include "gc/shenandoah/c2/shenandoahSupport.hpp" #include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp" #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" ! #include "gc/shenandoah/shenandoahBrooksPointer.hpp" #include "gc/shenandoah/shenandoahHeap.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "opto/arraycopynode.hpp"
*** 1331,1342 **** phase->set_ctrl_and_loop(lrb, ctrl); break; } } } ! if ((ctrl->is_Proj() && ctrl->in(0)->is_CallJava()) || ctrl->is_CallJava()) { ! CallNode* call = ctrl->is_Proj() ? ctrl->in(0)->as_CallJava() : ctrl->as_CallJava(); CallProjections projs; call->extract_projections(&projs, false, false); Node* lrb_clone = lrb->clone(); phase->register_new_node(lrb_clone, projs.catchall_catchproj); --- 1331,1342 ---- phase->set_ctrl_and_loop(lrb, ctrl); break; } } } ! if (ctrl->is_Proj() && ctrl->in(0)->is_CallJava()) { ! CallNode* call = ctrl->in(0)->as_CallJava(); CallProjections projs; call->extract_projections(&projs, false, false); Node* lrb_clone = lrb->clone(); phase->register_new_node(lrb_clone, projs.catchall_catchproj);
*** 1360,1370 **** uint idx = stack.index(); Node* n_clone = clones.at(clones.size()-1); if (idx < n->outcnt()) { Node* u = n->raw_out(idx); Node* c = phase->ctrl_or_self(u); ! if (phase->is_dominator(call, c) && phase->is_dominator(c, projs.fallthrough_proj)) { stack.set_index(idx+1); assert(!u->is_CFG(), ""); stack.push(u, 0); Node* u_clone = u->clone(); int nb = u_clone->replace_edge(n, n_clone); --- 1360,1370 ---- uint idx = stack.index(); Node* n_clone = clones.at(clones.size()-1); if (idx < n->outcnt()) { Node* u = n->raw_out(idx); Node* c = phase->ctrl_or_self(u); ! if (c == ctrl) { stack.set_index(idx+1); assert(!u->is_CFG(), ""); stack.push(u, 0); Node* u_clone = u->clone(); int nb = u_clone->replace_edge(n, n_clone);
*** 1402,1416 **** --- 1402,1419 ---- if (!replaced) { stack.set_index(idx+1); } } } else { + // assert(n_clone->outcnt() > 0, ""); + // assert(n->outcnt() > 0, ""); stack.pop(); clones.pop(); } } while (stack.size() > 0); assert(stack.size() == 0 && clones.size() == 0, ""); + ctrl = projs.fallthrough_catchproj; } } // Expand load-reference-barriers MemoryGraphFixer fixer(Compile::AliasIdxRaw, true, phase);
*** 1503,1513 **** fix_null_check(unc, unc_ctrl, ctrl->in(0)->as_If()->proj_out(0), uses, phase); IfNode* iff = unc_ctrl->in(0)->as_If(); phase->igvn().replace_input_of(iff, 1, phase->igvn().intcon(1)); } ! Node* addr = new AddPNode(new_val, uncasted_val, phase->igvn().MakeConX(ShenandoahForwarding::byte_offset())); phase->register_new_node(addr, ctrl); assert(val->bottom_type()->isa_oopptr(), "what else?"); const TypePtr* obj_type = val->bottom_type()->is_oopptr(); const TypePtr* adr_type = TypeRawPtr::BOTTOM; Node* fwd = new LoadPNode(ctrl, raw_mem, addr, adr_type, obj_type, MemNode::unordered); --- 1506,1516 ---- fix_null_check(unc, unc_ctrl, ctrl->in(0)->as_If()->proj_out(0), uses, phase); IfNode* iff = unc_ctrl->in(0)->as_If(); phase->igvn().replace_input_of(iff, 1, phase->igvn().intcon(1)); } ! Node* addr = new AddPNode(new_val, uncasted_val, phase->igvn().MakeConX(ShenandoahBrooksPointer::byte_offset())); phase->register_new_node(addr, ctrl); assert(val->bottom_type()->isa_oopptr(), "what else?"); const TypePtr* obj_type = val->bottom_type()->is_oopptr(); const TypePtr* adr_type = TypeRawPtr::BOTTOM; Node* fwd = new LoadPNode(ctrl, raw_mem, addr, adr_type, obj_type, MemNode::unordered);
*** 1945,1957 **** Node* bol = iff->in(1); if (head->is_strip_mined()) { head->verify_strip_mined(0); } move_heap_stable_test_out_of_loop(iff, phase); - - AutoNodeBudget node_budget(phase); - if (loop->policy_unswitching(phase)) { if (head->is_strip_mined()) { OuterStripMinedLoopNode* outer = head->as_CountedLoop()->outer_loop(); hide_strip_mined_loop(outer, head->as_CountedLoop(), phase); } --- 1948,1957 ----
*** 3121,3164 **** strength = STRONG; } break; } case Op_CallStaticJava: { ! // If it's an deopt-call we don't need barriers because ! // the LRB will be applied when unpacking the deopt frame. ! if (n->as_CallStaticJava()->uncommon_trap_request() == 0) { ! strength = STRONG; ! } break; } case Op_CallDynamicJava: case Op_CallLeaf: case Op_CallLeafNoFP: case Op_CompareAndSwapL: case Op_CompareAndSwapI: case Op_CompareAndSwapB: case Op_CompareAndSwapS: ! case Op_CompareAndSwapN: ! case Op_CompareAndSwapP: case Op_CompareAndExchangeL: case Op_CompareAndExchangeI: case Op_CompareAndExchangeB: case Op_CompareAndExchangeS: - case Op_CompareAndExchangeN: - case Op_CompareAndExchangeP: case Op_WeakCompareAndSwapL: case Op_WeakCompareAndSwapI: case Op_WeakCompareAndSwapB: case Op_WeakCompareAndSwapS: - case Op_WeakCompareAndSwapN: - case Op_WeakCompareAndSwapP: - case Op_ShenandoahCompareAndSwapN: - case Op_ShenandoahCompareAndSwapP: - case Op_ShenandoahWeakCompareAndSwapN: - case Op_ShenandoahWeakCompareAndSwapP: - case Op_ShenandoahCompareAndExchangeN: - case Op_ShenandoahCompareAndExchangeP: case Op_GetAndSetL: case Op_GetAndSetI: case Op_GetAndSetB: case Op_GetAndSetS: case Op_GetAndSetP: --- 3121,3154 ---- strength = STRONG; } break; } case Op_CallStaticJava: { ! strength = STRONG; break; } case Op_CallDynamicJava: case Op_CallLeaf: case Op_CallLeafNoFP: case Op_CompareAndSwapL: case Op_CompareAndSwapI: case Op_CompareAndSwapB: case Op_CompareAndSwapS: ! case Op_ShenandoahCompareAndSwapN: ! case Op_ShenandoahCompareAndSwapP: ! case Op_ShenandoahWeakCompareAndSwapN: ! case Op_ShenandoahWeakCompareAndSwapP: ! case Op_ShenandoahCompareAndExchangeN: ! case Op_ShenandoahCompareAndExchangeP: case Op_CompareAndExchangeL: case Op_CompareAndExchangeI: case Op_CompareAndExchangeB: case Op_CompareAndExchangeS: case Op_WeakCompareAndSwapL: case Op_WeakCompareAndSwapI: case Op_WeakCompareAndSwapB: case Op_WeakCompareAndSwapS: case Op_GetAndSetL: case Op_GetAndSetI: case Op_GetAndSetB: case Op_GetAndSetS: case Op_GetAndSetP:
< prev index next >