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_FRAME_SPECIALIZATION_H_
6#define V8_COMPILER_JS_FRAME_SPECIALIZATION_H_
7
8#include "src/compiler/graph-reducer.h"
9
10namespace v8 {
11namespace internal {
12
13// Forward declarations.
14class JavaScriptFrame;
15
16namespace compiler {
17
18// Forward declarations.
19class JSGraph;
20
21class JSFrameSpecialization final : public AdvancedReducer {
22 public:
23  JSFrameSpecialization(Editor* editor, JavaScriptFrame const* frame,
24                        JSGraph* jsgraph)
25      : AdvancedReducer(editor), frame_(frame), jsgraph_(jsgraph) {}
26  ~JSFrameSpecialization() final {}
27
28  Reduction Reduce(Node* node) final;
29
30 private:
31  Reduction ReduceOsrValue(Node* node);
32  Reduction ReduceOsrGuard(Node* node);
33  Reduction ReduceParameter(Node* node);
34
35  Isolate* isolate() const;
36  JavaScriptFrame const* frame() const { return frame_; }
37  JSGraph* jsgraph() const { return jsgraph_; }
38
39  JavaScriptFrame const* const frame_;
40  JSGraph* const jsgraph_;
41
42  DISALLOW_COPY_AND_ASSIGN(JSFrameSpecialization);
43};
44
45}  // namespace compiler
46}  // namespace internal
47}  // namespace v8
48
49#endif  // V8_COMPILER_JS_FRAME_SPECIALIZATION_H_
50