< prev index next >

src/hotspot/share/opto/lcm.cpp

Print this page
rev 53399 : Redo: Avoid stub when calling to write-barrier from C2, remove all related code

*** 788,803 **** set_next_call(block, call, next_call); } //------------------------------add_call_kills------------------------------------- // helper function that adds caller save registers to MachProjNode ! static void add_call_kills(MachProjNode *proj, RegMask& regs, const char* save_policy, bool exclude_soe, bool exclude_fp) { // Fill in the kill mask for the call for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { - if (exclude_fp && (register_save_type[r] == Op_RegF || register_save_type[r] == Op_RegD)) { - continue; - } if( !regs.Member(r) ) { // Not already defined by the call // Save-on-call register? if ((save_policy[r] == 'C') || (save_policy[r] == 'A') || ((save_policy[r] == 'E') && exclude_soe)) { --- 788,800 ---- set_next_call(block, call, next_call); } //------------------------------add_call_kills------------------------------------- // helper function that adds caller save registers to MachProjNode ! static void add_call_kills(MachProjNode *proj, RegMask& regs, const char* save_policy, bool exclude_soe) { // Fill in the kill mask for the call for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { if( !regs.Member(r) ) { // Not already defined by the call // Save-on-call register? if ((save_policy[r] == 'C') || (save_policy[r] == 'A') || ((save_policy[r] == 'E') && exclude_soe)) {
*** 894,913 **** MachCallStaticJavaNode* mcallstaticjava = (MachCallStaticJavaNode*) mcall; if (mcallstaticjava->_method_handle_invoke) proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask()); } ! #if INCLUDE_SHENANDOAHGC ! if (UseShenandoahGC && ! ShenandoahBarrierSetAssembler::is_shenandoah_wb_C_call(mcall->entry_point())) { ! assert(op == Op_CallLeafNoFP, "shenandoah_wb_C should be called with Op_CallLeafNoFP"); ! add_call_kills(proj, regs, save_policy, exclude_soe, true); ! } else ! #endif ! { ! add_call_kills(proj, regs, save_policy, exclude_soe, false); ! } return node_cnt; } void PhaseCFG::push_ready_nodes(Node* n, Node* m, Block* block, GrowableArray<int>& ready_cnt, Node_List& worklist, uint max_idx, int c) { if (get_block_for_node(m) != block) { --- 891,902 ---- MachCallStaticJavaNode* mcallstaticjava = (MachCallStaticJavaNode*) mcall; if (mcallstaticjava->_method_handle_invoke) proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask()); } ! add_call_kills(proj, regs, save_policy, exclude_soe); ! return node_cnt; } void PhaseCFG::push_ready_nodes(Node* n, Node* m, Block* block, GrowableArray<int>& ready_cnt, Node_List& worklist, uint max_idx, int c) { if (get_block_for_node(m) != block) {
*** 1163,1173 **** MachProjNode *proj = new MachProjNode( n, 1, RegMask::Empty, MachProjNode::fat_proj ); map_node_to_block(proj, block); block->insert_node(proj, phi_cnt++); ! add_call_kills(proj, regs, _matcher._c_reg_save_policy, false, false); } // Children are now all ready for (DUIterator_Fast i5max, i5 = n->fast_outs(i5max); i5 < i5max; i5++) { Node* m = n->fast_out(i5); // Get user --- 1152,1162 ---- MachProjNode *proj = new MachProjNode( n, 1, RegMask::Empty, MachProjNode::fat_proj ); map_node_to_block(proj, block); block->insert_node(proj, phi_cnt++); ! add_call_kills(proj, regs, _matcher._c_reg_save_policy, false); } // Children are now all ready for (DUIterator_Fast i5max, i5 = n->fast_outs(i5max); i5 < i5max; i5++) { Node* m = n->fast_out(i5); // Get user
< prev index next >