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_LOOP_PEELING_H_
10#define V8_COMPILER_WASM_LOOP_PEELING_H_
11
12#include "src/compiler/common-operator.h"
13#include "src/compiler/loop-analysis.h"
14
15namespace v8 {
16namespace internal {
17namespace compiler {
18
19// Loop peeling is an optimization that copies the body of a loop, creating
20// a new copy of the body called the "peeled iteration" that represents the
21// first iteration. It enables a kind of loop hoisting: repeated computations
22// without side-effects in the body of the loop can be computed in the first
23// iteration only and reused in the next iterations.
24void PeelWasmLoop(Node* loop_node, ZoneUnorderedSet<Node*>* loop, Graph* graph,
25                  CommonOperatorBuilder* common, Zone* tmp_zone,
26                  SourcePositionTable* source_positions,
27                  NodeOriginTable* node_origins);
28
29}  // namespace compiler
30}  // namespace internal
31}  // namespace v8
32
33#endif  // V8_COMPILER_WASM_LOOP_PEELING_H_
34