1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2013 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 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifndef V8_CRANKSHAFT_HYDROGEN_RANGE_ANALYSIS_H_ 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define V8_CRANKSHAFT_HYDROGEN_RANGE_ANALYSIS_H_ 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch#include "src/base/compiler-specific.h" 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/crankshaft/hydrogen.h" 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochclass HRangeAnalysisPhase : public HPhase { 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch public: 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch explicit HRangeAnalysisPhase(HGraph* graph) 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch : HPhase("H_Range analysis", graph), changed_ranges_(16, zone()), 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch in_worklist_(graph->GetMaximumValueID(), zone()), 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worklist_(32, zone()) {} 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void Run(); 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch private: 25bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8Ben Murdoch PRINTF_FORMAT(2, 3) void TraceRange(const char* msg, ...); 26b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void InferControlFlowRange(HCompareNumericAndBranch* test, 27b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch HBasicBlock* dest); 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void UpdateControlFlowRange(Token::Value op, HValue* value, HValue* other); 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void InferRange(HValue* value); 30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void RollBackTo(int index); 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void AddRange(HValue* value, Range* range); 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void AddToWorklist(HValue* value) { 33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (in_worklist_.Contains(value->id())) return; 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch in_worklist_.Add(value->id()); 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch worklist_.Add(value, zone()); 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void PropagateMinusZeroChecks(HValue* value); 38b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch void PoisonRanges(); 39b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 40b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZoneList<HValue*> changed_ranges_; 41b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 42b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch BitVector in_worklist_; 43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch ZoneList<HValue*> worklist_; 44b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch DISALLOW_COPY_AND_ASSIGN(HRangeAnalysisPhase); 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch}; 47b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 48b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 51b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#endif // V8_CRANKSHAFT_HYDROGEN_RANGE_ANALYSIS_H_ 53