Title: [196077] trunk
Revision
196077
Author
[email protected]
Date
2016-02-03 13:21:46 -0800 (Wed, 03 Feb 2016)

Log Message

[GTK][EFL] Switch FTL to B3
https://bugs.webkit.org/show_bug.cgi?id=153478

Reviewed by Csaba Osztrogonác.

.:

* Source/cmake/OptionsEfl.cmake:
* Source/cmake/OptionsGTK.cmake:

Source/_javascript_Core:

Conditionalize code to make it possible to build FTL completely without LLVM.

* CMakeLists.txt:
* dfg/DFGCommon.h:
* dfg/DFGPlan.cpp:
(JSC::DFG::Plan::compileInThreadImpl):
* ftl/FTLAbbreviatedTypes.h:
* ftl/FTLFail.cpp:
(JSC::FTL::fail):
* ftl/FTLState.cpp:
(JSC::FTL::State::State):
(JSC::FTL::State::~State):

Source/WTF:

Enable B3 by default on all x86.

* wtf/Platform.h:

Modified Paths

Diff

Modified: trunk/ChangeLog (196076 => 196077)


--- trunk/ChangeLog	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/ChangeLog	2016-02-03 21:21:46 UTC (rev 196077)
@@ -1,3 +1,13 @@
+2016-02-03  Michael Catanzaro  <[email protected]>
+
+        [GTK][EFL] Switch FTL to B3
+        https://bugs.webkit.org/show_bug.cgi?id=153478
+
+        Reviewed by Csaba Osztrogonác.
+
+        * Source/cmake/OptionsEfl.cmake:
+        * Source/cmake/OptionsGTK.cmake:
+
 2016-02-02  Joseph Pecoraro  <[email protected]>
 
         Unreviewed attempt to fix Mac CMake build after r195999.

Modified: trunk/Source/_javascript_Core/CMakeLists.txt (196076 => 196077)


--- trunk/Source/_javascript_Core/CMakeLists.txt	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/CMakeLists.txt	2016-02-03 21:21:46 UTC (rev 196077)
@@ -991,36 +991,11 @@
     llint/LowLevelInterpreter.cpp
 )
 
-
 if (ENABLE_FTL_JIT)
-    # Configure llvmForJSC.so
-    set(llvmForJSC_SOURCES
-        llvm/library/LLVMAnchor.cpp
-        llvm/library/LLVMExports.cpp
-        llvm/library/LLVMOverrides.cpp
-    )
-    set(llvmForJSC_INCLUDE_DIRECTORIES
-        ${LLVM_INCLUDE_DIRS}
-        "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
-    )
-
-    add_custom_command(
-        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
-        COMMAND ${CMAKE_COMMAND} -E touch ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
-        VERBATIM)
-
-    # Added extra items for _javascript_Core
-    list(APPEND _javascript_Core_SYSTEM_INCLUDE_DIRECTORIES
-        ${LLVM_INCLUDE_DIRS}
-    )
-
     list(APPEND _javascript_Core_SOURCES
         dfg/DFGToFTLDeferredCompilationCallback.cpp
         dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
 
-        disassembler/LLVMDisassembler.cpp
-        disassembler/X86Disassembler.cpp
-
         ftl/FTLAbstractHeap.cpp
         ftl/FTLAbstractHeapRepository.cpp
         ftl/FTLAvailableRecovery.cpp
@@ -1071,7 +1046,32 @@
         ftl/FTLThunks.cpp
         ftl/FTLUnwindInfo.cpp
         ftl/FTLValueRange.cpp
+    )
+endif ()
 
+if (USE_LLVM_DISASSEMBLER)
+    # Configure llvmForJSC.so
+    set(llvmForJSC_SOURCES
+        llvm/library/LLVMAnchor.cpp
+        llvm/library/LLVMExports.cpp
+        llvm/library/LLVMOverrides.cpp
+    )
+    set(llvmForJSC_INCLUDE_DIRECTORIES
+        ${LLVM_INCLUDE_DIRS}
+        "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
+    )
+
+    add_custom_command(
+        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
+        COMMAND ${CMAKE_COMMAND} -E touch ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
+        VERBATIM)
+
+    # Added extra items for _javascript_Core
+    list(APPEND _javascript_Core_SYSTEM_INCLUDE_DIRECTORIES
+        ${LLVM_INCLUDE_DIRS}
+    )
+
+    list(APPEND _javascript_Core_SOURCES
         llvm/InitializeLLVM.cpp
         llvm/LLVMAPI.cpp
     )
@@ -1366,12 +1366,12 @@
 
 WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
 
