28 #include <dmlc/registry.h> 94 v->Visit(
"name", &name);
95 v->Visit(
"op_type", &op_type);
96 v->Visit(
"description", &description);
97 v->Visit(
"arguments", &arguments);
98 v->Visit(
"attrs_type_key", &attrs_type_key);
99 v->Visit(
"num_inputs", &num_inputs);
100 v->Visit(
"support_level", &support_level);
105 return this == other;
119 if (is_primitive_ != -1)
return is_primitive_ != 0;
120 is_primitive_ = this->IsPrimitiveOp_() ? 1 : 0;
121 return is_primitive_ != 0;
129 uint32_t AttrRegistryIndex()
const {
return index_; }
131 std::string AttrRegistryName()
const {
return name; }
136 template <
typename,
typename>
145 mutable int is_primitive_{-1};
147 bool IsPrimitiveOp_()
const {
148 const auto& fn_ty = this->
op_type;
149 ICHECK(fn_ty.get() !=
nullptr) <<
"op_type of " << this->name <<
" is not registered";
150 if (fn_ty->type_constraints.size() != 1)
return false;
152 if (rel ==
nullptr)
return false;
154 for (
size_t i = 0; i < fn_ty->type_params.size(); ++i) {
155 if (!fn_ty->type_params[i].same_as(rel->
args[i]))
return false;
175 inline const OpNode* operator->()
const;
183 template <
typename ValueType>
190 TVM_DLL
static bool HasAttrMap(
const String& attr_name);
197 TVM_DLL
static const Op& Get(
const String& op_name);
218 const Op&
op()
const {
return op_; }
225 inline OpRegEntry& describe(
const std::string& descr);
233 inline OpRegEntry& add_argument(
const std::string& name,
const std::string& type,
234 const std::string& description);
243 const std::string& rel_name,
251 template <
typename AttrsType>
270 inline OpRegEntry& set_support_level(int32_t level);
284 template <
typename ValueType>
285 inline OpRegEntry& set_attr(
const std::string& attr_name,
286 const ValueType& value,
int plevel = 10);
292 inline void reset_attr(
const std::string& attr_name);
296 if (
get()->name.length() == 0) {
309 template <
typename,
typename>
327 template <
typename ValueType>
337 inline ValueType
get(
const RelayExpr& expr, ValueType def_value)
const;
340 using TParent::count;
342 using TParent::operator[];
351 #define TVM_OP_REGISTER_VAR_DEF static DMLC_ATTRIBUTE_UNUSED ::tvm::OpRegEntry& __make_##Op 368 #define TVM_REGISTER_OP(OpName) \ 369 TVM_STR_CONCAT(TVM_OP_REGISTER_VAR_DEF, __COUNTER__) = \ 370 ::tvm::OpRegEntry::RegisterOrGet(OpName).set_name() 375 template <
typename ValueType>
380 inline OpNode* OpRegEntry::get() {
return const_cast<OpNode*
>(op_.operator->()); }
383 get()->description = descr;
388 const std::string& description) {
389 auto n = make_object<AttrFieldInfoNode>();
398 const std::string& rel_name,
401 auto func_name = std::string(
"tvm.relay.type_relation.") + rel_name;
406 env_type_rel_func = env_func;
410 env_type_rel_func = env_func;
417 std::string input_name_prefix =
"in";
418 for (
int i = 0; i <
get()->num_inputs; i++) {
419 auto name = input_name_prefix + std::to_string(i);
444 auto func_type =
FuncType(arg_types, out_param, type_params, {type_rel});
446 get()->op_type = func_type;
452 get()->num_inputs = n;
456 template <
typename AttrsType>
458 get()->attrs_type_key = AttrsType::_type_key;
464 get()->attrs_type_key = key;
470 get()->support_level = n;
474 template <
typename ValueType>
476 const std::string& attr_name,
const ValueType& value,
int plevel) {
477 ICHECK_GT(plevel, 0) <<
"plevel in set_attr must be greater than 0";
480 UpdateAttr(attr_name, rv, plevel);
486 template <
typename ValueType>
490 return this->map_.get(GetRef<Op>(op), def_value);
515 #endif // TVM_IR_OP_H_ static OpAttrMap< ValueType > GetAttrMap(const String &attr_name)
Get additional registered attribute about operators. If nothing has been registered, an empty OpAttrMap will be returned.
Definition: op.h:376
Container class of TypeReporter.
Definition: type_relation.h:145
Return Value container, Unlike TVMArgValue, which only holds reference and do not delete the underlyi...
Definition: packed_func.h:799
String name
name of the operator
Definition: op.h:61
User defined type relation, it is an input-output relation on types.
Definition: type_relation.h:185
A custom smart pointer for Object.
Definition: object.h:358
TVM_DECLARE_FINAL_OBJECT_INFO(OpNode, RelayExprNode)
const Op & op() const
Definition: op.h:218
A Reducer class to reduce the structural equality result of two objects.
Definition: structural_equal.h:124
Managed reference to BaseAttrsNode.
Definition: attrs.h:190
AttrFieldInfo.
Definition: attrs.h:128
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
A Reducer class to reduce the structural hash value.
Definition: structural_hash.h:102
Type relation and function for type inference(checking).
OpRegEntry & add_argument(const std::string &name, const std::string &type, const std::string &description)
Add argument information to the function.
Definition: op.h:387
PrimExpr equal(PrimExpr a, PrimExpr b, Span span=Span())
equal
Op()
default constructor
Definition: op.h:168
Managed reference to TypeConstraintNode.
Definition: type.h:403
static EnvFunc Get(const String &name)
Get a global function based on the name.
OpRegEntry & set_support_level(int32_t level)
Set the support level of op.
Definition: op.h:469
Primitive Op(builtin intrinsics)
Definition: op.h:58
Definition: executor.h:43
void SHashReduce(SHashReducer hash_reduce) const
Definition: op.h:108
Helpers for attribute objects.
OpRegEntry & set_num_inputs(int32_t n)
Set the num_inputs.
Definition: op.h:451
FuncType op_type
the type of the operator
Definition: op.h:63
void push_back(const T &item)
push a new item to the back of the list
Definition: array.h:455
static const PackedFunc * Get(const std::string &name)
Get the global function by name.
OpRegEntry & set_name()
Definition: op.h:295
Generic attribute map.
Definition: attr_registry_map.h:38
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
bool IsPrimitiveOp() const
Check that if current op is a "primtive operator". That is the arguments are all type variables...
Definition: op.h:118
tvm::OpNode OpNode
Definition: op.h:35
static constexpr const char * _type_key
Definition: op.h:124
size_t size() const
Definition: array.h:418
IR/AST nodes for the unified type system in TVM.
bool defined() const
Definition: object.h:544
Array< AttrFieldInfo > arguments
Definition: op.h:70
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:289
Array< Type > args
The type arguments to the type function.
Definition: type_relation.h:194
friend class OpRegEntry
Definition: op.h:138
tvm::FuncType FuncType
Definition: type.h:57
ValueType get(const RelayExpr &expr, ValueType def_value) const
get the corresponding value element at op with default value.
Definition: op.h:487
Reference to string objects.
Definition: string.h:97
tvm::TypeVar TypeVar
Definition: type.h:49
Please refer to TypedPackedFunc<R(Args..)>.
Definition: packed_func.h:60
OpRegEntry & set_attrs_type_key(const String &key)
Set the attrs type key and index to be AttrsType.
Definition: op.h:463
Managed reference to RelayExprNode.
Definition: expr.h:431
Managed reference class to OpNode.
Definition: op.h:165
Map<Key, ValueType> used to store meta-data.
Definition: attr_registry_map.h:101
void VisitAttrs(AttrVisitor *v)
Definition: op.h:93
Managed reference to FuncTypeNode.
Definition: type.h:461
Helper structure to register operators.
Definition: op.h:215
Attribute map used in registry.
const OpNode * operator->() const
access the internal node container
Definition: op.h:373
String description
detailed description of the operator This can be used to generate docstring automatically for the ope...
Definition: op.h:68
OpRegEntry & describe(const std::string &descr)
setter function during registration Set the description of operator
Definition: op.h:382
uint32_t attrs_type_index
attribute type index, this field varies in each run and is not exposed to frontend.
Definition: op.h:80
Registry & set_body(PackedFunc f)
set the body of the function to be f
int32_t support_level
support level of the operator, The lower the more priority it contains. This is in analogies to BLAS ...
Definition: op.h:91
bool SEqualReduce(const OpNode *other, SEqualReducer equal) const
Definition: op.h:103
Map<Op,ValueType> used to store meta-information about Op.
Definition: op.h:44
OpRegEntry & set_attrs_type()
Set the attrs type key and index to be AttrsType.
Definition: op.h:457
OpRegEntry & set_attr(const std::string &attr_name, const ValueType &value, int plevel=10)
Register additional attributes to operator.
Definition: op.h:475
static Registry & Register(const std::string &name, bool override=false)
Register a function with given name.
String attrs_type_key
The type key of the attribute field This can be empty, in which case it defaults to anything...
Definition: op.h:75
int32_t num_inputs
number of input arguments to the operator, -1 means it is variable length
Definition: op.h:85
const ObjectType * as() const
Try to downcast the internal Object to a raw pointer of a corresponding type.
Definition: object.h:865
Base node of all non-primitive expressions.
Definition: expr.h:359
OpRegEntry & add_type_rel(const std::string &rel_name, runtime::TypedPackedFunc< bool(const Array< Type > &, int, const Attrs &, const TypeReporter &)> type_rel_func)
Attach the type function corresponding to the return type.
Definition: op.h:397
Op(ObjectPtr< Object > n)
constructor from node pointer
Definition: op.h:170
static uint32_t TypeKey2Index(const std::string &key)
Get the type index of the corresponding key from runtime.
tvm::TypeRelation TypeRelation
Definition: type.h:67
This file defines the TVM global function registry.