1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef V8_COMPILER_VALUE_NUMBERING_REDUCER_H_ 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define V8_COMPILER_VALUE_NUMBERING_REDUCER_H_ 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch#include "src/base/compiler-specific.h" 9b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/compiler/graph-reducer.h" 10c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch#include "src/globals.h" 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace compiler { 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 16c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdochclass V8_EXPORT_PRIVATE ValueNumberingReducer final 17c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch : public NON_EXPORTED_BASE(Reducer) { 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 19f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch explicit ValueNumberingReducer(Zone* temp_zone, Zone* graph_zone); 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ~ValueNumberingReducer(); 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Reduction Reduce(Node* node) override; 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 25c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch enum { kInitialCapacity = 256u }; 26958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier 27c8c1d9e03f4babd16833b0f8ccf6aab5fa6e8c7aBen Murdoch Reduction ReplaceIfTypesMatch(Node* node, Node* replacement); 28958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier void Grow(); 29f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Zone* temp_zone() const { return temp_zone_; } 30f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Zone* graph_zone() const { return graph_zone_; } 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 32958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier Node** entries_; 33958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier size_t capacity_; 34958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier size_t size_; 35f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Zone* temp_zone_; 36f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch Zone* graph_zone_; 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace compiler 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace internal 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} // namespace v8 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // V8_COMPILER_VALUE_NUMBERING_REDUCER_H_ 44