24 #ifndef TVM_RELAX_DATAFLOW_PATTERN_H_
25 #define TVM_RELAX_DATAFLOW_PATTERN_H_
27 #include <tvm/ffi/container/array.h>
28 #include <tvm/ffi/optional.h>
29 #include <tvm/ffi/reflection/registry.h>
58 class StructInfoPattern;
59 class DataTypePattern;
61 class SameShapeConstraint;
93 static constexpr
const char*
_type_key =
"DFPatternNode";
105 template <
typename... Args>
198 std::function<Optional<Var>(
const DFPatternNode*)> match_state)
const = 0;
200 static constexpr
const char*
_type_key =
"DFConstraintNode";
224 static constexpr
const char*
_type_key =
"relax.dpl.PatternSeq";
235 TVM_DLL
explicit PatternSeq(tvm::Array<DFPattern> patterns,
bool only_used_by =
false);
264 std::map<DFPattern, std::vector<std::pair<DFPattern, std::vector<PairCons>>>>
edge_constraints;
273 static constexpr
const char*
_type_key =
"relax.dpl.PatternContext";
287 ICHECK(get() !=
nullptr);
292 ICHECK(get() !=
nullptr);
304 auto& pairs = (*this)->edge_constraints[producer];
305 auto it = std::find_if(pairs.begin(), pairs.end(),
306 [consumer](
auto p) { return p.first == consumer; });
307 if (it == pairs.end()) {
308 pairs.emplace_back(consumer, std::vector{cons});
310 auto& vec = it->second;
311 ICHECK(std::find(vec.cbegin(), vec.cend(), cons) == vec.cend())
312 <<
"Constraint already exists";
316 auto& patterns = (*this)->src_ordered;
317 if (std::find(patterns.begin(), patterns.end(), producer) == patterns.end()) {
318 patterns.push_back(producer);
328 (*this)->validation_constraints.push_back(constraint);
332 TVM_DLL
static Optional<PatternContext>
Current();
356 static constexpr
const char*
_type_key =
"relax.dpl.ExprPattern";
385 static constexpr
const char*
_type_key =
"relax.dpl.VarPattern";
413 refl::ObjectDef<DataflowVarPatternNode>();
416 static constexpr
const char*
_type_key =
"relax.dpl.DataflowVarPattern";
437 static constexpr
const char*
_type_key =
"relax.dpl.GlobalVarPattern";
459 refl::ObjectDef<ConstantPatternNode>();
462 static constexpr
const char*
_type_key =
"relax.dpl.ConstantPattern";
500 refl::ObjectDef<CallPatternNode>()
505 static constexpr
const char*
_type_key =
"relax.dpl.CallPattern";
529 static constexpr
const char*
_type_key =
"relax.dpl.PrimArrPattern";
561 refl::ObjectDef<FunctionPatternNode>()
566 static constexpr
const char*
_type_key =
"relax.dpl.FunctionPattern";
599 static constexpr
const char*
_type_key =
"relax.dpl.TuplePattern";
623 refl::ObjectDef<UnorderedTuplePatternNode>().def_ro(
"fields",
627 static constexpr
const char*
_type_key =
"relax.dpl.UnorderedTuplePattern";
653 refl::ObjectDef<TupleGetItemPatternNode>()
658 static constexpr
const char*
_type_key =
"relax.dpl.TupleGetItemPattern";
683 refl::ObjectDef<AndPatternNode>()
688 static constexpr
const char*
_type_key =
"relax.dpl.AndPattern";
713 refl::ObjectDef<OrPatternNode>()
718 static constexpr
const char*
_type_key =
"relax.dpl.OrPattern";
745 static constexpr
const char*
_type_key =
"relax.dpl.NotPattern";
767 refl::ObjectDef<WildcardPatternNode>();
770 static constexpr
const char*
_type_key =
"relax.dpl.WildcardPattern";
801 refl::ObjectDef<StructInfoPatternNode>()
806 static constexpr
const char*
_type_key =
"relax.dpl.StructInfoPattern";
827 refl::ObjectDef<ShapePatternNode>()
832 static constexpr
const char*
_type_key =
"relax.dpl.ShapePattern";
857 std::function<Optional<Var>(
const DFPatternNode*)> match_state)
const override;
864 static constexpr
const char*
_type_key =
"relax.dpl.SameShapeConstraint";
889 refl::ObjectDef<DataTypePatternNode>()
894 static constexpr
const char*
_type_key =
"relax.dpl.DataTypePattern";
919 refl::ObjectDef<AttrPatternNode>()
924 static constexpr
const char*
_type_key =
"relax.dpl.AttrPattern";
952 refl::ObjectDef<ExternFuncPatternNode>().def_ro(
"global_symbol",
956 static constexpr
const char*
_type_key =
"relax.dpl.ExternFuncPattern";
995 template <
typename... Args>
998 Array<DFPattern>({std::forward<Args>(args)...}));
Managed reference to DictAttrsNode.
Definition: attrs.h:166
Managed reference to RelaxExprNode.
Definition: expr.h:446
RAII wrapper function to enter and exit a context object similar to python's with syntax.
Definition: with.h:58
Match a conjunction of other patterns.
Definition: dataflow_pattern.h:676
DFPattern left
Definition: dataflow_pattern.h:678
DFPattern right
Definition: dataflow_pattern.h:679
static constexpr const char * _type_key
Definition: dataflow_pattern.h:688
TVM_DECLARE_FINAL_OBJECT_INFO(AndPatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:681
Managed reference to AndPatternNode.
Definition: dataflow_pattern.h:696
AndPattern(DFPattern lhs, DFPattern rhs)
TVM_DEFINE_OBJECT_REF_METHODS(AndPattern, DFPattern, AndPatternNode)
A pattern that asserting a root pattern has certain attributes.
Definition: dataflow_pattern.h:912
DictAttrs attrs
Definition: dataflow_pattern.h:915
DFPattern pattern
Definition: dataflow_pattern.h:914
static void RegisterReflection()
Definition: dataflow_pattern.h:917
TVM_DECLARE_FINAL_OBJECT_INFO(AttrPatternNode, DFPatternNode)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:924
Managed reference to AttrPatternNode.
Definition: dataflow_pattern.h:932
TVM_DEFINE_OBJECT_REF_METHODS(AttrPattern, DFPattern, AttrPatternNode)
AttrPattern(DFPattern pattern, DictAttrs attrs)
A pattern to match a callable node in Relax.
Definition: dataflow_pattern.h:479
TVM_DECLARE_FINAL_OBJECT_INFO(CallPatternNode, DFPatternNode)
bool varg_default_wildcard
Definition: dataflow_pattern.h:494
static constexpr const char * _type_key
Definition: dataflow_pattern.h:505
static void RegisterReflection()
Definition: dataflow_pattern.h:498
tvm::Array< DFPattern > args
Definition: dataflow_pattern.h:487
DFPattern op
Definition: dataflow_pattern.h:486
Definition: dataflow_pattern.h:509
CallPattern(DFPattern op, Array< DFPattern > args, bool varg_default_wildcard=false)
TVM_DEFINE_OBJECT_REF_METHODS(CallPattern, DFPattern, CallPatternNode)
A Pattern to Match a Relax Constant.
Definition: dataflow_pattern.h:455
TVM_DECLARE_FINAL_OBJECT_INFO(ConstantPatternNode, DFPatternNode)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:462
static void RegisterReflection()
Definition: dataflow_pattern.h:457
Managed reference to a ConstantPattern.
Definition: dataflow_pattern.h:470
TVM_DEFINE_OBJECT_REF_METHODS(ConstantPattern, DFPattern, ConstantPatternNode)
Additional constraints on the graph.
Definition: dataflow_pattern.h:165
TVM_DECLARE_BASE_OBJECT_INFO(DFConstraintNode, Object)
virtual Array< DFPattern > GetDependentPatterns() const =0
Return the patterns on which the constraint depends.
static constexpr const uint32_t _type_child_slots
Definition: dataflow_pattern.h:201
virtual std::tuple< PrimExpr, bool > AsPrimExpr(std::function< Optional< Var >(const DFPatternNode *)> match_state) const =0
Convert the constraint to a PrimExpr.
static constexpr const char * _type_key
Definition: dataflow_pattern.h:200
Definition: dataflow_pattern.h:205
TVM_DEFINE_OBJECT_REF_METHODS(DFConstraint, ObjectRef, DFConstraintNode)
Base type of all dataflow patterns.
Definition: dataflow_pattern.h:91
static constexpr const uint32_t _type_child_slots
Definition: dataflow_pattern.h:94
TVM_DECLARE_BASE_OBJECT_INFO(DFPatternNode, Object)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:93
Managed reference to dataflow patterns.
Definition: dataflow_pattern.h:102
CallPattern operator()(const std::vector< DFPattern > &args) const
Syntatic Sugar for creating a CallPattern.
ShapePattern HasShape(const Array< PrimExpr > &shape) const
Syntatic Sugar for creating a ShapePattern.
DataTypePattern HasDtype(const DataType &dtype) const
Syntatic Sugar for creating a DataTypePattern with a DataType.
SameShapeConstraint HasSameShapeAs(const DFPattern &other) const
Syntatic Sugar for creating a ShapePattern.
AttrPattern HasAttr(const Map< String, Any > &attrs) const
Syntatic Sugar for creating an AttrPattern.
OrPattern operator|(const DFPattern &other) const
Syntatic Sugar for creating an OrPattern.
CallPattern operator()(Args &&... args) const
Syntatic Sugar for creating a CallPattern.
Definition: dataflow_pattern.h:996
TVM_DEFINE_OBJECT_REF_METHODS(DFPattern, ObjectRef, DFPatternNode)
StructInfoPattern HasStructInfo(const StructInfo &struct_info) const
Syntatic Sugar for creating a StructInfoPattern.
AndPattern operator&(const DFPattern &other) const
Syntatic Sugar for creating an AndPattern.
DFPattern dup() const
Syntatic Sugar for duplicating the current pattern.
NotPattern operator~() const
Syntatic Sugar for creating a NotPattern.
DataTypePattern HasDtype(const std::string &dtype) const
Syntatic Sugar for creating a DataTypePattern with a data type's name.
A pattern that asserting a root pattern has a certain data type.
Definition: dataflow_pattern.h:882
DFPattern pattern
Definition: dataflow_pattern.h:884
TVM_DECLARE_FINAL_OBJECT_INFO(DataTypePatternNode, DFPatternNode)
DataType dtype
Definition: dataflow_pattern.h:885
static constexpr const char * _type_key
Definition: dataflow_pattern.h:894
static void RegisterReflection()
Definition: dataflow_pattern.h:887
Managed reference to DataTypePatternNode.
Definition: dataflow_pattern.h:902
DataTypePattern(DFPattern pattern, DataType dtype)
TVM_DEFINE_OBJECT_REF_METHODS(DataTypePattern, DFPattern, DataTypePatternNode)
A Pattern to Match a Relax Dataflow Variable.
Definition: dataflow_pattern.h:409
static void RegisterReflection()
Definition: dataflow_pattern.h:411
TVM_DECLARE_FINAL_OBJECT_INFO(DataflowVarPatternNode, VarPatternNode)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:416
Managed reference to a DataflowVarPattern.
Definition: dataflow_pattern.h:424
DataflowVarPattern(String name_hint)
TVM_DEFINE_OBJECT_REF_METHODS(DataflowVarPattern, DFPattern, DataflowVarPatternNode)
Pattern for Relax Expression.
Definition: dataflow_pattern.h:347
Expr expr
Definition: dataflow_pattern.h:349
TVM_DECLARE_FINAL_OBJECT_INFO(ExprPatternNode, DFPatternNode)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:356
static void RegisterReflection()
Definition: dataflow_pattern.h:351
Managed reference to an ExprPattern.
Definition: dataflow_pattern.h:364
TVM_DEFINE_OBJECT_REF_METHODS(ExprPattern, DFPattern, ExprPatternNode)
A pattern of external function.
Definition: dataflow_pattern.h:943
const String & global_symbol() const
The external function name.
Definition: dataflow_pattern.h:948
String global_symbol_
Definition: dataflow_pattern.h:945
TVM_DECLARE_FINAL_OBJECT_INFO(ExternFuncPatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:950
static constexpr const char * _type_key
Definition: dataflow_pattern.h:956
Managed reference to ExternFuncPatternNode.
Definition: dataflow_pattern.h:964
ExternFuncPattern(String global_symbol)
TVM_DEFINE_OBJECT_REF_METHODS(ExternFuncPattern, DFPattern, ExternFuncPatternNode)
A pattern to match a Relax Function.
Definition: dataflow_pattern.h:548
static void RegisterReflection()
Definition: dataflow_pattern.h:559
DFPattern body
Definition: dataflow_pattern.h:557
static constexpr const char * _type_key
Definition: dataflow_pattern.h:566
TVM_DECLARE_FINAL_OBJECT_INFO(FunctionPatternNode, DFPatternNode)
tvm::Array< DFPattern > params
Definition: dataflow_pattern.h:550
Managed reference to FunctionPatternNode.
Definition: dataflow_pattern.h:574
FunctionPattern(tvm::Array< DFPattern > params, DFPattern body)
Constructor.
TVM_DEFINE_OBJECT_REF_METHODS(FunctionPattern, DFPattern, FunctionPatternNode)
A Pattern to Match a Relax Global Variable.
Definition: dataflow_pattern.h:435
TVM_DECLARE_FINAL_OBJECT_INFO(GlobalVarPatternNode, DFPatternNode)
static constexpr const char * _type_key
Definition: dataflow_pattern.h:437
Managed reference to a GlobalVarPattern.
Definition: dataflow_pattern.h:445
GlobalVarPattern(String name_hint)
TVM_DEFINE_OBJECT_REF_METHODS(GlobalVarPattern, DFPattern, GlobalVarPatternNode)
Pattern for rejecting a certain pattern.
Definition: dataflow_pattern.h:736
DFPattern reject
Definition: dataflow_pattern.h:738
TVM_DECLARE_FINAL_OBJECT_INFO(NotPatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:740
static constexpr const char * _type_key
Definition: dataflow_pattern.h:745
Managed reference to NotPatternNode.
Definition: dataflow_pattern.h:753
NotPattern(DFPattern reject)
TVM_DEFINE_OBJECT_REF_METHODS(NotPattern, DFPattern, NotPatternNode)
Match a disjunction of other patterns.
Definition: dataflow_pattern.h:706
DFPattern left
Definition: dataflow_pattern.h:708
DFPattern right
Definition: dataflow_pattern.h:709
TVM_DECLARE_FINAL_OBJECT_INFO(OrPatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:711
static constexpr const char * _type_key
Definition: dataflow_pattern.h:718
Managed reference to OrPatternNode.
Definition: dataflow_pattern.h:726
TVM_DEFINE_OBJECT_REF_METHODS(OrPattern, DFPattern, OrPatternNode)
OrPattern(DFPattern left, DFPattern right)
A context to manage the graph-level pattern matching.
Definition: dataflow_pattern.h:254
ExternUse
Constrainting matched graph with assertion to external uses.
Definition: dataflow_pattern.h:257
@ kMustNot
Definition: dataflow_pattern.h:259
@ kMay
Definition: dataflow_pattern.h:258
TVM_DECLARE_FINAL_OBJECT_INFO(PatternContextNode, Object)
std::vector< DFConstraint > validation_constraints
Definition: dataflow_pattern.h:271
static constexpr const char * _type_key
Definition: dataflow_pattern.h:273
enum tvm::relax::PatternContextNode::ExternUse allow_extern_use
std::map< DFPattern, std::vector< std::pair< DFPattern, std::vector< PairCons > > > > edge_constraints
Definition: dataflow_pattern.h:264
std::vector< DFPattern > src_ordered
Definition: dataflow_pattern.h:268
Managed reference to a pattern context.
Definition: dataflow_pattern.h:281
void add_constraint(DFConstraint constraint)
Add a validation constraint.
Definition: dataflow_pattern.h:327
void ExitWithScope() const
The RAII-like exit of a constraint context scope.
PatternContextNode * operator->()
Definition: dataflow_pattern.h:291
static Optional< PatternContext > Current()
Get the constraint context object on the top of the stack.
void add_constraint(DFPattern producer, DFPattern consumer, PairCons cons)
Build an edge constraint between two patterns (producer and consumer).
Definition: dataflow_pattern.h:303
const PatternContextNode * operator->() const
Definition: dataflow_pattern.h:286
PatternContext(bool incremental=false)
PatternContext(ObjectPtr< Object > n)
Definition: dataflow_pattern.h:283
void EnterWithScope() const
The RAII-like entry of a constraint context scope.
A sequence of DFPatterns that the previous DFPattern is connected to the next one.
Definition: dataflow_pattern.h:214
TVM_DECLARE_BASE_OBJECT_INFO(PatternSeqNode, Object)
tvm::Array< DFPattern > patterns
Definition: dataflow_pattern.h:216
static void RegisterReflection()
Definition: dataflow_pattern.h:219
static constexpr const char * _type_key
Definition: dataflow_pattern.h:224
std::vector< PairCons > pair_constraints
Definition: dataflow_pattern.h:217
Managed reference to pattern sequences.
Definition: dataflow_pattern.h:232
PatternSeq(tvm::Array< DFPattern > patterns, bool only_used_by=false)
PatternSeq OnlyUsedBy(PatternSeq other, int index=-1) const
TVM_DEFINE_OBJECT_REF_METHODS(PatternSeq, ObjectRef, PatternSeqNode)
PatternSeq UsedBy(PatternSeq other, int index=-1) const
friend PatternSeq UsedBy(const PatternSeq &lhs, const PatternSeq &rhs, int index)
Create used-by relationship between lhs[-1] and rhs[0], with [*lhs, *rhs] returned.
PatternSeq(DFPattern init_pattern)
friend PatternSeq OnlyUsedBy(const PatternSeq &lhs, const PatternSeq &rhs, int index)
Create only-used-by relationship between lhs[-1] and rhs[0], with [*lhs, *rhs] returned.
PatternSeq dup() const
Syntatic Sugar for duplicating the current pattern sequence.
A pattern to match an array of PrimExpr.
Definition: dataflow_pattern.h:520
TVM_DECLARE_FINAL_OBJECT_INFO(PrimArrPatternNode, DFPatternNode)
Array< PrimExpr > fields
Definition: dataflow_pattern.h:522
static void RegisterReflection()
Definition: dataflow_pattern.h:524
static constexpr const char * _type_key
Definition: dataflow_pattern.h:529
Managed reference to a PrimArrPattern.
Definition: dataflow_pattern.h:537
TVM_DEFINE_OBJECT_REF_METHODS(PrimArrPattern, DFPattern, PrimArrPatternNode)
PrimArrPattern(Array< PrimExpr > arr)
A pattern that asserting multiple root patterns have the same shape.
Definition: dataflow_pattern.h:850
Array< DFPattern > args
Definition: dataflow_pattern.h:852
TVM_DECLARE_FINAL_OBJECT_INFO(SameShapeConstraintNode, DFConstraintNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:859
std::tuple< PrimExpr, bool > AsPrimExpr(std::function< Optional< Var >(const DFPatternNode *)> match_state) const override
Convert the constraint to a PrimExpr.
static constexpr const char * _type_key
Definition: dataflow_pattern.h:864
Array< DFPattern > GetDependentPatterns() const override
Return the patterns on which the constraint depends.
Definition: dataflow_pattern.h:854
Managed reference to SameShapePatternNode.
Definition: dataflow_pattern.h:872
TVM_DEFINE_OBJECT_REF_METHODS(SameShapeConstraint, DFConstraint, SameShapeConstraintNode)
SameShapeConstraint(Array< DFPattern > args)
A pattern that asserting a root pattern has a certain shape.
Definition: dataflow_pattern.h:820
static constexpr const char * _type_key
Definition: dataflow_pattern.h:832
TVM_DECLARE_FINAL_OBJECT_INFO(ShapePatternNode, DFPatternNode)
DFPattern pattern
Definition: dataflow_pattern.h:822
Array< PrimExpr > shape
Definition: dataflow_pattern.h:823
static void RegisterReflection()
Definition: dataflow_pattern.h:825
Managed reference to ShapePatternNode.
Definition: dataflow_pattern.h:840
TVM_DEFINE_OBJECT_REF_METHODS(ShapePattern, DFPattern, ShapePatternNode)
ShapePattern(DFPattern pattern, Array< PrimExpr > type)
Pattern for matching a certain struct info.
Definition: dataflow_pattern.h:794
StructInfo struct_info
Definition: dataflow_pattern.h:797
static void RegisterReflection()
Definition: dataflow_pattern.h:799
static constexpr const char * _type_key
Definition: dataflow_pattern.h:806
TVM_DECLARE_FINAL_OBJECT_INFO(StructInfoPatternNode, DFPatternNode)
DFPattern pattern
Definition: dataflow_pattern.h:796
Definition: dataflow_pattern.h:810
TVM_DEFINE_OBJECT_REF_METHODS(StructInfoPattern, DFPattern, StructInfoPatternNode)
StructInfoPattern(DFPattern pattern, StructInfo struct_info)
Managed reference to StructInfoNode.
Definition: expr.h:135
A pattern to match n'th indexing to a tuple.
Definition: dataflow_pattern.h:646
static constexpr const char * _type_key
Definition: dataflow_pattern.h:658
static void RegisterReflection()
Definition: dataflow_pattern.h:651
TVM_DECLARE_FINAL_OBJECT_INFO(TupleGetItemPatternNode, DFPatternNode)
DFPattern tuple
Definition: dataflow_pattern.h:648
int index
Definition: dataflow_pattern.h:649
Managed reference to TupleGetItemPatternNode.
Definition: dataflow_pattern.h:666
TVM_DEFINE_OBJECT_REF_METHODS(TupleGetItemPattern, DFPattern, TupleGetItemPatternNode)
TupleGetItemPattern(DFPattern tuple, int index)
Pattern to match a tuple of ordered expressions.
Definition: dataflow_pattern.h:590
tvm::Array< DFPattern > fields
Definition: dataflow_pattern.h:592
TVM_DECLARE_FINAL_OBJECT_INFO(TuplePatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:594
static constexpr const char * _type_key
Definition: dataflow_pattern.h:599
Managed reference to TuplePatternNode.
Definition: dataflow_pattern.h:607
TVM_DEFINE_OBJECT_REF_METHODS(TuplePattern, DFPattern, TuplePatternNode)
TuplePattern(tvm::Array< DFPattern > fields)
A pattern to match multiple expressions unorderedly.
Definition: dataflow_pattern.h:617
tvm::Array< DFPattern > fields
Definition: dataflow_pattern.h:619
static constexpr const char * _type_key
Definition: dataflow_pattern.h:627
TVM_DECLARE_FINAL_OBJECT_INFO(UnorderedTuplePatternNode, DFPatternNode)
static void RegisterReflection()
Definition: dataflow_pattern.h:621
Managed reference to UnorderedTuplePatternNode.
Definition: dataflow_pattern.h:635
UnorderedTuplePattern(tvm::Array< DFPattern > fields)
TVM_DEFINE_OBJECT_REF_METHODS(UnorderedTuplePattern, DFPattern, UnorderedTuplePatternNode)
A Pattern to Match a Relax Variable.
Definition: dataflow_pattern.h:375
static constexpr const uint32_t _type_child_slots
Definition: dataflow_pattern.h:386
String name
Definition: dataflow_pattern.h:377
static void RegisterReflection()
Definition: dataflow_pattern.h:380
const String & name_hint() const
Definition: dataflow_pattern.h:378
static constexpr const char * _type_key
Definition: dataflow_pattern.h:385
TVM_DECLARE_BASE_OBJECT_INFO(VarPatternNode, DFPatternNode)
Managed reference to a VarPattern.
Definition: dataflow_pattern.h:394
TVM_DEFINE_OBJECT_REF_METHODS(VarPattern, DFPattern, VarPatternNode)
VarPattern(String name_hint)
Create a pattern matching by variable name.
Wildcard Pattern is a pattern that can match anything.
Definition: dataflow_pattern.h:763
static void RegisterReflection()
Definition: dataflow_pattern.h:765
static constexpr const char * _type_key
Definition: dataflow_pattern.h:770
TVM_DECLARE_FINAL_OBJECT_INFO(WildcardPatternNode, DFPatternNode)
Managed reference to WildcardPatternNode.
Definition: dataflow_pattern.h:778
TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(WildcardPattern, DFPattern, WildcardPatternNode)
Runtime primitive data type.
Definition: data_type.h:47
Definition: repr_printer.h:91
CallPattern IsCallDPSPacked(const String &name, Optional< TuplePattern > args=std::nullopt)
Syntatic Sugar for call_dps_packed (return a tensor)
PatternSeq operator^(const PatternSeq &lhs, const PatternSeq &rhs)
Syntax sugar of UsedBy(lhs, rhs, -1).
ExprPattern IsOp(const String &op_name)
Syntatic Sugar for creating a ExprPattern base on an Op.
DFPattern IsTuple(const Array< DFPattern > &fields, bool unordered=false)
Syntatic Sugar for creating TuplePattern or UnorderedTuplePattern (unordered=true)
WildcardPattern Wildcard()
Syntatic Sugar for creating a WildcardPattern.
ConstantPattern IsConst()
Syntatic Sugar for creating a ConstantPattern.
PatternSeq UsedBy(const PatternSeq &lhs, const PatternSeq &rhs, int index=-1)
Create used-by relationship between lhs[-1] and rhs[0], with [*lhs, *rhs] returned.
PatternSeq OnlyUsedBy(const PatternSeq &lhs, const PatternSeq &rhs, int index=-1)
Create only-used-by relationship between lhs[-1] and rhs[0], with [*lhs, *rhs] returned.
ExprPattern IsExpr(const Expr &expr)
Syntatic Sugar for creating a ExprPattern.
PatternSeq operator>>(const PatternSeq &lhs, const PatternSeq &rhs)
Syntax sugar of OnlyUsedBy(lhs, rhs, -1).
CallPattern IsCallTIR(const String &name, Optional< TuplePattern > args=std::nullopt)
Syntatic Sugar for call_tir (return a tensor)
TupleGetItemPattern IsTupleGetItem(const DFPattern tuple, int index=-1)
Syntatic Sugar for creating a TupleGetItemPattern.
VarPattern IsVar(const String &name)
Syntatic Sugar for creating a VarPattern with a name.
Tensor shape(const Tensor &src, DataType dtype, const std::string name="T_shape", const std::string tag=kInjective)
Get the shape of input tensor.
Definition: transform.h:1945
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:37
Constraint of a DFPattern edge (producer -> consumer) in graph-level matching.
Definition: dataflow_pattern.h:137
int index
Definition: dataflow_pattern.h:143
bool operator==(const PairCons &other) const
Definition: dataflow_pattern.h:153
enum tvm::relax::PairCons::Type type
Type
Constraint types of the edge.
Definition: dataflow_pattern.h:139
@ kOnlyUsedBy
Definition: dataflow_pattern.h:141
@ kUsedBy
Definition: dataflow_pattern.h:140
PairCons(Type t, int index=-1)
Construct a new PairCons object.
Definition: dataflow_pattern.h:151
RAII wrapper function to enter and exit a context object similar to python's with syntax.