simplified-operator-reducer.h 1.5 KB
Newer Older
1 2 3 4 5 6 7 8
// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_COMPILER_SIMPLIFIED_OPERATOR_REDUCER_H_
#define V8_COMPILER_SIMPLIFIED_OPERATOR_REDUCER_H_

#include "src/compiler/graph-reducer.h"
9
#include "src/compiler/simplified-operator.h"
10 11 12 13 14 15 16 17 18 19 20 21 22

namespace v8 {
namespace internal {

// Forward declarations.
class Heap;

namespace compiler {

// Forward declarations.
class JSGraph;
class MachineOperatorBuilder;

23
class SimplifiedOperatorReducer FINAL : public Reducer {
24
 public:
25
  explicit SimplifiedOperatorReducer(JSGraph* jsgraph);
26 27
  virtual ~SimplifiedOperatorReducer();

28
  virtual Reduction Reduce(Node* node) OVERRIDE;
29 30

 private:
31
  Reduction Change(Node* node, const Operator* op, Node* a);
32 33 34
  Reduction ReplaceFloat64(double value);
  Reduction ReplaceInt32(int32_t value);
  Reduction ReplaceUint32(uint32_t value) {
35
    return ReplaceInt32(bit_cast<int32_t>(value));
36 37 38 39 40
  }
  Reduction ReplaceNumber(double value);
  Reduction ReplaceNumber(int32_t value);

  Graph* graph() const;
41
  Factory* factory() const;
42
  JSGraph* jsgraph() const { return jsgraph_; }
43
  MachineOperatorBuilder* machine() const;
44
  SimplifiedOperatorBuilder* simplified() { return &simplified_; }
45 46

  JSGraph* jsgraph_;
47
  SimplifiedOperatorBuilder simplified_;
48 49 50 51 52 53 54 55 56

  DISALLOW_COPY_AND_ASSIGN(SimplifiedOperatorReducer);
};

}  // namespace compiler
}  // namespace internal
}  // namespace v8

#endif  // V8_COMPILER_SIMPLIFIED_OPERATOR_REDUCER_H_