summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/js-call-reducer.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/compiler/js-call-reducer.h')
-rw-r--r--deps/v8/src/compiler/js-call-reducer.h29
1 files changed, 26 insertions, 3 deletions
diff --git a/deps/v8/src/compiler/js-call-reducer.h b/deps/v8/src/compiler/js-call-reducer.h
index 6e2353c4c1..b2656b6be8 100644
--- a/deps/v8/src/compiler/js-call-reducer.h
+++ b/deps/v8/src/compiler/js-call-reducer.h
@@ -15,6 +15,7 @@ namespace internal {
// Forward declarations.
class CompilationDependencies;
class Factory;
+class VectorSlotPair;
namespace compiler {
@@ -24,7 +25,6 @@ class CommonOperatorBuilder;
class JSGraph;
class JSOperatorBuilder;
class SimplifiedOperatorBuilder;
-class VectorSlotPair;
// Performs strength reduction on {JSConstruct} and {JSCall} nodes,
// which might allow inlining or other optimizations to be performed afterwards.
@@ -55,7 +55,6 @@ class JSCallReducer final : public AdvancedReducer {
Reduction ReduceArrayConstructor(Node* node);
Reduction ReduceBooleanConstructor(Node* node);
Reduction ReduceCallApiFunction(Node* node, Handle<JSFunction> function);
- Reduction ReduceNumberConstructor(Node* node);
Reduction ReduceFunctionPrototypeApply(Node* node);
Reduction ReduceFunctionPrototypeBind(Node* node);
Reduction ReduceFunctionPrototypeCall(Node* node);
@@ -73,8 +72,18 @@ class JSCallReducer final : public AdvancedReducer {
Reduction ReduceReflectGetPrototypeOf(Node* node);
Reduction ReduceReflectHas(Node* node);
Reduction ReduceArrayForEach(Handle<JSFunction> function, Node* node);
+ Reduction ReduceArrayReduce(Handle<JSFunction> function, Node* node);
+ Reduction ReduceArrayReduceRight(Handle<JSFunction> function, Node* node);
Reduction ReduceArrayMap(Handle<JSFunction> function, Node* node);
Reduction ReduceArrayFilter(Handle<JSFunction> function, Node* node);
+ enum class ArrayFindVariant : uint8_t { kFind, kFindIndex };
+ Reduction ReduceArrayFind(ArrayFindVariant variant,
+ Handle<JSFunction> function, Node* node);
+ Reduction ReduceArrayEvery(Handle<JSFunction> function, Node* node);
+ Reduction ReduceArraySome(Handle<JSFunction> function, Node* node);
+ Reduction ReduceArrayPrototypePush(Node* node);
+ Reduction ReduceArrayPrototypePop(Node* node);
+ Reduction ReduceArrayPrototypeShift(Node* node);
Reduction ReduceCallOrConstructWithArrayLikeOrSpread(
Node* node, int arity, CallFrequency const& frequency,
VectorSlotPair const& feedback);
@@ -85,6 +94,10 @@ class JSCallReducer final : public AdvancedReducer {
Reduction ReduceJSCallWithArrayLike(Node* node);
Reduction ReduceJSCallWithSpread(Node* node);
Reduction ReduceReturnReceiver(Node* node);
+ Reduction ReduceStringPrototypeIndexOf(Handle<JSFunction> function,
+ Node* node);
+ Reduction ReduceStringPrototypeCharAt(Node* node);
+ Reduction ReduceStringPrototypeCharCodeAt(Node* node);
Reduction ReduceSoftDeoptimize(Node* node, DeoptimizeReason reason);
@@ -107,10 +120,20 @@ class JSCallReducer final : public AdvancedReducer {
Node* effect, Node** check_fail,
Node** control);
+ // Begin the central loop of a higher-order array builtin. A Loop is wired
+ // into {control}, an EffectPhi into {effect}, and the array index {k} is
+ // threaded into a Phi, which is returned. It's helpful to save the
+ // value of {control} as the loop node, and of {effect} as the corresponding
+ // EffectPhi after function return.
+ Node* WireInLoopStart(Node* k, Node** control, Node** effect);
+ void WireInLoopEnd(Node* loop, Node* eloop, Node* vloop, Node* k,
+ Node* control, Node* effect);
+
// Load receiver[k], first bounding k by receiver array length.
// k is thusly changed, and the effect is changed as well.
Node* SafeLoadElement(ElementsKind kind, Node* receiver, Node* control,
- Node** effect, Node** k);
+ Node** effect, Node** k,
+ const VectorSlotPair& feedback);
Graph* graph() const;
JSGraph* jsgraph() const { return jsgraph_; }