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 13 namespace v8 { 14 namespace internal { 15 namespace compiler { 16 17 // Specializes a given JSGraph to a given context, potentially constant folding 18 // some {LoadContext} nodes or strength reducing some {StoreContext} nodes. 19 class JSContextSpecializer { 20 public: JSContextSpecializer(CompilationInfo * info,JSGraph * jsgraph,Node * context)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