Mercurial > hg > graal-jvmci-8
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; |