772 _last_tf_m = m;
773 _last_tf = tf;
774 }
775
776 AliasType* alias_type(int idx) { assert(idx < num_alias_types(), "oob"); return _alias_types[idx]; }
777 AliasType* alias_type(const TypePtr* adr_type, ciField* field = NULL) { return find_alias_type(adr_type, false, field); }
778 bool have_alias_type(const TypePtr* adr_type);
779 AliasType* alias_type(ciField* field);
780
781 int get_alias_index(const TypePtr* at) { return alias_type(at)->index(); }
782 const TypePtr* get_adr_type(uint aidx) { return alias_type(aidx)->adr_type(); }
783 int get_general_index(uint aidx) { return alias_type(aidx)->general_index(); }
784
785 // Building nodes
786 void rethrow_exceptions(JVMState* jvms);
787 void return_values(JVMState* jvms);
788 JVMState* build_start_state(StartNode* start, const TypeFunc* tf);
789
790 // Decide how to build a call.
791 // The profile factor is a discount to apply to this site's interp. profile.
792 CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_does_dispatch, JVMState* jvms, bool allow_inline, float profile_factor, bool allow_intrinsics = true, bool delayed_forbidden = false);
793 bool should_delay_inlining(ciMethod* call_method, JVMState* jvms);
794
795 // Helper functions to identify inlining potential at call-site
796 ciMethod* optimize_virtual_call(ciMethod* caller, int bci, ciInstanceKlass* klass,
797 ciMethod* callee, const TypeOopPtr* receiver_type,
798 bool is_virtual,
799 bool &call_does_dispatch, int &vtable_index);
800 ciMethod* optimize_inlining(ciMethod* caller, int bci, ciInstanceKlass* klass,
801 ciMethod* callee, const TypeOopPtr* receiver_type);
802
803 // Report if there were too many traps at a current method and bci.
804 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded.
805 // If there is no MDO at all, report no trap unless told to assume it.
806 bool too_many_traps(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
807 // This version, unspecific to a particular bci, asks if
808 // PerMethodTrapLimit was exceeded for all inlined methods seen so far.
809 bool too_many_traps(Deoptimization::DeoptReason reason,
810 // Privately used parameter for logging:
811 ciMethodData* logmd = NULL);
812 // Report if there were too many recompiles at a method and bci.
|
772 _last_tf_m = m;
773 _last_tf = tf;
774 }
775
776 AliasType* alias_type(int idx) { assert(idx < num_alias_types(), "oob"); return _alias_types[idx]; }
777 AliasType* alias_type(const TypePtr* adr_type, ciField* field = NULL) { return find_alias_type(adr_type, false, field); }
778 bool have_alias_type(const TypePtr* adr_type);
779 AliasType* alias_type(ciField* field);
780
781 int get_alias_index(const TypePtr* at) { return alias_type(at)->index(); }
782 const TypePtr* get_adr_type(uint aidx) { return alias_type(aidx)->adr_type(); }
783 int get_general_index(uint aidx) { return alias_type(aidx)->general_index(); }
784
785 // Building nodes
786 void rethrow_exceptions(JVMState* jvms);
787 void return_values(JVMState* jvms);
788 JVMState* build_start_state(StartNode* start, const TypeFunc* tf);
789
790 // Decide how to build a call.
791 // The profile factor is a discount to apply to this site's interp. profile.
792 CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_does_dispatch,
793 JVMState* jvms, bool allow_inline, float profile_factor, bool allow_intrinsics = true,
794 bool delayed_forbidden = false);
795 bool should_delay_inlining(ciMethod* call_method, JVMState* jvms);
796
797 // Helper functions to identify inlining potential at call-site
798 ciMethod* optimize_virtual_call(ciMethod* caller, int bci, ciInstanceKlass* klass,
799 ciMethod* callee, const TypeOopPtr* receiver_type,
800 bool is_virtual,
801 bool &call_does_dispatch, int &vtable_index);
802 ciMethod* optimize_inlining(ciMethod* caller, int bci, ciInstanceKlass* klass,
803 ciMethod* callee, const TypeOopPtr* receiver_type);
804
805 // Report if there were too many traps at a current method and bci.
806 // Report if a trap was recorded, and/or PerMethodTrapLimit was exceeded.
807 // If there is no MDO at all, report no trap unless told to assume it.
808 bool too_many_traps(ciMethod* method, int bci, Deoptimization::DeoptReason reason);
809 // This version, unspecific to a particular bci, asks if
810 // PerMethodTrapLimit was exceeded for all inlined methods seen so far.
811 bool too_many_traps(Deoptimization::DeoptReason reason,
812 // Privately used parameter for logging:
813 ciMethodData* logmd = NULL);
814 // Report if there were too many recompiles at a method and bci.
|