WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
the patch
blah.patch (text/plain), 7.80 KB, created by
Filip Pizlo
on 2014-01-27 11:23:50 PST
(
hide
)
Description:
the patch
Filename:
MIME Type:
Creator:
Filip Pizlo
Created:
2014-01-27 11:23:50 PST
Size:
7.80 KB
patch
obsolete
>Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 162848) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,22 @@ >+2014-01-27 Filip Pizlo <fpizlo@apple.com> >+ >+ FTL should do polyvariant PutById inlining >+ https://bugs.webkit.org/show_bug.cgi?id=127692 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * bytecode/PutByIdStatus.cpp: >+ (JSC::PutByIdStatus::hasExitSite): >+ (JSC::PutByIdStatus::computeFor): >+ (JSC::PutByIdStatus::computeForStubInfo): >+ * bytecode/PutByIdStatus.h: >+ * dfg/DFGByteCodeParser.cpp: >+ (JSC::DFG::ByteCodeParser::parseBlock): >+ * tests/stress/simple-polyvariant-put-by-id-inlining-example.js: Added. >+ (foo): >+ (fuzz): >+ (bar): >+ > 2014-01-26 Filip Pizlo <fpizlo@apple.com> > > FTL should do polyvariant GetById inlining >Index: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp >=================================================================== >--- Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (revision 162840) >+++ Source/JavaScriptCore/bytecode/PutByIdStatus.cpp (working copy) >@@ -35,12 +35,12 @@ > > namespace JSC { > >-bool PutByIdStatus::hasExitSite(const ConcurrentJITLocker& locker, CodeBlock* profiledBlock, unsigned bytecodeIndex) >+bool PutByIdStatus::hasExitSite(const ConcurrentJITLocker& locker, CodeBlock* profiledBlock, unsigned bytecodeIndex, ExitingJITType exitType) > { >- return profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadCache)) >- || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadCacheWatchpoint)) >- || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadWeakConstantCache)) >- || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadWeakConstantCacheWatchpoint)); >+ return profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadCache, exitType)) >+ || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadCacheWatchpoint, exitType)) >+ || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadWeakConstantCache, exitType)) >+ || profiledBlock->hasExitSite(locker, DFG::FrequentExitSite(bytecodeIndex, BadWeakConstantCacheWatchpoint, exitType)); > } > > PutByIdStatus PutByIdStatus::computeFromLLInt(CodeBlock* profiledBlock, unsigned bytecodeIndex, StringImpl* uid) >@@ -102,9 +102,22 @@ PutByIdStatus PutByIdStatus::computeFor( > return PutByIdStatus(TakesSlowPath, 0, 0, 0, invalidOffset); > > StructureStubInfo* stubInfo = map.get(CodeOrigin(bytecodeIndex)); >- if (!stubInfo || !stubInfo->seen) >+ PutByIdStatus result = computeForStubInfo(locker, profiledBlock, stubInfo, uid); >+ if (!result) > return computeFromLLInt(profiledBlock, bytecodeIndex, uid); > >+ return result; >+#else // ENABLE(JIT) >+ UNUSED_PARAM(map); >+ return PutByIdStatus(NoInformation, 0, 0, 0, invalidOffset); >+#endif // ENABLE(JIT) >+} >+ >+PutByIdStatus PutByIdStatus::computeForStubInfo(const ConcurrentJITLocker&, CodeBlock* profiledBlock, StructureStubInfo* stubInfo, StringImpl* uid) >+{ >+ if (!stubInfo || !stubInfo->seen) >+ return PutByIdStatus(); >+ > if (stubInfo->resetByGC) > return PutByIdStatus(TakesSlowPath, 0, 0, 0, invalidOffset); > >@@ -151,10 +164,28 @@ PutByIdStatus PutByIdStatus::computeFor( > // we could do about it. > return PutByIdStatus(TakesSlowPath, 0, 0, 0, invalidOffset); > } >-#else // ENABLE(JIT) >- UNUSED_PARAM(map); >- return PutByIdStatus(NoInformation, 0, 0, 0, invalidOffset); >-#endif // ENABLE(JIT) >+} >+ >+PutByIdStatus PutByIdStatus::computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid) >+{ >+ if (dfgBlock) { >+ { >+ ConcurrentJITLocker locker(baselineBlock->m_lock); >+ if (hasExitSite(locker, baselineBlock, codeOrigin.bytecodeIndex, ExitFromFTL)) >+ return PutByIdStatus(TakesSlowPath); >+ } >+ >+ PutByIdStatus result; >+ { >+ ConcurrentJITLocker locker(dfgBlock->m_lock); >+ result = computeForStubInfo(locker, dfgBlock, dfgMap.get(codeOrigin), uid); >+ } >+ >+ if (result.isSet()) >+ return result; >+ } >+ >+ return computeFor(baselineBlock, baselineMap, codeOrigin.bytecodeIndex, uid); > } > > PutByIdStatus PutByIdStatus::computeFor(VM& vm, JSGlobalObject* globalObject, Structure* structure, StringImpl* uid, bool isDirect) >Index: Source/JavaScriptCore/bytecode/PutByIdStatus.h >=================================================================== >--- Source/JavaScriptCore/bytecode/PutByIdStatus.h (revision 162840) >+++ Source/JavaScriptCore/bytecode/PutByIdStatus.h (working copy) >@@ -26,6 +26,7 @@ > #ifndef PutByIdStatus_h > #define PutByIdStatus_h > >+#include "ExitingJITType.h" > #include "IntendedStructureChain.h" > #include "PropertyOffset.h" > #include "StructureStubInfo.h" >@@ -94,6 +95,8 @@ public: > static PutByIdStatus computeFor(CodeBlock*, StubInfoMap&, unsigned bytecodeIndex, StringImpl* uid); > static PutByIdStatus computeFor(VM&, JSGlobalObject*, Structure*, StringImpl* uid, bool isDirect); > >+ static PutByIdStatus computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin, StringImpl* uid); >+ > State state() const { return m_state; } > > bool isSet() const { return m_state != NoInformation; } >@@ -108,7 +111,8 @@ public: > PropertyOffset offset() const { return m_offset; } > > private: >- static bool hasExitSite(const ConcurrentJITLocker&, CodeBlock*, unsigned bytecodeIndex); >+ static bool hasExitSite(const ConcurrentJITLocker&, CodeBlock*, unsigned bytecodeIndex, ExitingJITType = ExitFromAnything); >+ static PutByIdStatus computeForStubInfo(const ConcurrentJITLocker&, CodeBlock*, StructureStubInfo*, StringImpl* uid); > static PutByIdStatus computeFromLLInt(CodeBlock*, unsigned bytecodeIndex, StringImpl* uid); > > State m_state; >Index: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp >=================================================================== >--- Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (revision 162840) >+++ Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp (working copy) >@@ -2541,8 +2541,9 @@ bool ByteCodeParser::parseBlock(unsigned > bool direct = currentInstruction[8].u.operand; > > PutByIdStatus putByIdStatus = PutByIdStatus::computeFor( >- m_inlineStackTop->m_profiledBlock, m_inlineStackTop->m_stubInfos, >- m_currentIndex, m_graph.identifiers()[identifierNumber]); >+ m_inlineStackTop->m_profiledBlock, m_dfgCodeBlock, >+ m_inlineStackTop->m_stubInfos, m_dfgStubInfos, >+ currentCodeOrigin(), m_graph.identifiers()[identifierNumber]); > bool canCountAsInlined = true; > if (!putByIdStatus.isSet()) { > addToGraph(ForceOSRExit); >Index: Source/JavaScriptCore/tests/stress/simple-polyvariant-put-by-id-inlining-example.js >=================================================================== >--- Source/JavaScriptCore/tests/stress/simple-polyvariant-put-by-id-inlining-example.js (revision 0) >+++ Source/JavaScriptCore/tests/stress/simple-polyvariant-put-by-id-inlining-example.js (working copy) >@@ -0,0 +1,26 @@ >+function foo(o) { >+ bar(o); >+} >+ >+function fuzz(o) { >+ bar(o); >+} >+ >+function bar(o) { >+ o.f = 42; >+} >+ >+noInline(foo); >+noInline(fuzz); >+ >+for (var i = 0; i < 100000; ++i) { >+ var o = {}; >+ foo(o); >+ if (o.f != 42) >+ throw "Error: bad result: " + o.f; >+ o = {f:23}; >+ var result = fuzz(o); >+ if (o.f != 42) >+ throw "Error: bad result: " + o.f; >+} >+
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
mhahnenberg
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 127692
: 222339