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();
54 if (visited_vars.insert(var).second) {
55 undefined.push_back(ffi::GetRef<Var>(var));
57 return ffi::WalkResult::Skip();
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