MSVC __forceinline slows down JSC release build fivefold after r229391
authorross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Mar 2018 02:47:34 +0000 (02:47 +0000)
committerross.kirsling@sony.com <ross.kirsling@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Mar 2018 02:47:34 +0000 (02:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=184062

Reviewed by Alex Christensen.

Source/JavaScriptCore:

* jit/CCallHelpers.h:
(JSC::CCallHelpers::marshallArgumentRegister):
Exempt MSVC from a single forced inline used within recursive templates.

Source/WebCore:

* platform/graphics/FormatConverter.cpp:
Factor ALWAYS_INLINE_EXCEPT_MSVC out to WTF.

Source/WTF:

* wtf/Compiler.h:
Add ALWAYS_INLINE_EXCEPT_MSVC to support MSVC optimizer sensitivities.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230091 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/jit/CCallHelpers.h
Source/WTF/ChangeLog
Source/WTF/wtf/Compiler.h
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/FormatConverter.cpp

index 4db34b4..f652384 100644 (file)
@@ -1,3 +1,14 @@
+2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>
+
+        MSVC __forceinline slows down JSC release build fivefold after r229391
+        https://bugs.webkit.org/show_bug.cgi?id=184062
+
+        Reviewed by Alex Christensen.
+
+        * jit/CCallHelpers.h:
+        (JSC::CCallHelpers::marshallArgumentRegister):
+        Exempt MSVC from a single forced inline used within recursive templates.
+
 2018-03-29  Keith Miller  <keith_miller@apple.com>
 
         ArrayMode should not try to get the DFG to think it can convert TypedArrays
index d8d7b3a..cb86ee8 100644 (file)
@@ -295,8 +295,9 @@ private:
 
 #if USE(JSVALUE64)
 
+    // Avoid MSVC optimization time explosion associated with __forceinline in recursive templates.
     template<typename OperationType, unsigned numGPRArgs, unsigned numGPRSources, unsigned numFPRArgs, unsigned numFPRSources, unsigned extraPoke, typename RegType, typename... Args>
-    ALWAYS_INLINE void marshallArgumentRegister(ArgCollection<numGPRArgs, numGPRSources, numFPRArgs, numFPRSources, extraPoke> argSourceRegs, RegType arg, Args... args)
+    ALWAYS_INLINE_EXCEPT_MSVC void marshallArgumentRegister(ArgCollection<numGPRArgs, numGPRSources, numFPRArgs, numFPRSources, extraPoke> argSourceRegs, RegType arg, Args... args)
     {
         using InfoType = InfoTypeForReg<RegType>;
         unsigned numArgRegisters = InfoType::numberOfArgumentRegisters;
index 1792cb4..3a2f577 100644 (file)
@@ -1,3 +1,13 @@
+2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>
+
+        MSVC __forceinline slows down JSC release build fivefold after r229391
+        https://bugs.webkit.org/show_bug.cgi?id=184062
+
+        Reviewed by Alex Christensen.
+
+        * wtf/Compiler.h:
+        Add ALWAYS_INLINE_EXCEPT_MSVC to support MSVC optimizer sensitivities.
+
 2018-03-29  JF Bastien  <jfbastien@apple.com>
 
         Remove WTF_EXPORT_STRING_API
index c10d79c..33b8038 100644 (file)
 #define ALWAYS_INLINE inline
 #endif
 
+#if COMPILER(MSVC)
+#define ALWAYS_INLINE_EXCEPT_MSVC inline
+#else
+#define ALWAYS_INLINE_EXCEPT_MSVC ALWAYS_INLINE
+#endif
+
 /* WTF_EXTERN_C_{BEGIN, END} */
 
 #ifdef __cplusplus
index 2c656ed..9611ff3 100644 (file)
@@ -1,3 +1,13 @@
+2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>
+
+        MSVC __forceinline slows down JSC release build fivefold after r229391
+        https://bugs.webkit.org/show_bug.cgi?id=184062
+
+        Reviewed by Alex Christensen.
+
+        * platform/graphics/FormatConverter.cpp:
+        Factor ALWAYS_INLINE_EXCEPT_MSVC out to WTF.
+
 2018-03-29  Ryan Haddad  <ryanhaddad@apple.com>
 
         Unreviewed, rolling out r230087.
index 7f02637..3fb9a7e 100644 (file)
 #include "GraphicsContext3DNEON.h"
 #endif
 
-// Visual Studio crashes with a C1063 Fatal Error if everything is inlined.
-#if COMPILER(MSVC)
-#define ALWAYS_INLINE_EXCEPT_MSVC
-#else
-#define ALWAYS_INLINE_EXCEPT_MSVC ALWAYS_INLINE
-#endif
-
 namespace WebCore {
 
 
@@ -1205,6 +1198,7 @@ ALWAYS_INLINE void FormatConverter::convert(GraphicsContext3D::AlphaOp alphaOp)
 #undef FORMATCONVERTER_CASE_ALPHAOP
 }
 
+// Visual Studio crashes with a C1063 Fatal Error if everything is inlined.
 template<GraphicsContext3D::DataFormat SrcFormat, GraphicsContext3D::DataFormat DstFormat, GraphicsContext3D::AlphaOp alphaOp>
 ALWAYS_INLINE_EXCEPT_MSVC void FormatConverter::convert()
 {