Skip to content

Commit 68c4a50

Browse files
author
Mark Lam
committed
Rolling out r251226: Causes a build speed regression.
https://bugs.webkit.org/show_bug.cgi?id=203219 Not reviewed. Apparently, compilers aren't very fast at compiling constexpr function invocations. Rolling this out while I rework the patch to not have this build speed regression. * API/glib/JSCOptions.cpp: (jscOptionsSetValue): (jscOptionsGetValue): (jsc_options_foreach): (jsc_options_get_option_group): * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * Sources.txt: * runtime/JSCConfig.h: * runtime/OptionEntry.h: Copied from Source/JavaScriptCore/runtime/OptionEntry.h. * runtime/Options.cpp: (JSC::Options::isAvailable): (JSC::overrideOptionWithHeuristic): (JSC::scaleJITPolicy): (JSC::recomputeDependentOptions): (JSC::Options::initialize): (JSC::Options::setOptionWithoutAlias): (JSC::Options::dumpAllOptions): (JSC::Options::dumpOption): (JSC::Option::dump const): (JSC::Option::operator== const): (JSC::optionTypeSpecificIndex): Deleted. (JSC::Option::Option): Deleted. (JSC::Option::defaultOption const): Deleted. * runtime/Options.h: (JSC::Option::Option): (JSC::Option::id const): (JSC::Option::name const): (JSC::Option::description const): (JSC::Option::type const): (JSC::Option::availability const): (JSC::Option::isOverridden const): (JSC::Option::defaultOption const): (JSC::Option::boolVal): (JSC::Option::unsignedVal): (JSC::Option::doubleVal): (JSC::Option::int32Val): (JSC::Option::optionRangeVal): (JSC::Option::optionStringVal): (JSC::Option::gcLogLevelVal): (JSC::Option::idIndex const): Deleted. (JSC::optionTypeSpecificIndex): Deleted. * runtime/OptionsList.h: (JSC::OptionRange::operator= ): Deleted. (JSC::OptionRange::rangeString const): Deleted. (JSC::countNumberOfJSCOptionsOfType): Deleted. Canonical link: https://commits.webkit.org/216637@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251400 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent a811781 commit 68c4a50

10 files changed

Lines changed: 344 additions & 345 deletions

File tree

