1// Copyright 2021 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#if !V8_ENABLE_WEBASSEMBLY
6#error This header should only be included if WebAssembly is enabled.
7#endif  // !V8_ENABLE_WEBASSEMBLY
8
9#ifndef V8_COMPILER_WASM_ESCAPE_ANALYSIS_H_
10#define V8_COMPILER_WASM_ESCAPE_ANALYSIS_H_
11
12#include "src/compiler/graph-reducer.h"
13
14namespace v8 {
15namespace internal {
16namespace compiler {
17
18class MachineGraph;
19
20// Eliminate allocated objects which are only assigned to.
21// Current restrictions: Does not work for arrays (until they are also allocated
22// with AllocateRaw). Does not work if the allocated object is passed to a phi.
23class WasmEscapeAnalysis final : public AdvancedReducer {
24 public:
25  WasmEscapeAnalysis(Editor* editor, MachineGraph* mcgraph)
26      : AdvancedReducer(editor), mcgraph_(mcgraph) {}
27
28  const char* reducer_name() const override { return "WasmEscapeAnalysis"; }
29
30  Reduction Reduce(Node* node) final;
31
32 private:
33  Reduction ReduceAllocateRaw(Node* call);
34  MachineGraph* const mcgraph_;
35};
36
37}  // namespace compiler
38}  // namespace internal
39}  // namespace v8
40
41#endif  // V8_COMPILER_WASM_ESCAPE_ANALYSIS_H_
42