bc188caa0680015064c02812edb27b411facfa69
[platform/upstream/nodejs.git] / deps / v8 / src / compiler / js-intrinsic-lowering.h
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_INTRINSIC_LOWERING_H_
6 #define V8_COMPILER_JS_INTRINSIC_LOWERING_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 // Lowers certain JS-level runtime calls.
22 class JSIntrinsicLowering FINAL : public Reducer {
23  public:
24   explicit JSIntrinsicLowering(JSGraph* jsgraph);
25   ~JSIntrinsicLowering() FINAL {}
26
27   Reduction Reduce(Node* node) FINAL;
28
29  private:
30   Reduction ReduceInlineIsSmi(Node* node);
31   Reduction ReduceInlineIsNonNegativeSmi(Node* node);
32   Reduction ReduceInlineIsInstanceType(Node* node, InstanceType instance_type);
33   Reduction ReduceInlineValueOf(Node* node);
34
35   Reduction Change(Node* node, const Operator* op);
36   Reduction Change(Node* node, const Operator* op, Node* a, Node* b, Node* c);
37
38   Graph* graph() const;
39   JSGraph* jsgraph() const { return jsgraph_; }
40   CommonOperatorBuilder* common() const;
41   MachineOperatorBuilder* machine() const;
42   SimplifiedOperatorBuilder* simplified() { return &simplified_; }
43
44   JSGraph* jsgraph_;
45   SimplifiedOperatorBuilder simplified_;
46 };
47
48 }  // namespace compiler
49 }  // namespace internal
50 }  // namespace v8
51
52 #endif  // V8_COMPILER_JS_INTRINSIC_LOWERING_H_