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 */
23#ifndef TVM_IR_ANALYSIS_H_
24#define TVM_IR_ANALYSIS_H_
25
26#include <tvm/ffi/extra/structural_visit.h>
27#include <tvm/ir/expr.h>
28
29#include <unordered_set>
30
31namespace tvm {
32
44inline ffi::Array<Var> UndefinedVars(ffi::AnyView object, const ffi::Array<Var>& defs = {}) {
45 std::unordered_set<const VarNode*> visited_vars;
46 for (const Var& var : defs) visited_vars.insert(var.get());
47 ffi::Array<Var> undefined;
48 ffi::StructuralWalk<ffi::WalkOrder::kPreOrder>(
49 object, [&](const VarNode* var, TVMFFIDefRegionKind kind) -> ffi::Expected<ffi::WalkResult> {
50 if (kind != kTVMFFIDefRegionKindNone) {
51 visited_vars.insert(var);
52 return ffi::WalkResult::Advance();
53 }
54 if (visited_vars.insert(var).second) {
55 undefined.push_back(ffi::GetRef<Var>(var));
56 }
57 return ffi::WalkResult::Skip();
58 });
59 return undefined;
60}
61
62} // namespace tvm
63#endif // TVM_IR_ANALYSIS_H_
Base expr nodes in TVM.
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23
ffi::Array< Var > UndefinedVars(ffi::AnyView object, const ffi::Array< Var > &defs={})
Find variable uses without a preceding definition in well-formed IR.
Definition analysis.h:44