‎Source/JavaScriptCore/API/glib/JSCOptions.cpp‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static gboolean jscOptionsSetValue(const char* option, const GValue* value)
168168
{
169169
#define SET_OPTION_VALUE(type_, name_, defaultValue_, availability_, description_) \
170170
if (!g_strcmp0(#name_, option)) { \
171-
OptionTypes::type_ valueToSet; \
171+
OptionEntry::type_ valueToSet; \
172172
if (!valueFromGValue(value, valueToSet)) \
173173
return FALSE; \
174174
Options::name_() = valueToSet; \
@@ -186,7 +186,7 @@ static gboolean jscOptionsGetValue(const char* option, GValue* value)
186186
{
187187
#define GET_OPTION_VALUE(type_, name_, defaultValue_, availability_, description_) \
188188
if (!g_strcmp0(#name_, option)) { \
189-
OptionTypes::type_ valueToGet = Options::name_(); \
189+
OptionEntry::type_ valueToGet = Options::name_(); \
190190
valueToGValue(valueToGet, value); \
191191
return TRUE; \
192192
}
@@ -616,8 +616,8 @@ void jsc_options_foreach(JSCOptionsFunc function, gpointer userData)
616616

617617
#define VISIT_OPTION(type_, name_, defaultValue_, availability_, description_) \
618618
if (Options::Availability::availability_ == Options::Availability::Normal \
619-
|| Options::isAvailable(OptionID::name_, Options::Availability::availability_)) { \
620-
OptionTypes::type_ defaultValue { }; \
619+
|| Options::isAvailable(Options::name_##ID, Options::Availability::availability_)) { \
620+
OptionEntry::type_ defaultValue { }; \
621621
auto optionType = jscOptionsType(defaultValue); \
622622
if (function (#name_, optionType, description_, userData)) \
623623
return; \
@@ -666,7 +666,7 @@ GOptionGroup* jsc_options_get_option_group(void)
666666
GArray* entries = g_array_new(TRUE, TRUE, sizeof(GOptionEntry));
667667
#define REGISTER_OPTION(type_, name_, defaultValue_, availability_, description_) \
668668
if (Options::Availability::availability_ == Options::Availability::Normal \
669-
|| Options::isAvailable(OptionID::name_, Options::Availability::availability_)) { \
669+
|| Options::isAvailable(Options::name_##ID, Options::Availability::availability_)) { \
670670
GUniquePtr<char> name(g_strdup_printf("jsc-%s", #name_)); \
671671
entries = g_array_set_size(entries, entries->len + 1); \
672672
GOptionEntry* entry = &g_array_index(entries, GOptionEntry, entries->len - 1); \

‎Source/JavaScriptCore/CMakeLists.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,7 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
920920
runtime/ObjectInitializationScope.h
921921
runtime/ObjectPrototype.h
922922
runtime/Operations.h
923+
runtime/OptionEntry.h
923924
runtime/Options.h
924925
runtime/OptionsList.h
925926
runtime/ParseInt.h

‎Source/JavaScriptCore/ChangeLog‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,60 @@
1+
2019-10-21 Mark Lam <mark.lam@apple.com>
2+
3+
Rolling out r251226: Causes a build speed regression.
4+
https://bugs.webkit.org/show_bug.cgi?id=203219
5+
6+
Not reviewed.
7+
8+
Apparently, compilers aren't very fast at compiling constexpr function invocations.
9+
Rolling this out while I rework the patch to not have this build speed regression.
10+
11+
* API/glib/JSCOptions.cpp:
12+
(jscOptionsSetValue):
13+
(jscOptionsGetValue):
14+
(jsc_options_foreach):
15+
(jsc_options_get_option_group):
16+
* CMakeLists.txt:
17+
* JavaScriptCore.xcodeproj/project.pbxproj:
18+
* Sources.txt:
19+
* runtime/JSCConfig.h:
20+
* runtime/OptionEntry.h: Copied from Source/JavaScriptCore/runtime/OptionEntry.h.
21+
* runtime/Options.cpp:
22+
(JSC::Options::isAvailable):
23+
(JSC::overrideOptionWithHeuristic):
24+
(JSC::scaleJITPolicy):
25+
(JSC::recomputeDependentOptions):
26+
(JSC::Options::initialize):
27+
(JSC::Options::setOptionWithoutAlias):
28+
(JSC::Options::dumpAllOptions):
29+
(JSC::Options::dumpOption):
30+
(JSC::Option::dump const):
31+
(JSC::Option::operator== const):
32+
(JSC::optionTypeSpecificIndex): Deleted.
33+
(JSC::Option::Option): Deleted.
34+
(JSC::Option::defaultOption const): Deleted.
35+
* runtime/Options.h:
36+
(JSC::Option::Option):
37+
(JSC::Option::id const):
38+
(JSC::Option::name const):
39+
(JSC::Option::description const):
40+
(JSC::Option::type const):
41+
(JSC::Option::availability const):
42+
(JSC::Option::isOverridden const):
43+
(JSC::Option::defaultOption const):
44+
(JSC::Option::boolVal):
45+
(JSC::Option::unsignedVal):
46+
(JSC::Option::doubleVal):
47+
(JSC::Option::int32Val):
48+
(JSC::Option::optionRangeVal):
49+
(JSC::Option::optionStringVal):
50+
(JSC::Option::gcLogLevelVal):
51+
(JSC::Option::idIndex const): Deleted.
52+
(JSC::optionTypeSpecificIndex): Deleted.
53+
* runtime/OptionsList.h:
54+
(JSC::OptionRange::operator= ): Deleted.
55+
(JSC::OptionRange::rangeString const): Deleted.
56+
(JSC::countNumberOfJSCOptionsOfType): Deleted.
57+
158
2019-10-21 Mark Lam <mark.lam@apple.com>
259

360
Fix issues when setting public length on ArrayWithContiguous type butterflies.

‎Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1864,7 +1864,6 @@
18641864
FE1BD0211E72027900134BC9 /* CellProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1BD0201E72027000134BC9 /* CellProfile.h */; };
18651865
FE1BD0251E72053800134BC9 /* HeapVerifier.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1BD0231E72052F00134BC9 /* HeapVerifier.h */; };
18661866
FE1C0FFD1B193E9800B53FCA /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1C0FFC1B193E9800B53FCA /* Exception.h */; settings = {ATTRIBUTES = (Private, ); }; };
1867-
FE1D6D4523580E1F007A5C26 /* Options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FE228EA1436AB2300196C48 /* Options.cpp */; };
18681867
FE1E2C3F2240DD5800F6B729 /* MacroAssemblerARM64E.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1E2C3E2240D30B00F6B729 /* MacroAssemblerARM64E.h */; settings = {ATTRIBUTES = (Private, ); }; };
18691868
FE1E2C402240DD6200F6B729 /* ARM64EAssembler.h in Headers */ = {isa = PBXBuildFile; fileRef = FE1E2C3D2240D2F600F6B729 /* ARM64EAssembler.h */; settings = {ATTRIBUTES = (Private, ); }; };
18701869
FE20CE9E15F04A9500DF3430 /* LLIntCLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = FE20CE9C15F04A9500DF3430 /* LLIntCLoop.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -1873,6 +1872,7 @@
18731872
FE3022D71E42857300BAC493 /* VMInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3022D51E42856700BAC493 /* VMInspector.h */; };
18741873
FE318FE01CAC982F00DFCC54 /* ECMAScriptSpecInternalFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = FE318FDE1CAC8C5300DFCC54 /* ECMAScriptSpecInternalFunctions.h */; };
18751874
FE3422121D6B81C30032BE88 /* ThrowScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3422111D6B818C0032BE88 /* ThrowScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
1875+
FE3842322324D51B009DD445 /* OptionEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3842302324D51A009DD445 /* OptionEntry.h */; settings = {ATTRIBUTES = (Private, ); }; };
18761876
FE3842332324D51B009DD445 /* OptionsList.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3842312324D51B009DD445 /* OptionsList.h */; settings = {ATTRIBUTES = (Private, ); }; };
18771877
FE384EE61ADDB7AD0055DE2C /* JSDollarVM.h in Headers */ = {isa = PBXBuildFile; fileRef = FE384EE21ADDB7AD0055DE2C /* JSDollarVM.h */; settings = {ATTRIBUTES = (Private, ); }; };
18781878
FE3A06A61C10B72D00390FDD /* JITBitOrGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3A06A41C10B70800390FDD /* JITBitOrGenerator.h */; };
@@ -5073,6 +5073,7 @@
50735073
FE35C2FA21B1E6C7000F4CA8 /* Options.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = Options.rb; sourceTree = "<group>"; };
50745074
FE35C2FB21B1E6C7000F4CA8 /* OpcodeGroup.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = OpcodeGroup.rb; sourceTree = "<group>"; };
50755075
FE35C2FC21B1E6C7000F4CA8 /* Metadata.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = Metadata.rb; sourceTree = "<group>"; };
5076+
FE3842302324D51A009DD445 /* OptionEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionEntry.h; sourceTree = "<group>"; };
50765077
FE3842312324D51B009DD445 /* OptionsList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsList.h; sourceTree = "<group>"; };
50775078
FE384EE11ADDB7AD0055DE2C /* JSDollarVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDollarVM.cpp; sourceTree = "<group>"; };
50785079
FE384EE21ADDB7AD0055DE2C /* JSDollarVM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDollarVM.h; sourceTree = "<group>"; };
@@ -7381,6 +7382,7 @@
73817382
E39EEAF22281244C008474F4 /* ObjectToStringAdaptiveStructureWatchpoint.h */,
73827383
F692A8770255597D01FF60F7 /* Operations.cpp */,
73837384
F692A8780255597D01FF60F7 /* Operations.h */,
7385+
FE3842302324D51A009DD445 /* OptionEntry.h */,
73847386
0FE228EA1436AB2300196C48 /* Options.cpp */,
73857387
0FE228EB1436AB2300196C48 /* Options.h */,
73867388
FE3842312324D51B009DD445 /* OptionsList.h */,
@@ -9903,6 +9905,7 @@
99039905
0F2BDC2C151FDE9100CD8910 /* Operands.h in Headers */,
99049906
A70447EA17A0BD4600F5898E /* OperandsInlines.h in Headers */,
99059907
BC18C4480E16F5CD00B34460 /* Operations.h in Headers */,
9908+
FE3842322324D51B009DD445 /* OptionEntry.h in Headers */,
99069909
0FE228ED1436AB2700196C48 /* Options.h in Headers */,
99079910
FE3842332324D51B009DD445 /* OptionsList.h in Headers */,
99089911
E356987222841187008CDCCB /* PackedCellPtr.h in Headers */,
@@ -11131,7 +11134,6 @@
1113111134
536B314A1F71C5990037FC33 /* UnifiedSource87.cpp in Sources */,
1113211135
536B315C1F71C5990037FC33 /* UnifiedSource88.cpp in Sources */,
1113311136
536B31621F71C5990037FC33 /* UnifiedSource89.cpp in Sources */,
11134-
FE1D6D4523580E1F007A5C26 /* Options.cpp in Sources */,
1113511137
536B31421F71C5990037FC33 /* UnifiedSource90.cpp in Sources */,
1113611138
536B31491F71C5990037FC33 /* UnifiedSource91.cpp in Sources */,
1113711139
536B31521F71C5990037FC33 /* UnifiedSource92.cpp in Sources */,

‎Source/JavaScriptCore/Sources.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,7 @@ runtime/ObjectInitializationScope.cpp
904904
runtime/ObjectPrototype.cpp
905905
runtime/ObjectToStringAdaptiveStructureWatchpoint.cpp
906906
runtime/Operations.cpp
907-
runtime/Options.cpp @no-unify
907+
runtime/Options.cpp
908908
runtime/ProgramExecutable.cpp
909909
runtime/PromiseDeferredTimer.cpp
910910
runtime/PropertyDescriptor.cpp

‎Source/JavaScriptCore/runtime/JSCConfig.h‎

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#pragma once
2727

28+
#include "OptionEntry.h"
2829
#include "OptionsList.h"
2930
#include <wtf/StdLibExtras.h>
3031

@@ -35,12 +36,12 @@ class FixedVMPoolExecutableAllocator;
3536

3637
#if CPU(ARM64) || PLATFORM(WATCHOS)
3738
constexpr size_t PageSize = 16 * KB;
38-
constexpr size_t ConfigSizeToProtect = 1 * PageSize;
3939
#else
4040
constexpr size_t PageSize = 4 * KB;
41-
constexpr size_t ConfigSizeToProtect = 1 * PageSize;
4241
#endif
4342

43+
constexpr size_t ConfigSizeToProtect = 32 * KB;
44+
4445
#if ENABLE(SEPARATED_WX_HEAP)
4546
using JITWriteSeparateHeapsFunction = void (*)(off_t, const void*, size_t);
4647
#endif
@@ -81,29 +82,8 @@ struct Config {
8182
bool useFastPermisionsJITCopy;
8283
#endif
8384

84-
bool typeBoolOptions[NumberOfBoolOptions];
85-
bool typeBoolDefaultOptions[NumberOfBoolOptions];
86-
87-
GCLogging::Level typeGCLogLevelOptions[NumberOfGCLogLevelOptions];
88-
GCLogging::Level typeGCLogLevelDefaultOptions[NumberOfGCLogLevelOptions];
89-
90-
int32_t typeInt32Options[NumberOfInt32Options];
91-
int32_t typeInt32DefaultOptions[NumberOfInt32Options];
92-
93-
unsigned typeUnsignedOptions[NumberOfUnsignedOptions];
94-
unsigned typeUnsignedDefaultOptions[NumberOfUnsignedOptions];
95-
96-
double typeDoubleOptions[NumberOfDoubleOptions];
97-
double typeDoubleDefaultOptions[NumberOfDoubleOptions];
98-
99-
size_t typeSizeOptions[NumberOfSizeOptions];
100-
size_t typeSizeDefaultOptions[NumberOfSizeOptions];
101-
102-
const char* typeOptionStringOptions[NumberOfOptionStringOptions];
103-
const char* typeOptionStringDefaultOptions[NumberOfOptionStringOptions];
104-
105-
OptionRange typeOptionRangeOptions[NumberOfOptionRangeOptions];
106-
OptionRange typeOptionRangeDefaultOptions[NumberOfOptionRangeOptions];
85+
OptionEntry options[NumberOfOptions];
86+
OptionEntry defaultOptions[NumberOfOptions];
10787
};
10888
char ensureSize[ConfigSizeToProtect];
10989
};
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
* Copyright (C) 2019 Apple Inc. All rights reserved.
3+
*
4+
* Redistribution and use in source and binary forms, with or without
5+
* modification, are permitted provided that the following conditions
6+
* are met:
7+
* 1. Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* 2. Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
*
13+
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21+
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24+
*/
25+
26+
#pragma once
27+
28+
#include "GCLogging.h"
29+
#include <wtf/PrintStream.h>
30+
31+
namespace JSC {
32+
33+
class OptionRange {
34+
private:
35+
enum RangeState { Uninitialized, InitError, Normal, Inverted };
36+
public:
37+
OptionRange& operator= (const int& rhs)
38+
{ // Only needed for initialization
39+
if (!rhs) {
40+
m_state = Uninitialized;
41+
m_rangeString = 0;
42+
m_lowLimit = 0;
43+
m_highLimit = 0;
44+
}
45+
return *this;
46+
}
47+
48+
bool init(const char*);
49+
bool isInRange(unsigned);
50+
const char* rangeString() const { return (m_state > InitError) ? m_rangeString : s_nullRangeStr; }
51+
52+
void dump(PrintStream& out) const;
53+
54+
private:
55+
static const char* const s_nullRangeStr;
56+
57+
RangeState m_state;
58+
const char* m_rangeString;
59+
unsigned m_lowLimit;
60+
unsigned m_highLimit;
61+
};
62+
63+
// For storing for an option value:
64+
union OptionEntry {
65+
using Bool = bool;
66+
using Unsigned = unsigned;
67+
using Double = double;
68+
using Int32 = int32_t;
69+
using Size = size_t;
70+
using OptionRange = JSC::OptionRange;
71+
using OptionString = const char*;
72+
using GCLogLevel = GCLogging::Level;
73+
74+
bool valBool;
75+
unsigned valUnsigned;
76+
double valDouble;
77+
int32_t valInt32;
78+
size_t valSize;
79+
OptionRange valOptionRange;
80+
const char* valOptionString;
81+
GCLogging::Level valGCLogLevel;
82+
};
83+
84+
} // namespace JSC

0 commit comments

Comments
 (0)