-if (ENABLE_FTL_JIT AND NOT WIN32)
+if (USE_LLVM_DISASSEMBLER AND NOT WIN32)
     if (NOT llvmForJSC_LIBRARIES)
         set(llvmForJSC_LIBRARIES ${LLVM_STATIC_LIBRARIES})
     endif ()
     if (NOT llvmForJSC_LIBRARIES)
-        message(FATAL_ERROR "No LLVM libs found, but FTL is enabled. Stopping build.")
+        message(FATAL_ERROR "No LLVM libs found, but LLVM disassembler is enabled. Stopping build.")
     endif ()
 
     WEBKIT_WRAP_SOURCELIST(${llvmForJSC_SOURCES})
@@ -1416,7 +1416,7 @@
     install(TARGETS _javascript_Core DESTINATION "${LIB_INSTALL_DIR}")
 endif ()
 
-if (ENABLE_FTL_JIT)
+if (USE_LLVM_DISASSEMBLER)
     add_dependencies(_javascript_Core llvmForJSC)
 endif ()
 

Modified: trunk/Source/_javascript_Core/ChangeLog (196076 => 196077)


--- trunk/Source/_javascript_Core/ChangeLog	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-02-03 21:21:46 UTC (rev 196077)
@@ -1,3 +1,23 @@
+2016-02-03  Michael Catanzaro  <[email protected]>
+
+        [GTK][EFL] Switch FTL to B3
+        https://bugs.webkit.org/show_bug.cgi?id=153478
+
+        Reviewed by Csaba Osztrogonác.
+
+        Conditionalize code to make it possible to build FTL completely without LLVM.
+
+        * CMakeLists.txt:
+        * dfg/DFGCommon.h:
+        * dfg/DFGPlan.cpp:
+        (JSC::DFG::Plan::compileInThreadImpl):
+        * ftl/FTLAbbreviatedTypes.h:
+        * ftl/FTLFail.cpp:
+        (JSC::FTL::fail):
+        * ftl/FTLState.cpp:
+        (JSC::FTL::State::State):
+        (JSC::FTL::State::~State):
+
 2016-02-03  Carlos Garcia Campos  <[email protected]>
 
         Unreviewed. Fix _javascript_Core build with B3 enabled.

Modified: trunk/Source/_javascript_Core/PlatformGTK.cmake (196076 => 196077)


--- trunk/Source/_javascript_Core/PlatformGTK.cmake	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/PlatformGTK.cmake	2016-02-03 21:21:46 UTC (rev 196077)
@@ -38,7 +38,7 @@
     )
 endif ()
 
-if (ENABLE_FTL_JIT)
+if (USE_LLVM_DISASSEMBLER)
     set(llvmForJSC_LIBRARIES ${LLVM_LIBRARIES})
     set(llvmForJSC_INSTALL_DIR "${LIB_INSTALL_DIR}/_javascript_coregtk-${WEBKITGTK_API_VERSION}")
 endif ()

Modified: trunk/Source/_javascript_Core/dfg/DFGCommon.h (196076 => 196077)


--- trunk/Source/_javascript_Core/dfg/DFGCommon.h	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/dfg/DFGCommon.h	2016-02-03 21:21:46 UTC (rev 196077)
@@ -37,7 +37,7 @@
 
 // We are in the middle of a transition from LLVM to B3 as the backend for the FTL. This flag will go
 // away once that transition is finished. For now, we enable B3 only on some platforms.
-#if CPU(X86_64) && PLATFORM(MAC) && ENABLE(FTL_JIT)
+#if CPU(X86_64) && ENABLE(FTL_JIT)
 #define FTL_USES_B3 1
 #else
 #define FTL_USES_B3 0

Modified: trunk/Source/_javascript_Core/dfg/DFGPlan.cpp (196076 => 196077)


--- trunk/Source/_javascript_Core/dfg/DFGPlan.cpp	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/dfg/DFGPlan.cpp	2016-02-03 21:21:46 UTC (rev 196077)
@@ -455,15 +455,20 @@
 
         dumpAndVerifyGraph(dfg, "Graph just before FTL lowering:", shouldDumpDisassembly(mode));
         
+#if HAVE(LLVM) && !FTL_USES_B3
         bool haveLLVM;
+#endif
         Safepoint::Result safepointResult;
         {
             GraphSafepoint safepoint(dfg, safepointResult);
+#if HAVE(LLVM) && !FTL_USES_B3
             haveLLVM = initializeLLVM();
+#endif
         }
         if (safepointResult.didGetCancelled())
             return CancelPath;
