v8/test/unittests/compiler
Fanchen Kong 519c82ce36 Collect receiver to feedback for prototype.apply
When a function is invoked by prototype.apply, it may undergo following transformation in the JSCallReducer:
	receiver.apply(this, args) ->
	this.receiver(...args) Since the new target (also the receiver of apply()) is not collected to the feedback slot, further speculative optimization on the new target is not available if the new target
is not a heapconstant.

With this CL, the receiver will be collected to the feedback instead of the target if the target is a prototype.apply. It may improve the performance of the following usecase by ~80%.

function reduceArray(func, arr, r) {
    for (var i = 0, len = arr.length; i < len; i++) {
            r = func.apply(null, r, arr[i]);
    }
    return r;
}

var a = 0; for (var i = 0; i < 10000000; i++) {
    a += reduceArray(Math.imul, [5,6,2,3,7,6,8,3,7,9,2,5,], 1);
}
console.log(a);

This CL also improves the runTime score of JetStream2/richards-wasm by ~45% in default, ~60% with --turbo-inline-js-wasm-calls.

Change-Id: I542eb8d3fcb592f4e0993af93ba1af70e89c3982
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2639813
Commit-Queue: Fanchen Kong <fanchen.kong@intel.com>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#74413}
2021-05-06 15:43:47 +00:00
..
arm Revert "Move branch inversion on ==0 into platform-agnostic reducer" 2020-03-25 16:47:48 +00:00
arm64 [cleanup][test] Remove redundant NOLINT annotations 2021-04-30 11:46:14 +00:00
backend [wasm][x64] Use the cmov instruction for WebAssembly's Select 2021-04-13 10:37:08 +00:00
ia32 [turbofan] LoadImmutable should be eligible as memory operand 2021-04-21 09:44:00 +00:00
mips Move architecture dependent files 2019-05-28 14:02:15 +00:00
mips64 Move architecture dependent files 2019-05-28 14:02:15 +00:00
ppc Adding myself to relevant OWNERS files. 2020-11-02 16:37:28 +00:00
regalloc [Turboprop] Ensure constant operands are only used when allowed. 2021-02-12 20:40:36 +00:00
riscv64 [riscv64] Implementation of RiscvCmpZero ARCH OPCODE 2021-04-14 12:54:34 +00:00
s390 Move architecture dependent files 2019-05-28 14:02:15 +00:00
x64 [turbofan] LoadImmutable should be eligible as memory operand 2021-04-21 09:44:00 +00:00
branch-elimination-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
bytecode-analysis-unittest.cc [cleanup] Replace redundant BytecodeArrayIterator class 2021-02-24 13:54:53 +00:00
checkpoint-elimination-unittest.cc [cleanup] Refactor compiler to use default members. 2018-09-17 12:12:21 +00:00
common-operator-reducer-unittest.cc [compiler] Remove persistent handles as a broker parameter 2020-08-13 08:13:33 +00:00
common-operator-unittest.cc [compiler] Fix typo in IfValueParameters operator== 2021-01-11 11:15:14 +00:00
compiler-test-utils.h
constant-folding-reducer-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
control-equivalence-unittest.cc Move utility code to src/utils 2019-05-23 14:13:34 +00:00
control-flow-optimizer-unittest.cc [turbofan] introduce a deterministic tick measurement and assert optimization doesn't take too long 2019-07-17 07:00:00 +00:00
csa-load-elimination-unittest.cc [turbofan] Fix CsaLoadElimination for small types 2021-03-11 11:09:06 +00:00
dead-code-elimination-unittest.cc [compiler] Remove --turbo-direct-heap-access 2021-04-26 06:59:16 +00:00
decompression-optimizer-unittest.cc [compiler] Rename type BailoutId to BytecodeOffset 2021-01-20 13:03:41 +00:00
diamond-unittest.cc [cleanup] [compiler] Fix (D)CHECK macros 2017-09-25 10:21:34 +00:00
effect-control-linearizer-unittest.cc [Turboprop] Remove ScheduledMachineLowering and replace with inline reductions. 2021-04-26 10:02:40 +00:00
frame-unittest.cc Reland "Reland "Reland "[compiler][wasm] Align Frame slots to value size""" 2021-03-05 19:49:19 +00:00
graph-reducer-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
graph-reducer-unittest.h [unittests] Convert to the new MOCK_METHOD macro. 2020-06-10 15:50:38 +00:00
graph-trimmer-unittest.cc
graph-unittest.cc [frames] Add UnoptimizedFrame 2021-02-15 14:35:04 +00:00
graph-unittest.h [turbofan] introduce a deterministic tick measurement and assert optimization doesn't take too long 2019-07-17 07:00:00 +00:00
int64-lowering-unittest.cc Reland "[codegen] Add static interface descriptors" 2021-04-16 15:43:05 +00:00
js-call-reducer-unittest.cc Collect receiver to feedback for prototype.apply 2021-05-06 15:43:47 +00:00
js-create-lowering-unittest.cc [frames] Add UnoptimizedFrame 2021-02-15 14:35:04 +00:00
js-intrinsic-lowering-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
js-native-context-specialization-unittest.cc [TurboFan] Fix max double string length in JSNativeContextSpecialization 2021-04-21 13:29:50 +00:00
js-operator-unittest.cc [tests] Fix subobject-linkage error when building with GCC 2019-10-07 11:11:39 +00:00
js-typed-lowering-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
linkage-tail-call-unittest.cc Reland "[codegen][frames] Generalize argument padding slot code" 2021-03-05 22:35:30 +00:00
load-elimination-unittest.cc Retire PretenureFlag and use AllocationType everywhere. 2019-03-12 08:10:44 +00:00
loop-peeling-unittest.cc [turbofan] Add MachineRepresentation argument to LoopExitValue 2020-12-16 16:27:50 +00:00
machine-operator-reducer-unittest.cc [compiler] Silence NaNs in Float64Mod and Float64Atan2 2021-01-25 07:45:30 +00:00
machine-operator-unittest.cc [wasm][x64] Use the cmov instruction for WebAssembly's Select 2021-04-13 10:37:08 +00:00
node-cache-unittest.cc [turbofan] use ZoneUnorderedMap for NodeCache 2020-03-05 13:00:34 +00:00
node-matchers-unittest.cc [cleanup] Refactor compiler to use default members. 2018-09-17 12:12:21 +00:00
node-properties-unittest.cc [zone-compr] Add kCompressGraphZone constant 2020-07-24 08:50:11 +00:00
node-test-utils.cc [turbofan] Introduce LoadImmutable, use it in wasm compiler 2021-03-23 08:16:09 +00:00
node-test-utils.h [turbofan] Introduce LoadImmutable, use it in wasm compiler 2021-03-23 08:16:09 +00:00
node-unittest.cc [zone-compr] Add kCompressGraphZone constant 2020-07-24 08:50:11 +00:00
opcodes-unittest.cc [compiler] Refactor opcode macro lists 2020-06-23 07:54:14 +00:00
persistent-unittest.cc [ubsan] Fix numerical overflows in the compiler 2019-01-10 11:17:37 +00:00
redundancy-elimination-unittest.cc Remove obsolete {Binary,Number}OperationHint::kSigned32 2020-11-24 11:12:10 +00:00
schedule-unittest.cc Reland "[zone-compr] Introduce ZoneTypeTraits and ZoneCompression" 2020-07-31 11:43:08 +00:00
scheduler-rpo-unittest.cc [cleanup] Refactor compiler to use default members. 2018-09-17 12:12:21 +00:00
scheduler-unittest.cc [zone-compr] Add kCompressGraphZone constant 2020-07-24 08:50:11 +00:00
simplified-lowering-unittest.cc Reland "[turboprop] Pass required parameters as value inputs to TierUpCheck node" 2020-10-28 18:18:36 +00:00
simplified-operator-reducer-unittest.cc [turbofan] Reduce consecutive overflow addition with constants 2020-09-22 16:17:53 +00:00
simplified-operator-unittest.cc [ptr-compr] Remove Compressed mentions from in the pipeline 2019-11-11 12:23:41 +00:00
state-values-utils-unittest.cc [compiler] Optimize AddInputsToFrameStateDescriptor 2020-03-05 11:45:15 +00:00
typed-optimization-unittest.cc [compiler] Fix --trace-turbo-reduction in the presence of direct reads 2020-09-11 17:21:43 +00:00
typer-unittest.cc [compiler] Remove persistent handles as a broker parameter 2020-08-13 08:13:33 +00:00
value-numbering-reducer-unittest.cc Reland "[zone-compr] Introduce ZoneTypeTraits and ZoneCompression" 2020-07-31 11:43:08 +00:00
zone-stats-unittest.cc [zone] Cleanup zone allocations in src/compiler and tests, pt.3 2020-07-10 16:39:05 +00:00