Changeset 200543 in webkit
- Timestamp:
- May 7, 2016, 9:20:16 AM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r200430 r200543 290 290 dfg/DFGLiveCatchVariablePreservationPhase.cpp 291 291 dfg/DFGFrozenValue.cpp 292 dfg/DFGFunctionWhitelist.cpp293 292 dfg/DFGGraph.cpp 294 293 dfg/DFGGraphSafepoint.cpp … … 827 826 tools/CodeProfiling.cpp 828 827 tools/FunctionOverrides.cpp 828 tools/FunctionWhitelist.cpp 829 829 tools/JSDollarVM.cpp 830 830 tools/JSDollarVMPrototype.cpp -
trunk/Source/JavaScriptCore/ChangeLog
r200541 r200543 1 2016-05-07 Mark Lam <mark.lam@apple.com> 2 3 Add JSC options bytecodeRangeToJITCompile and jitWhitelist. 4 https://bugs.webkit.org/show_bug.cgi?id=157428 5 6 Reviewed by Michael Saboff. 7 8 1. Added Options::bytecodeRangeToJITCompile and Options::jitWhitelist options. 9 10 2. Moved DFGFunctionWhitelist* to FunctionWhitelist* and made it generic so that 11 it can be used for more than one whitelist instance. In this case, we now have 12 two: the dfgWhitelist and the jitWhitelist. 13 14 3. Added "can compile" checks in LLInt::shouldJIT() to check 15 Options::bytecodeRangeToJITCompile and Options::jitWhitelist. 16 17 * CMakeLists.txt: 18 * JavaScriptCore.xcodeproj/project.pbxproj: 19 * dfg/DFGDriver.cpp: 20 (JSC::DFG::getNumCompilations): 21 (JSC::DFG::ensureGlobalDFGWhitelist): 22 (JSC::DFG::compileImpl): 23 * dfg/DFGFunctionWhitelist.cpp: Removed. 24 * dfg/DFGFunctionWhitelist.h: Removed. 25 26 * llint/LLIntSlowPaths.cpp: 27 (JSC::LLInt::ensureGlobalJITWhitelist): 28 (JSC::LLInt::shouldJIT): 29 30 * runtime/Options.h: 31 32 * tools/FunctionWhitelist.cpp: Copied from Source/JavaScriptCore/dfg/DFGFunctionWhitelist.cpp. 33 (JSC::FunctionWhitelist::FunctionWhitelist): 34 (JSC::FunctionWhitelist::contains): 35 (JSC::DFG::FunctionWhitelist::ensureGlobalWhitelist): Deleted. 36 (JSC::DFG::FunctionWhitelist::FunctionWhitelist): Deleted. 37 (JSC::DFG::FunctionWhitelist::parseFunctionNamesInFile): Deleted. 38 (JSC::DFG::FunctionWhitelist::contains): Deleted. 39 * tools/FunctionWhitelist.h: Copied from Source/JavaScriptCore/dfg/DFGFunctionWhitelist.h. 40 1 41 2016-05-07 Benjamin Poulain <bpoulain@apple.com> 2 42 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r200430 r200543 1132 1132 2A83638918D7D0FE0000EBCC /* FullGCActivityCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A83638718D7D0FE0000EBCC /* FullGCActivityCallback.cpp */; }; 1133 1133 2A83638A18D7D0FE0000EBCC /* FullGCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1134 2A88067819107D5500CB0BBB /* DFGFunctionWhitelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A88067619107D5500CB0BBB /* DFGFunctionWhitelist.cpp */; };1135 2A88067919107D5500CB0BBB /* DFGFunctionWhitelist.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A88067719107D5500CB0BBB /* DFGFunctionWhitelist.h */; };1136 1134 2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1137 1135 2AABCDE718EF294200002096 /* GCLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AABCDE618EF294200002096 /* GCLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2095 2093 FEA08620182B7A0400F6D851 /* Breakpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FEA0861E182B7A0400F6D851 /* Breakpoint.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2096 2094 FEA08621182B7A0400F6D851 /* DebuggerPrimitives.h in Headers */ = {isa = PBXBuildFile; fileRef = FEA0861F182B7A0400F6D851 /* DebuggerPrimitives.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2095 FEA0C4021CDD7D1D00481991 /* FunctionWhitelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEA0C4001CDD7D0E00481991 /* FunctionWhitelist.cpp */; }; 2096 FEA0C4031CDD7D1D00481991 /* FunctionWhitelist.h in Headers */ = {isa = PBXBuildFile; fileRef = FEA0C4011CDD7D0E00481991 /* FunctionWhitelist.h */; }; 2097 2097 FEA1E4391C213A2B00277A16 /* ValueProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEA1E4381C213A2600277A16 /* ValueProfile.cpp */; }; 2098 2098 FEB137571BB11EF900CD5100 /* MacroAssemblerARM64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEB137561BB11EEE00CD5100 /* MacroAssemblerARM64.cpp */; }; … … 3266 3266 2A83638718D7D0FE0000EBCC /* FullGCActivityCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FullGCActivityCallback.cpp; sourceTree = "<group>"; }; 3267 3267 2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FullGCActivityCallback.h; sourceTree = "<group>"; }; 3268 2A88067619107D5500CB0BBB /* DFGFunctionWhitelist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGFunctionWhitelist.cpp; path = dfg/DFGFunctionWhitelist.cpp; sourceTree = "<group>"; };3269 2A88067719107D5500CB0BBB /* DFGFunctionWhitelist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGFunctionWhitelist.h; path = dfg/DFGFunctionWhitelist.h; sourceTree = "<group>"; };3270 3268 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureIDBlob.h; sourceTree = "<group>"; }; 3271 3269 2AABCDE618EF294200002096 /* GCLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCLogging.h; sourceTree = "<group>"; }; … … 4348 4346 FEA0861E182B7A0400F6D851 /* Breakpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Breakpoint.h; sourceTree = "<group>"; }; 4349 4347 FEA0861F182B7A0400F6D851 /* DebuggerPrimitives.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerPrimitives.h; sourceTree = "<group>"; }; 4348 FEA0C4001CDD7D0E00481991 /* FunctionWhitelist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionWhitelist.cpp; sourceTree = "<group>"; }; 4349 FEA0C4011CDD7D0E00481991 /* FunctionWhitelist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FunctionWhitelist.h; sourceTree = "<group>"; }; 4350 4350 FEA1E4381C213A2600277A16 /* ValueProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValueProfile.cpp; sourceTree = "<group>"; }; 4351 4351 FEB137561BB11EEE00CD5100 /* MacroAssemblerARM64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MacroAssemblerARM64.cpp; sourceTree = "<group>"; }; … … 6061 6061 FE4BFF291AD476E700088F87 /* FunctionOverrides.cpp */, 6062 6062 FE4BFF2A1AD476E700088F87 /* FunctionOverrides.h */, 6063 FEA0C4001CDD7D0E00481991 /* FunctionWhitelist.cpp */, 6064 FEA0C4011CDD7D0E00481991 /* FunctionWhitelist.h */, 6063 6065 FE384EE11ADDB7AD0055DE2C /* JSDollarVM.cpp */, 6064 6066 FE384EE21ADDB7AD0055DE2C /* JSDollarVM.h */, … … 6215 6217 0F69CC86193AC60A0045759E /* DFGFrozenValue.cpp */, 6216 6218 0F69CC87193AC60A0045759E /* DFGFrozenValue.h */, 6217 2A88067619107D5500CB0BBB /* DFGFunctionWhitelist.cpp */,6218 2A88067719107D5500CB0BBB /* DFGFunctionWhitelist.h */,6219 6219 86EC9DB61328DF82002B2AD7 /* DFGGenerationInfo.h */, 6220 6220 86EC9DB71328DF82002B2AD7 /* DFGGraph.cpp */, … … 7079 7079 99DA00A91BD5993100F4575C /* builtins_generate_separate_header.py in Headers */, 7080 7080 0F338E111BF0276C0013C88F /* B3OpaqueByproduct.h in Headers */, 7081 FEA0C4031CDD7D1D00481991 /* FunctionWhitelist.h in Headers */, 7081 7082 99DA00AA1BD5993100F4575C /* builtins_generate_separate_implementation.py in Headers */, 7082 7083 99DA00A31BD5993100F4575C /* builtins_generator.py in Headers */, … … 7268 7269 0F2DD8151AB3D8BE00BBB8E8 /* DFGForAllKills.h in Headers */, 7269 7270 0F69CC89193AC60A0045759E /* DFGFrozenValue.h in Headers */, 7270 2A88067919107D5500CB0BBB /* DFGFunctionWhitelist.h in Headers */,7271 7271 86EC9DC61328DF82002B2AD7 /* DFGGenerationInfo.h in Headers */, 7272 7272 86EC9DC81328DF82002B2AD7 /* DFGGraph.h in Headers */, … … 8835 8835 A7D89CF717A0B8CC00773AD8 /* DFGFlushFormat.cpp in Sources */, 8836 8836 0F69CC88193AC60A0045759E /* DFGFrozenValue.cpp in Sources */, 8837 2A88067819107D5500CB0BBB /* DFGFunctionWhitelist.cpp in Sources */,8838 8837 86EC9DC71328DF82002B2AD7 /* DFGGraph.cpp in Sources */, 8839 8838 0F2FCCF918A60070001A27F8 /* DFGGraphSafepoint.cpp in Sources */, … … 8850 8849 A78A9778179738B8009DF744 /* DFGJITFinalizer.cpp in Sources */, 8851 8850 0FC97F3F18202119002C9B26 /* DFGJumpReplacement.cpp in Sources */, 8851 FEA0C4021CDD7D1D00481991 /* FunctionWhitelist.cpp in Sources */, 8852 8852 A73A535A1799CD5D00170C19 /* DFGLazyJSValue.cpp in Sources */, 8853 8853 62F2AA371B0BEDE300610C7A /* DFGLazyNode.cpp in Sources */, -
trunk/Source/JavaScriptCore/dfg/DFGDriver.cpp
r198364 r200543 31 31 32 32 #include "CodeBlock.h" 33 #include "DFGFunctionWhitelist.h"34 33 #include "DFGJITCode.h" 35 34 #include "DFGPlan.h" 36 35 #include "DFGThunks.h" 37 36 #include "DFGWorklist.h" 37 #include "FunctionWhitelist.h" 38 38 #include "JITCode.h" 39 39 #include "JSCInlines.h" … … 41 41 #include "TypeProfilerLog.h" 42 42 #include <wtf/Atomics.h> 43 #include <wtf/NeverDestroyed.h> 43 44 44 45 #if ENABLE(FTL_JIT) … … 56 57 57 58 #if ENABLE(DFG_JIT) 59 static FunctionWhitelist& ensureGlobalDFGWhitelist() 60 { 61 static LazyNeverDestroyed<FunctionWhitelist> dfgWhitelist; 62 static std::once_flag initializeWhitelistFlag; 63 std::call_once(initializeWhitelistFlag, [] { 64 const char* functionWhitelistFile = Options::dfgWhitelist(); 65 dfgWhitelist.construct(functionWhitelistFile); 66 }); 67 return dfgWhitelist; 68 } 69 58 70 static CompilationResult compileImpl( 59 71 VM& vm, CodeBlock* codeBlock, CodeBlock* profiledDFGCodeBlock, CompilationMode mode, … … 62 74 { 63 75 if (!Options::bytecodeRangeToDFGCompile().isInRange(codeBlock->instructionCount()) 64 || ! FunctionWhitelist::ensureGlobalWhitelist().contains(codeBlock))76 || !ensureGlobalDFGWhitelist().contains(codeBlock)) 65 77 return CompilationFailed; 66 78 -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r199864 r200543 35 35 #include "Exception.h" 36 36 #include "ExceptionFuzz.h" 37 #include "FunctionWhitelist.h" 37 38 #include "GetterSetter.h" 38 39 #include "HostCallReturnValue.h" … … 57 58 #include "StructureRareDataInlines.h" 58 59 #include "VMInlines.h" 60 #include <wtf/NeverDestroyed.h> 59 61 #include <wtf/StringPrintStream.h> 60 62 … … 288 290 289 291 #if ENABLE(JIT) 290 inline bool shouldJIT(ExecState* exec, CodeBlock*) 291 { 292 static FunctionWhitelist& ensureGlobalJITWhitelist() 293 { 294 static LazyNeverDestroyed<FunctionWhitelist> baselineWhitelist; 295 static std::once_flag initializeWhitelistFlag; 296 std::call_once(initializeWhitelistFlag, [] { 297 const char* functionWhitelistFile = Options::jitWhitelist(); 298 baselineWhitelist.construct(functionWhitelistFile); 299 }); 300 return baselineWhitelist; 301 } 302 303 inline bool shouldJIT(ExecState* exec, CodeBlock* codeBlock) 304 { 305 if (!Options::bytecodeRangeToJITCompile().isInRange(codeBlock->instructionCount()) 306 || !ensureGlobalJITWhitelist().contains(codeBlock)) 307 return false; 308 292 309 // You can modify this to turn off JITting without rebuilding the world. 293 310 return exec->vm().canUseJIT(); -
trunk/Source/JavaScriptCore/runtime/Options.h
r200531 r200543 146 146 v(bool, dumpFTLDisassembly, false, Normal, "dumps disassembly of FTL function upon compilation") \ 147 147 v(bool, dumpAllDFGNodes, false, Normal, nullptr) \ 148 v(optionRange, bytecodeRangeToJITCompile, 0, Normal, "bytecode size range to allow compilation on, e.g. 1:100") \ 148 149 v(optionRange, bytecodeRangeToDFGCompile, 0, Normal, "bytecode size range to allow DFG compilation on, e.g. 1:100") \ 149 150 v(optionRange, bytecodeRangeToFTLCompile, 0, Normal, "bytecode size range to allow FTL compilation on, e.g. 1:100") \ 151 v(optionString, jitWhitelist, nullptr, Normal, "file with list of function signatures to allow compilation on") \ 150 152 v(optionString, dfgWhitelist, nullptr, Normal, "file with list of function signatures to allow DFG compilation on") \ 151 153 v(bool, dumpSourceAtDFGTime, false, Normal, "dumps source code of JS function being DFG compiled") \ -
trunk/Source/JavaScriptCore/tools/FunctionWhitelist.cpp
r200530 r200543 1 1 /* 2 * Copyright (C) 2014 Apple Inc. All rights reserved.2 * Copyright (C) 2014, 2016 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 25 25 26 26 #include "config.h" 27 #include " DFGFunctionWhitelist.h"27 #include "FunctionWhitelist.h" 28 28 29 #if ENABLE( DFG_JIT)29 #if ENABLE(JIT) 30 30 31 31 #include "CodeBlock.h" … … 33 33 #include <stdio.h> 34 34 #include <string.h> 35 #include <wtf/NeverDestroyed.h>36 35 #include <wtf/text/StringBuilder.h> 37 36 38 namespace JSC { namespace DFG { 39 40 FunctionWhitelist& FunctionWhitelist::ensureGlobalWhitelist() 41 { 42 static LazyNeverDestroyed<FunctionWhitelist> functionWhitelist; 43 static std::once_flag initializeWhitelistFlag; 44 std::call_once(initializeWhitelistFlag, [] { 45 const char* functionWhitelistFile = Options::dfgWhitelist(); 46 functionWhitelist.construct(functionWhitelistFile); 47 }); 48 return functionWhitelist; 49 } 37 namespace JSC { 50 38 51 39 FunctionWhitelist::FunctionWhitelist(const char* filename) 52 {53 parseFunctionNamesInFile(filename);54 }55 56 void FunctionWhitelist::parseFunctionNamesInFile(const char* filename)57 40 { 58 41 if (!filename) … … 64 47 return; 65 48 } 49 50 m_hasActiveWhitelist = true; 66 51 67 52 char* line; … … 90 75 } 91 76 92 bool FunctionWhitelist::contains(CodeBlock* codeBlock) const 77 bool FunctionWhitelist::contains(CodeBlock* codeBlock) const 93 78 { 94 79 ASSERT(!isCompilationThread()); 95 if (! Options::dfgWhitelist())80 if (!m_hasActiveWhitelist) 96 81 return true; 97 82 … … 110 95 } 111 96 112 } } // namespace JSC::DFG97 } // namespace JSC 113 98 114 #endif // ENABLE( DFG_JIT)99 #endif // ENABLE(JIT) 115 100 -
trunk/Source/JavaScriptCore/tools/FunctionWhitelist.h
r200530 r200543 1 1 /* 2 * Copyright (C) 2014 Apple Inc. All rights reserved.2 * Copyright (C) 2014, 2016 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #ifndef DFGFunctionWhitelist_h 27 #define DFGFunctionWhitelist_h 28 29 #if ENABLE(DFG_JIT) 26 #ifndef FunctionWhitelist_h 27 #define FunctionWhitelist_h 30 28 31 29 #include <wtf/HashSet.h> … … 36 34 class CodeBlock; 37 35 38 namespace DFG {39 40 36 class FunctionWhitelist { 41 37 public: 42 static FunctionWhitelist& ensureGlobalWhitelist();43 38 explicit FunctionWhitelist(const char*); 44 39 … … 46 41 47 42 private: 48 void parseFunctionNamesInFile(const char*);49 50 43 HashSet<String> m_entries; 44 bool m_hasActiveWhitelist { false }; 51 45 }; 52 46 53 } } // namespace JSC::DFG47 } // namespace JSC 54 48 55 #endif // ENABLE(DFG_JIT) 56 57 #endif // DFGFunctionWhitelist_h 49 #endif // FunctionWhitelist_h
Note:
See TracChangeset
for help on using the changeset viewer.