src/cpu/sparc/vm/c1_Runtime1_sparc.cpp

Print this page
rev 2893 : 7121756: Improve C1 inlining policy by using profiling at call sites
Summary: profile based recompilation of methods with C1 with more inlining.
Reviewed-by:


 684         __ set_info("throw_array_store_exception", dont_gc_arguments);
 685         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), true);
 686       }
 687       break;
 688 
 689     case throw_class_cast_exception_id:
 690       {
 691         // G4: object
 692         __ set_info("throw_class_cast_exception", dont_gc_arguments);
 693         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
 694       }
 695       break;
 696 
 697     case throw_incompatible_class_change_error_id:
 698       {
 699         __ set_info("throw_incompatible_class_cast_exception", dont_gc_arguments);
 700         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
 701       }
 702       break;
 703 





















 704     case slow_subtype_check_id:
 705       { // Support for uint StubRoutine::partial_subtype_check( Klass sub, Klass super );
 706         // Arguments :
 707         //
 708         //      ret  : G3
 709         //      sub  : G3, argument, destroyed
 710         //      super: G1, argument, not changed
 711         //      raddr: O7, blown by call
 712         Label miss;
 713 
 714         __ save_frame(0);               // Blow no registers!
 715 
 716         __ check_klass_subtype_slow_path(G3, G1, L0, L1, L2, L4, NULL, &miss);
 717 
 718         __ mov(1, G3);
 719         __ ret();                       // Result in G5 is 'true'
 720         __ delayed()->restore();        // free copy or add can go here
 721 
 722         __ bind(miss);
 723         __ mov(0, G3);




 684         __ set_info("throw_array_store_exception", dont_gc_arguments);
 685         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), true);
 686       }
 687       break;
 688 
 689     case throw_class_cast_exception_id:
 690       {
 691         // G4: object
 692         __ set_info("throw_class_cast_exception", dont_gc_arguments);
 693         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
 694       }
 695       break;
 696 
 697     case throw_incompatible_class_change_error_id:
 698       {
 699         __ set_info("throw_incompatible_class_cast_exception", dont_gc_arguments);
 700         oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
 701       }
 702       break;
 703 
 704     case invalidate_profile_inlining_id:
 705       { 
 706         OopMap* oop_map = save_live_registers(sasm);
 707 
 708         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, invalidate_profile_inlining), G4, G5);
 709 
 710         oop_maps = new OopMapSet();
 711         oop_maps->add_gc_map(call_offset, oop_map);
 712 
 713         DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
 714         assert(deopt_blob != NULL, "deoptimization blob must have been created");
 715         restore_live_registers(sasm);
 716         __ restore();
 717         // Invalid inlining is detected before the body of the
 718         // inlinined method is executed so we need deoptimization to
 719         // trigger "re-execution" of the method call.
 720         __ br(Assembler::always, false, Assembler::pt, deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type);
 721         __ delayed()->nop();
 722       }
 723       break;
 724 
 725     case slow_subtype_check_id:
 726       { // Support for uint StubRoutine::partial_subtype_check( Klass sub, Klass super );
 727         // Arguments :
 728         //
 729         //      ret  : G3
 730         //      sub  : G3, argument, destroyed
 731         //      super: G1, argument, not changed
 732         //      raddr: O7, blown by call
 733         Label miss;
 734 
 735         __ save_frame(0);               // Blow no registers!
 736 
 737         __ check_klass_subtype_slow_path(G3, G1, L0, L1, L2, L4, NULL, &miss);
 738 
 739         __ mov(1, G3);
 740         __ ret();                       // Result in G5 is 'true'
 741         __ delayed()->restore();        // free copy or add can go here
 742 
 743         __ bind(miss);
 744         __ mov(0, G3);