tvm
Loading...
Searching...
No Matches
analysis.h
Go to the documentation of this file.
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
24#ifndef TVM_S_TIR_ANALYSIS_H_
25#define TVM_S_TIR_ANALYSIS_H_
26
27#include <tvm/ir/module.h>
28#include <tvm/ir/prim/expr.h>
29#include <tvm/ir/transform.h>
30#include <tvm/s_tir/stmt.h>
31#include <tvm/target/target.h>
32#include <tvm/tirx/function.h>
33#include <tvm/tirx/stmt.h>
34
35#include <optional>
36
37namespace tvm {
38namespace tirx {
51TVM_DLL ffi::Array<ffi::Array<TensorRegion>> GetSBlockAccessRegion(
52 const s_tir::SBlock& block, const ffi::Map<Var, TensorVar>& tensor_var_map);
53
62TVM_DLL ffi::Array<ffi::Array<TensorRegion>> GetSBlockReadWriteRegion(
63 const s_tir::SBlock& block, const ffi::Map<Var, TensorVar>& tensor_var_map);
64
73TVM_DLL ffi::Map<TensorVar, ffi::Optional<Stmt>> DetectTensorAccessLCA(const Function& func);
74
90
91} // namespace tirx
92
93namespace sym {
94class AnalyzerObj;
95class Analyzer;
96} // namespace sym
97
98namespace s_tir {
99using namespace tvm::tirx;
100
102TVM_DLL bool VerifyWellFormed(const tirx::Function& func, bool assert_mode = true);
104TVM_DLL bool VerifyWellFormed(const IRModule& mod, bool assert_mode = true);
105
111TVM_DLL double EstimateTIRFlops(const Stmt& stmt);
112
118TVM_DLL double EstimateTIRFlops(const IRModule& mod);
119
126TVM_DLL bool IsPureFunction(const Function& func, bool assert_on_error = false);
127
134TVM_DLL bool VerifyGPUCode(const Function& func, ffi::Map<ffi::String, PrimExpr> constraints);
135
141
147TVM_DLL std::optional<MemCpyDetails> IdentifyMemCpy(const For& loop, const sym::Analyzer& analyzer);
148
157TVM_DLL ffi::Array<ffi::Optional<Range>> DomainTouched(const Stmt& body, const TensorVar& tensor,
158 bool consider_loads, bool consider_stores);
159
165TVM_DLL ffi::Map<ffi::String, ffi::Map<ffi::String, int64_t>> CalculateAllocatedBytes(
166 const Function& func);
167
173TVM_DLL ffi::Map<ffi::String, ffi::Map<ffi::String, int64_t>> CalculateAllocatedBytes(
174 const IRModule& mod);
175
180TVM_DLL ffi::Array<tvm::transform::Pass> GetVTCMCompactionPasses();
181
188TVM_DLL bool VerifyVTCMLimit(const IRModule& mod, int64_t limit);
189
196TVM_DLL bool VerifyVTCMLimit(const Function& func, int64_t limit);
197
198namespace transform {
199
202
208TVM_DLL Pass VerifyGPUCode(ffi::Map<ffi::String, PrimExpr> constraints);
209
215TVM_DLL Pass VerifyVTCMLimit(ffi::Optional<Target> default_target = std::nullopt);
216
221TVM_DLL Pass OOBChecker();
222
223} // namespace transform
224} // namespace s_tir
225} // namespace tvm
226#endif // TVM_S_TIR_ANALYSIS_H_
Managed reference to ForNode.
Definition stmt.h:511
Managed reference class to IRModuleNode.
Definition module.h:255
Container of all statements.
Definition stmt.h:62
Managed reference to TensorRegionNode.
Definition expr.h:1079
A block is a basic schedule unit in TIR.
Definition stmt.h:112
Managed reference to SBlockNode.
Definition stmt.h:164
Managed reference to AnalyzerObj.
Definition analyzer.h:916
Managed reference to FunctionNode.
Definition function.h:105
Checked zero-state view over an ordinary VarNode with TensorType.
Definition expr.h:50
PassContext that is used to configure the pass behavior.
Definition transform.h:62
Definition transform.h:298
TIR expressions.
Utilities for IR transformations.
IRModule that holds the functions and type definitions.
Pass VerifyGPUCode(ffi::Map< ffi::String, PrimExpr > constraints)
Pass to verify GPU code constraints.
Pass VerifyVTCMLimit(ffi::Optional< Target > default_target=std::nullopt)
Pass to check if VTCM usage is within limit.
Pass OOBChecker()
Statically check TIR code for out of bounds array access.
bool IsPureFunction(const Function &func, bool assert_on_error=false)
Analyze the side effect of a function.
bool VerifyVTCMLimit(const IRModule &mod, int64_t limit)
Verifies that the VTCM usage for all functions in the given IRModule.
ffi::Array< tvm::transform::Pass > GetVTCMCompactionPasses()
Get the list of lowering passes to calculate the compacted VTCM allocation size.
bool VerifyGPUCode(const Function &func, ffi::Map< ffi::String, PrimExpr > constraints)
Verify the correctness of a GPU code.
double EstimateTIRFlops(const Stmt &stmt)
Estimate the FLOPs of a TIR fragment.
ffi::Map< ffi::String, ffi::Map< ffi::String, int64_t > > CalculateAllocatedBytes(const Function &func)
Calculate the allocated memory per scope in bytes needed inside the TIR Function.
bool VerifyWellFormed(const tirx::Function &func, bool assert_mode=true)
Verify variable/tensor definitions, load types and schedulable block boundaries.
ffi::Array< ffi::Optional< Range > > DomainTouched(const Stmt &body, const TensorVar &tensor, bool consider_loads, bool consider_stores)
Infer the domain touched by tensor accesses within a statement.
std::optional< MemCpyDetails > IdentifyMemCpy(const For &loop, const sym::Analyzer &analyzer)
Identify whether a For loop is semantically equivalent to MemCpy.
Backend-defined execution hierarchy nodes shared by layouts and tile calls.
Definition axis_group_graph.h:41
ffi::Map< TensorVar, ffi::Optional< Stmt > > DetectTensorAccessLCA(const Function &func)
Detect the lowest common ancestor(LCA) of tensor access, including both high-level access(TensorLoad,...
const s_tir::SBlockNode * FindAnchorBlock(const IRModule &mod)
Find the "anchor block" of the given module. We define the anchor block to be the block with (1) an i...
ffi::Array< ffi::Array< TensorRegion > > GetSBlockAccessRegion(const s_tir::SBlock &block, const ffi::Map< Var, TensorVar > &tensor_var_map)
Auto detect the block access region according to its body stmt It will detect the access region as an...
ffi::Array< ffi::Array< TensorRegion > > GetSBlockReadWriteRegion(const s_tir::SBlock &block, const ffi::Map< Var, TensorVar > &tensor_var_map)
Auto detect the block read/write region according to its body stmt. An opaque access will be counted ...
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23
S-TIR (Schedulable TIR) statements and attributes.
Helper struct for return value of IdentifyMemCpy.
Definition analysis.h:137
TensorRegion source
Definition analysis.h:138
TensorRegion dest
Definition analysis.h:139
Compilation target object.
TIR Function.
TIRx statements and shared statement entry header.