1.1 --- a/src/share/vm/opto/lcm.cpp Mon Jan 04 15:21:09 2010 -0800 1.2 +++ b/src/share/vm/opto/lcm.cpp Tue Jan 05 13:05:58 2010 +0100 1.3 @@ -542,6 +542,16 @@ 1.4 // pointers as far as the kill mask goes. 1.5 bool exclude_soe = op == Op_CallRuntime; 1.6 1.7 + // If the call is a MethodHandle invoke, we need to exclude the 1.8 + // register which is used to save the SP value over MH invokes from 1.9 + // the mask. Otherwise this register could be used for 1.10 + // deoptimization information. 1.11 + if (op == Op_CallStaticJava) { 1.12 + MachCallStaticJavaNode* mcallstaticjava = (MachCallStaticJavaNode*) mcall; 1.13 + if (mcallstaticjava->_method_handle_invoke) 1.14 + proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask()); 1.15 + } 1.16 + 1.17 // Fill in the kill mask for the call 1.18 for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) { 1.19 if( !regs.Member(r) ) { // Not already defined by the call