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#include "src/compiler/js-graph.h" 10#include "src/contexts.h" 11#include "src/v8.h" 12 13namespace v8 { 14namespace internal { 15namespace compiler { 16 17// Specializes a given JSGraph to a given context, potentially constant folding 18// some {LoadContext} nodes or strength reducing some {StoreContext} nodes. 19class JSContextSpecializer { 20 public: 21 JSContextSpecializer(CompilationInfo* info, JSGraph* jsgraph, Node* context) 22 : info_(info), jsgraph_(jsgraph), context_(context) {} 23 24 void SpecializeToContext(); 25 Reduction ReduceJSLoadContext(Node* node); 26 Reduction ReduceJSStoreContext(Node* node); 27 28 private: 29 CompilationInfo* info_; 30 JSGraph* jsgraph_; 31 Node* context_; 32}; 33} 34} 35} // namespace v8::internal::compiler 36 37#endif // V8_COMPILER_JS_CONTEXT_SPECIALIZATION_H_ 38