tvm
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
name_supply.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_IR_NAME_SUPPLY_H_
25 #define TVM_IR_NAME_SUPPLY_H_
26 
27 #include <string>
28 #include <unordered_map>
29 #include <utility>
30 
31 #include "tvm/ir/expr.h"
32 
33 namespace tvm {
34 
38 class NameSupplyNode : public Object {
39  public:
43  NameSupplyNode() = default;
44 
50  NameSupplyNode(const String& prefix, std::unordered_map<std::string, int> name_map)
51  : prefix_(prefix), name_map(std::move(name_map)) {}
52 
59  String FreshName(const String& name, bool add_prefix = true);
60 
68  String ReserveName(const String& name, bool add_prefix = true);
69 
77  bool ContainsName(const String& name, bool add_prefix = true);
78 
79  void VisitAttrs(AttrVisitor* v) {}
80 
81  // Prefix for all GlobalVar names. It can be empty.
82  std::string prefix_;
83 
84  static constexpr const char* _type_key = "NameSupply";
85  static constexpr const bool _type_has_method_sequal_reduce = false;
86  static constexpr const bool _type_has_method_shash_reduce = false;
88 
89  private:
91  String add_prefix_to_name(const String& name);
92 
98  std::string GetUniqueName(std::string name);
99 
101  std::unordered_map<std::string, int> name_map;
102 };
103 
108 class NameSupply : public ObjectRef {
109  public:
115  TVM_DLL explicit NameSupply(const String& prefix,
116  std::unordered_map<std::string, int> name_map = {});
117 
119 };
120 
121 } // namespace tvm
122 
123 #endif // TVM_IR_NAME_SUPPLY_H_
Visitor class to get the attributes of an AST/IR node. The content is going to be called for each fie...
Definition: reflection.h:52
NameSupply can be used to generate unique names.
Definition: name_supply.h:38
NameSupplyNode(const String &prefix, std::unordered_map< std::string, int > name_map)
Constructor.
Definition: name_supply.h:50
void VisitAttrs(AttrVisitor *v)
Definition: name_supply.h:79
TVM_DECLARE_FINAL_OBJECT_INFO(NameSupplyNode, Object)
static constexpr const char * _type_key
Definition: name_supply.h:84
String ReserveName(const String &name, bool add_prefix=true)
Reserves an existing name with this NameSupply.
std::string prefix_
Definition: name_supply.h:82
String FreshName(const String &name, bool add_prefix=true)
Generates a unique name from this NameSupply.
NameSupplyNode()=default
Empty constructor. Needed by the TVM_REGISTER_NODE_TYPE macro.
static constexpr const bool _type_has_method_shash_reduce
Definition: name_supply.h:86
bool ContainsName(const String &name, bool add_prefix=true)
Checks if this NameSupply already generated a name.
static constexpr const bool _type_has_method_sequal_reduce
Definition: name_supply.h:85
Managed reference class to NameSupplyNode.
Definition: name_supply.h:108
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(NameSupply, ObjectRef, NameSupplyNode)
NameSupply(const String &prefix, std::unordered_map< std::string, int > name_map={})
Constructor.
Base class of all object reference.
Definition: object.h:517
base class of all object containers.
Definition: object.h:169
Reference to string objects.
Definition: string.h:98
Base expr nodes in TVM.
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36