blob: ac6f266eed5336685937e829fbef62dbd567066c [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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"
Ben Murdochb8a8cc12014-11-26 15:28:44 +00009#include "src/compiler/simplified-operator.h"
10
11namespace v8 {
12namespace internal {
13namespace compiler {
14
Emily Bernierd0a1eb72015-03-24 16:35:39 -040015// Forward declarations.
16class CommonOperatorBuilder;
17class JSGraph;
18class MachineOperatorBuilder;
19
20
Ben Murdochb8a8cc12014-11-26 15:28:44 +000021class JSBuiltinReducer FINAL : public Reducer {
22 public:
Emily Bernierd0a1eb72015-03-24 16:35:39 -040023 explicit JSBuiltinReducer(JSGraph* jsgraph);
24 ~JSBuiltinReducer() FINAL {}
Ben Murdochb8a8cc12014-11-26 15:28:44 +000025
Emily Bernierd0a1eb72015-03-24 16:35:39 -040026 Reduction Reduce(Node* node) FINAL;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000027
28 private:
Emily Bernierd0a1eb72015-03-24 16:35:39 -040029 Reduction ReduceMathAbs(Node* node);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000030 Reduction ReduceMathSqrt(Node* node);
31 Reduction ReduceMathMax(Node* node);
32 Reduction ReduceMathImul(Node* node);
Emily Bernierd0a1eb72015-03-24 16:35:39 -040033 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_; }
Ben Murdochb8a8cc12014-11-26 15:28:44 +000042
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_