1091 Node* base = find_bottom_mem(ctrl, phase); |
1091 Node* base = find_bottom_mem(ctrl, phase); |
1092 MergeMemNode* mm = MergeMemNode::make(base); |
1092 MergeMemNode* mm = MergeMemNode::make(base); |
1093 mm->set_memory_at(Compile::AliasIdxRaw, raw_mem); |
1093 mm->set_memory_at(Compile::AliasIdxRaw, raw_mem); |
1094 phase->register_new_node(mm, ctrl); |
1094 phase->register_new_node(mm, ctrl); |
1095 |
1095 |
1096 Node* call = new CallLeafNode(ShenandoahBarrierSetC2::shenandoah_write_barrier_Type(), CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_JRT), "shenandoah_write_barrier", TypeRawPtr::BOTTOM); |
1096 Node* call = new CallLeafNode(ShenandoahBarrierSetC2::shenandoah_load_reference_barrier_Type(), CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_JRT), "shenandoah_load_reference_barrier", TypeRawPtr::BOTTOM); |
1097 call->init_req(TypeFunc::Control, ctrl); |
1097 call->init_req(TypeFunc::Control, ctrl); |
1098 call->init_req(TypeFunc::I_O, phase->C->top()); |
1098 call->init_req(TypeFunc::I_O, phase->C->top()); |
1099 call->init_req(TypeFunc::Memory, mm); |
1099 call->init_req(TypeFunc::Memory, mm); |
1100 call->init_req(TypeFunc::FramePtr, phase->C->top()); |
1100 call->init_req(TypeFunc::FramePtr, phase->C->top()); |
1101 call->init_req(TypeFunc::ReturnAdr, phase->C->top()); |
1101 call->init_req(TypeFunc::ReturnAdr, phase->C->top()); |
1530 // Wire up not-equal-path in slots 3. |
1530 // Wire up not-equal-path in slots 3. |
1531 region->init_req(_not_equal, if_not_eq); |
1531 region->init_req(_not_equal, if_not_eq); |
1532 val_phi->init_req(_not_equal, fwd); |
1532 val_phi->init_req(_not_equal, fwd); |
1533 raw_mem_phi->init_req(_not_equal, raw_mem); |
1533 raw_mem_phi->init_req(_not_equal, raw_mem); |
1534 |
1534 |
1535 // Call wb-stub and wire up that path in slots 4 |
1535 // Call lrb-stub and wire up that path in slots 4 |
1536 Node* result_mem = NULL; |
1536 Node* result_mem = NULL; |
1537 ctrl = if_eq; |
1537 ctrl = if_eq; |
1538 call_lrb_stub(ctrl, fwd, result_mem, raw_mem, phase); |
1538 call_lrb_stub(ctrl, fwd, result_mem, raw_mem, phase); |
1539 region->init_req(_evac_path, ctrl); |
1539 region->init_req(_evac_path, ctrl); |
1540 val_phi->init_req(_evac_path, fwd); |
1540 val_phi->init_req(_evac_path, fwd); |
1977 Unique_Node_List memories; |
1977 Unique_Node_List memories; |
1978 |
1978 |
1979 nodes.push(root); |
1979 nodes.push(root); |
1980 for (uint next = 0; next < nodes.size(); next++) { |
1980 for (uint next = 0; next < nodes.size(); next++) { |
1981 Node *n = nodes.at(next); |
1981 Node *n = nodes.at(next); |
1982 if (ShenandoahBarrierSetC2::is_shenandoah_wb_call(n)) { |
1982 if (ShenandoahBarrierSetC2::is_shenandoah_lrb_call(n)) { |
1983 controls.push(n); |
1983 controls.push(n); |
1984 if (trace) { tty->print("XXXXXX verifying"); n->dump(); } |
1984 if (trace) { tty->print("XXXXXX verifying"); n->dump(); } |
1985 for (uint next2 = 0; next2 < controls.size(); next2++) { |
1985 for (uint next2 = 0; next2 < controls.size(); next2++) { |
1986 Node *m = controls.at(next2); |
1986 Node *m = controls.at(next2); |
1987 for (DUIterator_Fast imax, i = m->fast_outs(imax); i < imax; i++) { |
1987 for (DUIterator_Fast imax, i = m->fast_outs(imax); i < imax; i++) { |