v8/test/cctest
Tobias Tebbi a19c3ffb8f Reland: [csa] verify skipped write-barriers in MemoryOptimizer
With very few exceptions, this verifies all skipped write-barriers in
CSA and Torque, showing that the MemoryOptimizer together with some
type information on the stored value are enough to avoid unsafe skipped
write-barriers.

Changes to CSA:
SKIP_WRITE_BARRIER and Store*NoWriteBarrier are verified by the
MemoryOptimizer by default.
Type information about the stored values (TNode<Smi>) is exploited to
safely skip write barriers for stored Smi values.
In some cases, the code is re-structured to make it easier to consume
for the MemoryOptimizer (manual branch and load elimination).

Changes to the MemoryOptimizer:
Improve the MemoryOptimizer to remove write barriers:
- When the store happens to a CSA-generated InnerAllocate, by ignoring
  Bitcasts and additions.
- When the stored value is the HeapConstant of an immortal immovable root.
- When the stored value is a SmiConstant (recognized by BitcastToTaggedSigned).
- Fast C-calls are treated as non-allocating.
- Runtime calls can be white-listed as non-allocating.

Remaining missing cases:
- C++-style iterator loops with inner pointers.
- Inner allocates that are reloaded from a field where they were just stored
  (for example an elements backing store). Load elimination would fix that.
- Safe stored value types that cannot be expressed in CSA (e.g., Smi|Hole).
  We could handle that in Torque.
- Double-aligned allocations, which are not lowered in the MemoryOptimizer
  but in CSA.

Drive-by change: Avoid Smi suffix for StoreFixedArrayElement since this
can be handled by overload resolution (in Torque and C++).

Reland Change: Support pointer compression operands.

R=jarin@chromium.org
TBR=mvstanton@chromium.org

