src/share/vm/opto/lcm.cpp

changeset 1572
97125851f396
parent 1535
f96a1a986f7b
child 1586
1271af4ec18c
equal deleted inserted replaced
1571:4b84186a8248 1572:97125851f396
540 // done for oops since idealreg2debugmask takes care of debug info 540 // done for oops since idealreg2debugmask takes care of debug info
541 // references but there no way to handle oops differently than other 541 // references but there no way to handle oops differently than other
542 // pointers as far as the kill mask goes. 542 // pointers as far as the kill mask goes.
543 bool exclude_soe = op == Op_CallRuntime; 543 bool exclude_soe = op == Op_CallRuntime;
544 544
545 // If the call is a MethodHandle invoke, we need to exclude the
546 // register which is used to save the SP value over MH invokes from
547 // the mask. Otherwise this register could be used for
548 // deoptimization information.
549 if (op == Op_CallStaticJava) {
550 MachCallStaticJavaNode* mcallstaticjava = (MachCallStaticJavaNode*) mcall;
551 if (mcallstaticjava->_method_handle_invoke)
552 proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask());
553 }
554
545 // Fill in the kill mask for the call 555 // Fill in the kill mask for the call
546 for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { 556 for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) {
547 if( !regs.Member(r) ) { // Not already defined by the call 557 if( !regs.Member(r) ) { // Not already defined by the call
548 // Save-on-call register? 558 // Save-on-call register?
549 if ((save_policy[r] == 'C') || 559 if ((save_policy[r] == 'C') ||

mercurial