-        
+
+#if HAVE(LLVM) && !FTL_USES_B3
         if (!haveLLVM) {
             if (Options::ftlCrashesIfCantInitializeLLVM()) {
                 dataLog("LLVM can't be initialized.\n");
@@ -472,6 +477,7 @@
             finalizer = std::make_unique<FailedFinalizer>(*this);
             return FailPath;
         }
+#endif
 
         FTL::State state(dfg);
         FTL::lowerDFGToLLVM(state);

Modified: trunk/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h (196076 => 196077)


--- trunk/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/ftl/FTLAbbreviatedTypes.h	2016-02-03 21:21:46 UTC (rev 196077)
@@ -43,11 +43,20 @@
 typedef B3::BasicBlock* LBasicBlock;
 typedef B3::Type LType;
 typedef B3::Value* LValue;
+
+typedef void* LAtomicOrdering;
+typedef void* LBuilder;
+typedef void* LCallConv;
+typedef void* LContext;
+typedef void* LIntPredicate;
+typedef void* LLinkage;
+typedef void* LModule;
+typedef void* LRealPredicate;
+typedef void* LMemoryBuffer;
 #else
 typedef LLVMBasicBlockRef LBasicBlock;
 typedef LLVMTypeRef LType;
 typedef LLVMValueRef LValue;
-#endif
 
 typedef LLVMAtomicOrdering LAtomicOrdering;
 typedef LLVMBuilderRef LBuilder;
@@ -58,6 +67,7 @@
 typedef LLVMModuleRef LModule;
 typedef LLVMRealPredicate LRealPredicate;
 typedef LLVMMemoryBufferRef LMemoryBuffer;
+#endif
 
 enum SynchronizationScope { SingleThread, CrossThread };
 

Modified: trunk/Source/_javascript_Core/ftl/FTLFail.cpp (196076 => 196077)


--- trunk/Source/_javascript_Core/ftl/FTLFail.cpp	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/ftl/FTLFail.cpp	2016-02-03 21:21:46 UTC (rev 196077)
@@ -40,8 +40,10 @@
 {
     state.graph.m_plan.finalizer = std::make_unique<FailedFinalizer>(state.graph.m_plan);
     
+#if !FTL_USES_B3
     if (state.module)
         llvm->DisposeModule(state.module);
+#endif
 }
 
 } } // namespace JSC::FTL

Modified: trunk/Source/_javascript_Core/ftl/FTLState.cpp (196076 => 196077)


--- trunk/Source/_javascript_Core/ftl/FTLState.cpp	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/_javascript_Core/ftl/FTLState.cpp	2016-02-03 21:21:46 UTC (rev 196077)
@@ -44,7 +44,11 @@
 
 State::State(Graph& graph)
     : graph(graph)
+#if FTL_USES_B3
+    , context(nullptr)
+#else
     , context(llvm->ContextCreate())
+#endif
     , module(0)
     , function(0)
     , generatedFunction(0)
@@ -85,7 +89,9 @@
 
 State::~State()
 {
+#if !FTL_USES_B3
     llvm->ContextDispose(context);
+#endif
 }
 
 void State::dumpState(const char* when)

Modified: trunk/Source/WTF/ChangeLog (196076 => 196077)


--- trunk/Source/WTF/ChangeLog	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/WTF/ChangeLog	2016-02-03 21:21:46 UTC (rev 196077)
@@ -1,3 +1,14 @@
+2016-02-03  Michael Catanzaro  <[email protected]>
+
+        [GTK][EFL] Switch FTL to B3
+        https://bugs.webkit.org/show_bug.cgi?id=153478
+
+        Reviewed by Csaba Osztrogonác.
+
+        Enable B3 by default on all x86.
+
+        * wtf/Platform.h:
+
 2016-02-03  Anders Carlsson  <[email protected]>
 
         Fix BlockPtr's call operator

Modified: trunk/Source/WTF/wtf/Platform.h (196076 => 196077)


--- trunk/Source/WTF/wtf/Platform.h	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/WTF/wtf/Platform.h	2016-02-03 21:21:46 UTC (rev 196077)
@@ -716,10 +716,6 @@
 #define HAVE_LLVM 1
 #endif
 
-#if PLATFORM(GTK) && HAVE(LLVM) && ENABLE(JIT) && !defined(ENABLE_FTL_JIT) && CPU(X86_64)
-#define ENABLE_FTL_JIT 1
-#endif
-
 /* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */
 #if USE(JSVALUE32_64)
 #undef ENABLE_FTL_JIT
@@ -785,9 +781,8 @@
 #define ENABLE_CONCURRENT_JIT 1
 #endif
 
