1c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// Redistribution and use in source and binary forms, with or without
3c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// modification, are permitted provided that the following conditions are
4c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// met:
5c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//
6c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//     * Redistributions of source code must retain the above copyright
7c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       notice, this list of conditions and the following disclaimer.
8c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//     * Redistributions in binary form must reproduce the above
9c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       copyright notice, this list of conditions and the following
10c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       disclaimer in the documentation and/or other materials provided
11c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       with the distribution.
12c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//     * Neither the name of Google Inc. nor the names of its
13c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       contributors may be used to endorse or promote products derived
14c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//       from this software without specific prior written permission.
15c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org//
16c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
28c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org#ifndef V8_HYDROGEN_RANGE_ANALYSIS_H_
29c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org#define V8_HYDROGEN_RANGE_ANALYSIS_H_
30c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
31c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org#include "hydrogen.h"
32c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
33c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgnamespace v8 {
34c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgnamespace internal {
35c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
36c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
37c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgclass HRangeAnalysisPhase : public HPhase {
38c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org public:
39c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  explicit HRangeAnalysisPhase(HGraph* graph)
40c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org      : HPhase("H_Range analysis", graph), changed_ranges_(16, zone()) { }
41c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
4210480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org  void Run();
43c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
44c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org private:
45c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  void TraceRange(const char* msg, ...);
46e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org  void InferControlFlowRange(HCompareNumericAndBranch* test,
47e0e1b0d3e70c933d36ed381d511e9fda39f2a751mstarzinger@chromium.org                             HBasicBlock* dest);
48c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  void UpdateControlFlowRange(Token::Value op, HValue* value, HValue* other);
49c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  void InferRange(HValue* value);
50c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  void RollBackTo(int index);
51c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  void AddRange(HValue* value, Range* range);
52c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
53c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org  ZoneList<HValue*> changed_ranges_;
54c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org};
55c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
56c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
57c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org} }  // namespace v8::internal
58c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org
59c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.org#endif  // V8_HYDROGEN_RANGE_ANALYSIS_H_
60