// 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_VALUE_NUMBERING_REDUCER_H_ #define V8_COMPILER_VALUE_NUMBERING_REDUCER_H_ #include "src/base/compiler-specific.h" #include "src/common/globals.h" #include "src/compiler/graph-reducer.h" namespace v8 { namespace internal { namespace compiler { class V8_EXPORT_PRIVATE ValueNumberingReducer final : public NON_EXPORTED_BASE(Reducer) { public: explicit ValueNumberingReducer(Zone* temp_zone, Zone* graph_zone); ~ValueNumberingReducer() override; const char* reducer_name() const override { return "ValueNumberingReducer"; } Reduction Reduce(Node* node) override; private: enum { kInitialCapacity = 256u }; Reduction ReplaceIfTypesMatch(Node* node, Node* replacement); void Grow(); Zone* temp_zone() const { return temp_zone_; } Zone* graph_zone() const { return graph_zone_; } Node** entries_; size_t capacity_; size_t size_; Zone* temp_zone_; Zone* graph_zone_; }; } // namespace compiler } // namespace internal } // namespace v8 #endif // V8_COMPILER_VALUE_NUMBERING_REDUCER_H_