生成新的ExprNode(或其子类如CallNode)时,有些注意事项:

    1 如果生成该ExprNode的args的shape有变化,那么需要推断其类型,一般的,可如下调用:

    1. Expr new_dense = makeDense(call_args, dense_param, dense_op);
    2. new_dense->checked_type_ = CallNode_InferType(new_dense);

    其中,CallNode_InferType是一个自定义的类型推断的函数,定义如下:

    1. /*! \brief type inference*/
    2. Type CallNode_InferType(const Expr& expr) {
    3. auto mod = relay::ModuleNode::FromExpr(expr);
    4. mod = relay::transform::InferType()(mod);
    5. auto type_fx = mod->Lookup("main");
    6. return type_fx->ret_type;
    7. }

    详细例子参考src/relay/pass/vacc/data_alignment.cc