quic-sanirudh commented on code in PR #16859: URL: https://github.com/apache/tvm/pull/16859#discussion_r1573204564
########## include/tvm/relax/expr.h: ########## @@ -915,18 +843,113 @@ class SeqExprNode : public ExprNode { class SeqExpr : public Expr { public: + /* \brief Implicit conversion constructor + * + * Relax nodes that introduce a new scope (e.g. `relax::Function`) + * are required to be held as SeqExpr. This implicit conversion + * provides allows callsites to use these member variables when the + * C++ compile-time type is a `relax::Expr`. For example, + * a transform may use `func.CopyOnWrite()->body = expr;`. + * + * If the expression is already a `relax::SeqExpr`, the same + * underlying `relax::SeqExprNode` is used, and no copies are made. + */ + TVM_DLL SeqExpr(Expr body); // NOLINT(*) + TVM_DLL explicit SeqExpr(Array<BindingBlock> blocks, Expr body, Span span = Span()); TVM_DEFINE_OBJECT_REF_METHODS(SeqExpr, Expr, SeqExprNode); TVM_DEFINE_OBJECT_REF_COW_METHOD(SeqExprNode); }; +/*! + * \brief Condition expression + * + * Unlike traditional statement `if`s, the if evalutes + * to the result of the branch taken. + * + * x = if (true) { 1 } else { 0 }; // x is 1 + * y = if (false) { 1 } else { 0 }; // y is 0 + * + * \note This is similar to C's ternary operator. + */ +class IfNode : public ExprNode { Review Comment: Ah yes, I missed that it was declared by value. Sorry about that and thanks for the clarification and yes, I agree that "templatizing" the `ObjectRef` would be a much bigger change, and probably not needed for this since the concern was more of a stylistic one to preserve git history. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@tvm.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org