Diff
Modified: trunk/JSTests/ChangeLog (223068 => 223069)
--- trunk/JSTests/ChangeLog 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/JSTests/ChangeLog 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,3 +1,21 @@
+2017-10-09 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r223015 and r223025.
+ https://bugs.webkit.org/show_bug.cgi?id=178093
+
+ Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
+ #webkit).
+
+ Reverted changesets:
+
+ "Enable gigacage on iOS"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223015
+
+ "Unreviewed, disable Gigacage on ARM64 Linux"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223025
+
2017-10-09 Ryan Haddad <[email protected]>
Update expectations for test262 tests that pass after r223043.
Deleted: trunk/JSTests/stress/disable-gigacage-arrays.js (223068 => 223069)
--- trunk/JSTests/stress/disable-gigacage-arrays.js 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/JSTests/stress/disable-gigacage-arrays.js 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,24 +0,0 @@
-//@ runNoisyTestWithEnv "disable-gigacage", "GIGACAGE_ENABLED=0"
-
-(function() {
- function foo(array, i)
- {
- return array[i];
- }
-
- noInline(foo);
-
- var array = new Array(1000);
- for (var i = 0; i < array.length; ++i)
- array[i] = 5 - i;
- for (var i = 0; i < 1000; ++i) {
- var result = 0;
- var expectedResult = 0;
- for (var j = 0; j < array.length; ++j) {
- result += foo(array, j);
- expectedResult += 5 - j;
- }
- if (result != expectedResult)
- throw new Error("Bad result: " + result);
- }
-})();
Deleted: trunk/JSTests/stress/disable-gigacage-strings.js (223068 => 223069)
--- trunk/JSTests/stress/disable-gigacage-strings.js 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/JSTests/stress/disable-gigacage-strings.js 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,25 +0,0 @@
-//@ runNoisyTestWithEnv "disable-gigacage", "GIGACAGE_ENABLED=0"
-
-(function() {
- function foo(array, i)
- {
- return array.charCodeAt(i);
- }
-
- noInline(foo);
-
- var array = "";
- for (var i = 0; i < array.length; ++i)
- array += String.fromCharCode(5 - i);
- for (var i = 0; i < 1000; ++i) {
- var result = 0;
- var expectedResult = 0;
- for (var j = 0; j < array.length; ++j) {
- result += foo(array, j);
- expectedResult += 5 - j;
- }
- if (result != expectedResult)
- throw new Error("Bad result: " + result);
- }
-})();
-
Deleted: trunk/JSTests/stress/disable-gigacage-typed-arrays.js (223068 => 223069)
--- trunk/JSTests/stress/disable-gigacage-typed-arrays.js 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/JSTests/stress/disable-gigacage-typed-arrays.js 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,25 +0,0 @@
-//@ runNoisyTestWithEnv "disable-gigacage", "GIGACAGE_ENABLED=0"
-
-(function() {
- function foo(array, i)
- {
- return array[i];
- }
-
- noInline(foo);
-
- var array = new Int32Array(1000);
- for (var i = 0; i < array.length; ++i)
- array[i] = 5 - i;
- for (var i = 0; i < 1000; ++i) {
- var result = 0;
- var expectedResult = 0;
- for (var j = 0; j < array.length; ++j) {
- result += foo(array, j);
- expectedResult += 5 - j;
- }
- if (result != expectedResult)
- throw new Error("Bad result: " + result);
- }
-})();
-
Modified: trunk/Source/_javascript_Core/ChangeLog (223068 => 223069)
--- trunk/Source/_javascript_Core/ChangeLog 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,3 +1,21 @@
+2017-10-09 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r223015 and r223025.
+ https://bugs.webkit.org/show_bug.cgi?id=178093
+
+ Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
+ #webkit).
+
+ Reverted changesets:
+
+ "Enable gigacage on iOS"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223015
+
+ "Unreviewed, disable Gigacage on ARM64 Linux"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223025
+
2017-10-09 Keith Miller <[email protected]>
Unreviewed, sort unified sources again now that they are numbered numerically rather than lexicographically.
Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp (223068 => 223069)
--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -11994,7 +11994,7 @@
LValue caged(Gigacage::Kind kind, LValue ptr)
{
- if (!Gigacage::isEnabled(kind))
+ if (!Gigacage::shouldBeEnabled())
return ptr;
if (kind == Gigacage::Primitive && Gigacage::canPrimitiveGigacageBeDisabled()) {
Modified: trunk/Source/_javascript_Core/jit/AssemblyHelpers.h (223068 => 223069)
--- trunk/Source/_javascript_Core/jit/AssemblyHelpers.h 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/jit/AssemblyHelpers.h 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1314,7 +1314,7 @@
void cage(Gigacage::Kind kind, GPRReg storage)
{
#if GIGACAGE_ENABLED
- if (!Gigacage::isEnabled(kind))
+ if (!Gigacage::shouldBeEnabled())
return;
andPtr(TrustedImmPtr(Gigacage::mask(kind)), storage);
@@ -1328,7 +1328,7 @@
void cageConditionally(Gigacage::Kind kind, GPRReg storage, GPRReg scratch)
{
#if GIGACAGE_ENABLED
- if (!Gigacage::isEnabled(kind))
+ if (!Gigacage::shouldBeEnabled())
return;
if (kind != Gigacage::Primitive || Gigacage::isDisablingPrimitiveGigacageDisabled())
Modified: trunk/Source/_javascript_Core/offlineasm/arm64.rb (223068 => 223069)
--- trunk/Source/_javascript_Core/offlineasm/arm64.rb 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/offlineasm/arm64.rb 2017-10-09 21:17:14 UTC (rev 223069)
@@ -260,31 +260,6 @@
newList
end
-def arm64LowerLabelReferences(list)
- newList = []
- list.each {
- | node |
- if node.is_a? Instruction
- case node.opcode
- when "loadi", "loadis", "loadp", "loadq", "loadb", "loadbs", "loadh", "loadhs"
- labelRef = node.operands[0]
- if labelRef.is_a? LabelReference
- tmp = Tmp.new(node.codeOrigin, :gpr)
- newList << Instruction.new(codeOrigin, "globaladdr", [LabelReference.new(node.codeOrigin, labelRef.label), tmp])
- newList << Instruction.new(codeOrigin, node.opcode, [Address.new(node.codeOrigin, tmp, Immediate.new(node.codeOrigin, labelRef.offset)), node.operands[1]])
- else
- newList << node
- end
- else
- newList << node
- end
- else
- newList << node
- end
- }
- newList
-end
-
# Workaround for Cortex-A53 erratum (835769)
def arm64CortexA53Fix835769(list)
newList = []
@@ -321,7 +296,6 @@
result = riscLowerHardBranchOps64(result)
result = riscLowerShiftOps(result)
result = arm64LowerMalformedLoadStoreAddresses(result)
- result = arm64LowerLabelReferences(result)
result = riscLowerMalformedAddresses(result) {
| node, address |
case node.opcode
@@ -930,15 +904,6 @@
$asm.putStr("#if CPU(ARM64_CORTEXA53)")
$asm.puts "nop"
$asm.putStr("#endif")
- when "globaladdr"
- uid = $asm.newUID
- $asm.puts "L_offlineasm_loh_adrp_#{uid}:"
- $asm.puts "adrp #{operands[1].arm64Operand(:ptr)}, #{operands[0].asmLabel}@GOTPAGE"
- $asm.puts "L_offlineasm_loh_ldr_#{uid}:"
- $asm.puts "ldr #{operands[1].arm64Operand(:ptr)}, [#{operands[1].arm64Operand(:ptr)}, #{operands[0].asmLabel}@GOTPAGEOFF]"
- $asm.deferAction {
- $asm.puts ".loh AdrpLdrGot L_offlineasm_loh_adrp_#{uid}, L_offlineasm_loh_ldr_#{uid}"
- }
else
lowerDefault
end
Modified: trunk/Source/_javascript_Core/offlineasm/asm.rb (223068 => 223069)
--- trunk/Source/_javascript_Core/offlineasm/asm.rb 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/offlineasm/asm.rb 2017-10-09 21:17:14 UTC (rev 223069)
@@ -46,8 +46,6 @@
@codeOrigin = nil
@numLocalLabels = 0
@numGlobalLabels = 0
- @deferredActions = []
- @count = 0
@newlineSpacerState = :none
@lastlabel = ""
@@ -75,23 +73,10 @@
putsProcEndIfNeeded
end
putsLastComment
- @deferredActions.each {
- | action |
- action.call()
- }
@outp.puts "OFFLINE_ASM_END" if !$emitWinAsm
@state = :cpp
end
- def deferAction(&proc)
- @deferredActions << proc
- end
-
- def newUID
- @count += 1
- @count
- end
-
def inAsm
enterAsm
yield
Modified: trunk/Source/_javascript_Core/offlineasm/instructions.rb (223068 => 223069)
--- trunk/Source/_javascript_Core/offlineasm/instructions.rb 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/_javascript_Core/offlineasm/instructions.rb 2017-10-09 21:17:14 UTC (rev 223069)
@@ -267,8 +267,7 @@
ARM64_INSTRUCTIONS =
[
"pcrtoaddr", # Address from PC relative offset - adr instruction
- "nopFixCortexA53Err835769", # nop on Cortex-A53 (nothing otherwise)
- "globaladdr"
+ "nopFixCortexA53Err835769" # nop on Cortex-A53 (nothing otherwise)
]
RISC_INSTRUCTIONS =
Modified: trunk/Source/bmalloc/CMakeLists.txt (223068 => 223069)
--- trunk/Source/bmalloc/CMakeLists.txt 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/CMakeLists.txt 2017-10-09 21:17:14 UTC (rev 223069)
@@ -13,7 +13,6 @@
bmalloc/Environment.cpp
bmalloc/Gigacage.cpp
bmalloc/Heap.cpp
- bmalloc/HeapKind.cpp
bmalloc/LargeMap.cpp
bmalloc/Logging.cpp
bmalloc/ObjectType.cpp
Modified: trunk/Source/bmalloc/ChangeLog (223068 => 223069)
--- trunk/Source/bmalloc/ChangeLog 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/ChangeLog 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,3 +1,21 @@
+2017-10-09 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r223015 and r223025.
+ https://bugs.webkit.org/show_bug.cgi?id=178093
+
+ Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
+ #webkit).
+
+ Reverted changesets:
+
+ "Enable gigacage on iOS"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223015
+
+ "Unreviewed, disable Gigacage on ARM64 Linux"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223025
+
2017-10-07 Yusuke Suzuki <[email protected]>
Unreviewed, disable Gigacage on ARM64 Linux
Modified: trunk/Source/bmalloc/bmalloc/Cache.cpp (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Cache.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Cache.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -35,8 +35,6 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return;
- if (!isActiveHeapKind(heapKind))
- return;
caches->at(heapKind).allocator().scavenge();
caches->at(heapKind).deallocator().scavenge();
@@ -50,27 +48,27 @@
BNO_INLINE void* Cache::tryAllocateSlowCaseNullCache(HeapKind heapKind, size_t size)
{
- return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().tryAllocate(size);
+ return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(heapKind).allocator().tryAllocate(size);
}
BNO_INLINE void* Cache::allocateSlowCaseNullCache(HeapKind heapKind, size_t size)
{
- return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().allocate(size);
+ return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(heapKind).allocator().allocate(size);
}
BNO_INLINE void* Cache::allocateSlowCaseNullCache(HeapKind heapKind, size_t alignment, size_t size)
{
- return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().allocate(alignment, size);
+ return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(heapKind).allocator().allocate(alignment, size);
}
BNO_INLINE void Cache::deallocateSlowCaseNullCache(HeapKind heapKind, void* object)
{
- PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).deallocator().deallocate(object);
+ PerThread<PerHeapKind<Cache>>::getSlowCase()->at(heapKind).deallocator().deallocate(object);
}
BNO_INLINE void* Cache::reallocateSlowCaseNullCache(HeapKind heapKind, void* object, size_t newSize)
{
- return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(mapToActiveHeapKind(heapKind)).allocator().reallocate(object, newSize);
+ return PerThread<PerHeapKind<Cache>>::getSlowCase()->at(heapKind).allocator().reallocate(object, newSize);
}
} // namespace bmalloc
Modified: trunk/Source/bmalloc/bmalloc/Cache.h (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Cache.h 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Cache.h 2017-10-09 21:17:14 UTC (rev 223069)
@@ -68,7 +68,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return tryAllocateSlowCaseNullCache(heapKind, size);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().tryAllocate(size);
+ return caches->at(heapKind).allocator().tryAllocate(size);
}
inline void* Cache::allocate(HeapKind heapKind, size_t size)
@@ -76,7 +76,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return allocateSlowCaseNullCache(heapKind, size);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().allocate(size);
+ return caches->at(heapKind).allocator().allocate(size);
}
inline void* Cache::tryAllocate(HeapKind heapKind, size_t alignment, size_t size)
@@ -84,7 +84,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return allocateSlowCaseNullCache(heapKind, alignment, size);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().tryAllocate(alignment, size);
+ return caches->at(heapKind).allocator().tryAllocate(alignment, size);
}
inline void* Cache::allocate(HeapKind heapKind, size_t alignment, size_t size)
@@ -92,7 +92,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return allocateSlowCaseNullCache(heapKind, alignment, size);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().allocate(alignment, size);
+ return caches->at(heapKind).allocator().allocate(alignment, size);
}
inline void Cache::deallocate(HeapKind heapKind, void* object)
@@ -100,7 +100,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return deallocateSlowCaseNullCache(heapKind, object);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).deallocator().deallocate(object);
+ return caches->at(heapKind).deallocator().deallocate(object);
}
inline void* Cache::reallocate(HeapKind heapKind, void* object, size_t newSize)
@@ -108,7 +108,7 @@
PerHeapKind<Cache>* caches = PerThread<PerHeapKind<Cache>>::getFastCase();
if (!caches)
return reallocateSlowCaseNullCache(heapKind, object, newSize);
- return caches->at(mapToActiveHeapKindAfterEnsuringGigacage(heapKind)).allocator().reallocate(object, newSize);
+ return caches->at(heapKind).allocator().reallocate(object, newSize);
}
} // namespace bmalloc
Modified: trunk/Source/bmalloc/bmalloc/Gigacage.cpp (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Gigacage.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Gigacage.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -33,21 +33,6 @@
#include <cstdio>
#include <mutex>
-#if BCPU(ARM64)
-// FIXME: There is no good reason for ARM64 to be special.
-// https://bugs.webkit.org/show_bug.cgi?id=177605
-#define PRIMITIVE_GIGACAGE_RUNWAY 0
-#else
-// FIXME: Consider making this 32GB, in case unsigned 32-bit indices find their way into indexed accesses.
-// https://bugs.webkit.org/show_bug.cgi?id=175062
-#define PRIMITIVE_GIGACAGE_RUNWAY (16llu * 1024 * 1024 * 1024)
-#endif
-
-// FIXME: Reconsider this.
-// https://bugs.webkit.org/show_bug.cgi?id=175921
-#define JSVALUE_GIGACAGE_RUNWAY 0
-#define STRING_GIGACAGE_RUNWAY 0
-
char g_gigacageBasePtrs[GIGACAGE_BASE_PTRS_SIZE] __attribute__((aligned(GIGACAGE_BASE_PTRS_SIZE)));
using namespace bmalloc;
@@ -54,8 +39,6 @@
namespace Gigacage {
-bool g_wasEnabled;
-
namespace {
bool s_isDisablingPrimitiveGigacageDisabled;
@@ -86,6 +69,8 @@
}
};
+} // anonymous namespce
+
struct Callback {
Callback() { }
@@ -105,8 +90,6 @@
Vector<Callback> callbacks;
};
-} // anonymous namespace
-
void ensureGigacage()
{
#if GIGACAGE_ENABLED
@@ -117,20 +100,12 @@
if (!shouldBeEnabled())
return;
- bool ok = true;
-
forEachKind(
[&] (Kind kind) {
- if (!ok)
- return;
// FIXME: Randomize where this goes.
// https://bugs.webkit.org/show_bug.cgi?id=175245
basePtr(kind) = tryVMAllocate(alignment(kind), totalSize(kind));
if (!basePtr(kind)) {
- if (GIGACAGE_ALLOCATION_CAN_FAIL) {
- ok = false;
- return;
- }
fprintf(stderr, "FATAL: Could not allocate %s gigacage.\n", name(kind));
BCRASH();
}
@@ -138,44 +113,11 @@
vmDeallocatePhysicalPages(basePtr(kind), totalSize(kind));
});
- if (!ok) {
- forEachKind(
- [&] (Kind kind) {
- if (!basePtr(kind))
- return;
-
- vmDeallocate(basePtr(kind), totalSize(kind));
-
- basePtr(kind) = nullptr;
- });
- return;
- }
-
protectGigacageBasePtrs();
- g_wasEnabled = true;
});
#endif // GIGACAGE_ENABLED
}
-size_t runway(Kind kind)
-{
- switch (kind) {
- case Primitive:
- return static_cast<size_t>(PRIMITIVE_GIGACAGE_RUNWAY);
- case JSValue:
- return static_cast<size_t>(JSVALUE_GIGACAGE_RUNWAY);
- case String:
- return static_cast<size_t>(STRING_GIGACAGE_RUNWAY);
- }
- BCRASH();
- return 0;
-}
-
-size_t totalSize(Kind kind)
-{
- return size(kind) + runway(kind);
-}
-
void disablePrimitiveGigacage()
{
ensureGigacage();
@@ -245,27 +187,7 @@
bool shouldBeEnabled()
{
- static std::once_flag onceFlag;
- static bool cached;
- std::call_once(
- onceFlag,
- [] {
- bool result = GIGACAGE_ENABLED && !PerProcess<Environment>::get()->isDebugHeapEnabled();
- if (!result)
- return;
-
- if (char* gigacageEnabled = getenv("GIGACAGE_ENABLED")) {
- if (!strcasecmp(gigacageEnabled, "no") || !strcasecmp(gigacageEnabled, "false") || !strcasecmp(gigacageEnabled, "0")) {
- fprintf(stderr, "Warning: disabling gigacage because GIGACAGE_ENABLED=%s!\n", gigacageEnabled);
- return;
- } else if (strcasecmp(gigacageEnabled, "yes") && strcasecmp(gigacageEnabled, "true") && strcasecmp(gigacageEnabled, "1"))
- fprintf(stderr, "Warning: invalid argument to GIGACAGE_ENABLED: %s\n", gigacageEnabled);
- }
-
- cached = true;
- });
-
- return cached;
+ return GIGACAGE_ENABLED && !PerProcess<Environment>::get()->isDebugHeapEnabled();
}
} // namespace Gigacage
Modified: trunk/Source/bmalloc/bmalloc/Gigacage.h (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Gigacage.h 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Gigacage.h 2017-10-09 21:17:14 UTC (rev 223069)
@@ -32,19 +32,9 @@
#include <cstddef>
#include <inttypes.h>
-#if BCPU(ARM64)
-// FIXME: This can probably be a lot bigger on iOS. I just haven't tried to make it bigger yet.
-// https://bugs.webkit.org/show_bug.cgi?id=177605
-#define PRIMITIVE_GIGACAGE_SIZE 0x40000000llu
-#define JSVALUE_GIGACAGE_SIZE 0x40000000llu
-#define STRING_GIGACAGE_SIZE 0x40000000llu
-#define GIGACAGE_ALLOCATION_CAN_FAIL 1
-#else
#define PRIMITIVE_GIGACAGE_SIZE 0x800000000llu
#define JSVALUE_GIGACAGE_SIZE 0x400000000llu
#define STRING_GIGACAGE_SIZE 0x400000000llu
-#define GIGACAGE_ALLOCATION_CAN_FAIL 0
-#endif
#define GIGACAGE_SIZE_TO_MASK(size) ((size) - 1)
@@ -52,25 +42,27 @@
#define JSVALUE_GIGACAGE_MASK GIGACAGE_SIZE_TO_MASK(JSVALUE_GIGACAGE_SIZE)
#define STRING_GIGACAGE_MASK GIGACAGE_SIZE_TO_MASK(STRING_GIGACAGE_SIZE)
-#if (BOS(DARWIN) && (BCPU(ARM64) || BCPU(X86_64))) || (BOS(LINUX) && BCPU(X86_64))
+// FIXME: Consider making this 32GB, in case unsigned 32-bit indices find their way into indexed accesses.
+// https://bugs.webkit.org/show_bug.cgi?id=175062
+#define PRIMITIVE_GIGACAGE_RUNWAY (16llu * 1024 * 1024 * 1024)
+
+// FIXME: Reconsider this.
+// https://bugs.webkit.org/show_bug.cgi?id=175921
+#define JSVALUE_GIGACAGE_RUNWAY 0
+#define STRING_GIGACAGE_RUNWAY 0
+
+#if (BOS(DARWIN) || BOS(LINUX)) && BCPU(X86_64)
#define GIGACAGE_ENABLED 1
#else
#define GIGACAGE_ENABLED 0
#endif
-#if BCPU(ARM64)
-#define GIGACAGE_BASE_PTRS_SIZE 16384
-#else
-#define GIGACAGE_BASE_PTRS_SIZE 4096
-#endif
+#define GIGACAGE_BASE_PTRS_SIZE 8192
extern "C" BEXPORT char g_gigacageBasePtrs[GIGACAGE_BASE_PTRS_SIZE] __attribute__((aligned(GIGACAGE_BASE_PTRS_SIZE)));
namespace Gigacage {
-extern BEXPORT bool g_wasEnabled;
-BINLINE bool wasEnabled() { return g_wasEnabled; }
-
struct BasePtrs {
void* primitive;
void* jsValue;
@@ -135,11 +127,6 @@
return basePtr(basePtrs(), kind);
}
-BINLINE bool isEnabled(Kind kind)
-{
- return !!basePtr(kind);
-}
-
BINLINE size_t size(Kind kind)
{
switch (kind) {
@@ -164,9 +151,25 @@
return GIGACAGE_SIZE_TO_MASK(size(kind));
}
-size_t runway(Kind kind);
-size_t totalSize(Kind kind);
+BINLINE size_t runway(Kind kind)
+{
+ switch (kind) {
+ case Primitive:
+ return static_cast<size_t>(PRIMITIVE_GIGACAGE_RUNWAY);
+ case JSValue:
+ return static_cast<size_t>(JSVALUE_GIGACAGE_RUNWAY);
+ case String:
+ return static_cast<size_t>(STRING_GIGACAGE_RUNWAY);
+ }
+ BCRASH();
+ return 0;
+}
+BINLINE size_t totalSize(Kind kind)
+{
+ return size(kind) + runway(kind);
+}
+
template<typename Func>
void forEachKind(const Func& func)
{
Modified: trunk/Source/bmalloc/bmalloc/Heap.cpp (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Heap.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Heap.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -177,8 +177,6 @@
void Heap::allocateSmallChunk(std::lock_guard<StaticMutex>& lock, size_t pageClass)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
size_t pageSize = bmalloc::pageSize(pageClass);
Chunk* chunk = [&]() {
@@ -223,8 +221,6 @@
SmallPage* Heap::allocateSmallPage(std::lock_guard<StaticMutex>& lock, size_t sizeClass, LineCache& lineCache)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
if (!lineCache[sizeClass].isEmpty())
return lineCache[sizeClass].popFront();
@@ -304,8 +300,6 @@
BumpAllocator& allocator, BumpRangeCache& rangeCache,
LineCache& lineCache)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
SmallPage* page = allocateSmallPage(lock, sizeClass, lineCache);
SmallLine* lines = page->begin();
BASSERT(page->hasFreeLines(lock));
@@ -368,8 +362,6 @@
BumpAllocator& allocator, BumpRangeCache& rangeCache,
LineCache& lineCache)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
size_t size = allocator.size();
SmallPage* page = allocateSmallPage(lock, sizeClass, lineCache);
BASSERT(page->hasFreeLines(lock));
@@ -422,8 +414,6 @@
LargeRange Heap::splitAndAllocate(LargeRange& range, size_t alignment, size_t size, AllocationKind allocationKind)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
LargeRange prev;
LargeRange next;
@@ -471,8 +461,6 @@
void* Heap::tryAllocateLarge(std::lock_guard<StaticMutex>&, size_t alignment, size_t size, AllocationKind allocationKind)
{
- RELEASE_BASSERT(isActiveHeapKind(m_kind));
-
BASSERT(isPowerOfTwo(alignment));
if (m_debugHeap)
Deleted: trunk/Source/bmalloc/bmalloc/HeapKind.cpp (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/HeapKind.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/HeapKind.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2017 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "HeapKind.h"
-
-namespace bmalloc {
-
-bool isActiveHeapKind(HeapKind kind)
-{
- Gigacage::ensureGigacage();
- return isActiveHeapKindAfterEnsuringGigacage(kind);
-}
-
-HeapKind mapToActiveHeapKind(HeapKind kind)
-{
- Gigacage::ensureGigacage();
- return mapToActiveHeapKindAfterEnsuringGigacage(kind);
-}
-
-} // namespace bmalloc
Modified: trunk/Source/bmalloc/bmalloc/HeapKind.h (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/HeapKind.h 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/HeapKind.h 2017-10-09 21:17:14 UTC (rev 223069)
@@ -85,37 +85,5 @@
return HeapKind::Primary;
}
-BINLINE bool isActiveHeapKindAfterEnsuringGigacage(HeapKind kind)
-{
- switch (kind) {
- case HeapKind::PrimitiveGigacage:
- case HeapKind::JSValueGigacage:
- case HeapKind::StringGigacage:
- if (Gigacage::wasEnabled())
- return true;
- return false;
- default:
- return true;
- }
-}
-
-BEXPORT bool isActiveHeapKind(HeapKind);
-
-BINLINE HeapKind mapToActiveHeapKindAfterEnsuringGigacage(HeapKind kind)
-{
- switch (kind) {
- case HeapKind::PrimitiveGigacage:
- case HeapKind::JSValueGigacage:
- case HeapKind::StringGigacage:
- if (Gigacage::wasEnabled())
- return kind;
- return HeapKind::Primary;
- default:
- return kind;
- }
-}
-
-BEXPORT HeapKind mapToActiveHeapKind(HeapKind);
-
} // namespace bmalloc
Modified: trunk/Source/bmalloc/bmalloc/Scavenger.cpp (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/Scavenger.cpp 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/Scavenger.cpp 2017-10-09 21:17:14 UTC (rev 223069)
@@ -117,11 +117,8 @@
void Scavenger::scavenge()
{
std::lock_guard<StaticMutex> lock(Heap::mutex());
- for (unsigned i = numHeaps; i--;) {
- if (!isActiveHeapKind(static_cast<HeapKind>(i)))
- continue;
+ for (unsigned i = numHeaps; i--;)
PerProcess<PerHeapKind<Heap>>::get()->at(i).scavenge(lock);
- }
}
void Scavenger::threadEntryPoint(Scavenger* scavenger)
Modified: trunk/Source/bmalloc/bmalloc/bmalloc.h (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc/bmalloc.h 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc/bmalloc.h 2017-10-09 21:17:14 UTC (rev 223069)
@@ -68,7 +68,6 @@
// Returns null for failure
inline void* tryLargeMemalignVirtual(size_t alignment, size_t size, HeapKind kind = HeapKind::Primary)
{
- kind = mapToActiveHeapKind(kind);
Heap& heap = PerProcess<PerHeapKind<Heap>>::get()->at(kind);
std::lock_guard<StaticMutex> lock(Heap::mutex());
return heap.allocateLarge(lock, alignment, size, AllocationKind::Virtual);
@@ -81,7 +80,6 @@
inline void freeLargeVirtual(void* object, HeapKind kind = HeapKind::Primary)
{
- kind = mapToActiveHeapKind(kind);
Heap& heap = PerProcess<PerHeapKind<Heap>>::get()->at(kind);
std::lock_guard<StaticMutex> lock(Heap::mutex());
heap.deallocateLarge(lock, object, AllocationKind::Virtual);
@@ -102,7 +100,6 @@
inline bool isEnabled(HeapKind kind = HeapKind::Primary)
{
- kind = mapToActiveHeapKind(kind);
std::unique_lock<StaticMutex> lock(Heap::mutex());
return !PerProcess<PerHeapKind<Heap>>::getFastCase()->at(kind).debugHeap();
}
Modified: trunk/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj (223068 => 223069)
--- trunk/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj 2017-10-09 21:17:14 UTC (rev 223069)
@@ -15,7 +15,6 @@
0F5BF1521F22E1570029D91D /* Scavenger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F5BF1501F22E1570029D91D /* Scavenger.cpp */; };
0F5BF1531F22E1570029D91D /* Scavenger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1511F22E1570029D91D /* Scavenger.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F5BF1731F23C5710029D91D /* BExport.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5BF1721F23C5710029D91D /* BExport.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 0FD557331F7EDB7B00B1F0A3 /* HeapKind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD557321F7EDB7B00B1F0A3 /* HeapKind.cpp */; };
1400274918F89C1300115C97 /* Heap.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DA320C18875B09007269E0 /* Heap.h */; settings = {ATTRIBUTES = (Private, ); }; };
1400274A18F89C2300115C97 /* VMHeap.h in Headers */ = {isa = PBXBuildFile; fileRef = 144F7BFC18BFC517003537F3 /* VMHeap.h */; settings = {ATTRIBUTES = (Private, ); }; };
140FA00319CE429C00FFD3C8 /* BumpRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 140FA00219CE429C00FFD3C8 /* BumpRange.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -91,7 +90,6 @@
0F5BF1501F22E1570029D91D /* Scavenger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Scavenger.cpp; path = bmalloc/Scavenger.cpp; sourceTree = "<group>"; };
0F5BF1511F22E1570029D91D /* Scavenger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Scavenger.h; path = bmalloc/Scavenger.h; sourceTree = "<group>"; };
0F5BF1721F23C5710029D91D /* BExport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BExport.h; path = bmalloc/BExport.h; sourceTree = "<group>"; };
- 0FD557321F7EDB7B00B1F0A3 /* HeapKind.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HeapKind.cpp; path = bmalloc/HeapKind.cpp; sourceTree = "<group>"; };
140FA00219CE429C00FFD3C8 /* BumpRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BumpRange.h; path = bmalloc/BumpRange.h; sourceTree = "<group>"; };
140FA00419CE4B6800FFD3C8 /* LineMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineMetadata.h; path = bmalloc/LineMetadata.h; sourceTree = "<group>"; };
14105E8318E14374003A106E /* ObjectType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ObjectType.cpp; path = bmalloc/ObjectType.cpp; sourceTree = "<group>"; };
@@ -289,7 +287,6 @@
1413E460189DCE1E00546D68 /* BInline.h */,
14C919C818FCC59F0028DB43 /* BPlatform.h */,
14D9DB4517F2447100EAAB79 /* FixedVector.h */,
- 0FD557321F7EDB7B00B1F0A3 /* HeapKind.cpp */,
0F5BF1461F22A8B10029D91D /* HeapKind.h */,
141D9AFF1C8E51C0000ABBA0 /* List.h */,
4426E27E1C838EE0008EB042 /* Logging.cpp */,
@@ -459,7 +456,6 @@
buildActionMask = 2147483647;
files = (
0F5BF1521F22E1570029D91D /* Scavenger.cpp in Sources */,
- 0FD557331F7EDB7B00B1F0A3 /* HeapKind.cpp in Sources */,
14F271C318EA3978008C152F /* Allocator.cpp in Sources */,
6599C5CC1EC3F15900A2F7BB /* AvailableMemory.cpp in Sources */,
14F271C418EA397B008C152F /* Cache.cpp in Sources */,
Modified: trunk/Tools/ChangeLog (223068 => 223069)
--- trunk/Tools/ChangeLog 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Tools/ChangeLog 2017-10-09 21:17:14 UTC (rev 223069)
@@ -1,3 +1,21 @@
+2017-10-09 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r223015 and r223025.
+ https://bugs.webkit.org/show_bug.cgi?id=178093
+
+ Regressed Kraken on iOS by 20% (Requested by keith_mi_ on
+ #webkit).
+
+ Reverted changesets:
+
+ "Enable gigacage on iOS"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223015
+
+ "Unreviewed, disable Gigacage on ARM64 Linux"
+ https://bugs.webkit.org/show_bug.cgi?id=177586
+ http://trac.webkit.org/changeset/223025
+
2017-10-09 Sam Weinig <[email protected]>
Make HashMap::keys() and HashMap::values() work with WTF::map/WTF::copyToVector
Modified: trunk/Tools/Scripts/run-jsc-stress-tests (223068 => 223069)
--- trunk/Tools/Scripts/run-jsc-stress-tests 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Tools/Scripts/run-jsc-stress-tests 2017-10-09 21:17:14 UTC (rev 223069)
@@ -513,7 +513,7 @@
"#{$collectionName}/#{$benchmark}.#{kind}"
end
-def addRunCommand(kind, command, outputHandler, errorHandler, *additionalEnv)
+def addRunCommand(kind, command, outputHandler, errorHandler)
$didAddRunCommand = true
name = baseOutputName(kind)
if $filter and name !~ $filter
@@ -522,7 +522,6 @@
plan = Plan.new(
$benchmarkDirectory, command, "#{$collectionName}/#{$benchmark}", name, outputHandler,
errorHandler)
- plan.additionalEnv.push(*additionalEnv)
if $numChildProcesses > 1 and $runCommandOptions[:isSlow]
$runlist.unshift plan
else
@@ -1308,18 +1307,10 @@
end
end
-def runNoisyTestImpl(kind, options, additionalEnv)
- addRunCommand(kind, [pathToVM.to_s] + BASE_OPTIONS + options + [$benchmark.to_s], noisyOutputHandler, noisyErrorHandler, *additionalEnv)
-end
-
def runNoisyTest(kind, *options)
- runNoisyTestImpl(kind, options, [])
+ addRunCommand(kind, [pathToVM.to_s] + BASE_OPTIONS + options + [$benchmark.to_s], noisyOutputHandler, noisyErrorHandler)
end
-def runNoisyTestWithEnv(kind, *additionalEnv)
- runNoisyTestImpl(kind, [], additionalEnv)
-end
-
def runNoisyTestDefault
runNoisyTest("default", *FTL_OPTIONS)
end
Modified: trunk/Tools/Scripts/webkitruby/jsc-stress-test-writer-default.rb (223068 => 223069)
--- trunk/Tools/Scripts/webkitruby/jsc-stress-test-writer-default.rb 2017-10-09 20:57:57 UTC (rev 223068)
+++ trunk/Tools/Scripts/webkitruby/jsc-stress-test-writer-default.rb 2017-10-09 21:17:14 UTC (rev 223069)
@@ -215,7 +215,7 @@
end
class Plan
- attr_reader :directory, :arguments, :family, :name, :outputHandler, :errorHandler, :additionalEnv
+ attr_reader :directory, :arguments, :family, :name, :outputHandler, :errorHandler
attr_accessor :index
def initialize(directory, arguments, family, name, outputHandler, errorHandler)
@@ -226,7 +226,6 @@
@outputHandler = outputHandler
@errorHandler = errorHandler
@isSlow = !!$runCommandOptions[:isSlow]
- @additionalEnv = []
end
def shellCommand
@@ -234,7 +233,7 @@
# in the subshell when we return we will be in our original directory. This is nice because we don't
# have to bend over backwards to do things relative to the root.
script = "(cd ../#{Shellwords.shellescape(@directory.to_s)} && ("
- ($envVars + additionalEnv).each { |var| script += "export " << var << "; " }
+ $envVars.each { |var| script += "export " << var << "; " }
script += "\"$@\" " + escapeAll(@arguments) + "))"
return script
end