Changeset 196077 in webkit


Ignore:
Timestamp:
Feb 3, 2016, 1:21:46 PM (10 years ago)
Author:
Michael Catanzaro
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/JavaScriptCore:

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:
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r196020 r196077  
     12016-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>
     2
     3        [GTK][EFL] Switch FTL to B3
     4        https://bugs.webkit.org/show_bug.cgi?id=153478
     5
     6        Reviewed by Csaba Osztrogonác.
     7
     8        * Source/cmake/OptionsEfl.cmake:
     9        * Source/cmake/OptionsGTK.cmake:
     10
    1112016-02-02  Joseph Pecoraro  <pecoraro@apple.com>
    212
  • trunk/Source/JavaScriptCore/CMakeLists.txt

    r196032 r196077  
    992992)
    993993
    994 
    995994if (ENABLE_FTL_JIT)
    996     # Configure llvmForJSC.so
    997     set(llvmForJSC_SOURCES
    998         llvm/library/LLVMAnchor.cpp
    999         llvm/library/LLVMExports.cpp
    1000         llvm/library/LLVMOverrides.cpp
    1001     )
    1002     set(llvmForJSC_INCLUDE_DIRECTORIES
    1003         ${LLVM_INCLUDE_DIRS}
    1004         "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
    1005     )
    1006 
    1007     add_custom_command(
    1008         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
    1009         COMMAND ${CMAKE_COMMAND} -E touch ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
    1010         VERBATIM)
    1011 
    1012     # Added extra items for JavaScriptCore
    1013     list(APPEND JavaScriptCore_SYSTEM_INCLUDE_DIRECTORIES
    1014         ${LLVM_INCLUDE_DIRS}
    1015     )
    1016 
    1017995    list(APPEND JavaScriptCore_SOURCES
    1018996        dfg/DFGToFTLDeferredCompilationCallback.cpp
    1019997        dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp
    1020 
    1021         disassembler/LLVMDisassembler.cpp
    1022         disassembler/X86Disassembler.cpp
    1023998
    1024999        ftl/FTLAbstractHeap.cpp
     
    10721047        ftl/FTLUnwindInfo.cpp
    10731048        ftl/FTLValueRange.cpp
    1074 
     1049    )
     1050endif ()
     1051
     1052if (USE_LLVM_DISASSEMBLER)
     1053    # Configure llvmForJSC.so
     1054    set(llvmForJSC_SOURCES
     1055        llvm/library/LLVMAnchor.cpp
     1056        llvm/library/LLVMExports.cpp
     1057        llvm/library/LLVMOverrides.cpp
     1058    )
     1059    set(llvmForJSC_INCLUDE_DIRECTORIES
     1060        ${LLVM_INCLUDE_DIRS}
     1061        "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
     1062    )
     1063
     1064    add_custom_command(
     1065        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
     1066        COMMAND ${CMAKE_COMMAND} -E touch ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
     1067        VERBATIM)
     1068
     1069    # Added extra items for JavaScriptCore
     1070    list(APPEND JavaScriptCore_SYSTEM_INCLUDE_DIRECTORIES
     1071        ${LLVM_INCLUDE_DIRS}
     1072    )
     1073
     1074    list(APPEND JavaScriptCore_SOURCES
    10751075        llvm/InitializeLLVM.cpp
    10761076        llvm/LLVMAPI.cpp
     
    13671367WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
    13681368
    1369 if (ENABLE_FTL_JIT AND NOT WIN32)
     1369if (USE_LLVM_DISASSEMBLER AND NOT WIN32)
    13701370    if (NOT llvmForJSC_LIBRARIES)
    13711371        set(llvmForJSC_LIBRARIES ${LLVM_STATIC_LIBRARIES})
    13721372    endif ()
    13731373    if (NOT llvmForJSC_LIBRARIES)
    1374         message(FATAL_ERROR "No LLVM libs found, but FTL is enabled. Stopping build.")
     1374        message(FATAL_ERROR "No LLVM libs found, but LLVM disassembler is enabled. Stopping build.")
    13751375    endif ()
    13761376
     
    14171417endif ()
    14181418
    1419 if (ENABLE_FTL_JIT)
     1419if (USE_LLVM_DISASSEMBLER)
    14201420    add_dependencies(JavaScriptCore llvmForJSC)
    14211421endif ()
  • trunk/Source/JavaScriptCore/ChangeLog

    r196057 r196077  
     12016-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>
     2
     3        [GTK][EFL] Switch FTL to B3
     4        https://bugs.webkit.org/show_bug.cgi?id=153478
     5
     6        Reviewed by Csaba Osztrogonác.
     7
     8        Conditionalize code to make it possible to build FTL completely without LLVM.
     9
     10        * CMakeLists.txt:
     11        * dfg/DFGCommon.h:
     12        * dfg/DFGPlan.cpp:
     13        (JSC::DFG::Plan::compileInThreadImpl):
     14        * ftl/FTLAbbreviatedTypes.h:
     15        * ftl/FTLFail.cpp:
     16        (JSC::FTL::fail):
     17        * ftl/FTLState.cpp:
     18        (JSC::FTL::State::State):
     19        (JSC::FTL::State::~State):
     20
    1212016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>
    222
  • trunk/Source/JavaScriptCore/PlatformGTK.cmake

    r195009 r196077  
    3939endif ()
    4040
    41 if (ENABLE_FTL_JIT)
     41if (USE_LLVM_DISASSEMBLER)
    4242    set(llvmForJSC_LIBRARIES ${LLVM_LIBRARIES})
    4343    set(llvmForJSC_INSTALL_DIR "${LIB_INSTALL_DIR}/javascriptcoregtk-${WEBKITGTK_API_VERSION}")
  • trunk/Source/JavaScriptCore/dfg/DFGCommon.h

    r196044 r196077  
    3838// We are in the middle of a transition from LLVM to B3 as the backend for the FTL. This flag will go
    3939// away once that transition is finished. For now, we enable B3 only on some platforms.
    40 #if CPU(X86_64) && PLATFORM(MAC) && ENABLE(FTL_JIT)
     40#if CPU(X86_64) && ENABLE(FTL_JIT)
    4141#define FTL_USES_B3 1
    4242#else
  • trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp

    r192605 r196077  
    456456        dumpAndVerifyGraph(dfg, "Graph just before FTL lowering:", shouldDumpDisassembly(mode));
    457457       
     458#if HAVE(LLVM) && !FTL_USES_B3
    458459        bool haveLLVM;
     460#endif
    459461        Safepoint::Result safepointResult;
    460462        {
    461463            GraphSafepoint safepoint(dfg, safepointResult);
     464#if HAVE(LLVM) && !FTL_USES_B3
    462465            haveLLVM = initializeLLVM();
     466#endif
    463467        }
    464468        if (safepointResult.didGetCancelled())
    465469            return CancelPath;
    466        
     470
     471#if HAVE(LLVM) && !FTL_USES_B3
    467472        if (!haveLLVM) {
    468473            if (Options::ftlCrashesIfCantInitializeLLVM()) {
     
    473478            return FailPath;
    474479        }
     480#endif
    475481
    476482        FTL::State state(dfg);
  • trunk/Source/JavaScriptCore/ftl/FTLAbbreviatedTypes.h

    r192605 r196077  
    4444typedef B3::Type LType;
    4545typedef B3::Value* LValue;
     46
     47typedef void* LAtomicOrdering;
     48typedef void* LBuilder;
     49typedef void* LCallConv;
     50typedef void* LContext;
     51typedef void* LIntPredicate;
     52typedef void* LLinkage;
     53typedef void* LModule;
     54typedef void* LRealPredicate;
     55typedef void* LMemoryBuffer;
    4656#else
    4757typedef LLVMBasicBlockRef LBasicBlock;
    4858typedef LLVMTypeRef LType;
    4959typedef LLVMValueRef LValue;
    50 #endif
    5160
    5261typedef LLVMAtomicOrdering LAtomicOrdering;
     
    5968typedef LLVMRealPredicate LRealPredicate;
    6069typedef LLVMMemoryBufferRef LMemoryBuffer;
     70#endif
    6171
    6272enum SynchronizationScope { SingleThread, CrossThread };
  • trunk/Source/JavaScriptCore/ftl/FTLFail.cpp

    r176779 r196077  
    4141    state.graph.m_plan.finalizer = std::make_unique<FailedFinalizer>(state.graph.m_plan);
    4242   
     43#if !FTL_USES_B3
    4344    if (state.module)
    4445        llvm->DisposeModule(state.module);
     46#endif
    4547}
    4648
  • trunk/Source/JavaScriptCore/ftl/FTLState.cpp

    r195434 r196077  
    4545State::State(Graph& graph)
    4646    : graph(graph)
     47#if FTL_USES_B3
     48    , context(nullptr)
     49#else
    4750    , context(llvm->ContextCreate())
     51#endif
    4852    , module(0)
    4953    , function(0)
     
    8690State::~State()
    8791{
     92#if !FTL_USES_B3
    8893    llvm->ContextDispose(context);
     94#endif
    8995}
    9096
  • trunk/Source/WTF/ChangeLog

    r196071 r196077  
     12016-02-03  Michael Catanzaro  <mcatanzaro@igalia.com>
     2
     3        [GTK][EFL] Switch FTL to B3
     4        https://bugs.webkit.org/show_bug.cgi?id=153478
     5
     6        Reviewed by Csaba Osztrogonác.
     7
     8        Enable B3 by default on all x86.
     9
     10        * wtf/Platform.h:
     11
    1122016-02-03  Anders Carlsson  <andersca@apple.com>
    213
  • trunk/Source/WTF/wtf/Platform.h

    r195968 r196077  
    717717#endif
    718718
    719 #if PLATFORM(GTK) && HAVE(LLVM) && ENABLE(JIT) && !defined(ENABLE_FTL_JIT) && CPU(X86_64)
    720 #define ENABLE_FTL_JIT 1
    721 #endif
    722 
    723719/* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */
    724720#if USE(JSVALUE32_64)
     
    786782#endif
    787783
    788 /* The B3 compiler is an experimental backend that is still in development. We will keep it building
    789    on Mac/x86-64 for now, though it is unused except for tests. */
    790 #if (PLATFORM(MAC) || PLATFORM(IOS)) && (CPU(X86_64) || CPU(ARM64)) && ENABLE(FTL_JIT)
     784/* This controls whether B3 is built. It will not be used unless FTL_USES_B3 is enabled. */
     785#if (CPU(X86_64) || CPU(ARM64)) && ENABLE(FTL_JIT)
    791786#define ENABLE_B3_JIT 1
    792787#endif
  • trunk/Source/cmake/OptionsEfl.cmake

    r195675 r196077  
    6868    WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MINIBROWSER PUBLIC OFF)
    6969    set(WebKit2_VERSION_SCRIPT "-Wl,--version-script,${CMAKE_MODULE_PATH}/eflsymbols.filter")
    70 endif ()
    71 
    72 if (WTF_CPU_X86_64)
    73     set(ENABLE_FTL_DEFAULT ON)
    74 else ()
    75     set(ENABLE_FTL_DEFAULT OFF)
    7670endif ()
    7771
     
    9892WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA_V2 PUBLIC ON)
    9993WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILTERS_LEVEL_2 PUBLIC OFF)
    100 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${ENABLE_FTL_DEFAULT})
     94WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${WTF_CPU_X86_64})
    10195WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PUBLIC ON)
    10296WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PUBLIC OFF)
     
    283277endif ()
    284278
    285 if (ENABLE_FTL_JIT)
    286     if (WTF_CPU_X86_64)
    287         find_package(LLVM 3.6.0 REQUIRED)
    288     elseif (WTF_CPU_ARM64)
    289         find_package(LLVM REQUIRED)
    290         if (NOT "${LLVM_VERSION}" STREQUAL "3.5.0ftl")
    291             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.")
    292         endif ()
    293     else ()
    294         message(FATAL_ERROR "FTL JIT is only available on X86_64 and AArch64 architectures.")
    295     endif ()
     279if (USE_LLVM_DISASSEMBLER)
     280    find_package(LLVM REQUIRED)
    296281    SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
     282endif ()
     283
     284if (ENABLE_FTL_JIT AND NOT WTF_CPU_X86_64 AND NOT DEVELOPER_MODE)
     285    message(FATAL_ERROR "FTL JIT is only available on X86_64 architecture.")
    297286endif ()
    298287
  • trunk/Source/cmake/OptionsGTK.cmake

    r195675 r196077  
    6767endif ()
    6868
    69 if (WTF_CPU_X86_64)
    70     set(ENABLE_FTL_DEFAULT ON)
    71 else ()
    72     set(ENABLE_FTL_DEFAULT OFF)
    73 endif ()
    74 
    7569# Public options specific to the GTK+ port. Do not add any options here unless
    7670# there is a strong reason we should support changing the value of the option,
     
    134128WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CREDENTIAL_STORAGE PUBLIC ON)
    135129WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
    136 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC ${ENABLE_FTL_DEFAULT})
    137130WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC ON)
    138131WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ICONDATABASE PUBLIC ON)
     
    154147WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_SELECTORS_LEVEL4 PRIVATE ON)
    155148WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATABASE_PROCESS PRIVATE ON)
     149WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PRIVATE ${WTF_CPU_X86_64})
    156150WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE OFF)
    157151WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PRIVATE ON)
     
    235229endif ()
    236230
    237 if (ENABLE_FTL_JIT)
     231if (USE_LLVM_DISASSEMBLER)
    238232    if (WTF_CPU_X86_64)
    239233        find_package(LLVM 3.7)
    240234        if (NOT LLVM_FOUND)
    241             message(FATAL_ERROR "LLVM 3.7 is required for ENABLE_FTL_JIT")
     235            message(FATAL_ERROR "LLVM 3.7 is required for USE_LLVM_DISASSEMBLER")
    242236        endif ()
    243237        SET_AND_EXPOSE_TO_BUILD(HAVE_LLVM TRUE)
Note: See TracChangeset for help on using the changeset viewer.