v8/test/cctest
Clemens Backes 392a0251d4 [wasm][debug] Delta-encode the debug side table
For functions with a very large stack, the debug side table repeats a
lot of information: Most values will be spilled to the stack, still
every single entry in the debug side table repeats information about
them (type, stack offset). This leads to the size of the debug side
table to be quadratic in the size of the function.

In the linked bug, the generation of the debug side table took ~400ms,
whereas Liftoff compilation alone just took 16ms.

This CL optimized the debug side table by delta-encoding the entries,
i.e. only storing stack slots that changed. This reduces the size of the
table significantly, at the cost of making lookup slower, since that now
has to search the table backwards for the last entry that had
information about a specific slot. For now, this seems like a good
compromise. If it turns out to be a problem, we could speed up the
lookup by either forcing a full dump of the stack state after N entries,
or by dynamically inserting new entries during lookup, whenever we find
that we had to search backwards more than N entries. That would speed up
subsequent lookups then.

On the reproducer in the linked bug, this change reduces the time to
generate the debug side table from ~400ms to ~120ms.
Before this CL, the debug side table has 13,314 entries with a total of
38,599,606 stack value entries. After this CL, it shrinks to 20,037
stack value entries in the 13,314 entries (average of ~1.5 instead of
~2,899).

R=thibaudm@chromium.org

