1e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file.
4e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
5e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#ifndef V8_HYDROGEN_INFER_TYPES_H_
6e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#define V8_HYDROGEN_INFER_TYPES_H_
7e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/hydrogen.h"
9e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
10e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.orgnamespace v8 {
11e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.orgnamespace internal {
12e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
13e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
14e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.orgclass HInferTypesPhase : public HPhase {
15e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org public:
16e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  explicit HInferTypesPhase(HGraph* graph)
17e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org      : HPhase("H_Inferring types", graph), worklist_(8, zone()),
18e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org        in_worklist_(graph->GetMaximumValueID(), zone()) { }
19e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
20e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  void Run() {
21e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org    InferTypes(0, graph()->blocks()->length() - 1);
22e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  }
23e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
24e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org private:
25e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  void InferTypes(int from_inclusive, int to_inclusive);
26e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
27e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  ZoneList<HValue*> worklist_;
28e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  BitVector in_worklist_;
29e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
30e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  DISALLOW_COPY_AND_ASSIGN(HInferTypesPhase);
31e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org};
32e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
33e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
34e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org} }  // namespace v8::internal
35e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org
36e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org#endif  // V8_HYDROGEN_INFER_TYPES_H_
37