src/share/vm/opto/lcm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6829187 Sdiff src/share/vm/opto

src/share/vm/opto/lcm.cpp

Print this page
rev 1082 : [mq]: indy.compiler.patch


 525     case Op_CallStaticJava:
 526     case Op_CallDynamicJava:
 527       // Calling Java code so use Java calling convention
 528       save_policy = matcher._register_save_policy;
 529       break;
 530 
 531     default:
 532       ShouldNotReachHere();
 533   }
 534 
 535   // When using CallRuntime mark SOE registers as killed by the call
 536   // so values that could show up in the RegisterMap aren't live in a
 537   // callee saved register since the register wouldn't know where to
 538   // find them.  CallLeaf and CallLeafNoFP are ok because they can't
 539   // have debug info on them.  Strictly speaking this only needs to be
 540   // done for oops since idealreg2debugmask takes care of debug info
 541   // references but there no way to handle oops differently than other
 542   // pointers as far as the kill mask goes.
 543   bool exclude_soe = op == Op_CallRuntime;
 544 


 545   // 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) ) {
 547     if( !regs.Member(r) ) {     // Not already defined by the call
 548       // Save-on-call register?
 549       if ((save_policy[r] == 'C') ||
 550           (save_policy[r] == 'A') ||
 551           ((save_policy[r] == 'E') && exclude_soe)) {
 552         proj->_rout.Insert(r);
 553       }
 554     }
 555   }
 556 
 557   return node_cnt;
 558 }
 559 
 560 
 561 //------------------------------schedule_local---------------------------------
 562 // Topological sort within a block.  Someday become a real scheduler.
 563 bool Block::schedule_local(PhaseCFG *cfg, Matcher &matcher, int *ready_cnt, VectorSet &next_call) {
 564   // Already "sorted" are the block start Node (as the first entry), and




 525     case Op_CallStaticJava:
 526     case Op_CallDynamicJava:
 527       // Calling Java code so use Java calling convention
 528       save_policy = matcher._register_save_policy;
 529       break;
 530 
 531     default:
 532       ShouldNotReachHere();
 533   }
 534 
 535   // When using CallRuntime mark SOE registers as killed by the call
 536   // so values that could show up in the RegisterMap aren't live in a
 537   // callee saved register since the register wouldn't know where to
 538   // find them.  CallLeaf and CallLeafNoFP are ok because they can't
 539   // have debug info on them.  Strictly speaking this only needs to be
 540   // done for oops since idealreg2debugmask takes care of debug info
 541   // references but there no way to handle oops differently than other
 542   // pointers as far as the kill mask goes.
 543   bool exclude_soe = op == Op_CallRuntime;
 544 
 545   proj->_rout.OR(Matcher::method_handle_invoke_SP_save_mask());
 546 
 547   // Fill in the kill mask for the call
 548   for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) {
 549     if( !regs.Member(r) ) {     // Not already defined by the call
 550       // Save-on-call register?
 551       if ((save_policy[r] == 'C') ||
 552           (save_policy[r] == 'A') ||
 553           ((save_policy[r] == 'E') && exclude_soe)) {
 554         proj->_rout.Insert(r);
 555       }
 556     }
 557   }
 558 
 559   return node_cnt;
 560 }
 561 
 562 
 563 //------------------------------schedule_local---------------------------------
 564 // Topological sort within a block.  Someday become a real scheduler.
 565 bool Block::schedule_local(PhaseCFG *cfg, Matcher &matcher, int *ready_cnt, VectorSet &next_call) {
 566   // Already "sorted" are the block start Node (as the first entry), and


src/share/vm/opto/lcm.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File