Bug: chromium:1172299
Change-Id: Ie726bb82d4c6648cc9ebd130115ee7ab3d1d551b
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2676636
Reviewed-by: Thibaud Michaud <thibaudm@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#72558}
2021-02-08 10:56:59 +00:00
..
compiler [compiler][ia32][arm] Fix pushing of arguments 2021-02-03 15:46:32 +00:00
heap [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
interpreter Reland2 [super] Store home object in Context instead of JSFunction 2021-01-29 09:19:23 +00:00
libplatform [cleanup] Remove DISALLOW_COPY_AND_ASSIGN in test/{cctest,fuzzer,inspector} 2020-11-10 01:24:43 +00:00
libsampler [api] Use shorter 8::Local::As<*> casts in more places 2020-11-28 11:04:26 +00:00
parsing [cleanup] Replace all remaining Min/Max uses with std::min/max 2020-11-24 17:32:01 +00:00
torque [torque] Allow returning pairs from builtins 2021-01-19 18:03:12 +00:00
wasm [wasm][debug] Delta-encode the debug side table 2021-02-08 10:56:59 +00:00
assembler-helper-arm.cc [test, arm] Take isolate as argument for AssembleCode 2020-11-18 14:17:05 +00:00
assembler-helper-arm.h [test, arm] Take isolate as argument for AssembleCode 2020-11-18 14:17:05 +00:00
BUILD.gn [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
cctest-utils.h PPC: Update inline asm constraint in cctest-utils 2020-10-15 16:12:03 +00:00
cctest.cc [config] Add V8_NODISCARD for Scope classes 2020-11-26 11:08:45 +00:00
cctest.h [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
cctest.status [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
collector.h Move remaining files in src/ 2019-05-24 18:24:36 +00:00
DEPS Reland "[tracing] Roll perfetto @ 28b633cd" 2019-09-06 13:42:02 +00:00
disasm-regex-helper.cc [turbofan] Improve load poisoning tests. 2019-07-02 17:55:04 +00:00
disasm-regex-helper.h [turbofan] Improve load poisoning tests. 2019-07-02 17:55:04 +00:00
expression-type-collector-macros.h [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
gay-fixed.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
gay-fixed.h Move utility code to src/utils 2019-05-23 14:13:34 +00:00
gay-precision.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
gay-precision.h Move utility code to src/utils 2019-05-23 14:13:34 +00:00
gay-shortest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
gay-shortest.h Move utility code to src/utils 2019-05-23 14:13:34 +00:00
manually-externalized-buffer.h [api] Deprecate [Shared]ArrayBuffer::Externalize/GetContents and constructors 2019-10-29 22:01:54 +00:00
OWNERS Add myself as an owner for debug-helper and v8windbg 2020-09-21 15:19:27 +00:00
print-extension.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
print-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
profiler-extension.cc Reland "[Compile] Ensure we don't access the native context during bytecode finalization." 2018-10-26 22:33:56 +00:00
profiler-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
scope-test-helper.h [parser] Various Scope and Context speedups 2019-01-28 13:06:03 +00:00
setup-isolate-for-tests.cc [interpreter] Always put bytecode handlers in builtins table 2018-09-20 09:58:15 +00:00
setup-isolate-for-tests.h Move initialization code into src/init 2019-05-16 12:36:15 +00:00
test-access-checks.cc Replace CHECK(false) by UNREACHABLE() 2017-12-19 18:58:07 +00:00
test-accessor-assembler.cc [asserts] Make assert scopes LocalHeap friendly 2020-11-20 17:39:14 +00:00
test-accessors.cc [api] Use shorter 8::Local::As<*> casts in more places 2020-11-28 11:04:26 +00:00
test-allocation.cc [zone-compr] Initial support for zone pointer compression 2020-07-24 08:27:21 +00:00
test-api-accessors.cc [Respect] Rename lists 2020-06-22 15:15:31 +00:00
test-api-array-buffer.cc [api] Use shorter 8::Local::As<*> casts in more places 2020-11-28 11:04:26 +00:00
test-api-icu.cc Update to ICU68-1 2020-11-04 19:14:59 +00:00
test-api-interceptors.cc [api] Use shorter 8::Local::As<*> casts in more places 2020-11-28 11:04:26 +00:00
test-api-stack-traces.cc [api] Make ScriptOrigin take isolate as parameter 2021-01-14 23:51:04 +00:00
test-api-typed-array.cc [api] Deprecate [Shared]ArrayBuffer::Externalize/GetContents and constructors 2019-10-29 22:01:54 +00:00
test-api-wasm.cc [wasm-simd] Add use counter for SIMD opcodes 2020-05-08 19:14:00 +00:00
test-api.cc [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
test-api.h [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
test-array-list.cc Move more relevant files to src/objects 2019-05-23 08:52:30 +00:00
test-assembler-arm64.cc [arm64][cfi] Enable sim_abort_on_bad_auth by default. 2021-02-05 10:23:40 +00:00
test-assembler-arm.cc [wasm-simd][arm] Prototype sign select 2020-12-10 01:29:47 +00:00
test-assembler-ia32.cc Reland "[Turboprop] Move dynamic check maps immediate args to deopt exit." 2020-12-16 18:38:52 +00:00
test-assembler-mips64.cc [mips][cleanup] Replace all remaining Min/Max uses with std::min/max 2020-11-26 08:01:15 +00:00
test-assembler-mips.cc [mips][cleanup] Replace all remaining Min/Max uses with std::min/max 2020-11-26 08:01:15 +00:00
test-assembler-ppc.cc Reland "Reland "[deoptimizer] Change deopt entries into builtins"" 2020-10-21 06:01:38 +00:00
test-assembler-s390.cc Reland "Reland "[deoptimizer] Change deopt entries into builtins"" 2020-10-21 06:01:38 +00:00
test-assembler-x64.cc Reland "Reland "[deoptimizer] Change deopt entries into builtins"" 2020-10-21 06:01:38 +00:00
test-atomicops.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-backing-store.cc Reland x6 [arraybuffer] Rearchitect backing store ownership 2019-09-09 13:07:42 +00:00
test-bignum-dtoa.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-bignum.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-bit-vector.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-circular-queue.cc Reland "[d8] Remove maximum workers limitation" 2019-07-30 07:56:17 +00:00
test-code-layout.cc [code] Make metadata offsets relative to metadata section 2020-10-27 10:49:13 +00:00
test-code-pages.cc [TurboFan] Templatize GetBytecodeArray 2020-12-17 16:46:53 +00:00
test-code-stub-assembler.cc [torque] uniform flattening and string access in Torque 2020-12-04 11:29:48 +00:00
test-compiler.cc [nci] Remove --turbo-nci-as-midtier and other flags 2021-02-02 11:28:18 +00:00
test-concurrent-descriptor-array.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-concurrent-feedback-vector.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-concurrent-prototype.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-concurrent-script-context-table.cc Reland "[heap] Introduce LocalIsolate for main thread" 2020-11-19 10:44:43 +00:00
test-concurrent-string.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-concurrent-transition-array.cc Reland "[heap] Introduce LocalIsolate for main thread" 2020-11-19 10:44:43 +00:00
test-constantpool.cc PPC: [cleanup] Replace all remaining Min/Max uses with std::min/max 2020-11-25 08:49:53 +00:00
test-conversions.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-cpu-profiler.cc [nci] Remove --turbo-nci-as-midtier and other flags 2021-02-02 11:28:18 +00:00
test-date.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-debug-helper.cc [v8windbg] Generate debug macros files 2021-01-19 12:07:38 +00:00
test-debug.cc [api] Make ScriptOrigin take isolate as parameter 2021-01-14 23:51:04 +00:00
test-decls.cc [api] Create v8::String::NewFromLiteral that returns Local<String> 2020-03-09 12:02:07 +00:00
test-deoptimization.cc [js-function] Remove deprecated predicates 2020-08-11 11:53:00 +00:00
test-descriptor-array.cc [asserts] Make assert scopes LocalHeap friendly 2020-11-20 17:39:14 +00:00
test-dictionary.cc Disable --stress-concurrent-allocation for tests that change free lists 2020-09-03 11:15:39 +00:00
test-disasm-arm64.cc [wasm-simd][arm64] Prototype prefetch arm64 2020-11-24 02:44:09 +00:00
test-disasm-arm.cc [wasm-simd][arm] Implement saturating rounding multiply high 2021-01-12 02:15:35 +00:00
test-disasm-ia32.cc [wasm-simd][ia32] Implement double precision conversions 2021-02-04 19:26:45 +00:00
test-disasm-mips64.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-disasm-mips.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-disasm-ppc.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-disasm-s390.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-disasm-x64.cc [wasm-simd][x64] Fix encoding of vcvtdq2pd 2021-01-27 22:48:59 +00:00
test-diy-fp.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-double.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-dtoa.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-elements-kind.cc [factory] Remove deprecated JSFunction ctors 2020-11-11 06:12:35 +00:00
test-factory.cc [heap] Make maximum regular code object size a runtime value. 2020-10-16 13:32:13 +00:00
test-fast-dtoa.cc [cleanup] Remove V8_2PART_UINT64_C macro 2020-07-20 11:52:17 +00:00
test-feedback-vector.cc [feedback] Minor name and type changes 2020-11-03 11:50:29 +00:00
test-feedback-vector.h [compiler] Make is_compiled_scope take an explicit Isolate 2020-07-06 15:49:55 +00:00
test-field-type-tracking.cc [test] Cleanup field type tracking cctests 2020-11-13 17:02:23 +00:00
test-fixed-dtoa.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-flags.cc [wasm] Remove the --wasm-interpret-all flag 2020-04-28 08:14:52 +00:00
test-func-name-inference.cc [asserts] Make assert scopes LocalHeap friendly 2020-11-20 17:39:14 +00:00
test-fuzz-arm64.cc Move architecture dependent files 2019-05-28 14:02:15 +00:00
test-global-handles.cc global-handles: Fix ASAN fake stack handling 2020-10-30 13:56:36 +00:00
test-global-object.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-hashcode.cc [dict-proto] Add support for ordered property dicts, pt.3 2020-11-19 11:54:24 +00:00
test-hashmap.cc [cleanup] Replace function typedefs by using declarations 2019-05-28 08:35:08 +00:00
test-heap-profiler.cc Reland "[turboprop] Add a slot for optimization marker in feedback vector" 2020-10-28 11:09:14 +00:00
test-icache.cc [cctest][mac] Enable MAP_JIT on tests that need RWX memory. 2021-01-21 10:45:40 +00:00
test-identity-map.cc Reland^4 "[serializer] Allocate during deserialization" 2020-10-07 08:15:50 +00:00
test-inobject-slack-tracking.cc Use consistent capitalization rules for instance types 2019-10-09 17:44:42 +00:00
test-inspector.cc Implement protocol::Binary to/from base64 conversion 2020-04-30 08:46:05 +00:00
test-intl.cc [lookup] Refactor LookupIterator "property or element" creation 2020-01-09 18:39:11 +00:00
test-javascript-arm64.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-js-arm64-variables.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-js-to-wasm.cc [compiler] Re-reland "Faster JS-to-Wasm calls" 2021-02-05 09:41:30 +00:00
test-js-weak-refs.cc Revert "[heap] Convert WeakObjects to heap::base::Worklist" 2020-10-06 14:21:55 +00:00
test-liveedit.cc Add quotes around unexpected token SyntaxError 2019-06-11 06:11:58 +00:00
test-local-handles.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-lockers.cc Reland "[heap] Introduce LocalIsolate for main thread" 2020-11-19 10:44:43 +00:00
test-log-stack-tracer.cc [TurboFan] Templatize GetBytecodeArray 2020-12-17 16:46:53 +00:00
test-log.cc [api] Use FLAG_log to check whether logging is enabled 2021-01-20 11:07:12 +00:00
test-macro-assembler-arm64.cc Reland "[Turboprop] Move dynamic check maps immediate args to deopt exit." 2020-12-16 18:38:52 +00:00
test-macro-assembler-arm.cc Reland "[Turboprop] Move dynamic check maps immediate args to deopt exit." 2020-12-16 18:38:52 +00:00
test-macro-assembler-mips64.cc [mips][Turboprop] Move dynamic check maps immediate args to deopt exit. 2020-12-19 10:21:56 +00:00
test-macro-assembler-mips.cc [mips][Turboprop] Move dynamic check maps immediate args to deopt exit. 2020-12-19 10:21:56 +00:00
test-macro-assembler-x64.cc [codegen] Use smaller instructions for smi loading on x64 2021-01-25 11:54:56 +00:00
test-managed.cc Move more relevant files to src/objects 2019-05-23 08:52:30 +00:00
test-mementos.cc Move more relevant files to src/objects 2019-05-23 08:52:30 +00:00
test-modules.cc [modules][api] Add version of HostImportModuleDynamically with import assertions 2021-01-26 04:15:15 +00:00
test-object.cc Reland2 [super] Store home object in Context instead of JSFunction 2021-01-29 09:19:23 +00:00
test-orderedhashtable.cc [dict-proto] make small ordered hash tables use InternalIndex, too 2020-10-29 13:00:53 +00:00
test-parsing.cc Reland2 [super] Store home object in Context instead of JSFunction 2021-01-29 09:19:23 +00:00
test-persistent-handles.cc [heap, infra] Remove --local-heaps and --concurrent-allocation flags 2021-02-01 11:01:26 +00:00
test-platform.cc [test] Fix StackAlignment test 2020-10-14 10:48:27 +00:00
test-pointer-auth-arm64.cc [arm64][cfi] Enable sim_abort_on_bad_auth by default. 2021-02-05 10:23:40 +00:00
test-poison-disasm-arm64.cc [arm64] Intentionally corrupt the upper half of decompressed SMIs 2019-11-19 12:14:12 +00:00
test-poison-disasm-arm.cc [cctest][turboprop] Disable DisasmPoisonMonomorphicLoadFloat64 for arm 2020-07-30 10:41:36 +00:00
test-profile-generator.cc Revert "[cpu-profiler] Implement weak phantom finalizers for CodeMap entries" 2021-01-26 23:50:18 +00:00
test-property-details.cc [dict-proto] Allow storing certain PropertyDetails in single byte 2021-02-04 13:45:13 +00:00
test-random-number-generator.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-regexp.cc [object] Remove FlatStringReader's vector constructor 2020-10-28 16:15:33 +00:00
test-representation.cc Move relevant files to src/objects 2019-05-20 08:57:47 +00:00
test-roots.cc [heap] Use BasicMemoryChunk::FromHeapObject more 2020-06-17 14:05:48 +00:00
test-sampler-api.cc [api][cleanup] Use Template::Set with const char* name 2020-09-09 15:39:36 +00:00
test-serialize.cc Revert "[objects] Remove MakeExternal case for uncached internal strings" 2021-01-15 20:57:04 +00:00
test-smi-lexicographic-compare.cc [cleanup] Eliminate non-const reference parameters 2019-09-10 09:31:07 +00:00
test-stack-unwinding-win64.cc Make Windows stack walking test use runtime-compiled code 2020-10-19 21:50:52 +00:00
test-strings.cc Revert "[objects] Remove MakeExternal case for uncached internal strings" 2021-01-15 20:57:04 +00:00
test-strtod.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-symbols.cc [runtime] Rename Name::Hash() to Name::EnsureHash() 2020-11-16 10:48:15 +00:00
test-sync-primitives-arm64.cc Reland "Reland "[deoptimizer] Change deopt entries into builtins"" 2020-10-21 06:01:38 +00:00
test-sync-primitives-arm.cc [test, arm] Take isolate as argument for AssembleCode 2020-11-18 14:17:05 +00:00
test-thread-termination.cc [regexp] Use experimental engine if backtrack limit exceeded 2020-10-14 11:18:37 +00:00
test-threads.cc Replace base::make_unique by std::make_unique 2019-09-10 11:21:51 +00:00
test-trace-event.cc [cleanup] Remove DISALLOW_COPY_AND_ASSIGN in test/{cctest,fuzzer,inspector} 2020-11-10 01:24:43 +00:00
test-traced-value.cc [tracing] Improve tracing signals for compilation/optimization. 2019-03-25 14:49:08 +00:00
test-transitions.cc [ptr-compr] Isolatify Map::MigrateToMap() and friends 2019-07-03 08:08:05 +00:00
test-transitions.h [asserts] Make assert scopes LocalHeap friendly 2020-11-20 17:39:14 +00:00
test-typedarrays.cc [api] Deprecate [Shared]ArrayBuffer::Externalize/GetContents and constructors 2019-10-29 22:01:54 +00:00
test-types.cc [turbofan] Normalize types for Oddball constants 2020-03-12 14:28:52 +00:00
test-unboxed-doubles.cc [cleanup] Replace all remaining Min/Max uses with std::min/max 2020-11-24 17:32:01 +00:00
test-unscopables-hidden-prototype.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-unwinder-code-pages.cc [arm][arm64] Use normal fp semantics in JSEntry 2021-01-19 16:13:51 +00:00
test-usecounters.cc [atomics] Remove the deprecated Atomics.wake 2020-08-10 23:02:17 +00:00
test-utils-arm64.cc [arm64][cleanup] Remove CPURegister::Is and CPURegister::is 2019-11-14 12:58:09 +00:00
test-utils-arm64.h Move architecture dependent files 2019-05-28 14:02:15 +00:00
test-utils.cc [cleanup] Split out bit-field.h and bounds.h from utils/utils.h 2019-11-15 13:00:08 +00:00
test-v8windbg.cc [tools] Add v8windbg, a WinDbg extension for V8 2020-02-18 19:16:18 +00:00
test-verifiers.cc [asserts] Make assert scopes LocalHeap friendly 2020-11-20 17:39:14 +00:00
test-version.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
test-weakmaps.cc [factory] Remove deprecated JSFunction ctors 2020-11-11 06:12:35 +00:00
test-weaksets.cc [factory] Remove deprecated JSFunction ctors 2020-11-11 06:12:35 +00:00
testcfg.py Reland "Preparing v8 to use with python3 /test" 2019-03-20 09:56:06 +00:00
trace-extension.cc [api] Create v8::String::NewFromLiteral that returns Local<String> 2020-03-09 12:02:07 +00:00
trace-extension.h [cleanup] Remove unused TickSample class from the public API 2019-08-22 07:27:35 +00:00
unicode-helpers.cc Move string-related files to src/strings 2019-05-21 07:17:48 +00:00
unicode-helpers.h Move string-related files to src/strings 2019-05-21 07:17:48 +00:00