2016-06-01 12:28:57 +00:00
|
|
|
# Copyright 2016 The V8 project authors. All rights reserved.
|
|
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
|
|
# found in the LICENSE file.
|
|
|
|
|
|
|
|
import("../../gni/v8.gni")
|
|
|
|
|
2016-06-14 10:07:22 +00:00
|
|
|
v8_executable("unittests") {
|
2016-06-01 12:28:57 +00:00
|
|
|
testonly = true
|
|
|
|
|
2017-09-28 17:55:52 +00:00
|
|
|
# TODO(machenbach): Translate from gyp.
|
|
|
|
#['OS=="aix"', {
|
|
|
|
# 'ldflags': [ '-Wl,-bbigtoc' ],
|
|
|
|
#}],
|
|
|
|
|
|
|
|
deps = [
|
|
|
|
":unittests_sources",
|
|
|
|
"../..:v8_for_testing",
|
|
|
|
"../..:v8_libbase",
|
|
|
|
"../..:v8_libplatform",
|
|
|
|
"//build/win:default_exe_manifest",
|
|
|
|
"//testing/gmock",
|
|
|
|
"//testing/gtest",
|
|
|
|
]
|
|
|
|
|
2018-03-26 13:12:27 +00:00
|
|
|
data_deps = [
|
|
|
|
"../../tools:v8_testrunner",
|
|
|
|
]
|
|
|
|
|
|
|
|
data = [
|
|
|
|
"testcfg.py",
|
|
|
|
"unittests.status",
|
|
|
|
]
|
|
|
|
|
2017-09-28 17:55:52 +00:00
|
|
|
configs = [
|
|
|
|
"../..:external_config",
|
|
|
|
"../..:internal_config_base",
|
|
|
|
]
|
|
|
|
}
|
2018-03-26 13:12:27 +00:00
|
|
|
|
2017-09-28 17:55:52 +00:00
|
|
|
v8_source_set("unittests_sources") {
|
|
|
|
testonly = true
|
|
|
|
|
2016-09-14 19:02:12 +00:00
|
|
|
sources = [
|
2017-04-25 11:29:17 +00:00
|
|
|
"../../test/common/wasm/wasm-macro-gen.h",
|
2016-09-20 07:27:52 +00:00
|
|
|
"../../testing/gmock-support.h",
|
|
|
|
"../../testing/gtest-support.h",
|
2017-12-15 17:59:57 +00:00
|
|
|
"allocation-unittest.cc",
|
2017-02-20 10:07:05 +00:00
|
|
|
"api/access-check-unittest.cc",
|
2017-02-08 16:12:59 +00:00
|
|
|
"api/exception-unittest.cc",
|
2017-03-29 11:03:38 +00:00
|
|
|
"api/interceptor-unittest.cc",
|
2017-02-08 09:38:50 +00:00
|
|
|
"api/isolate-unittest.cc",
|
2017-02-16 21:46:15 +00:00
|
|
|
"api/remote-object-unittest.cc",
|
2017-02-10 05:56:00 +00:00
|
|
|
"api/v8-object-unittest.cc",
|
2017-03-16 18:10:45 +00:00
|
|
|
"asmjs/asm-scanner-unittest.cc",
|
2017-05-09 12:24:09 +00:00
|
|
|
"asmjs/asm-types-unittest.cc",
|
|
|
|
"asmjs/switch-logic-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"base/atomic-utils-unittest.cc",
|
|
|
|
"base/bits-unittest.cc",
|
|
|
|
"base/cpu-unittest.cc",
|
|
|
|
"base/division-by-constant-unittest.cc",
|
|
|
|
"base/flags-unittest.cc",
|
|
|
|
"base/functional-unittest.cc",
|
|
|
|
"base/ieee754-unittest.cc",
|
|
|
|
"base/iterator-unittest.cc",
|
2018-05-22 16:58:12 +00:00
|
|
|
"base/list-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"base/logging-unittest.cc",
|
2017-07-26 13:32:14 +00:00
|
|
|
"base/macros-unittest.cc",
|
2017-07-24 18:03:03 +00:00
|
|
|
"base/ostreams-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"base/platform/condition-variable-unittest.cc",
|
|
|
|
"base/platform/mutex-unittest.cc",
|
|
|
|
"base/platform/platform-unittest.cc",
|
|
|
|
"base/platform/semaphore-unittest.cc",
|
|
|
|
"base/platform/time-unittest.cc",
|
|
|
|
"base/sys-info-unittest.cc",
|
2017-08-07 10:34:47 +00:00
|
|
|
"base/template-utils-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"base/utils/random-number-generator-unittest.cc",
|
2017-10-19 00:38:51 +00:00
|
|
|
"bigint-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"cancelable-tasks-unittest.cc",
|
|
|
|
"char-predicates-unittest.cc",
|
2017-09-11 13:44:42 +00:00
|
|
|
"code-stub-assembler-unittest.cc",
|
|
|
|
"code-stub-assembler-unittest.h",
|
2016-10-14 08:12:16 +00:00
|
|
|
"compiler-dispatcher/compiler-dispatcher-tracer-unittest.cc",
|
2016-12-12 15:35:41 +00:00
|
|
|
"compiler-dispatcher/compiler-dispatcher-unittest.cc",
|
2017-01-30 19:27:00 +00:00
|
|
|
"compiler-dispatcher/optimizing-compile-dispatcher-unittest.cc",
|
2017-07-27 13:33:53 +00:00
|
|
|
"compiler-dispatcher/unoptimized-compile-job-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/branch-elimination-unittest.cc",
|
2016-12-05 10:47:38 +00:00
|
|
|
"compiler/bytecode-analysis-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/checkpoint-elimination-unittest.cc",
|
2017-09-11 13:44:42 +00:00
|
|
|
"compiler/code-assembler-unittest.cc",
|
|
|
|
"compiler/code-assembler-unittest.h",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/common-operator-reducer-unittest.cc",
|
|
|
|
"compiler/common-operator-unittest.cc",
|
|
|
|
"compiler/compiler-test-utils.h",
|
[turbofan] Optimize array destructuring
This CL introduces type narrowing and constant folding reducers
to constant fold code that comes out of inlined destructuring
of arrays. In particular, array iterator introduces code that
contains a phi of a temporary array that blocks escape analysis.
The phi comes from conditional that can be evaluated statically
(i.e., constant folded), so with better constant folding we
allow escape analysis to get rid of the temporary array.
On a quick micro-benchmark below, we see more than 6x improvement.
This is close to the hand-optimized version - if we replace
body of f with 'return b + a', we get 220ms (versus 218ms with
destructuring).
function f(a, b) {
[b, a] = [a, b];
return a + b;
}
function sum(count) {
let s = 0;
for (let i = 0; i < count; i++) {
s += f(1, 2);
}
return s;
}
// Warm up
sum(1e5); sum(1e5);
console.time("destructure array");
sum(1e8);
console.timeEnd("destructure array");
console.timeEnd: destructure array, 213.526000
console.timeEnd: destructure array, 1503.537000
Bug: v8:7728
Change-Id: Ib7aec1d5897989e6adb1af1eddd516d8b3866db5
Reviewed-on: https://chromium-review.googlesource.com/1047672
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53048}
2018-05-07 20:45:11 +00:00
|
|
|
"compiler/constant-folding-reducer-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/control-equivalence-unittest.cc",
|
|
|
|
"compiler/control-flow-optimizer-unittest.cc",
|
|
|
|
"compiler/dead-code-elimination-unittest.cc",
|
|
|
|
"compiler/diamond-unittest.cc",
|
|
|
|
"compiler/effect-control-linearizer-unittest.cc",
|
|
|
|
"compiler/graph-reducer-unittest.cc",
|
|
|
|
"compiler/graph-reducer-unittest.h",
|
|
|
|
"compiler/graph-trimmer-unittest.cc",
|
|
|
|
"compiler/graph-unittest.cc",
|
|
|
|
"compiler/graph-unittest.h",
|
|
|
|
"compiler/instruction-selector-unittest.cc",
|
|
|
|
"compiler/instruction-selector-unittest.h",
|
|
|
|
"compiler/instruction-sequence-unittest.cc",
|
|
|
|
"compiler/instruction-sequence-unittest.h",
|
2016-10-26 16:04:11 +00:00
|
|
|
"compiler/instruction-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/int64-lowering-unittest.cc",
|
2018-02-19 13:31:18 +00:00
|
|
|
"compiler/js-call-reducer-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/js-create-lowering-unittest.cc",
|
|
|
|
"compiler/js-intrinsic-lowering-unittest.cc",
|
|
|
|
"compiler/js-operator-unittest.cc",
|
|
|
|
"compiler/js-typed-lowering-unittest.cc",
|
|
|
|
"compiler/linkage-tail-call-unittest.cc",
|
2016-09-19 10:58:59 +00:00
|
|
|
"compiler/live-range-builder.h",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/load-elimination-unittest.cc",
|
|
|
|
"compiler/loop-peeling-unittest.cc",
|
|
|
|
"compiler/machine-operator-reducer-unittest.cc",
|
|
|
|
"compiler/machine-operator-unittest.cc",
|
|
|
|
"compiler/node-cache-unittest.cc",
|
|
|
|
"compiler/node-matchers-unittest.cc",
|
|
|
|
"compiler/node-properties-unittest.cc",
|
|
|
|
"compiler/node-test-utils.cc",
|
|
|
|
"compiler/node-test-utils.h",
|
|
|
|
"compiler/node-unittest.cc",
|
|
|
|
"compiler/opcodes-unittest.cc",
|
2017-07-31 09:05:39 +00:00
|
|
|
"compiler/persistent-unittest.cc",
|
2016-12-17 00:24:36 +00:00
|
|
|
"compiler/regalloc/live-range-unittest.cc",
|
|
|
|
"compiler/regalloc/move-optimizer-unittest.cc",
|
|
|
|
"compiler/regalloc/register-allocator-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/schedule-unittest.cc",
|
|
|
|
"compiler/scheduler-rpo-unittest.cc",
|
|
|
|
"compiler/scheduler-unittest.cc",
|
[turbofan] Lower NumberConstant nodes to IntPtrConstant.
If a NumberConstant can be represented as a Smi, then lower it to a
IntPtrConstant node during simplified lowering. Thanks to this, all backends can
match Smi values that can also be encoded as immediates in the instruction
selector. Additionally, we can apply the same lowering to the CodeAssembler for
the snapshot.
As a result, we can remove `mov` instructions generated because Int32Matcher and
Int64Matcher didn't not recognize Smis:
For 32-bit target, it's common for Smis also be immediates: "if (a < 100) {}"
~~~
mov r1, #200 -> cmp r0, #200
cmp r0, r1 -> blt <>
blt <> ->
~~~
On Arm64 particularly, we lose opportunites to use `cbz`: "if (a == 0) {}"
~~~
movz x0, #0x0 -> cbz x1 <>
cmp x1, x0 ->
b.eq <> ->
~~~
Overall, we do not see an impact on benchmarks such as webtooling. However, we
do see noteworthy code size reduction, from 0.5% to 1.5%.
Bug:
Change-Id: I7fbb718ad51b9036c3514fa31c1326bdd6f2b0e6
Reviewed-on: https://chromium-review.googlesource.com/848814
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Pierre Langlois <pierre.langlois@arm.com>
Cr-Commit-Position: refs/heads/master@{#50569}
2018-01-03 18:30:45 +00:00
|
|
|
"compiler/simplified-lowering-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"compiler/simplified-operator-reducer-unittest.cc",
|
|
|
|
"compiler/simplified-operator-unittest.cc",
|
|
|
|
"compiler/state-values-utils-unittest.cc",
|
|
|
|
"compiler/typed-optimization-unittest.cc",
|
|
|
|
"compiler/typer-unittest.cc",
|
|
|
|
"compiler/value-numbering-reducer-unittest.cc",
|
2016-10-10 19:00:31 +00:00
|
|
|
"compiler/zone-stats-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"counters-unittest.cc",
|
2017-09-28 08:10:43 +00:00
|
|
|
"detachable-vector-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"eh-frame-iterator-unittest.cc",
|
|
|
|
"eh-frame-writer-unittest.cc",
|
2017-08-30 11:09:09 +00:00
|
|
|
"heap/barrier-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"heap/bitmap-unittest.cc",
|
2016-12-20 09:35:05 +00:00
|
|
|
"heap/embedder-tracing-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"heap/gc-idle-time-handler-unittest.cc",
|
|
|
|
"heap/gc-tracer-unittest.cc",
|
2018-06-07 12:00:16 +00:00
|
|
|
"heap/heap-controller-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"heap/heap-unittest.cc",
|
2017-05-16 20:57:05 +00:00
|
|
|
"heap/item-parallel-job-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"heap/marking-unittest.cc",
|
|
|
|
"heap/memory-reducer-unittest.cc",
|
2018-01-23 10:51:58 +00:00
|
|
|
"heap/object-stats-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"heap/scavenge-job-unittest.cc",
|
|
|
|
"heap/slot-set-unittest.cc",
|
2017-04-05 07:36:15 +00:00
|
|
|
"heap/spaces-unittest.cc",
|
2017-02-10 14:26:04 +00:00
|
|
|
"heap/unmapper-unittest.cc",
|
2017-06-23 10:44:53 +00:00
|
|
|
"heap/worklist-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"interpreter/bytecode-array-builder-unittest.cc",
|
|
|
|
"interpreter/bytecode-array-iterator-unittest.cc",
|
2016-12-05 13:03:07 +00:00
|
|
|
"interpreter/bytecode-array-random-iterator-unittest.cc",
|
2017-06-27 08:44:35 +00:00
|
|
|
"interpreter/bytecode-array-writer-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"interpreter/bytecode-decoder-unittest.cc",
|
2017-06-27 08:44:35 +00:00
|
|
|
"interpreter/bytecode-node-unittest.cc",
|
2016-12-15 07:55:10 +00:00
|
|
|
"interpreter/bytecode-operands-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"interpreter/bytecode-register-allocator-unittest.cc",
|
|
|
|
"interpreter/bytecode-register-optimizer-unittest.cc",
|
2017-04-11 13:37:25 +00:00
|
|
|
"interpreter/bytecode-source-info-unittest.cc",
|
2016-09-19 10:58:59 +00:00
|
|
|
"interpreter/bytecode-utils.h",
|
2016-09-14 19:02:12 +00:00
|
|
|
"interpreter/bytecodes-unittest.cc",
|
|
|
|
"interpreter/constant-array-builder-unittest.cc",
|
|
|
|
"interpreter/interpreter-assembler-unittest.cc",
|
|
|
|
"interpreter/interpreter-assembler-unittest.h",
|
|
|
|
"libplatform/default-platform-unittest.cc",
|
|
|
|
"libplatform/task-queue-unittest.cc",
|
|
|
|
"libplatform/worker-thread-unittest.cc",
|
|
|
|
"locked-queue-unittest.cc",
|
2016-12-19 12:50:30 +00:00
|
|
|
"object-unittest.cc",
|
2017-10-13 18:23:53 +00:00
|
|
|
"parser/ast-value-unittest.cc",
|
2017-04-18 14:01:12 +00:00
|
|
|
"parser/preparser-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"register-configuration-unittest.cc",
|
|
|
|
"run-all-unittests.cc",
|
|
|
|
"source-position-table-unittest.cc",
|
2018-05-07 12:26:55 +00:00
|
|
|
"strings-storage-unittest.cc",
|
2017-04-18 14:01:12 +00:00
|
|
|
"test-helpers.cc",
|
|
|
|
"test-helpers.h",
|
2016-09-14 19:02:12 +00:00
|
|
|
"test-utils.cc",
|
|
|
|
"test-utils.h",
|
2016-11-22 09:27:41 +00:00
|
|
|
"unicode-unittest.cc",
|
2017-11-27 15:11:08 +00:00
|
|
|
"utils-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"value-serializer-unittest.cc",
|
|
|
|
"wasm/control-transfer-unittest.cc",
|
|
|
|
"wasm/decoder-unittest.cc",
|
2016-12-21 12:42:06 +00:00
|
|
|
"wasm/function-body-decoder-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"wasm/leb-helper-unittest.cc",
|
|
|
|
"wasm/loop-assignment-analysis-unittest.cc",
|
|
|
|
"wasm/module-decoder-unittest.cc",
|
2017-05-11 08:51:54 +00:00
|
|
|
"wasm/streaming-decoder-unittest.cc",
|
2017-10-11 19:36:33 +00:00
|
|
|
"wasm/trap-handler-unittest.cc",
|
2017-12-05 01:47:59 +00:00
|
|
|
"wasm/wasm-code-manager-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
"wasm/wasm-macro-gen-unittest.cc",
|
2016-09-29 11:29:05 +00:00
|
|
|
"wasm/wasm-module-builder-unittest.cc",
|
2017-01-20 13:28:29 +00:00
|
|
|
"wasm/wasm-opcodes-unittest.cc",
|
2016-10-20 14:48:13 +00:00
|
|
|
"zone/segmentpool-unittest.cc",
|
2017-03-24 17:32:08 +00:00
|
|
|
"zone/zone-allocator-unittest.cc",
|
2016-10-26 17:07:48 +00:00
|
|
|
"zone/zone-chunk-list-unittest.cc",
|
2017-02-06 11:14:56 +00:00
|
|
|
"zone/zone-unittest.cc",
|
2016-09-14 19:02:12 +00:00
|
|
|
]
|
2016-06-01 12:28:57 +00:00
|
|
|
|
2017-09-28 17:55:52 +00:00
|
|
|
if (use_jumbo_build) {
|
|
|
|
jumbo_excluded_sources = [
|
|
|
|
# TODO(mostynb@opera.com): figure out how to make this build in both
|
|
|
|
# modes. Template issues on windows if we add a functional_unittest
|
|
|
|
# namespace as with the other files.
|
|
|
|
"base/functional-unittest.cc",
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2016-07-15 22:32:55 +00:00
|
|
|
if (v8_current_cpu == "arm") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/arm/instruction-selector-arm-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "arm64") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/arm64/instruction-selector-arm64-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "x86") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/ia32/instruction-selector-ia32-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/mips/instruction-selector-mips-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/mips64/instruction-selector-mips64-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "x64") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/x64/instruction-selector-x64-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/ppc/instruction-selector-ppc-unittest.cc" ]
|
2016-07-15 22:32:55 +00:00
|
|
|
} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
|
2016-09-14 19:02:12 +00:00
|
|
|
sources += [ "compiler/s390/instruction-selector-s390-unittest.cc" ]
|
2016-06-01 12:28:57 +00:00
|
|
|
}
|
|
|
|
|
2016-06-14 10:07:22 +00:00
|
|
|
configs = [
|
2016-06-01 12:28:57 +00:00
|
|
|
"../..:external_config",
|
|
|
|
"../..:internal_config_base",
|
|
|
|
]
|
|
|
|
|
|
|
|
deps = [
|
2017-05-03 09:58:03 +00:00
|
|
|
"../..:v8_for_testing",
|
2016-10-07 07:56:43 +00:00
|
|
|
"../..:v8_libbase",
|
2016-06-01 12:28:57 +00:00
|
|
|
"../..:v8_libplatform",
|
|
|
|
"//build/win:default_exe_manifest",
|
|
|
|
"//testing/gmock",
|
|
|
|
"//testing/gtest",
|
|
|
|
]
|
|
|
|
|
2016-06-03 08:21:11 +00:00
|
|
|
if (is_win) {
|
|
|
|
# This warning is benignly triggered by the U16 and U32 macros in
|
|
|
|
# bytecode-utils.h.
|
|
|
|
# C4309: 'static_cast': truncation of constant value
|
|
|
|
cflags = [ "/wd4309" ]
|
|
|
|
}
|
2016-06-01 12:28:57 +00:00
|
|
|
}
|