< 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 >