Chromium Code Reviews| Index: runtime/vm/object.cc |
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
| index facb353a658d6d886661463081d5558a84260587..d6cf78eb81f1a3ed9e36c8606ac0b3ee80b72175 100644 |
| --- a/runtime/vm/object.cc |
| +++ b/runtime/vm/object.cc |
| @@ -11434,12 +11434,15 @@ void ICData::SetDeoptReasons(uint32_t reasons) const { |
| bool ICData::HasDeoptReason(DeoptReasonId reason) const { |
| + ASSERT(reason <= kLastRecordedDeoptReason); |
| return (DeoptReasons() & (1 << reason)) != 0; |
| } |
| void ICData::AddDeoptReason(DeoptReasonId reason) const { |
| - SetDeoptReasons(DeoptReasons() | (1 << reason)); |
| + if (reason <= kLastRecordedDeoptReason) { |
|
zra
2014/12/15 20:57:38
Why is this not an assert?
Vyacheslav Egorov (Google)
2014/12/15 21:02:21
Caller (deoptimizer) can try to add deopt reason w
zra
2014/12/15 21:04:58
Makes sense. I think it's fine as-is. Thanks!
|
| + SetDeoptReasons(DeoptReasons() | (1 << reason)); |
| + } |
| } |
| @@ -11472,11 +11475,6 @@ bool ICData::MayCheckForJSWarning() const { |
| } |
| -void ICData::set_range_feedback(uint32_t feedback) { |
| - StoreNonPointer(&raw_ptr()->range_feedback_, feedback); |
| -} |
| - |
| - |
| void ICData::set_state_bits(uint32_t bits) const { |
| StoreNonPointer(&raw_ptr()->state_bits_, bits); |
| } |
| @@ -11932,7 +11930,6 @@ RawICData* ICData::New(const Function& owner, |
| result.set_arguments_descriptor(arguments_descriptor); |
| result.set_deopt_id(deopt_id); |
| result.set_state_bits(0); |
| - result.set_range_feedback(0); |
| result.SetNumArgsTested(num_args_tested); |
| // Number of array elements in one test entry. |
| intptr_t len = result.TestEntryLength(); |
| @@ -12013,8 +12010,10 @@ bool ICData::HasRangeFeedback() const { |
| ICData::RangeFeedback ICData::DecodeRangeFeedbackAt(intptr_t idx) const { |
| ASSERT((0 <= idx) && (idx < 3)); |
| + const uint32_t raw_feedback = |
| + RangeFeedbackBits::decode(raw_ptr()->state_bits_); |
| const uint32_t feedback = |
| - (range_feedback() >> (idx * kBitsPerRangeFeedback)) & kRangeFeedbackMask; |
| + (raw_feedback >> (idx * kBitsPerRangeFeedback)) & kRangeFeedbackMask; |
| if ((feedback & kInt64RangeBit) != 0) { |
| return kInt64Range; |
| } |