js-builtin-reducer.h revision f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3
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/base/flags.h"
9#include "src/compiler/graph-reducer.h"
10
11namespace v8 {
12namespace internal {
13
14// Forward declarations.
15class CompilationDependencies;
16class Factory;
17
18namespace compiler {
19
20// Forward declarations.
21class CommonOperatorBuilder;
22struct FieldAccess;
23class JSGraph;
24class JSOperatorBuilder;
25class SimplifiedOperatorBuilder;
26class TypeCache;
27
28class JSBuiltinReducer final : public AdvancedReducer {
29 public:
30  // Flags that control the mode of operation.
31  enum Flag {
32    kNoFlags = 0u,
33    kDeoptimizationEnabled = 1u << 0,
34  };
35  typedef base::Flags<Flag> Flags;
36
37  JSBuiltinReducer(Editor* editor, JSGraph* jsgraph, Flags flags,
38                   CompilationDependencies* dependencies);
39  ~JSBuiltinReducer() final {}
40
41  Reduction Reduce(Node* node) final;
42
43 private:
44  Reduction ReduceArrayPop(Node* node);
45  Reduction ReduceArrayPush(Node* node);
46  Reduction ReduceDateGetTime(Node* node);
47  Reduction ReduceFunctionHasInstance(Node* node);
48  Reduction ReduceGlobalIsFinite(Node* node);
49  Reduction ReduceGlobalIsNaN(Node* node);
50  Reduction ReduceMathAbs(Node* node);
51  Reduction ReduceMathAcos(Node* node);
52  Reduction ReduceMathAcosh(Node* node);
53  Reduction ReduceMathAsin(Node* node);
54  Reduction ReduceMathAsinh(Node* node);
55  Reduction ReduceMathAtan(Node* node);
56  Reduction ReduceMathAtanh(Node* node);
57  Reduction ReduceMathAtan2(Node* node);
58  Reduction ReduceMathCbrt(Node* node);
59  Reduction ReduceMathCeil(Node* node);
60  Reduction ReduceMathClz32(Node* node);
61  Reduction ReduceMathCos(Node* node);
62  Reduction ReduceMathCosh(Node* node);
63  Reduction ReduceMathExp(Node* node);
64  Reduction ReduceMathExpm1(Node* node);
65  Reduction ReduceMathFloor(Node* node);
66  Reduction ReduceMathFround(Node* node);
67  Reduction ReduceMathImul(Node* node);
68  Reduction ReduceMathLog(Node* node);
69  Reduction ReduceMathLog1p(Node* node);
70  Reduction ReduceMathLog10(Node* node);
71  Reduction ReduceMathLog2(Node* node);
72  Reduction ReduceMathMax(Node* node);
73  Reduction ReduceMathMin(Node* node);
74  Reduction ReduceMathPow(Node* node);
75  Reduction ReduceMathRound(Node* node);
76  Reduction ReduceMathSign(Node* node);
77  Reduction ReduceMathSin(Node* node);
78  Reduction ReduceMathSinh(Node* node);
79  Reduction ReduceMathSqrt(Node* node);
80  Reduction ReduceMathTan(Node* node);
81  Reduction ReduceMathTanh(Node* node);
82  Reduction ReduceMathTrunc(Node* node);
83  Reduction ReduceNumberIsFinite(Node* node);
84  Reduction ReduceNumberIsInteger(Node* node);
85  Reduction ReduceNumberIsNaN(Node* node);
86  Reduction ReduceNumberIsSafeInteger(Node* node);
87  Reduction ReduceNumberParseInt(Node* node);
88  Reduction ReduceStringCharAt(Node* node);
89  Reduction ReduceStringCharCodeAt(Node* node);
90  Reduction ReduceStringFromCharCode(Node* node);
91  Reduction ReduceStringIteratorNext(Node* node);
92  Reduction ReduceArrayBufferViewAccessor(Node* node,
93                                          InstanceType instance_type,
94                                          FieldAccess const& access);
95
96  Node* ToNumber(Node* value);
97  Node* ToUint32(Node* value);
98
99  Flags flags() const { return flags_; }
100  Graph* graph() const;
101  Factory* factory() const;
102  JSGraph* jsgraph() const { return jsgraph_; }
103  Isolate* isolate() const;
104  CommonOperatorBuilder* common() const;
105  SimplifiedOperatorBuilder* simplified() const;
106  JSOperatorBuilder* javascript() const;
107  CompilationDependencies* dependencies() const { return dependencies_; }
108
109  CompilationDependencies* const dependencies_;
110  Flags const flags_;
111  JSGraph* const jsgraph_;
112  TypeCache const& type_cache_;
113};
114
115DEFINE_OPERATORS_FOR_FLAGS(JSBuiltinReducer::Flags)
116
117}  // namespace compiler
118}  // namespace internal
119}  // namespace v8
120
121#endif  // V8_COMPILER_JS_BUILTIN_REDUCER_H_
122