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.
5 #ifndef V8_COMPILER_JS_TYPED_LOWERING_H_
6 #define V8_COMPILER_JS_TYPED_LOWERING_H_
8 #include "src/compiler/graph-reducer.h"
9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/machine-operator.h"
11 #include "src/compiler/node.h"
12 #include "src/compiler/simplified-operator.h"
18 // Lowers JS-level operators to simplified operators based on types.
19 class JSTypedLowering FINAL : public Reducer {
21 explicit JSTypedLowering(JSGraph* jsgraph)
22 : jsgraph_(jsgraph), simplified_(jsgraph->zone()) {}
23 virtual ~JSTypedLowering();
25 virtual Reduction Reduce(Node* node) OVERRIDE;
27 JSGraph* jsgraph() { return jsgraph_; }
28 Graph* graph() { return jsgraph_->graph(); }
29 Zone* zone() { return jsgraph_->zone(); }
32 friend class JSBinopReduction;
34 Reduction ReplaceEagerly(Node* old, Node* node);
35 Reduction ReplaceWith(Node* node) { return Reducer::Replace(node); }
36 Reduction ReduceJSAdd(Node* node);
37 Reduction ReduceJSComparison(Node* node);
38 Reduction ReduceJSLoadProperty(Node* node);
39 Reduction ReduceJSStoreProperty(Node* node);
40 Reduction ReduceJSEqual(Node* node, bool invert);
41 Reduction ReduceJSStrictEqual(Node* node, bool invert);
42 Reduction ReduceJSToNumberInput(Node* input);
43 Reduction ReduceJSToStringInput(Node* input);
44 Reduction ReduceJSToBooleanInput(Node* input);
45 Reduction ReduceNumberBinop(Node* node, const Operator* numberOp);
46 Reduction ReduceI32Binop(Node* node, bool left_signed, bool right_signed,
47 const Operator* intOp);
48 Reduction ReduceI32Shift(Node* node, bool left_signed,
49 const Operator* shift_op);
51 JSOperatorBuilder* javascript() { return jsgraph_->javascript(); }
52 CommonOperatorBuilder* common() { return jsgraph_->common(); }
53 SimplifiedOperatorBuilder* simplified() { return &simplified_; }
54 MachineOperatorBuilder* machine() { return jsgraph_->machine(); }
57 SimplifiedOperatorBuilder simplified_;
60 } // namespace compiler
61 } // namespace internal
64 #endif // V8_COMPILER_JS_TYPED_LOWERING_H_