blob: ae72ce650c59d198056c5b13db48c258f90109f4 [file] [log] [blame]
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +00001// Copyright 2013 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28#ifndef V8_HYDROGEN_OSR_H_
29#define V8_HYDROGEN_OSR_H_
30
31#include "hydrogen.h"
32#include "ast.h"
33#include "zone.h"
34
35namespace v8 {
36namespace internal {
37
38// Responsible for building graph parts related to OSR and otherwise
39// setting up the graph to do an OSR compile.
40class HOsrBuilder : public ZoneObject {
41 public:
42 explicit HOsrBuilder(HOptimizedGraphBuilder* builder)
hpayer@chromium.orgc5d49712013-09-11 08:25:48 +000043 : unoptimized_frame_slots_(0),
44 builder_(builder),
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +000045 osr_entry_(NULL),
46 osr_loop_entry_(NULL),
47 osr_values_(NULL) { }
jkummerow@chromium.orgc3669762013-09-30 13:42:25 +000048
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +000049 // Creates the loop entry block for the given statement, setting up OSR
50 // entries as necessary, and sets the current block to the new block.
jkummerow@chromium.orgc3669762013-09-30 13:42:25 +000051 HBasicBlock* BuildOsrLoopEntry(IterationStatement* statement);
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +000052
53 // Process the hydrogen graph after it has been completed, performing
54 // any OSR-specific cleanups or changes.
55 void FinishGraph();
56
57 // Process the OSR values and phis after initial graph optimization.
58 void FinishOsrValues();
59
hpayer@chromium.orgc5d49712013-09-11 08:25:48 +000060 // Return the number of slots in the unoptimized frame at the entry to OSR.
61 int UnoptimizedFrameSlots() const {
62 return unoptimized_frame_slots_;
63 }
64
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +000065 bool HasOsrEntryAt(IterationStatement* statement);
66
jkummerow@chromium.orgc3669762013-09-30 13:42:25 +000067 private:
hpayer@chromium.orgc5d49712013-09-11 08:25:48 +000068 int unoptimized_frame_slots_;
machenbach@chromium.orgc1789ee2013-07-05 07:09:57 +000069 HOptimizedGraphBuilder* builder_;
70 HBasicBlock* osr_entry_;
71 HBasicBlock* osr_loop_entry_;
72 ZoneList<HUnknownOSRValue*>* osr_values_;
73};
74
75} } // namespace v8::internal
76
77#endif // V8_HYDROGEN_OSR_H_