835
836 // Building nodes
837 void rethrow_exceptions(JVMState* jvms);
838 void return_values(JVMState* jvms);
839 JVMState* build_start_state(StartNode* start, const TypeFunc* tf);
840
841 // Decide how to build a call.
842 // The profile factor is a discount to apply to this site's interp. profile.
843 CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_does_dispatch,
844 JVMState* jvms, bool allow_inline, float profile_factor, ciKlass* speculative_receiver_type = NULL,
845 bool allow_intrinsics = true, bool delayed_forbidden = false);
846 bool should_delay_inlining(ciMethod* call_method, JVMState* jvms) {
847 return should_delay_string_inlining(call_method, jvms) ||
848 should_delay_boxing_inlining(call_method, jvms);
849 }
850 bool should_delay_string_inlining(ciMethod* call_method, JVMState* jvms);
851 bool should_delay_boxing_inlining(ciMethod* call_method, JVMState* jvms);
852
853 // Helper functions to identify inlining potential at call-site
854 ciMethod* optimize_virtual_call(ciMethod* caller, int bci, ciInstanceKlass* klass,
855 ciMethod* callee, const TypeOopPtr* receiver_type,
856 bool is_virtual,
857 bool &call_does_dispatch, int &vtable_index);
858 ciMethod* optimize_inlining(ciMethod* caller, int bci, ciInstanceKlass* klass,
859 ciMethod* callee, const TypeOopPtr* receiver_type);
860
861 // Report if there were too many traps at a current method and bci.
862 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded.
863 // If there is no MDO at all, report no trap unless told to assume it.
864 bool too_many_traps(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
865 // This version, unspecific to a particular bci, asks if
866 // PerMethodTrapLimit was exceeded for all inlined methods seen so far.
867 bool too_many_traps(Deoptimization::DeoptReason reason,
868 // Privately used parameter for logging:
869 ciMethodData* logmd = NULL);
870 // Report if there were too many recompiles at a method and bci.
871 bool too_many_recompiles(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
872 // Return a bitset with the reasons where deoptimization is allowed,
873 // i.e., where there were not too many uncommon traps.
874 int _allowed_reasons;
875 int allowed_deopt_reasons() { return _allowed_reasons; }
876 void set_allowed_deopt_reasons();
|
835
836 // Building nodes
837 void rethrow_exceptions(JVMState* jvms);
838 void return_values(JVMState* jvms);
839 JVMState* build_start_state(StartNode* start, const TypeFunc* tf);
840
841 // Decide how to build a call.
842 // The profile factor is a discount to apply to this site's interp. profile.
843 CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_does_dispatch,
844 JVMState* jvms, bool allow_inline, float profile_factor, ciKlass* speculative_receiver_type = NULL,
845 bool allow_intrinsics = true, bool delayed_forbidden = false);
846 bool should_delay_inlining(ciMethod* call_method, JVMState* jvms) {
847 return should_delay_string_inlining(call_method, jvms) ||
848 should_delay_boxing_inlining(call_method, jvms);
849 }
850 bool should_delay_string_inlining(ciMethod* call_method, JVMState* jvms);
851 bool should_delay_boxing_inlining(ciMethod* call_method, JVMState* jvms);
852
853 // Helper functions to identify inlining potential at call-site
854 ciMethod* optimize_virtual_call(ciMethod* caller, int bci, ciInstanceKlass* klass,
855 ciKlass* holder, ciMethod* callee,
856 const TypeOopPtr* receiver_type, bool is_virtual,
857 bool &call_does_dispatch, int &vtable_index);
858 ciMethod* optimize_inlining(ciMethod* caller, int bci, ciInstanceKlass* klass,
859 ciMethod* callee, const TypeOopPtr* receiver_type);
860
861 // Report if there were too many traps at a current method and bci.
862 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded.
863 // If there is no MDO at all, report no trap unless told to assume it.
864 bool too_many_traps(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
865 // This version, unspecific to a particular bci, asks if
866 // PerMethodTrapLimit was exceeded for all inlined methods seen so far.
867 bool too_many_traps(Deoptimization::DeoptReason reason,
868 // Privately used parameter for logging:
869 ciMethodData* logmd = NULL);
870 // Report if there were too many recompiles at a method and bci.
871 bool too_many_recompiles(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
872 // Return a bitset with the reasons where deoptimization is allowed,
873 // i.e., where there were not too many uncommon traps.
874 int _allowed_reasons;
875 int allowed_deopt_reasons() { return _allowed_reasons; }
876 void set_allowed_deopt_reasons();
|