src/share/vm/oops/methodData.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/oops

src/share/vm/oops/methodData.hpp

Print this page
rev 5903 : 8031752: Failed speculative optimizations should be reattempted when root of compilation is different
Summary: support for speculative traps that keep track of the root of the compilation in which a trap occurs.
Reviewed-by:
rev 5904 : imported patch spectrap-chris
rev 5906 : [mq]: spectrapunloading


2163   ArgInfoData *arg_info();
2164 
2165   enum {
2166     no_type_profile = 0,
2167     type_profile_jsr292 = 1,
2168     type_profile_all = 2
2169   };
2170 
2171   static bool profile_jsr292(methodHandle m, int bci);
2172   static int profile_arguments_flag();
2173   static bool profile_arguments_jsr292_only();
2174   static bool profile_all_arguments();
2175   static bool profile_arguments_for_invoke(methodHandle m, int bci);
2176   static int profile_return_flag();
2177   static bool profile_all_return();
2178   static bool profile_return_for_invoke(methodHandle m, int bci);
2179   static int profile_parameters_flag();
2180   static bool profile_parameters_jsr292_only();
2181   static bool profile_all_parameters();
2182 




2183 public:
2184   static int header_size() {
2185     return sizeof(MethodData)/wordSize;
2186   }
2187 
2188   // Compute the size of a MethodData* before it is created.
2189   static int compute_allocation_size_in_bytes(methodHandle method);
2190   static int compute_allocation_size_in_words(methodHandle method);
2191   static int compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps);
2192 
2193   // Determine if a given bytecode can have profile information.
2194   static bool bytecode_has_profile(Bytecodes::Code code) {
2195     return bytecode_cell_count(code) != no_profile_data;
2196   }
2197 
2198   // reset into original state
2199   void init();
2200 
2201   // My size
2202   int size_in_bytes() const { return _size; }




2163   ArgInfoData *arg_info();
2164 
2165   enum {
2166     no_type_profile = 0,
2167     type_profile_jsr292 = 1,
2168     type_profile_all = 2
2169   };
2170 
2171   static bool profile_jsr292(methodHandle m, int bci);
2172   static int profile_arguments_flag();
2173   static bool profile_arguments_jsr292_only();
2174   static bool profile_all_arguments();
2175   static bool profile_arguments_for_invoke(methodHandle m, int bci);
2176   static int profile_return_flag();
2177   static bool profile_all_return();
2178   static bool profile_return_for_invoke(methodHandle m, int bci);
2179   static int profile_parameters_flag();
2180   static bool profile_parameters_jsr292_only();
2181   static bool profile_all_parameters();
2182 
2183   void clean_extra_data(BoolObjectClosure* is_alive);
2184   void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false);
2185   void verify_extra_data_clean(BoolObjectClosure* is_alive);
2186 
2187 public:
2188   static int header_size() {
2189     return sizeof(MethodData)/wordSize;
2190   }
2191 
2192   // Compute the size of a MethodData* before it is created.
2193   static int compute_allocation_size_in_bytes(methodHandle method);
2194   static int compute_allocation_size_in_words(methodHandle method);
2195   static int compute_extra_data_count(int data_size, int empty_bc_count, bool needs_speculative_traps);
2196 
2197   // Determine if a given bytecode can have profile information.
2198   static bool bytecode_has_profile(Bytecodes::Code code) {
2199     return bytecode_cell_count(code) != no_profile_data;
2200   }
2201 
2202   // reset into original state
2203   void init();
2204 
2205   // My size
2206   int size_in_bytes() const { return _size; }


src/share/vm/oops/methodData.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File