| Index: src/ic/ic.cc
|
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc
|
| index daf7704c71d5ffa5d197ce4fb06bbb95255e8b4d..a02329a6dbab90ffd1bea54956d012fe3b239e01 100644
|
| --- a/src/ic/ic.cc
|
| +++ b/src/ic/ic.cc
|
| @@ -601,7 +601,8 @@ void CompareIC::Clear(Isolate* isolate, Address address, Code* target,
|
| CompareICStub stub(target->stub_key(), isolate);
|
| // Only clear CompareICs that can retain objects.
|
| if (stub.state() != CompareICState::KNOWN_OBJECT) return;
|
| - SetTargetAtAddress(address, GetRawUninitialized(isolate, stub.op()),
|
| + SetTargetAtAddress(address,
|
| + GetRawUninitialized(isolate, stub.op(), stub.strong()),
|
| constant_pool);
|
| PatchInlinedSmiCode(address, DISABLE_INLINED_SMI_CHECK);
|
| }
|
| @@ -2680,8 +2681,9 @@ RUNTIME_FUNCTION(BinaryOpIC_MissWithAllocationSite) {
|
| }
|
|
|
|
|
| -Code* CompareIC::GetRawUninitialized(Isolate* isolate, Token::Value op) {
|
| - CompareICStub stub(isolate, op, CompareICState::UNINITIALIZED,
|
| +Code* CompareIC::GetRawUninitialized(Isolate* isolate, Token::Value op,
|
| + bool strong) {
|
| + CompareICStub stub(isolate, op, strong, CompareICState::UNINITIALIZED,
|
| CompareICState::UNINITIALIZED,
|
| CompareICState::UNINITIALIZED);
|
| Code* code = NULL;
|
| @@ -2690,8 +2692,9 @@ Code* CompareIC::GetRawUninitialized(Isolate* isolate, Token::Value op) {
|
| }
|
|
|
|
|
| -Handle<Code> CompareIC::GetUninitialized(Isolate* isolate, Token::Value op) {
|
| - CompareICStub stub(isolate, op, CompareICState::UNINITIALIZED,
|
| +Handle<Code> CompareIC::GetUninitialized(Isolate* isolate, Token::Value op,
|
| + bool strong) {
|
| + CompareICStub stub(isolate, op, strong, CompareICState::UNINITIALIZED,
|
| CompareICState::UNINITIALIZED,
|
| CompareICState::UNINITIALIZED);
|
| return stub.GetCode();
|
| @@ -2708,7 +2711,8 @@ Code* CompareIC::UpdateCaches(Handle<Object> x, Handle<Object> y) {
|
| CompareICState::State state = CompareICState::TargetState(
|
| old_stub.state(), old_stub.left(), old_stub.right(), op_,
|
| HasInlinedSmiCode(address()), x, y);
|
| - CompareICStub stub(isolate(), op_, new_left, new_right, state);
|
| + CompareICStub stub(isolate(), op_, old_stub.strong(), new_left, new_right,
|
| + state);
|
| if (state == CompareICState::KNOWN_OBJECT) {
|
| stub.set_known_map(
|
| Handle<Map>(Handle<JSObject>::cast(x)->map(), isolate()));
|
|
|