1// Copyright 2013 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_HYDROGEN_OSR_H_ 6#define V8_HYDROGEN_OSR_H_ 7 8#include "src/hydrogen.h" 9#include "src/ast.h" 10#include "src/zone.h" 11 12namespace v8 { 13namespace internal { 14 15// Responsible for building graph parts related to OSR and otherwise 16// setting up the graph to do an OSR compile. 17class HOsrBuilder : public ZoneObject { 18 public: 19 explicit HOsrBuilder(HOptimizedGraphBuilder* builder) 20 : unoptimized_frame_slots_(0), 21 builder_(builder), 22 osr_entry_(NULL), 23 osr_loop_entry_(NULL), 24 osr_values_(NULL) { } 25 26 // Creates the loop entry block for the given statement, setting up OSR 27 // entries as necessary, and sets the current block to the new block. 28 HBasicBlock* BuildOsrLoopEntry(IterationStatement* statement); 29 30 // Process the hydrogen graph after it has been completed, performing 31 // any OSR-specific cleanups or changes. 32 void FinishGraph(); 33 34 // Process the OSR values and phis after initial graph optimization. 35 void FinishOsrValues(); 36 37 // Return the number of slots in the unoptimized frame at the entry to OSR. 38 int UnoptimizedFrameSlots() const { 39 return unoptimized_frame_slots_; 40 } 41 42 bool HasOsrEntryAt(IterationStatement* statement); 43 44 private: 45 int unoptimized_frame_slots_; 46 HOptimizedGraphBuilder* builder_; 47 HBasicBlock* osr_entry_; 48 HBasicBlock* osr_loop_entry_; 49 ZoneList<HUnknownOSRValue*>* osr_values_; 50}; 51 52} } // namespace v8::internal 53 54#endif // V8_HYDROGEN_OSR_H_ 55