553 public: 554 LateInlineBoxingCallGenerator(ciMethod* method, CallGenerator* inline_cg) : 555 LateInlineCallGenerator(method, inline_cg, /*is_pure=*/true) {} 556 557 virtual JVMState* generate(JVMState* jvms) { 558 Compile *C = Compile::current(); 559 560 C->log_inline_id(this); 561 562 C->add_boxing_late_inline(this); 563 564 JVMState* new_jvms = DirectCallGenerator::generate(jvms); 565 return new_jvms; 566 } 567 }; 568 569 CallGenerator* CallGenerator::for_boxing_late_inline(ciMethod* method, CallGenerator* inline_cg) { 570 return new LateInlineBoxingCallGenerator(method, inline_cg); 571 } 572 573 //---------------------------WarmCallGenerator-------------------------------- 574 // Internal class which handles initial deferral of inlining decisions. 575 class WarmCallGenerator : public CallGenerator { 576 WarmCallInfo* _call_info; 577 CallGenerator* _if_cold; 578 CallGenerator* _if_hot; 579 bool _is_virtual; // caches virtuality of if_cold 580 bool _is_inline; // caches inline-ness of if_hot 581 582 public: 583 WarmCallGenerator(WarmCallInfo* ci, 584 CallGenerator* if_cold, 585 CallGenerator* if_hot) 586 : CallGenerator(if_cold->method()) 587 { 588 assert(method() == if_hot->method(), "consistent choices"); 589 _call_info = ci; 590 _if_cold = if_cold; 591 _if_hot = if_hot; 592 _is_virtual = if_cold->is_virtual(); | 553 public: 554 LateInlineBoxingCallGenerator(ciMethod* method, CallGenerator* inline_cg) : 555 LateInlineCallGenerator(method, inline_cg, /*is_pure=*/true) {} 556 557 virtual JVMState* generate(JVMState* jvms) { 558 Compile *C = Compile::current(); 559 560 C->log_inline_id(this); 561 562 C->add_boxing_late_inline(this); 563 564 JVMState* new_jvms = DirectCallGenerator::generate(jvms); 565 return new_jvms; 566 } 567 }; 568 569 CallGenerator* CallGenerator::for_boxing_late_inline(ciMethod* method, CallGenerator* inline_cg) { 570 return new LateInlineBoxingCallGenerator(method, inline_cg); 571 } 572 573 class LateInlineVectorReboxingCallGenerator : public LateInlineCallGenerator { 574 575 public: 576 LateInlineVectorReboxingCallGenerator(ciMethod* method, CallGenerator* inline_cg) : 577 LateInlineCallGenerator(method, inline_cg, /*is_pure=*/true) {} 578 579 virtual JVMState* generate(JVMState* jvms) { 580 Compile *C = Compile::current(); 581 582 C->log_inline_id(this); 583 584 C->add_vector_reboxing_late_inline(this); 585 586 JVMState* new_jvms = DirectCallGenerator::generate(jvms); 587 return new_jvms; 588 } 589 }; 590 591 // static CallGenerator* for_vector_reboxing_late_inline(ciMethod* m, CallGenerator* inline_cg); 592 CallGenerator* CallGenerator::for_vector_reboxing_late_inline(ciMethod* method, CallGenerator* inline_cg) { 593 return new LateInlineVectorReboxingCallGenerator(method, inline_cg); 594 } 595 //---------------------------WarmCallGenerator-------------------------------- 596 // Internal class which handles initial deferral of inlining decisions. 597 class WarmCallGenerator : public CallGenerator { 598 WarmCallInfo* _call_info; 599 CallGenerator* _if_cold; 600 CallGenerator* _if_hot; 601 bool _is_virtual; // caches virtuality of if_cold 602 bool _is_inline; // caches inline-ness of if_hot 603 604 public: 605 WarmCallGenerator(WarmCallInfo* ci, 606 CallGenerator* if_cold, 607 CallGenerator* if_hot) 608 : CallGenerator(if_cold->method()) 609 { 610 assert(method() == if_hot->method(), "consistent choices"); 611 _call_info = ci; 612 _if_cold = if_cold; 613 _if_hot = if_hot; 614 _is_virtual = if_cold->is_virtual(); |