ac6f266eed5336685937e829fbef62dbd567066c
[platform/upstream/nodejs.git] / deps / v8 / src / compiler / js-builtin-reducer.h
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_BUILTIN_REDUCER_H_
6 #define V8_COMPILER_JS_BUILTIN_REDUCER_H_
7
8 #include "src/compiler/graph-reducer.h"
9 #include "src/compiler/simplified-operator.h"
10
11 namespace v8 {
12 namespace internal {
13 namespace compiler {
14
15 // Forward declarations.
16 class CommonOperatorBuilder;
17 class JSGraph;
18 class MachineOperatorBuilder;
19
20
21 class JSBuiltinReducer FINAL : public Reducer {
22  public:
23   explicit JSBuiltinReducer(JSGraph* jsgraph);
24   ~JSBuiltinReducer() FINAL {}
25
26   Reduction Reduce(Node* node) FINAL;
27
28  private:
29   Reduction ReduceMathAbs(Node* node);
30   Reduction ReduceMathSqrt(Node* node);
31   Reduction ReduceMathMax(Node* node);
32   Reduction ReduceMathImul(Node* node);
33   Reduction ReduceMathFround(Node* node);
34   Reduction ReduceMathFloor(Node* node);
35   Reduction ReduceMathCeil(Node* node);
36
37   JSGraph* jsgraph() const { return jsgraph_; }
38   Graph* graph() const;
39   CommonOperatorBuilder* common() const;
40   MachineOperatorBuilder* machine() const;
41   SimplifiedOperatorBuilder* simplified() { return &simplified_; }
42
43   JSGraph* jsgraph_;
44   SimplifiedOperatorBuilder simplified_;
45 };
46
47 }  // namespace compiler
48 }  // namespace internal
49 }  // namespace v8
50
51 #endif  // V8_COMPILER_JS_BUILTIN_REDUCER_H_