diff options
Diffstat (limited to 'deps/v8/src/compiler/js-call-reducer.h')
-rw-r--r-- | deps/v8/src/compiler/js-call-reducer.h | 29 |
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_; } |