-/* The B3 compiler is an experimental backend that is still in development. We will keep it building
-   on Mac/x86-64 for now, though it is unused except for tests. */
-#if (PLATFORM(MAC) || PLATFORM(IOS)) && (CPU(X86_64) || CPU(ARM64)) && ENABLE(FTL_JIT)
+/* This controls whether B3 is built. It will not be used unless FTL_USES_B3 is enabled. */
+#if (CPU(X86_64) || CPU(ARM64)) && ENABLE(FTL_JIT)
 #define ENABLE_B3_JIT 1
 #endif
 

Modified: trunk/Source/cmake/OptionsEfl.cmake (196076 => 196077)


--- trunk/Source/cmake/OptionsEfl.cmake	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/cmake/OptionsEfl.cmake	2016-02-03 21:21:46 UTC (rev 196077)
@@ -69,12 +69,6 @@
     set(WebKit2_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/eflsymbols.filter")
 endif ()
 
-if (WTF_CPU_X86_64)
-    set(ENABLE_FTL_DEFAULT ON)
-else ()
-    set(ENABLE_FTL_DEFAULT OFF)
-endif ()
-
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_3D_TRANSFORMS PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ALLINONE_BUILD PUBLIC OFF)
@@ -97,7 +91,7 @@
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA PUBLIC OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA_V2 PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILTERS_LEVEL_2 PUBLIC OFF)
-WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${ENABLE_FTL_DEFAULT})
+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${WTF_CPU_X86_64})
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PUBLIC OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD_DEPRECATED PUBLIC ON)
@@ -282,20 +276,15 @@
     find_package(Espeak REQUIRED)
 endif ()
 
-if (ENABLE_FTL_JIT)
-    if (WTF_CPU_X86_64)
-        find_package(LLVM 3.6.0 REQUIRED)
-    elseif (WTF_CPU_ARM64)
-        find_package(LLVM REQUIRED)
-        if (NOT "${LLVM_VERSION}" STREQUAL "3.5.0ftl")
-            message(FATAL_ERROR "FTL JIT is only available on AArch64 architecture with patched LLVM 3.5.0, use Tools/Scripts/update-webkitefl-libs llvm-3.5-for-AArch64 to build it.")
-        endif ()
-    else ()
-        message(FATAL_ERROR "FTL JIT is only available on X86_64 and AArch64 architectures.")
-    endif ()
+if (USE_LLVM_DISASSEMBLER)
+    find_package(LLVM REQUIRED)
     SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
 endif ()
 
+if (ENABLE_FTL_JIT AND NOT WTF_CPU_X86_64 AND NOT DEVELOPER_MODE)
+    message(FATAL_ERROR "FTL JIT is only available on X86_64 architecture.")
+endif ()
+
 if (ENABLE_SUBTLE_CRYPTO)
     find_package(GnuTLS 3.0.0 REQUIRED)
 endif ()

Modified: trunk/Source/cmake/OptionsGTK.cmake (196076 => 196077)


--- trunk/Source/cmake/OptionsGTK.cmake	2016-02-03 21:10:08 UTC (rev 196076)
+++ trunk/Source/cmake/OptionsGTK.cmake	2016-02-03 21:21:46 UTC (rev 196077)
@@ -66,12 +66,6 @@
     set(ENABLE_GLES2_DEFAULT ON)
 endif ()
 
-if (WTF_CPU_X86_64)
-    set(ENABLE_FTL_DEFAULT ON)
-else ()
-    set(ENABLE_FTL_DEFAULT OFF)
-endif ()
-
 # Public options specific to the GTK+ port. Do not add any options here unless
 # there is a strong reason we should support changing the value of the option,
 # and the option is not relevant to any other WebKit ports.
@@ -133,7 +127,6 @@
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCELERATED_2D_CANVAS PUBLIC OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CREDENTIAL_STORAGE PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
-WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${ENABLE_FTL_DEFAULT})
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ICONDATABASE PUBLIC ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_JIT PUBLIC ON)
@@ -153,6 +146,7 @@
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_REGIONS PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_SELECTORS_LEVEL4 PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATABASE_PROCESS PRIVATE ON)
+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PRIVATE ${WTF_CPU_X86_64})
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE OFF)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PRIVATE ON)
 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INDEXED_DATABASE PRIVATE ON)
@@ -234,11 +228,11 @@
     endif ()
 endif ()
 
-if (ENABLE_FTL_JIT)
+if (USE_LLVM_DISASSEMBLER)
     if (WTF_CPU_X86_64)
         find_package(LLVM 3.7)
         if (NOT LLVM_FOUND)
-            message(FATAL_ERROR "LLVM 3.7 is required for ENABLE_FTL_JIT")
+            message(FATAL_ERROR "LLVM 3.7 is required for USE_LLVM_DISASSEMBLER")
         endif ()
         SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
     else ()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to