1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20/*!
21 * \file remove_no_op.h
22 * \brief Helper functions to construct and compose IR nodes.
23 */
24#ifndef TVM_TIR_TRANSFORMS_REMOVE_NO_OP_H_
25#define TVM_TIR_TRANSFORMS_REMOVE_NO_OP_H_
26
27#include <tvm/arith/analyzer.h>
28#include <tvm/tir/stmt.h>
29
30#include <optional>
31
32#include "../analysis/control_flow_graph.h"
33
34namespace tvm {
35namespace tir {
36
37/* \brief Remove no-ops from the statement
38 *
39 * Applies the same behavior as the tir.transform.RemoveNoOp pass, but
40 * on a single statement, usable as a subroutine in other passes.
41 *
42 * \param stmt The TIR statement from which to remove no-ops
43 *
44 * \param analyzer The analyzer to use while proving no-ops
45 *
46 * \param control_flow The analyzed control-flow graph, which contains
47 * the `stmt` to be analyzed. If provided, known buffer values will
48 * be used to remove no-ops. (e.g. Removing `buf[i] = 0` in cases
49 * where `buf[i]` is known to already contain zero.) If nullptr,
50 * known buffer values will not be used.
51 *
52 * \return The modified statement with no-ops removed
53 */
54Stmt RemoveNoOp(Stmt stmt, arith::Analyzer* analyzer,
55 std::optional<ControlFlowGraph> touch_pattern = std::nullopt,
56 const StmtNode* context = nullptr);
57
58} // namespace tir
59} // namespace tvm
60#endif // TVM_TIR_TRANSFORMS_REMOVE_NO_OP_H_
61