Bug: v8:7793
Change-Id: I84e1831eb6bf9be14f36db3f8b485ee4fab6b22e
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1612904
Auto-Submit: Tobias Tebbi <tebbi@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61522}
2019-05-15 11:46:30 +00:00
..
compiler Reland: [csa] verify skipped write-barriers in MemoryOptimizer 2019-05-15 11:46:30 +00:00
heap [lite] Don't skip tests that need feedback vector in lite mode 2019-05-15 09:10:00 +00:00
interpreter [lite] Don't skip tests that need feedback vector in lite mode 2019-05-15 09:10:00 +00:00
libplatform [tracing] Fix test TraceWriter to expect uninitialized TraceObjects 2019-05-07 09:25:29 +00:00
libsampler [cpu-profiler] Only record SIGPROF-based samples for samplers that request samples 2019-02-13 09:29:38 +00:00
parsing [class] Remove flags for class fields 2019-05-01 02:02:51 +00:00
torque [torque] Rename ...from-dsl... to ...tq... 2019-05-14 14:49:23 +00:00
wasm [wasm] Implement the ref.func instruction 2019-05-13 11:19:32 +00:00
assembler-helper-arm.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
assembler-helper-arm.h [arm, arm64] Setup arguments to RecordWriteStub using mov. 2019-03-05 11:07:00 +00:00
BUILD.gn [cleanup] Split stack trace related API cctests into new file 2019-05-15 11:27:04 +00:00
cctest.cc Reland "[heap] Skip ro-space from heap iterators, add CombinedHeapIterator." 2019-05-02 17:35:18 +00:00
cctest.h Reland "[heap] Skip ro-space from heap iterators, add CombinedHeapIterator." 2019-05-02 17:35:18 +00:00
cctest.status [cleanup] Split stack trace related API cctests into new file 2019-05-15 11:27:04 +00:00
DEPS [torque]: Add the ability to test Torque functionality with cctest 2018-05-13 10:58:56 +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 Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-fixed.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-precision.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-precision.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-shortest.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-shortest.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
log-eq-of-logging-and-traversal.js [log] Improve log parsing 2018-06-20 13:40:22 +00:00
OWNERS [MIPS] Set Yu Yin as owner of MIPS files. 2019-03-06 11:46:22 +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 [interpreter] Always put bytecode handlers in builtins table 2018-09-20 09:58:15 +00:00
test-access-checks.cc Replace CHECK(false) by UNREACHABLE() 2017-12-19 18:58:07 +00:00
test-accessor-assembler.cc [ubsan] Port Map to the new design 2018-11-13 06:59:12 +00:00
test-accessors.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-allocation.cc [zone] Fix peak memory accounting 2019-03-28 13:39:11 +00:00
test-api-accessors.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-api-interceptors.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-api-stack-traces.cc [cleanup] Split stack trace related API cctests into new file 2019-05-15 11:27:04 +00:00
test-api.cc [cleanup] Split stack trace related API cctests into new file 2019-05-15 11:27:04 +00:00
test-api.h [ubsan] Replace a few more Object** with alternatives 2018-12-17 14:17:22 +00:00
test-array-list.cc [explicit isolates] Remove GetIsolate from objects.cc 2018-07-13 12:42:14 +00:00
test-assembler-arm64.cc Touch guard pages when allocating stack frames 2019-05-02 17:46:18 +00:00
test-assembler-arm.cc [cleanup] Removing break and return after UNREACHABLE() 2019-05-10 13:42:57 +00:00
test-assembler-ia32.cc Touch guard pages when allocating stack frames 2019-05-02 17:46:18 +00:00
test-assembler-mips64.cc [mips] Fix build error after switch to CodeBuilder. 2019-04-30 13:50:03 +00:00
test-assembler-mips.cc [mips] Fix build error after switch to CodeBuilder. 2019-04-30 13:50:03 +00:00
test-assembler-ppc.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-assembler-s390.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-assembler-x64.cc Touch guard pages when allocating stack frames 2019-05-02 17:46:18 +00:00
test-atomicops.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-bignum-dtoa.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-bignum.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-bit-vector.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-circular-queue.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-code-layout.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-code-stub-assembler.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-compiler.cc [test] Fix tests to work with lazy feedback allocation 2019-05-13 14:09:53 +00:00
test-constantpool.cc [assembler] Move ConstantPools out of src/assembler.h 2018-10-19 11:38:39 +00:00
test-conversions.cc [objects.h splitting] Move HeapNumber to heap-number.h 2018-12-17 17:58:09 +00:00
test-cpu-profiler.cc [cpu-profiler] Fix script attribution for cross-script inlining 2019-05-14 08:25:05 +00:00
test-date.cc [Intl] Move cachedOrNewService to C++ w/o caching 2018-11-02 07:08:26 +00:00
test-debug.cc [lite] Don't skip tests that need feedback vector in lite mode 2019-05-15 09:10:00 +00:00
test-decls.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-deoptimization.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-dictionary.cc Switch RehashBasedOnMap to use ReadOnlyRoots 2019-02-25 12:28:26 +00:00
test-disasm-arm64.cc Explicitly store the code layout in CodeDesc 2019-01-30 13:17:38 +00:00
test-disasm-arm.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-disasm-ia32.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-disasm-mips64.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-disasm-mips.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-disasm-ppc.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-disasm-s390.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-disasm-x64.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-diy-fp.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-double.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-dtoa.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-elements-kind.cc Refactor holey and packed elements-kind check 2019-05-08 12:22:35 +00:00
test-extra.js [js] Remove CORE JS Natives (prologue.js), port extra utils to C++/Torque 2019-01-07 11:57:46 +00:00
test-factory.cc Reland "[heap] Add tests to CodeBuilder Build and TryBuild" 2019-05-13 16:08:43 +00:00
test-fast-dtoa.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-feedback-vector.cc [lite] Allocate feedback vectors lazily 2019-03-25 16:02:38 +00:00
test-feedback-vector.h [lite] Allocate feedback vectors lazily 2019-03-25 16:02:38 +00:00
test-field-type-tracking.cc Add new frozen, sealed holey elements kind 2019-05-07 19:09:32 +00:00
test-fixed-dtoa.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-flags.cc [flags] Receive length as size_t 2019-04-24 10:43:17 +00:00
test-func-name-inference.cc [fni] Mark computed props as computed, not anonymous function 2019-03-01 20:52:03 +00:00
test-fuzz-arm64.cc Reland "Add Windows ARM64 ABI support to V8" 2018-10-24 19:46:36 +00:00
test-global-handles.cc Reland "[api,heap] Remove deprecated Persistent APIs" 2019-04-24 09:34:27 +00:00
test-global-object.cc [iwyu] api.h iwyu 2018-07-20 11:49:02 +00:00
test-hashcode.cc [cleanup] Free 400 targets from the draconic reign of.. 2019-03-26 10:56:21 +00:00
test-hashmap.cc [ubsan] Fix various cases of undefined behavior 2019-01-10 13:52:04 +00:00
test-heap-profiler.cc [lite] Don't skip tests that need feedback vector in lite mode 2019-05-15 09:10:00 +00:00
test-icache.cc PPC: removed AIX function descriptors in tests 2019-03-06 12:55:45 +00:00
test-identity-map.cc [objects.h splitting] Move HeapNumber to heap-number.h 2018-12-17 17:58:09 +00:00
test-inobject-slack-tracking.cc [map] Make field representation updates work with elements kind transitions. 2019-05-07 13:13:51 +00:00
test-inspector.cc [cleanup] Refactor inspector to use default members. 2018-09-18 09:13:59 +00:00
test-intl.cc Defer inferring language mode as far as possible 2019-01-25 11:53:19 +00:00
test-javascript-arm64.cc [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-js-arm64-variables.cc [jumbo] arm64 cctest fixes 2017-09-30 17:17:23 +00:00
test-js-weak-refs.cc [js weak refs] Expand WeakCell::WeakCellVerify + minor fix 2019-01-31 16:50:20 +00:00
test-liveedit.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-lockers.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-log-stack-tracer.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-log.cc Discard CHECK failure messages for official builds to save binary size 2019-05-10 19:33:04 +00:00
test-macro-assembler-arm.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-macro-assembler-mips64.cc [mips] Fix build error in debug mode. 2019-05-07 01:24:41 +00:00
test-macro-assembler-mips.cc [mips] Fix build error in debug mode. 2019-05-07 01:24:41 +00:00
test-macro-assembler-x64.cc [ptr-compr] Fix macro assembler test for CFI failure 2019-05-14 10:07:45 +00:00
test-managed.cc Add size estimate to Managed<T> 2018-05-30 10:26:21 +00:00
test-mementos.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-modules.cc [api,modules] Allow GetModuleNamespace on unevaluated modules. 2018-01-08 09:01:25 +00:00
test-object.cc [runtime] Simplify/unify utf8 handling 2019-04-26 15:44:31 +00:00
test-orderedhashtable.cc [dict] Add more useful methods 2019-01-07 19:39:34 +00:00
test-parsing.cc [class] Remove flags for class fields 2019-05-01 02:02:51 +00:00
test-platform.cc s390: Edited Generate_CEntry to correctly return buffer when built with clang 2018-09-05 07:01:16 +00:00
test-poison-disasm-arm.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-profile-generator.cc [cpu-profiler] Implement StartProfiling call accepting an options object 2019-05-10 08:30:23 +00:00
test-random-number-generator.cc [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
test-regexp.cc Remove sorting methods from Vector 2019-04-30 10:18:06 +00:00
test-representation.cc [cleanup] Remove obsolete representations. 2019-02-21 06:07:06 +00:00
test-roots.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-sampler-api.cc PPC/s390: [Profiler] Ensure ticks in frameless bytecode handlers are interpreted frames. 2019-05-02 14:22:13 +00:00
test-serialize.cc Reland "[heap] Set read-only space's and its pages' heap_ to null." 2019-05-08 11:24:43 +00:00
test-smi-lexicographic-compare.cc [ubsan] Port Smi to the new design 2018-11-05 20:52:51 +00:00
test-stack-unwinding-x64.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-strings.cc [cleanup] Removing break and return after UNREACHABLE() 2019-05-10 13:42:57 +00:00
test-strtod.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-symbols.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
test-sync-primitives-arm64.cc [cleanup] Switch to CodeBuilder everywhere 2019-04-29 16:48:39 +00:00
test-sync-primitives-arm.cc [base] Introduce MutexGuard as typedef for LockGuard<Mutex> 2018-10-12 15:44:51 +00:00
test-thread-termination.cc [regexp] Implement interrupt support in the interpreter 2019-03-12 13:44:12 +00:00
test-threads.cc Clean up ThreadId 2019-03-11 10:37:05 +00:00
test-trace-event.cc [cleanup] Clean up trace event tests by removing macros 2019-03-25 13:46:58 +00:00
test-traced-value.cc [tracing] Improve tracing signals for compilation/optimization. 2019-03-25 14:49:08 +00:00
test-transitions.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-transitions.h [ubsan] Port Map to the new design 2018-11-13 06:59:12 +00:00
test-typedarrays.cc Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
test-types.cc Add target for common test headers 2019-02-12 09:30:01 +00:00
test-unboxed-doubles.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-unscopables-hidden-prototype.cc [api] Mark SetHiddenPrototype as DEPRECATED 2019-02-08 14:49:30 +00:00
test-unwinder.cc [Test] Add PrepareForOptimization to cctests 2019-04-30 15:49:02 +00:00
test-usecounters.cc [counters] remove "override mistake" use counters 2019-01-18 19:27:29 +00:00
test-utils-arm64.cc Reland "[arm64] Cleanup TODO around handling of x18" 2019-04-29 12:31:16 +00:00
test-utils-arm64.h Reland "[arm64] Cleanup TODO around handling of x18" 2019-04-29 12:31:16 +00:00
test-utils.cc [cleanup] Remove {StrLength} function 2019-04-29 15:55:46 +00:00
test-version.cc [cleanup] Use Vector::begin instead of Vector::start 2019-04-29 12:43:16 +00:00
test-weakmaps.cc Reland "[heap] Clean-up keys of oldspace weakmaps during scavenge" 2019-04-01 13:59:56 +00:00
test-weaksets.cc Retire PretenureFlag and use AllocationType everywhere. 2019-03-12 08:10:44 +00:00
testcfg.py Reland "Preparing v8 to use with python3 /test" 2019-03-20 09:56:06 +00:00
trace-extension.cc [ubsan] Port Smi to the new design 2018-11-05 20:52:51 +00:00
trace-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
unicode-helpers.cc Fix & reland "[utf8] Rewrite NewStringFromUtf8 using Utf8::ValueOfIncremental" 2019-02-06 13:11:11 +00:00
unicode-helpers.h [Parser] Add support for Zone allocated ConsumedPreParsingScopeData. 2018-09-07 10:28:40 +00:00