< prev index next >

src/share/vm/opto/compile.hpp

Print this page
rev 5783 : 8024069: replace_in_map() should operate on parent maps
Summary: type information gets lost because replace_in_map() doesn't update parent maps
Reviewed-by: kvn, twisti
rev 5784 : 8026796: Make replace_in_map() on parent maps generic
Summary: propagate node replacements along control flow edges to callers
Reviewed-by: kvn, vlivanov


 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.


< prev index next >