diff --git a/include/tvm/ir/global_var_supply.h b/include/tvm/ir/global_var_supply.h index 276c64a0d753..9ce0da5e02a3 100644 --- a/include/tvm/ir/global_var_supply.h +++ b/include/tvm/ir/global_var_supply.h @@ -41,7 +41,7 @@ class GlobalVarSupplyNode : public Object { /*! * \brief Empty constructor. Will use an empty NameSupply. */ - GlobalVarSupplyNode() : GlobalVarSupplyNode(NameSupply("")) {} + GlobalVarSupplyNode() : GlobalVarSupplyNode(NameSupply()) {} /*! * \brief Constructor. @@ -100,7 +100,7 @@ class GlobalVarSupply : public ObjectRef { * \param name_supply The NameSupply to be used when generating new GlobalVars. * \param name_to_var_map An optional map. */ - TVM_DLL explicit GlobalVarSupply(const NameSupply& name_supply, + TVM_DLL explicit GlobalVarSupply(const NameSupply& name_supply = NameSupply(), std::unordered_map name_to_var_map = {}); /*! @@ -117,7 +117,8 @@ class GlobalVarSupply : public ObjectRef { */ TVM_DLL explicit GlobalVarSupply(const IRModule module); - TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(GlobalVarSupply, ObjectRef, GlobalVarSupplyNode); + TVM_DEFINE_MUTABLE_NOTNULLABLE_OBJECT_REF_METHODS(GlobalVarSupply, ObjectRef, + GlobalVarSupplyNode); }; } // namespace tvm diff --git a/include/tvm/ir/name_supply.h b/include/tvm/ir/name_supply.h index f2c9af4926b3..11dac3fe52ad 100644 --- a/include/tvm/ir/name_supply.h +++ b/include/tvm/ir/name_supply.h @@ -116,7 +116,7 @@ class NameSupply : public ObjectRef { * \param prefix The prefix to be used with this NameSupply. * \param name_map An optional map. */ - TVM_DLL explicit NameSupply(const String& prefix, + TVM_DLL explicit NameSupply(const String& prefix = "", std::unordered_map name_map = {}); /*! @@ -129,7 +129,7 @@ class NameSupply : public ObjectRef { TVM_DLL explicit NameSupply(Iter begin, Iter end, Lambda f) : NameSupply("", GetNameMap(begin, end, f)) {} - TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(NameSupply, ObjectRef, NameSupplyNode); + TVM_DEFINE_MUTABLE_NOTNULLABLE_OBJECT_REF_METHODS(NameSupply, ObjectRef, NameSupplyNode); private: template diff --git a/src/auto_scheduler/feature.cc b/src/auto_scheduler/feature.cc index 65cc13eb61fc..09255b5da539 100644 --- a/src/auto_scheduler/feature.cc +++ b/src/auto_scheduler/feature.cc @@ -1375,8 +1375,7 @@ void GetPerStoreFeaturesWorkerFunc(const SearchTask& task, const State& state, i auto pass_ctx = tvm::transform::PassContext::Current(); auto mod = ScheduleToModule(sch, Array{tensors.begin(), tensors.end()}, name, - std::unordered_map(), - GlobalVarSupply(NameSupply(""))); + std::unordered_map(), GlobalVarSupply()); bool disable_vectorize = pass_ctx->GetConfig("tir.disable_vectorize", Bool(false)).value(); diff --git a/src/contrib/hybrid/codegen_hybrid.h b/src/contrib/hybrid/codegen_hybrid.h index d1f578efddd9..58be2cf112e0 100644 --- a/src/contrib/hybrid/codegen_hybrid.h +++ b/src/contrib/hybrid/codegen_hybrid.h @@ -145,7 +145,7 @@ class CodeGenHybrid : public ExprFunctor, /*! \brief Print the current indent spaces. */ inline void PrintIndent(); /*! \brief NameSupply for allocated ids. */ - NameSupply ids_allocated = NameSupply(""); + NameSupply ids_allocated; /*! * \brief Keys are either (tensors, value_index) or (variables, 0). * Values are the corresponding IDs.*/ diff --git a/src/driver/driver_api.cc b/src/driver/driver_api.cc index 3026f6e58f18..105ac063e0ea 100644 --- a/src/driver/driver_api.cc +++ b/src/driver/driver_api.cc @@ -336,8 +336,7 @@ TVM_REGISTER_GLOBAL("driver.schedule_to_module") c_binds.insert({kv.first, kv.second}); } } - IRModule mod = - ScheduleToModule(std::move(sch), args, name, c_binds, GlobalVarSupply(NameSupply(""))); + IRModule mod = ScheduleToModule(std::move(sch), args, name, c_binds, GlobalVarSupply()); return mod; }); @@ -400,8 +399,7 @@ TVM_REGISTER_GLOBAL("driver.lower_schedule") c_binds.insert({kv.first, kv.second}); } } - return LowerSchedule(std::move(sch), args, name, c_binds, GlobalVarSupply(NameSupply("")), - simple_mode); + return LowerSchedule(std::move(sch), args, name, c_binds, GlobalVarSupply(), simple_mode); }); /** diff --git a/src/ir/global_var_supply.cc b/src/ir/global_var_supply.cc index 383d4445adcf..571a7f304cec 100644 --- a/src/ir/global_var_supply.cc +++ b/src/ir/global_var_supply.cc @@ -40,7 +40,7 @@ std::string GetModuleName(const IRModule& module) { return module->GetAttr(tvm::attr::kModuleName).value_or("tvmgen_default"); } -GlobalVarSupply::GlobalVarSupply(const Array& modules) : GlobalVarSupply(NameSupply("")) { +GlobalVarSupply::GlobalVarSupply(const Array& modules) : GlobalVarSupply() { if (!modules.empty()) { IRModule first_mod = modules.front(); this->operator->()->name_supply_->prefix_ = GetModuleName(first_mod); diff --git a/src/relax/backend/contrib/cutlass/codegen.cc b/src/relax/backend/contrib/cutlass/codegen.cc index d4b0038be38f..8ae0036db76d 100644 --- a/src/relax/backend/contrib/cutlass/codegen.cc +++ b/src/relax/backend/contrib/cutlass/codegen.cc @@ -52,7 +52,7 @@ class CodegenCutlass : public relax::MemoizedExprTranslator, public relay::contrib::CodegenCBase { public: CodegenCutlass(const std::string& id, const Map& bindings) - : ext_func_id_(id), bindings_(bindings), name_sup_("") {} + : ext_func_id_(id), bindings_(bindings) {} void AddParm(Var param) { ext_func_args_.push_back(param); diff --git a/src/relax/ir/block_builder.cc b/src/relax/ir/block_builder.cc index e9a513c317d6..f6aec79a4ac4 100644 --- a/src/relax/ir/block_builder.cc +++ b/src/relax/ir/block_builder.cc @@ -58,8 +58,7 @@ namespace relax { //--------------------------------------- class BlockBuilderImpl : public BlockBuilderNode { public: - explicit BlockBuilderImpl(IRModule context_mod) - : name_supply_(""), context_mod_(std::move(context_mod)) {} + explicit BlockBuilderImpl(IRModule context_mod) : context_mod_(std::move(context_mod)) {} ~BlockBuilderImpl() { if (!block_stack_.empty()) { diff --git a/src/relax/transform/allocate_workspace.cc b/src/relax/transform/allocate_workspace.cc index fcfbf187714e..1d4a0177126a 100644 --- a/src/relax/transform/allocate_workspace.cc +++ b/src/relax/transform/allocate_workspace.cc @@ -37,7 +37,7 @@ class ExternFunctionRewriter : ExprMutator { using ExprMutator::VisitExpr_; ExternFunctionRewriter(IRModule mod, size_t max_workspace_size) - : ExprMutator(mod), name_sup_(""), max_workspace_size_(max_workspace_size) {} + : ExprMutator(mod), max_workspace_size_(max_workspace_size) {} std::unordered_map Run() { std::unordered_map ret; diff --git a/src/relax/transform/normalize.cc b/src/relax/transform/normalize.cc index 0939674e81f2..89080ebc3eb1 100644 --- a/src/relax/transform/normalize.cc +++ b/src/relax/transform/normalize.cc @@ -178,7 +178,7 @@ class GlobalVarNormalizer : private ExprMutator { } private: - explicit GlobalVarNormalizer(const IRModule& m) : ExprMutator(), module_(m), name_supply_("") {} + explicit GlobalVarNormalizer(const IRModule& m) : ExprMutator(), module_(m) {} using ExprMutator::VisitExpr_; diff --git a/src/relay/backend/graph_executor_codegen.cc b/src/relay/backend/graph_executor_codegen.cc index 868173d28c13..734b3d6e4360 100644 --- a/src/relay/backend/graph_executor_codegen.cc +++ b/src/relay/backend/graph_executor_codegen.cc @@ -622,7 +622,7 @@ class GraphExecutorCodegen : public backend::MemoizedExprTranslator function_metadata_; /*! \brief NameSupply */ - NameSupply name_supply_ = NameSupply(""); + NameSupply name_supply_; }; class GraphExecutorCodegenModule : public runtime::ModuleNode { diff --git a/src/relay/backend/task_extraction.cc b/src/relay/backend/task_extraction.cc index fc45311e085d..6ac7a99d3509 100644 --- a/src/relay/backend/task_extraction.cc +++ b/src/relay/backend/task_extraction.cc @@ -75,7 +75,7 @@ Array ExtractTask(IRModule mod, Target target, std::vector> lower_results; - NameSupply constant_name_supply(""); + NameSupply constant_name_supply; PostOrderVisit(mod->Lookup("main"), [&](const Expr& exp) { if (exp->IsInstance()) { @@ -129,7 +129,7 @@ Array ExtractTask(IRModule mod, Target target, // Tasks are extracted via post order visit, return the reversed list. std::reverse(tasks.begin(), tasks.end()); - NameSupply name_supply = NameSupply(""); + NameSupply name_supply; for (ExtractedTask task : tasks) { task->task_name = name_supply->FreshName(task->task_name); } diff --git a/src/relay/backend/te_compiler.cc b/src/relay/backend/te_compiler.cc index 816595474909..eab4837ba882 100644 --- a/src/relay/backend/te_compiler.cc +++ b/src/relay/backend/te_compiler.cc @@ -136,8 +136,7 @@ TVM_REGISTER_OBJECT_TYPE(TECompilerNode); class TECompilerImpl : public TECompilerNode { public: explicit TECompilerImpl(Optional opt_mod, Optional opt_mod_name) - : global_var_supply_(GlobalVarSupply(NameSupply(opt_mod_name.value_or("")))), - constant_name_supply_(NameSupply("")) { + : global_var_supply_(GlobalVarSupply(NameSupply(opt_mod_name.value_or("")))) { // Make sure we don't collide with any existing globals in the module. if (opt_mod) { for (const auto& kv : opt_mod.value()->functions) { @@ -160,7 +159,7 @@ class TECompilerImpl : public TECompilerNode { // For now, build one module per function. PackedFunc JIT(const CCacheKey& key) final { - CCacheValue value = LowerInternal(key, GlobalVarSupply(NameSupply(""))); + CCacheValue value = LowerInternal(key, GlobalVarSupply()); if (value->packed_func != nullptr) { return value->packed_func; } diff --git a/src/relay/backend/te_compiler_cache.cc b/src/relay/backend/te_compiler_cache.cc index 2655cf66719c..79a41ae050c6 100644 --- a/src/relay/backend/te_compiler_cache.cc +++ b/src/relay/backend/te_compiler_cache.cc @@ -1127,7 +1127,7 @@ std::pair, std::string> LowerToPrimFunc(const Function& } tir::PrimFunc LowerToPrimFunc(const Function& relay_func, Target target) { - auto [f_opt, _] = LowerToPrimFunc(relay_func, target, NameSupply("")); + auto [f_opt, _] = LowerToPrimFunc(relay_func, target, NameSupply()); (void)_; // to suppress -Werror=unused-variable warning if (f_opt) { return f_opt.value(); @@ -1143,7 +1143,7 @@ TVM_REGISTER_GLOBAL("relay.backend.LowerToPrimFunc") TVM_REGISTER_GLOBAL("relay.backend.LowerToTE").set_body_typed([](Function prim_func) { auto tgt = tvm::Target("ext_dev"); - LowerToTECompute lower_te_compute(tgt, NameSupply("")); + LowerToTECompute lower_te_compute(tgt, NameSupply()); auto outputs = lower_te_compute.Lower(prim_func); return CachedFunc(tgt, GlobalVar(lower_te_compute.candidate_name_), lower_te_compute.fn_inputs_, outputs, te::Schedule(), tir::PrimFunc(), {}, diff --git a/src/relay/backend/te_compiler_cache.h b/src/relay/backend/te_compiler_cache.h index 76939a923cdf..502e0063220f 100644 --- a/src/relay/backend/te_compiler_cache.h +++ b/src/relay/backend/te_compiler_cache.h @@ -251,7 +251,7 @@ CachedFunc PrimFuncFor(const Function& source_func, const Target& target, /*! \brief A specialization of PrimFuncFor, meant to be used when the names of constants do not * matter. */ inline CachedFunc PrimFuncFor(const Function& source_func, const Target& target) { - return PrimFuncFor(source_func, target, GlobalVarSupply(NameSupply("")), NameSupply("")); + return PrimFuncFor(source_func, target, GlobalVarSupply(), NameSupply()); } CachedFunc ShapeFuncFor(const Function& prim_func, const Target& target, diff --git a/src/target/source/codegen_c.h b/src/target/source/codegen_c.h index e739df0ca1c0..8c5e1ffd897b 100644 --- a/src/target/source/codegen_c.h +++ b/src/target/source/codegen_c.h @@ -340,7 +340,7 @@ class CodeGenC : public ExprFunctor, std::unordered_map internal_functions_; /* \brief Name supply to generate unique function names */ - NameSupply func_name_supply_{""}; + NameSupply func_name_supply_; }; } // namespace codegen diff --git a/src/target/source/codegen_source_base.cc b/src/target/source/codegen_source_base.cc index 9c17458bf221..60fa786d5287 100644 --- a/src/target/source/codegen_source_base.cc +++ b/src/target/source/codegen_source_base.cc @@ -28,7 +28,7 @@ namespace tvm { namespace codegen { void CodeGenSourceBase::ClearFuncState() { - name_supply_ = NameSupply(""); + name_supply_ = NameSupply(); ssa_assign_map_.clear(); var_idmap_.clear(); scope_mark_.clear(); diff --git a/src/target/source/codegen_source_base.h b/src/target/source/codegen_source_base.h index 8191ad43aa99..e2312ddb778e 100644 --- a/src/target/source/codegen_source_base.h +++ b/src/target/source/codegen_source_base.h @@ -125,7 +125,7 @@ class CodeGenSourceBase { /*! \brief name of each variable */ std::unordered_map var_idmap_; /*! \brief NameSupply for allocation */ - NameSupply name_supply_ = NameSupply(""); + NameSupply name_supply_; private: /*! \brief assignment map of ssa */ diff --git a/src/te/operation/create_primfunc.cc b/src/te/operation/create_primfunc.cc index c7dbf3f5e042..2eb0693685a6 100644 --- a/src/te/operation/create_primfunc.cc +++ b/src/te/operation/create_primfunc.cc @@ -109,7 +109,7 @@ struct CreateFuncInfo { /*! \brief The buffers should be allocated at function root. */ Array root_alloc; /*! \brief The NameSupply to make block name unique. */ - NameSupply name_supply = NameSupply(""); + NameSupply name_supply; String FreshName(String base_name) { return name_supply->FreshName(base_name); } diff --git a/src/tir/ir/index_map.cc b/src/tir/ir/index_map.cc index 149e4cecd442..aed8361d04f1 100644 --- a/src/tir/ir/index_map.cc +++ b/src/tir/ir/index_map.cc @@ -311,7 +311,7 @@ IndexMap IndexMap::RenameVariables( const std::function(const Var& var)>& f_name_map) const { std::unordered_set used_names; Map var_remap; - NameSupply name_supply{""}; + NameSupply name_supply; const IndexMapNode* n = this->get(); if (f_name_map != nullptr) { // Collect variables with pre-defined names provided by f_name_map. diff --git a/tests/cpp/build_module_test.cc b/tests/cpp/build_module_test.cc index 3d2adb235546..181a1fa3de4c 100644 --- a/tests/cpp/build_module_test.cc +++ b/tests/cpp/build_module_test.cc @@ -52,7 +52,7 @@ TEST(BuildModule, Basic) { auto target = Target("llvm"); - auto lowered = LowerSchedule(s, args, "func", binds, GlobalVarSupply(NameSupply(""))); + auto lowered = LowerSchedule(s, args, "func", binds, GlobalVarSupply()); auto module = build(lowered, target, Target()); auto mali_target = Target("opencl -model=Mali-T860MP4@800Mhz -device=mali"); @@ -121,7 +121,7 @@ TEST(BuildModule, Heterogeneous) { auto args2 = Array({copy, C, elemwise_sub}); std::unordered_map binds; - GlobalVarSupply global_var_supply = GlobalVarSupply(NameSupply("")); + GlobalVarSupply global_var_supply = GlobalVarSupply(); auto lowered_s1 = LowerSchedule(fcreate_s1(), args1, "elemwise_add", binds, global_var_supply); auto lowered_s2 = LowerSchedule(fcreate_s2(), args2, "elemwise_sub", binds, global_var_supply); Map inputs = {{target_cuda, lowered_s1}, {target_llvm, lowered_s2}}; diff --git a/tests/cpp/c_codegen_test.cc b/tests/cpp/c_codegen_test.cc index a01921239a9f..5f783830495e 100644 --- a/tests/cpp/c_codegen_test.cc +++ b/tests/cpp/c_codegen_test.cc @@ -52,8 +52,7 @@ TEST(CCodegen, MainFunctionOrder) { auto args = Array({A, B, elemwise_add}); std::unordered_map binds; - auto lowered = - LowerSchedule(fcreate(), args, "elemwise_add", binds, GlobalVarSupply(NameSupply(""))); + auto lowered = LowerSchedule(fcreate(), args, "elemwise_add", binds, GlobalVarSupply()); Map inputs = {{target_c, lowered}}; runtime::Module module = build(inputs, Target()); Array functions = module->GetFunction("get_func_names", false)(); @@ -82,8 +81,7 @@ auto BuildLowered(std::string op_name, tvm::Target target) { auto args = Array({A, B, op}); std::unordered_map binds; - auto lowered_s = - LowerSchedule(fcreate_s(), args, op_name, binds, GlobalVarSupply(NameSupply(""))); + auto lowered_s = LowerSchedule(fcreate_s(), args, op_name, binds, GlobalVarSupply()); return lowered_s; } diff --git a/tests/cpp/name_supply_test.cc b/tests/cpp/name_supply_test.cc index 75b9ae86a9ab..023d2e903aba 100644 --- a/tests/cpp/name_supply_test.cc +++ b/tests/cpp/name_supply_test.cc @@ -27,7 +27,7 @@ using namespace tvm; NameSupply preambleNameSupply() { - NameSupply name_supply = NameSupply("prefix"); + NameSupply name_supply("prefix"); name_supply->FreshName("test"); return name_supply; } @@ -74,7 +74,7 @@ TEST(NameSupply, ReserveName) { } GlobalVarSupply preambleVarSupply() { - GlobalVarSupply global_var_supply = GlobalVarSupply(NameSupply("")); + GlobalVarSupply global_var_supply; global_var_supply->FreshGlobal("test"); return global_var_supply; }