[JSC] Optimize layout of RegExp to reduce padding
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 7 Jul 2018 20:29:31 +0000 (20:29 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 7 Jul 2018 20:29:31 +0000 (20:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=187438

Reviewed by Mark Lam.

Reduce the size of RegExp from 168 to 144.

* runtime/RegExp.cpp:
(JSC::RegExp::RegExp):
* runtime/RegExp.h:
* runtime/RegExpKey.h:
* yarr/YarrErrorCode.h:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/RegExp.cpp
Source/JavaScriptCore/runtime/RegExp.h
Source/JavaScriptCore/runtime/RegExpKey.h
Source/JavaScriptCore/yarr/YarrErrorCode.h

index 78897f4..74fb5b0 100644 (file)
@@ -1,5 +1,20 @@
 2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com>
 
+        [JSC] Optimize layout of RegExp to reduce padding
+        https://bugs.webkit.org/show_bug.cgi?id=187438
+
+        Reviewed by Mark Lam.
+
+        Reduce the size of RegExp from 168 to 144.
+
+        * runtime/RegExp.cpp:
+        (JSC::RegExp::RegExp):
+        * runtime/RegExp.h:
+        * runtime/RegExpKey.h:
+        * yarr/YarrErrorCode.h:
+
+2018-07-07  Yusuke Suzuki  <utatane.tea@gmail.com>
+
         [JSC] Optimize layout of ValueProfile to reduce padding
         https://bugs.webkit.org/show_bug.cgi?id=187439
 
index 4f20be0..63a2b51 100644 (file)
@@ -211,7 +211,6 @@ void RegExpFunctionalTestCollector::outputEscapedString(const String& s, bool es
 
 RegExp::RegExp(VM& vm, const String& patternString, RegExpFlags flags)
     : JSCell(vm, vm.regExpStructure.get())
-    , m_state(NotCompiled)
     , m_patternString(patternString)
     , m_flags(flags)
 {
index b6c25ab..60d7ff2 100644 (file)
@@ -132,7 +132,7 @@ private:
 
     static RegExp* createWithoutCaching(VM&, const String&, RegExpFlags);
 
-    enum RegExpState {
+    enum RegExpState : uint8_t {
         ParseError,
         JITCode,
         ByteCode,
@@ -151,13 +151,15 @@ private:
     void matchCompareWithInterpreter(const String&, int startOffset, int* offsetVector, int jitResult);
 #endif
 
-    RegExpState m_state { NotCompiled };
     String m_patternString;
+    RegExpState m_state { NotCompiled };
     RegExpFlags m_flags;
+    ConcurrentJSLock m_lock;
     Yarr::ErrorCode m_constructionErrorCode { Yarr::ErrorCode::NoError };
     unsigned m_numSubpatterns { 0 };
     Vector<String> m_captureGroupNames;
     HashMap<String, unsigned> m_namedGroupToParenIndex;
+    std::unique_ptr<Yarr::BytecodePattern> m_regExpBytecode;
 #if ENABLE(REGEXP_TRACING)
     double m_rtMatchOnlyTotalSubjectStringLen { 0.0 };
     double m_rtMatchTotalSubjectStringLen { 0.0 };
@@ -166,12 +168,10 @@ private:
     unsigned m_rtMatchCallCount { 0 };
     unsigned m_rtMatchFoundCount { 0 };
 #endif
-    ConcurrentJSLock m_lock;
 
 #if ENABLE(YARR_JIT)
     Yarr::YarrCodeBlock m_regExpJITCode;
 #endif
-    std::unique_ptr<Yarr::BytecodePattern> m_regExpBytecode;
 };
 
 } // namespace JSC
index 79b652f..d01e40a 100644 (file)
@@ -32,7 +32,7 @@
 
 namespace JSC {
 
-enum RegExpFlags {
+enum RegExpFlags : int8_t {
     NoFlags = 0,
     FlagGlobal = 1,
     FlagIgnoreCase = 2,
index 344b4be..48f2bb7 100644 (file)
@@ -32,7 +32,7 @@ class JSObject;
 
 namespace Yarr {
 
-enum class ErrorCode : unsigned {
+enum class ErrorCode : uint8_t {
     NoError = 0,
     PatternTooLarge,
     QuantifierOutOfOrder,