Home | History | Annotate | Download | only in compiler
      1 // Copyright 2014 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_CONTEXT_SPECIALIZATION_H_
      6 #define V8_COMPILER_JS_CONTEXT_SPECIALIZATION_H_
      7 
      8 #include "src/compiler/graph-reducer.h"
      9 
     10 namespace v8 {
     11 namespace internal {
     12 namespace compiler {
     13 
     14 // Forward declarations.
     15 class JSGraph;
     16 class JSOperatorBuilder;
     17 
     18 
     19 // Specializes a given JSGraph to a given context, potentially constant folding
     20 // some {LoadContext} nodes or strength reducing some {StoreContext} nodes.
     21 class JSContextSpecialization final : public AdvancedReducer {
     22  public:
     23   JSContextSpecialization(Editor* editor, JSGraph* jsgraph,
     24                           MaybeHandle<Context> context)
     25       : AdvancedReducer(editor), jsgraph_(jsgraph), context_(context) {}
     26 
     27   Reduction Reduce(Node* node) final;
     28 
     29  private:
     30   Reduction ReduceJSLoadContext(Node* node);
     31   Reduction ReduceJSStoreContext(Node* node);
     32 
     33   Reduction SimplifyJSStoreContext(Node* node, Node* new_context,
     34                                    size_t new_depth);
     35   Reduction SimplifyJSLoadContext(Node* node, Node* new_context,
     36                                   size_t new_depth);
     37 
     38   Isolate* isolate() const;
     39   JSOperatorBuilder* javascript() const;
     40   JSGraph* jsgraph() const { return jsgraph_; }
     41   MaybeHandle<Context> context() const { return context_; }
     42 
     43   JSGraph* const jsgraph_;
     44   MaybeHandle<Context> context_;
     45 
     46   DISALLOW_COPY_AND_ASSIGN(JSContextSpecialization);
     47 };
     48 
     49 }  // namespace compiler
     50 }  // namespace internal
     51 }  // namespace v8
     52 
     53 #endif  // V8_COMPILER_JS_CONTEXT_SPECIALIZATION_H_
     54