Reviewers: Mads Ager, antonm, Vitaly,
Description:
Removing BinaryOpIC::Clear. This method relied on some less-than-obvious
hack,
and there was zero (or small negative) performance advantage.
Please review this at http://codereview.chromium.org/1623005/show
SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/
Affected files:
M src/ia32/codegen-ia32.cc
M src/ic.cc
M src/x64/codegen-x64.cc
Index: src/ia32/codegen-ia32.cc
===================================================================
--- src/ia32/codegen-ia32.cc (revision 4359)
+++ src/ia32/codegen-ia32.cc (working copy)
@@ -9518,13 +9518,6 @@
default:
UNREACHABLE();
}
-
- // Generate an unreachable reference to the DEFAULT stub so that it can
be
- // found at the end of this stub when clearing ICs at GC.
- if (runtime_operands_type_ != BinaryOpIC::DEFAULT) {
- GenericBinaryOpStub uninit(MinorKey(), BinaryOpIC::DEFAULT);
- __ TailCallStub(&uninit);
- }
}
Index: src/ic.cc
===================================================================
--- src/ic.cc (revision 4359)
+++ src/ic.cc (working copy)
@@ -224,7 +224,8 @@
case Code::STORE_IC: return StoreIC::Clear(address, target);
case Code::KEYED_STORE_IC: return KeyedStoreIC::Clear(address, target);
case Code::CALL_IC: return CallIC::Clear(address, target);
- case Code::BINARY_OP_IC: return BinaryOpIC::Clear(address, target);
+ case Code::BINARY_OP_IC: return; // Clearing these is tricky and does
not
+ // make any performance difference.
default: UNREACHABLE();
}
}
@@ -1404,25 +1405,6 @@
}
-void BinaryOpIC::Clear(Address address, Code* target) {
- if (target->ic_state() == UNINITIALIZED) return;
-
- // At the end of a fast case stub there should be a reference to
- // a corresponding UNINITIALIZED stub, so look for the last reloc info
item.
- RelocInfo* rinfo = NULL;
- for (RelocIterator it(target, RelocInfo::kCodeTargetMask);
- !it.done(); it.next()) {
- rinfo = it.rinfo();
- }
-
- ASSERT(rinfo != NULL);
- Code* uninit_stub =
Code::GetCodeFromTargetAddress(rinfo->target_address());
- ASSERT(uninit_stub->ic_state() == UNINITIALIZED &&
- uninit_stub->kind() == Code::BINARY_OP_IC);
- SetTargetAtAddress(address, uninit_stub);
-}
-
-
const char* BinaryOpIC::GetName(TypeInfo type_info) {
switch (type_info) {
case DEFAULT: return "Default";
Index: src/x64/codegen-x64.cc
===================================================================
--- src/x64/codegen-x64.cc (revision 4359)
+++ src/x64/codegen-x64.cc (working copy)
@@ -9068,15 +9068,6 @@
default:
UNREACHABLE();
}
-
- // TODO(kaznacheev) Remove this (along with clearing) if it does not harm
- // performance.
- // Generate an unreachable reference to the DEFAULT stub so that it can
be
- // found at the end of this stub when clearing ICs at GC.
- if (runtime_operands_type_ != BinaryOpIC::DEFAULT) {
- GenericBinaryOpStub uninit(MinorKey(), BinaryOpIC::DEFAULT);
- __ TailCallStub(&uninit);
- }
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
To unsubscribe, reply using "remove me" as the subject.