Sub should be a Math IC
https://bugs.webkit.org/show_bug.cgi?id=160270
Reviewed by Mark Lam.
This makes Sub an IC like Mul and Add. I'm seeing the following
improvements of average Sub size on Unity and JetStream:
| JetStream | Unity 3D |
------| -------------|--------------
Old | 202 bytes | 205 bytes |
------| -------------|--------------
New | 134 bytes | 134 bytes |
------------------------------------
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::addJITMulIC):
(JSC::CodeBlock::addJITSubIC):
(JSC::CodeBlock::findStubInfo):
(JSC::CodeBlock::dumpMathICStats):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::stubInfoBegin):
(JSC::CodeBlock::stubInfoEnd):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileArithSub):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
* jit/JITArithmetic.cpp:
(JSC::JIT::emit_op_sub):
(JSC::JIT::emitSlow_op_sub):
(JSC::JIT::emit_op_pow):
* jit/JITMathIC.h:
* jit/JITMathICForwards.h:
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* jit/JITSubGenerator.cpp:
(JSC::JITSubGenerator::generateInline):
(JSC::JITSubGenerator::generateFastPath):
* jit/JITSubGenerator.h:
(JSC::JITSubGenerator::JITSubGenerator):
(JSC::JITSubGenerator::isLeftOperandValidConstant):
(JSC::JITSubGenerator::isRightOperandValidConstant):
(JSC::JITSubGenerator::arithProfile):
(JSC::JITSubGenerator::didEmitFastPath): Deleted.
(JSC::JITSubGenerator::endJumpList): Deleted.
(JSC::JITSubGenerator::slowPathJumpList): Deleted.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@203979 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/bytecode/CodeBlock.cpp b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
index 3a08943..987f321 100644
--- a/Source/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/Source/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -3018,6 +3018,11 @@
return m_mulICs.add();
}
+JITSubIC* CodeBlock::addJITSubIC()
+{
+ return m_subICs.add();
+}
+
StructureStubInfo* CodeBlock::findStubInfo(CodeOrigin codeOrigin)
{
for (StructureStubInfo* stubInfo : m_stubInfos) {
@@ -4585,6 +4590,8 @@
double totalAddSize = 0.0;
double numMuls = 0.0;
double totalMulSize = 0.0;
+ double numSubs = 0.0;
+ double totalSubSize = 0.0;
auto countICs = [&] (CodeBlock* codeBlock) {
for (JITAddIC* addIC : codeBlock->m_addICs) {
@@ -4597,6 +4604,11 @@
totalMulSize += mulIC->codeSize();
}
+ for (JITSubIC* subIC : codeBlock->m_subICs) {
+ numSubs++;
+ totalSubSize += subIC->codeSize();
+ }
+
return false;
};
heap()->forEachCodeBlock(countICs);
@@ -4608,6 +4620,10 @@
dataLog("Num Muls: ", numMuls, "\n");
dataLog("Total Mul size in bytes: ", totalMulSize, "\n");
dataLog("Average Mul size: ", totalMulSize / numMuls, "\n");
+ dataLog("\n");
+ dataLog("Num Subs: ", numSubs, "\n");
+ dataLog("Total Sub size in bytes: ", totalSubSize, "\n");
+ dataLog("Average Sub size: ", totalSubSize / numSubs, "\n");
dataLog("-----------------------\n");
#endif