comparison src/share/vm/runtime/deoptimization.hpp @ 1206:87684f1a88b5

6614597: Performance variability in jvm2008 xml.validation Summary: Fix incorrect marking of methods as not compilable. Reviewed-by: never
author kvn
date Mon, 01 Feb 2010 16:49:49 -0800
parents b2b6a9bf6238
children c18cbe5936b8
comparison
equal deleted inserted replaced
1205:5fcfaa1ad96f 1206:87684f1a88b5
31 public: 31 public:
32 // What condition caused the deoptimization? 32 // What condition caused the deoptimization?
33 enum DeoptReason { 33 enum DeoptReason {
34 Reason_many = -1, // indicates presence of several reasons 34 Reason_many = -1, // indicates presence of several reasons
35 Reason_none = 0, // indicates absence of a relevant deopt. 35 Reason_none = 0, // indicates absence of a relevant deopt.
36 // Next 7 reasons are recorded per bytecode in DataLayout::trap_bits
36 Reason_null_check, // saw unexpected null or zero divisor (@bci) 37 Reason_null_check, // saw unexpected null or zero divisor (@bci)
37 Reason_null_assert, // saw unexpected non-null or non-zero (@bci) 38 Reason_null_assert, // saw unexpected non-null or non-zero (@bci)
38 Reason_range_check, // saw unexpected array index (@bci) 39 Reason_range_check, // saw unexpected array index (@bci)
39 Reason_class_check, // saw unexpected object class (@bci) 40 Reason_class_check, // saw unexpected object class (@bci)
40 Reason_array_check, // saw unexpected array class (aastore @bci) 41 Reason_array_check, // saw unexpected array class (aastore @bci)
41 Reason_intrinsic, // saw unexpected operand to intrinsic (@bci) 42 Reason_intrinsic, // saw unexpected operand to intrinsic (@bci)
43 Reason_bimorphic, // saw unexpected object class in bimorphic inlining (@bci)
44
42 Reason_unloaded, // unloaded class or constant pool entry 45 Reason_unloaded, // unloaded class or constant pool entry
43 Reason_uninitialized, // bad class state (uninitialized) 46 Reason_uninitialized, // bad class state (uninitialized)
44 Reason_unreached, // code is not reached, compiler 47 Reason_unreached, // code is not reached, compiler
45 Reason_unhandled, // arbitrary compiler limitation 48 Reason_unhandled, // arbitrary compiler limitation
46 Reason_constraint, // arbitrary runtime constraint violated 49 Reason_constraint, // arbitrary runtime constraint violated
47 Reason_div0_check, // a null_check due to division by zero 50 Reason_div0_check, // a null_check due to division by zero
48 Reason_age, // nmethod too old; tier threshold reached 51 Reason_age, // nmethod too old; tier threshold reached
49 Reason_predicate, // compiler generated predicate failed 52 Reason_predicate, // compiler generated predicate failed
50 Reason_LIMIT, 53 Reason_LIMIT,
51 // Note: Keep this enum in sync. with _trap_reason_name. 54 // Note: Keep this enum in sync. with _trap_reason_name.
52 Reason_RECORDED_LIMIT = Reason_unloaded // some are not recorded per bc 55 Reason_RECORDED_LIMIT = Reason_bimorphic // some are not recorded per bc
53 // Note: Reason_RECORDED_LIMIT should be < 8 to fit into 3 bits of 56 // Note: Reason_RECORDED_LIMIT should be < 8 to fit into 3 bits of
54 // DataLayout::trap_bits. This dependency is enforced indirectly 57 // DataLayout::trap_bits. This dependency is enforced indirectly
55 // via asserts, to avoid excessive direct header-to-header dependencies. 58 // via asserts, to avoid excessive direct header-to-header dependencies.
56 // See Deoptimization::trap_state_reason and class DataLayout. 59 // See Deoptimization::trap_state_reason and class DataLayout.
57 }; 60 };
277 static int trap_state_set_recompiled(int trap_state, bool z); 280 static int trap_state_set_recompiled(int trap_state, bool z);
278 static const char* format_trap_state(char* buf, size_t buflen, 281 static const char* format_trap_state(char* buf, size_t buflen,
279 int trap_state); 282 int trap_state);
280 283
281 static bool reason_is_recorded_per_bytecode(DeoptReason reason) { 284 static bool reason_is_recorded_per_bytecode(DeoptReason reason) {
282 return reason > Reason_none && reason < Reason_RECORDED_LIMIT; 285 return reason > Reason_none && reason <= Reason_RECORDED_LIMIT;
283 } 286 }
284 287
285 static DeoptReason reason_recorded_per_bytecode_if_any(DeoptReason reason) { 288 static DeoptReason reason_recorded_per_bytecode_if_any(DeoptReason reason) {
286 if (reason_is_recorded_per_bytecode(reason)) 289 if (reason_is_recorded_per_bytecode(reason))
287 return reason; 290 return reason;