blob: 7d31619220d78c8b855a7a0813e992ddfe9e2e3b [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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_COMPILER_FRAME_ELIDER_H_
6#define V8_COMPILER_FRAME_ELIDER_H_
7
8#include "src/compiler/instruction.h"
9
10namespace v8 {
11namespace internal {
12namespace compiler {
13
14
15// Determine which instruction blocks need a frame and where frames must be
16// constructed/deconstructed.
17class FrameElider {
18 public:
19 explicit FrameElider(InstructionSequence* code);
20 void Run();
21
22
23 private:
24 void MarkBlocks();
25 void PropagateMarks();
26 void MarkDeConstruction();
27 bool PropagateInOrder();
28 bool PropagateReversed();
29 bool PropagateIntoBlock(InstructionBlock* block);
30 const InstructionBlocks& instruction_blocks() const;
31 InstructionBlock* InstructionBlockAt(RpoNumber rpo_number) const;
32 Instruction* InstructionAt(int index) const;
33
34 InstructionSequence* const code_;
35};
36
37} // namespace compiler
38} // namespace internal
39} // namespace v8
40
41#endif // V8_COMPILER_FRAME_ELIDER_H_