LCOV - code coverage report
Current view: top level - src/compiler - js-call-reducer.h (source / functions) Hit Total Coverage
Test: app.info Lines: 2 3 66.7 %
Date: 2017-10-20 Functions: 0 3 0.0 %

          Line data    Source code
       1             : // Copyright 2015 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_COMPILER_JS_CALL_REDUCER_H_
       6             : #define V8_COMPILER_JS_CALL_REDUCER_H_
       7             : 
       8             : #include "src/base/flags.h"
       9             : #include "src/compiler/graph-reducer.h"
      10             : #include "src/deoptimize-reason.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : 
      15             : // Forward declarations.
      16             : class CompilationDependencies;
      17             : class Factory;
      18             : 
      19             : namespace compiler {
      20             : 
      21             : // Forward declarations.
      22             : class CallFrequency;
      23             : class CommonOperatorBuilder;
      24             : class JSGraph;
      25             : class JSOperatorBuilder;
      26             : class SimplifiedOperatorBuilder;
      27             : class VectorSlotPair;
      28             : 
      29             : // Performs strength reduction on {JSConstruct} and {JSCall} nodes,
      30             : // which might allow inlining or other optimizations to be performed afterwards.
      31      443382 : class JSCallReducer final : public AdvancedReducer {
      32             :  public:
      33             :   // Flags that control the mode of operation.
      34             :   enum Flag { kNoFlags = 0u, kBailoutOnUninitialized = 1u << 0 };
      35             :   typedef base::Flags<Flag> Flags;
      36             : 
      37             :   JSCallReducer(Editor* editor, JSGraph* jsgraph, Flags flags,
      38             :                 Handle<Context> native_context,
      39             :                 CompilationDependencies* dependencies)
      40             :       : AdvancedReducer(editor),
      41             :         jsgraph_(jsgraph),
      42             :         flags_(flags),
      43             :         native_context_(native_context),
      44      443382 :         dependencies_(dependencies) {}
      45             : 
      46           0 :   const char* reducer_name() const override { return "JSCallReducer"; }
      47             : 
      48             :   Reduction Reduce(Node* node) final;
      49             : 
      50             :   // Processes the waitlist gathered while the reducer was running,
      51             :   // and does a final attempt to reduce the nodes in the waitlist.
      52             :   void Finalize() final;
      53             : 
      54             :  private:
      55             :   Reduction ReduceArrayConstructor(Node* node);
      56             :   Reduction ReduceBooleanConstructor(Node* node);
      57             :   Reduction ReduceCallApiFunction(
      58             :       Node* node, Handle<FunctionTemplateInfo> function_template_info);
      59             :   Reduction ReduceNumberConstructor(Node* node);
      60             :   Reduction ReduceFunctionPrototypeApply(Node* node);
      61             :   Reduction ReduceFunctionPrototypeBind(Node* node);
      62             :   Reduction ReduceFunctionPrototypeCall(Node* node);
      63             :   Reduction ReduceFunctionPrototypeHasInstance(Node* node);
      64             :   Reduction ReduceObjectConstructor(Node* node);
      65             :   Reduction ReduceObjectGetPrototype(Node* node, Node* object);
      66             :   Reduction ReduceObjectGetPrototypeOf(Node* node);
      67             :   Reduction ReduceObjectPrototypeGetProto(Node* node);
      68             :   Reduction ReduceObjectPrototypeHasOwnProperty(Node* node);
      69             :   Reduction ReduceObjectPrototypeIsPrototypeOf(Node* node);
      70             :   Reduction ReduceReflectApply(Node* node);
      71             :   Reduction ReduceReflectConstruct(Node* node);
      72             :   Reduction ReduceReflectGetPrototypeOf(Node* node);
      73             :   Reduction ReduceReflectHas(Node* node);
      74             :   Reduction ReduceArrayForEach(Handle<JSFunction> function, Node* node);
      75             :   Reduction ReduceArrayMap(Handle<JSFunction> function, Node* node);
      76             :   Reduction ReduceCallOrConstructWithArrayLikeOrSpread(
      77             :       Node* node, int arity, CallFrequency const& frequency,
      78             :       VectorSlotPair const& feedback);
      79             :   Reduction ReduceJSConstruct(Node* node);
      80             :   Reduction ReduceJSConstructWithArrayLike(Node* node);
      81             :   Reduction ReduceJSConstructWithSpread(Node* node);
      82             :   Reduction ReduceJSCall(Node* node);
      83             :   Reduction ReduceJSCallWithArrayLike(Node* node);
      84             :   Reduction ReduceJSCallWithSpread(Node* node);
      85             :   Reduction ReduceReturnReceiver(Node* node);
      86             : 
      87             :   Reduction ReduceSoftDeoptimize(Node* node, DeoptimizeReason reason);
      88             : 
      89             :   Graph* graph() const;
      90             :   JSGraph* jsgraph() const { return jsgraph_; }
      91             :   Isolate* isolate() const;
      92             :   Factory* factory() const;
      93             :   Handle<Context> native_context() const { return native_context_; }
      94             :   Handle<JSGlobalProxy> global_proxy() const;
      95             :   CommonOperatorBuilder* common() const;
      96             :   JSOperatorBuilder* javascript() const;
      97             :   SimplifiedOperatorBuilder* simplified() const;
      98             :   Flags flags() const { return flags_; }
      99             :   CompilationDependencies* dependencies() const { return dependencies_; }
     100             : 
     101             :   JSGraph* const jsgraph_;
     102             :   Flags const flags_;
     103             :   Handle<Context> const native_context_;
     104             :   CompilationDependencies* const dependencies_;
     105             :   std::set<Node*> waitlist_;
     106             : };
     107             : 
     108             : }  // namespace compiler
     109             : }  // namespace internal
     110             : }  // namespace v8
     111             : 
     112             : #endif  // V8_COMPILER_JS_CALL_REDUCER_H_

Generated by: LCOV version 1.10